class Slimmer::Processors::BodyInserter

Public Class Methods

new(source_id = "wrapper", destination_id = "wrapper", headers = {}) click to toggle source
# File lib/slimmer/processors/body_inserter.rb, line 3
def initialize(source_id = "wrapper", destination_id = "wrapper", headers = {})
  @source_selector = "#" + source_id
  @destination_selector = "#" + destination_id
  @headers = headers
end

Public Instance Methods

filter(src, dest) click to toggle source
# File lib/slimmer/processors/body_inserter.rb, line 9
def filter(src, dest)
  source_markup = src.at_css(@source_selector)
  destination_markup = dest.at_css(@destination_selector)

  css_classes = []
  css_classes << source_markup.attributes["class"].to_s.split(/ +/) if source_markup.has_attribute?("class")
  css_classes << destination_markup.attributes["class"].to_s.split(/ +/) if destination_markup.has_attribute?("class")

  body = Nokogiri::HTML.fragment(source_markup.to_html)
  dest.at_css(@destination_selector).replace(body)
  dest.at_css(@destination_selector).set_attribute("class", css_classes.flatten.uniq.join(" ")) if is_gem_layout? && css_classes.any?
end

Private Instance Methods

is_gem_layout?() click to toggle source
# File lib/slimmer/processors/body_inserter.rb, line 24
def is_gem_layout?
  @headers[Slimmer::Headers::TEMPLATE_HEADER]&.starts_with?("gem_layout")
end