class ArticleJSON::Export::AMP::Elements::Embed

Public Instance Methods

custom_element_tags() click to toggle source

Custom element tags required for this embedded element @return [Array]

# File lib/article_json/export/amp/elements/embed.rb, line 10
def custom_element_tags
  case @element.embed_type.to_sym
  when :youtube_video then %i(amp-youtube)
  when :vimeo_video then %i(amp-vimeo)
  when :facebook_video then %i(amp-facebook)
  when :tweet then %i(amp-twitter)
  when :slideshare then %i(amp-iframe)
  when :soundcloud then %i(amp-soundcloud)
  else []
  end
end

Private Instance Methods

default_height() click to toggle source

@return [String]

# File lib/article_json/export/amp/elements/embed.rb, line 108
def default_height
  '315'
end
default_width() click to toggle source

@return [String]

# File lib/article_json/export/amp/elements/embed.rb, line 103
def default_width
  '560'
end
embedded_object() click to toggle source

Type specific object that should be embedded @return [Nokogiri::XML::Element|nil]

# File lib/article_json/export/amp/elements/embed.rb, line 26
def embedded_object
  case @element.embed_type.to_sym
  when :youtube_video
    youtube_node
  when :vimeo_video
    vimeo_node
  when :facebook_video
    facebook_node
  when :tweet
    tweet_node
  when :slideshare
    iframe_node
  when :soundcloud
    soundcloud_node
  end
end
facebook_node() click to toggle source

@return [Nokogiri::XML::Element]

# File lib/article_json/export/amp/elements/embed.rb, line 71
def facebook_node
  url = "#{@element.oembed_data[:author_url]}videos/#{@element.embed_id}"
  create_element('amp-facebook',
                 'data-embedded-as' => 'video',
                 'data-href' => url,
                 width: default_width,
                 height: default_height)
end
iframe_node() click to toggle source

@return [Nokogiri::XML::Element]

# File lib/article_json/export/amp/elements/embed.rb, line 93
def iframe_node
  node = Nokogiri::HTML(@element.oembed_data[:html]).xpath('//iframe')
  create_element('amp-iframe',
                 src: node.attribute('src').value,
                 width: node.attribute('width').value,
                 height: node.attribute('height').value,
                 frameborder: '0',)
end
soundcloud_node() click to toggle source
# File lib/article_json/export/amp/elements/embed.rb, line 80
def soundcloud_node
  src = Nokogiri::HTML(@element.oembed_data[:html])
    .xpath('//iframe/@src').first.value
  track_id = src.match(/tracks%2F(\d+)/)[1]
  create_element('amp-soundcloud',
                 layout: 'fixed-height',
                 'data-trackid': track_id,
                 'data-visual': true,
                 width: 'auto',
                 height: default_height)
end
tweet_node() click to toggle source

@return [Nokogiri::XML::Element]

# File lib/article_json/export/amp/elements/embed.rb, line 60
def tweet_node
  # The embed_id of a tweet is stored as "<handle>/<tweet_id>" but
  # the `amp-twitter` tag only takes the `tweet_id` part
  tweet_id = @element.embed_id.split('/').last
  create_element('amp-twitter',
                 'data-tweetid': tweet_id,
                 width: default_width,
                 height: default_height)
end
vimeo_node() click to toggle source

@return [Nokogiri::XML::Element]

# File lib/article_json/export/amp/elements/embed.rb, line 52
def vimeo_node
  create_element('amp-vimeo',
                 'data-videoid' => @element.embed_id,
                 width: default_width,
                 height: default_height)
end
youtube_node() click to toggle source

@return [Nokogiri::XML::Element]

# File lib/article_json/export/amp/elements/embed.rb, line 44
def youtube_node
  create_element('amp-youtube',
                 'data-videoid' => @element.embed_id,
                 width: default_width,
                 height: default_height)
end