diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb
index adc0ea3954..49d4cc0b60 100644
--- a/lib/rdoc/generator/darkfish.rb
+++ b/lib/rdoc/generator/darkfish.rb
@@ -824,6 +824,50 @@ def generate_ancestor_list(ancestors, klass)
content << ''
end
+ def generate_class_link(klass, rel_prefix)
+ if klass.display?
+ %(#{klass.name}
)
+ else
+ %(#{klass.name}
)
+ end
+ end
+
+ def generate_class_index_content(classes, rel_prefix)
+ grouped_classes = group_classes_by_namespace_for_sidebar(classes)
+ return '' unless top = grouped_classes[nil]
+
+ solo = top.one? { |klass| klass.display? }
+ traverse_classes(top, grouped_classes, rel_prefix, solo)
+ end
+
+ def traverse_classes(klasses, grouped_classes, rel_prefix, solo = false)
+ content = +'
'
+
+ klasses.each do |index_klass|
+ if children = grouped_classes[index_klass.full_name]
+ content << %(#{generate_class_link(index_klass, rel_prefix)}
)
+ content << traverse_classes(children, grouped_classes, rel_prefix)
+ content << ' '
+ solo = false
+ elsif index_klass.display?
+ content << %(- #{generate_class_link(index_klass, rel_prefix)}
)
+ end
+ end
+
+ "#{content}
"
+ end
+
+ def group_classes_by_namespace_for_sidebar(classes)
+ grouped_classes = classes.group_by do |klass|
+ klass.full_name[/\A[^:]++(?:::[^:]++(?=::))*+(?=::[^:]*+\z)/]
+ end.select do |_, klasses|
+ klasses.any?(&:display?)
+ end
+
+ grouped_classes.values.each(&:uniq!)
+ grouped_classes
+ end
+
private
def nesting_namespaces_to_class_modules klass
diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml
index 06b5542fa1..d33ecd43f7 100644
--- a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml
+++ b/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml
@@ -1,34 +1,5 @@
Class and Module Index
- <%-
- all_classes = @classes.group_by do |klass|
- klass.full_name[/\A[^:]++(?:::[^:]++(?=::))*+(?=::[^:]*+\z)/]
- end.delete_if do |_, klasses|
- !klasses.any?(&:display?)
- end
- link = proc do |index_klass, display = index_klass.display?|
- if display
- -%>
<%= index_klass.name %>
<%-
- else
- -%>
<%= index_klass.name %>
<%-
- end
- end
- if top = all_classes[nil]
- solo = top.one? {|klass| klass.display?}
- traverse = proc do |klasses| -%>
-
- <%- klasses.uniq!(&:full_name) -%>
- <%- klasses.each do |index_klass| -%>
- <%- if children = all_classes[index_klass.full_name] -%>
- open<% end %>><% link.call(index_klass) %>
- <%- traverse.call(children) -%>
-
- <%- elsif index_klass.display? -%>
-
<% link.call(index_klass, true) %>
- <%- end -%>
- <%- end -%>
- <%- end -%>
- <%- traverse.call(top) -%>
- <%- end -%>
+ <%= generate_class_index_content(@classes, rel_prefix) %>