class DaimonMarkdown::Plugin::TableOfContents
Public Instance Methods
call(limit = nil)
click to toggle source
# File lib/daimon_markdown/plugin/toc.rb, line 6 def call(limit = nil) toc_html = "" toc_class = context[:toc_class] || "section-nav" ul_list = Hash.new {|h, k| h[k] = UnorderedList.new } ul_list[1] = UnorderedList.new(html_class: toc_class) previous_level = 1 doc.css("h1, h2, h3, h4, h5, h6").each do |header_node| header = Header.new(header_node) next if limit && limit < header.level next unless header.content? header.unique_id = generate_unique_id(header.text) if header.level - previous_level > 0 (previous_level + 1).upto(header.level) do |level| ul_list[level - 1] << ul_list[level] end end ul_list[header.level] << ListItem.new(header: header) previous_level = header.level end unless ul_list[1].items.empty? toc_header = context[:toc_header] || "" toc_html = "#{toc_header}#{ul_list[1].to_html}" end node.parent.replace(toc_html) end
Private Instance Methods
generate_unique_id(text)
click to toggle source
# File lib/daimon_markdown/plugin/toc.rb, line 36 def generate_unique_id(text) @headers ||= Hash.new(0) id = text.downcase id.tr!(" ", "-") id.gsub!(/\s/, "") unique_id = if @headers[id] > 0 "#{id}-#{@headers[id]}" else id end @headers[id] += 1 unique_id end