mirror of
https://github.com/placeholder-soft/prodigyapi.git
synced 2026-01-12 22:44:57 +08:00
* Add showing/hiding submenus, fix sidebar styling, fix bug where includes wouldn't appear in ToC * Update ToC to highlight last header if page is scrolled to very bottom, fixes #280 * Set HTML title to current h1 section text, see #133 * Fix menu not opening on mobile * Add back increase toc item height on mobile * Fix padding bug * Add back in ToC sliding animation
30 lines
710 B
Ruby
30 lines
710 B
Ruby
require 'nokogiri'
|
|
|
|
def toc_data(page_content)
|
|
html_doc = Nokogiri::HTML::DocumentFragment.parse(page_content)
|
|
|
|
# get a flat list of headers
|
|
headers = []
|
|
html_doc.css('h1, h2, h3').each do |header|
|
|
headers.push({
|
|
id: header.attribute('id').to_s,
|
|
content: header.content,
|
|
level: header.name[1].to_i,
|
|
children: []
|
|
})
|
|
end
|
|
|
|
[3,2].each do |header_level|
|
|
header_to_nest = nil
|
|
headers = headers.reject do |header|
|
|
if header[:level] == header_level
|
|
header_to_nest[:children].push header if header_to_nest
|
|
true
|
|
else
|
|
header_to_nest = header if header[:level] == (header_level - 1)
|
|
false
|
|
end
|
|
end
|
|
end
|
|
headers
|
|
end |