github.com/shyftnetwork/go-empyrean@v1.8.3-0.20191127201940-fbfca9338f04/shyft_documentation/lib/toc_data.rb (about) 1 require 'nokogiri' 2 3 def toc_data(page_content) 4 html_doc = Nokogiri::HTML::DocumentFragment.parse(page_content) 5 6 # get a flat list of headers 7 headers = [] 8 html_doc.css('h1, h2, h3').each do |header| 9 headers.push({ 10 id: header.attribute('id').to_s, 11 content: header.children, 12 level: header.name[1].to_i, 13 children: [] 14 }) 15 end 16 17 [3,2].each do |header_level| 18 header_to_nest = nil 19 headers = headers.reject do |header| 20 if header[:level] == header_level 21 header_to_nest[:children].push header if header_to_nest 22 true 23 else 24 header_to_nest = header if header[:level] < header_level 25 false 26 end 27 end 28 end 29 headers 30 end