diff options
author | Robert Speicher <rspeicher@gmail.com> | 2017-09-01 15:04:32 -0400 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2017-09-06 12:48:25 -0400 |
commit | 056158efbacf2f9d1b72402d56a0ebbe92cb71db (patch) | |
tree | 9bd14b7e9d4a18c02491b8dbbf2632b8d7e0ec90 | |
parent | 3b017a36d647f9f97f5c7df24a48139cad5085db (diff) | |
download | gitlab-ce-056158efbacf2f9d1b72402d56a0ebbe92cb71db.tar.gz |
Refactor table of contents building
-rw-r--r-- | lib/banzai/filter/table_of_contents_filter.rb | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/lib/banzai/filter/table_of_contents_filter.rb b/lib/banzai/filter/table_of_contents_filter.rb index 5522986ba21..47151626208 100644 --- a/lib/banzai/filter/table_of_contents_filter.rb +++ b/lib/banzai/filter/table_of_contents_filter.rb @@ -43,15 +43,7 @@ module Banzai end end - if header_root.children.length > 0 - result[:toc] = %q{<ul class="section-nav">} - - header_root.children.each do |child| - push_toc(child) - end - - result[:toc] << '</ul>' - end + push_toc(header_root.children, root: true) doc end @@ -62,19 +54,19 @@ module Banzai %Q{<a id="user-content-#{href}" class="anchor" href="##{href}" aria-hidden="true"></a>} end - def push_toc(header_node) - result[:toc] << %Q{<li><a href="##{header_node.href}">#{header_node.text}</a>} - - if header_node.children.length > 0 - result[:toc] << '<ul>' + def push_toc(children, root: false) + return if children.empty? - header_node.children.each do |child| - push_toc(child) - end + klass = ' class="section-nav"' if root - result[:toc] << '</ul>' - end + result[:toc] << "<ul#{klass}>" + children.each { |child| push_anchor(child) } + result[:toc] << '</ul>' + end + def push_anchor(header_node) + result[:toc] << %Q{<li><a href="##{header_node.href}">#{header_node.text}</a>} + push_toc(header_node.children) result[:toc] << '</li>' end |