| class AddTOCFilter < Nanoc::Filter |
| |
| identifier :add_toc |
| |
| def run(content, params={}) |
| content.gsub('{{TOC}}') do |
| |
| doc = Nokogiri::HTML(content) |
| headers = doc.xpath('//h2').map do |header| |
| { :title => header.inner_html, :id => header['id'] } |
| end |
| |
| if headers.empty? |
| next '' |
| end |
| |
| |
| res = '<ol class="toc">' |
| headers.each do |header| |
| res << %[<li><a href="##{header[:id]}">#{header[:title]}</a></li>] |
| end |
| res << '</ol>' |
| |
| res |
| end |
| end |
| |
| end |