Module: Jekyll::FirstImageFilter

Defined in:
lib/jekyll/firstimage.rb

Instance Method Summary collapse

Instance Method Details

#extract_largest_image(srcset) ⇒ Object



9
10
11
12
13
14
# File 'lib/jekyll/firstimage.rb', line 9

def extract_largest_image(srcset)
  srcset
    .scan(/(\S+)\s+(\d+)w/)
    .map { |url, size| { url: url.strip, size: size.to_i } }
    .inject { |acc, cur| acc[:size] < cur[:size] ? cur : acc }[:url]
end

#first_image(content) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jekyll/firstimage.rb', line 16

def first_image(content)
  return '' if content.nil?

  doc = Nokogiri::HTML.fragment(content.encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => ''))

  image_elements = doc.css('img')

  return '' if image_elements.empty?

  image = image_elements.first.to_h

  src = ''
  if image['srcset'] then
    src = extract_largest_image(image['srcset'])
  elsif image['src'] then
    src = image['src']
  end

  src
end