Sha256: d501041953057f24b5b93197e678f7ac13a89933b064a1597c5144471de56d03

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

module Brief
  class Document::Transformer
    attr_reader :document, :fragment

    def initialize(fragment, document)
      @fragment = fragment
      @document = document
    end

    def all
      transform_dynamic_links
      inline_svg_content
    end

    def inline_svg_content
      inline_svg_images.each do |img|
        _, value = img['src'].to_s.split("=")

        if asset = document.briefcase.find_asset(value)
          img.replace("<div class='svg-wrapper'>#{ asset.read }</div>")
        end
      end
    end

    def transform_dynamic_links
      dynamic_link_elements.each do |node|
        attribute, value = node['href'].to_s.split("=")
        instruction, strategy = node.text.to_s.split(':')

        if instruction == "link" && attribute == "path"
          begin
            link_to_doc = document.briefcase.document_at(value)
            text = link_to_doc.send(strategy)
            node.inner_html = text
            node['href'] = "brief://#{ link_to_doc.path }"
          rescue
            nil
          end
        end
      end

      include_link_elements.each do |node|
        attribute, value = node['href'].to_s.split("=")
        instruction, strategy = node.text.to_s.split(':')

        if instruction == "include" && attribute == "path"
          include_doc = document.briefcase.document_at(value)

          replacement = nil

          if strategy == "raw_content"
            replacement = include_doc.unwrapped_html
          elsif strategy == "content"
            replacement = include_doc.to_html
          end

          node.replace(replacement) if replacement
        end
      end
    end

    private

    def inline_svg_images
      fragment.css('img[alt="inline:svg"]')
    end

    def dynamic_link_elements(needle="link:")
      fragment.css('a:contains("' + needle + '")')
    end

    def include_link_elements
      dynamic_link_elements("include:")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
brief-1.9.12 lib/brief/document/transformer.rb