class JekyllLazyLoadImage::Translator

Public Class Methods

new(document, site_config) click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 7
def initialize(document, site_config)
  @document = document
  @site_config = site_config
end

Public Instance Methods

translate() click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 12
def translate
  nokogiri_doc.xpath("//img").each do |node|
    next if ignore_node?(node)

    apply_lazy_image_setting(node)
    inject_class_attr(node)
    inject_additional_attrs(node)
  end
  nokogiri_doc.to_html
end

Private Instance Methods

apply_lazy_image_setting(node) click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 29
def apply_lazy_image_setting(node)
  node_src_attr = node.attributes["src"]
  return if node_src_attr.nil?

  src_value = node_src_attr.value
  if @site_config.preload_image.empty?
    node.remove_attribute("src")
  else
    node.attributes["src"].value = @site_config.preload_image
  end

  node.set_attribute(@site_config.src_attr_name, src_value)
end
ignore_node?(node) click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 25
def ignore_node?(node)
  !@site_config.ignore_selectors.empty? && node.matches?(*@site_config.ignore_selectors)
end
inject_additional_attrs(node) click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 53
def inject_additional_attrs(node)
  @site_config.additional_attrs.each do |key, value|
    node.set_attribute(key, value)
  end
end
inject_class_attr(node) click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 43
def inject_class_attr(node)
  class_value = node.attributes["class"]&.value
  return if class_value.nil? && @site_config.class_attr_values.empty?

  node.set_attribute("class", "") if class_value.nil?
  node_class_attr = node.attributes["class"]
  class_array = [node_class_attr.value, @site_config.class_attr_values].flatten
  node_class_attr.value = normalize_class_array(class_array).join(" ")
end
nokogiri_doc() click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 59
def nokogiri_doc
  @nokogiri_doc ||= Nokogiri::HTML(@document)
end
normalize_class_array(array) click to toggle source
# File lib/jekyll-lazy-load-image/translator.rb, line 63
def normalize_class_array(array)
  array.compact.uniq.map(&:strip).reject(&:empty?)
end