Skip to content

Commit c8713d5

Browse files
committed
Extract sidebar item generation out of classes sidebar view
Given the generation involves recursion and multiple conditions, it's easier to follow if we move them out of ERB and into the Ruby code.
1 parent e6f5c81 commit c8713d5

File tree

2 files changed

+34
-25
lines changed

2 files changed

+34
-25
lines changed

lib/rdoc/generator/darkfish.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,39 @@ def generate_ancestor_list(ancestors, klass)
824824
content << '</li></ul>'
825825
end
826826

827+
def generate_class_link(klass, rel_prefix)
828+
if klass.display?
829+
%(<code><a href="#{rel_prefix}/#{klass.path}">#{klass.name}</a></code>)
830+
else
831+
%(<code>#{klass.name}</code>)
832+
end
833+
end
834+
835+
def generate_class_index_content(classes, rel_prefix)
836+
grouped_classes = group_classes_by_namespace_for_sidebar(classes)
837+
return '' unless top = grouped_classes[nil]
838+
839+
solo = top.one? { |klass| klass.display? }
840+
traverse_classes(top, grouped_classes, rel_prefix, solo)
841+
end
842+
843+
def traverse_classes(klasses, grouped_classes, rel_prefix, solo = false)
844+
content = +'<ul class="link-list">'
845+
846+
klasses.each do |index_klass|
847+
if children = grouped_classes[index_klass.full_name]
848+
content << %(<li><details#{solo ? ' open' : ''}><summary>#{generate_class_link(index_klass, rel_prefix)}</summary>)
849+
content << traverse_classes(children, grouped_classes, rel_prefix)
850+
content << '</ul></details>'
851+
solo = false
852+
elsif index_klass.display?
853+
content << %(<li>#{generate_class_link(index_klass, rel_prefix)})
854+
end
855+
end
856+
857+
content
858+
end
859+
827860
def group_classes_by_namespace_for_sidebar(classes)
828861
grouped_classes = classes.group_by do |klass|
829862
klass.full_name[/\A[^:]++(?:::[^:]++(?=::))*+(?=::[^:]*+\z)/]
Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,5 @@
11
<div id="classindex-section" class="nav-section">
22
<h3>Class and Module Index</h3>
33

4-
<%-
5-
all_classes = group_classes_by_namespace_for_sidebar(@classes)
6-
link = proc do |index_klass|
7-
if index_klass.display?
8-
-%><code><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.name %></a></code><%-
9-
else
10-
-%><code><%= index_klass.name %></code><%-
11-
end
12-
end
13-
if top = all_classes[nil]
14-
solo = top.one? {|klass| klass.display?}
15-
traverse = proc do |klasses| -%>
16-
<ul class="link-list">
17-
<%- klasses.each do |index_klass| -%>
18-
<%- if children = all_classes[index_klass.full_name] -%>
19-
<li><details<% if solo; solo = false %> open<% end %>><summary><% link.call(index_klass) %></summary>
20-
<%- traverse.call(children) -%>
21-
</ul></details>
22-
<%- elsif index_klass.display? -%>
23-
<li><% link.call(index_klass) %>
24-
<%- end -%>
25-
<%- end -%>
26-
<%- end -%>
27-
<%- traverse.call(top) -%>
28-
<%- end -%>
4+
<%= generate_class_index_content(@classes, rel_prefix) %>
295
</div>

0 commit comments

Comments
 (0)