class Middleman::Extensions::Outliner

Public Class Methods

new(app, options_hash={}) click to toggle source
Calls superclass method
# File lib/sculptor/extensions/outliner.rb, line 2
def initialize(app, options_hash={})
  super

  require 'open-uri'
  require 'nokogiri'
end

Public Instance Methods

outline(html) click to toggle source
# File lib/sculptor/extensions/outliner.rb, line 10
def outline(html)
  doc = Nokogiri::HTML.fragment(html, encoding='utf-8')

  elements = parse_elements(doc.children)

  partial('glyptotheque/model-outline', locals: { elements: elements })
end
parse_elements(elements) click to toggle source
# File lib/sculptor/extensions/outliner.rb, line 20
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