Sha256: 55e43bf04909d5fc9d366a979e0476e3d58f761047754b00d75a2e31b9a043c0

Contents?: true

Size: 992 Bytes

Versions: 1

Compression:

Stored size: 992 Bytes

Contents

class Middleman::Extensions::Outliner < ::Middleman::Extension
  def initialize(app, options_hash={})
    super

    require 'open-uri'
    require 'nokogiri'
  end

  helpers do
    def outline(html)
      doc = Nokogiri::HTML.fragment(html, encoding='utf-8')

      elements = parse_elements(doc.children)

      partial('partials/glyptotheque/model-outline', locals: { elements: elements })
    end

    private

    def parse_elements(elements)
      result = []

      elements.each do |e|
        text = e.xpath('text()').text

        next unless e.element?

        class_name = e.attributes['class'] && e.attributes['class'].value
        attributes = e.attributes.reject {|k| k == 'class' }

        result << {
          el_name: e.name,
          class_name: class_name,
          attrs: attributes.values.map { |a| { name: a.name, value: a.value } },
          children: parse_elements(e.children),
          text: text
        }
      end

      return result
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sculptor-0.0.7 lib/sculptor/extensions/outliner.rb