class Middleman::Tocable::TocGenerator
A store of all the blog slides in the site, with accessors for the slides by various dimensions. Accessed via “blog” in templates.
Public Class Methods
new(page)
click to toggle source
# File lib/middleman/tocable/toc_generator.rb, line 11 def initialize page @page = page @toc = [] generate end
Public Instance Methods
add(node)
click to toggle source
# File lib/middleman/tocable/toc_generator.rb, line 18 def add node node end
toc()
click to toggle source
# File lib/middleman/tocable/toc_generator.rb, line 22 def toc @toc end
Private Instance Methods
generate()
click to toggle source
# File lib/middleman/tocable/toc_generator.rb, line 28 def generate require 'nokogiri' @current_level = 0 @current_stack = [@toc] doc = Nokogiri::HTML(@page) doc.search('h1, h2, h3, h4, h5, h6, h7, h8, .tocable').each do |elem| level = (elem["data-tocable-level"] || elem.name[1]).to_i - 1 text = elem.text id = elem.attr("id") new_item = {id: id, text: text, items: []} if level > @current_level # check if jump > 1 parent = @current_stack[@current_level].last @current_stack << parent[:items] else @current_stack = @current_stack[0..(level)] parent = @current_stack.last end @current_level = level @current_stack[level] << new_item end end