From f8f42159a0a7ba3db539eb487cde054385d612f2 Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Tue, 18 Feb 2025 14:51:05 +0000 Subject: [PATCH 1/4] Extract class grouping logic from classes sidebar view --- lib/rdoc/generator/darkfish.rb | 11 +++++++++++ .../template/darkfish/_sidebar_classes.rhtml | 7 +------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb index adc0ea3954..18ac1bab8d 100644 --- a/lib/rdoc/generator/darkfish.rb +++ b/lib/rdoc/generator/darkfish.rb @@ -824,6 +824,17 @@ def generate_ancestor_list(ancestors, klass) 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..c6bac353c3 100644 --- a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +++ b/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml @@ -2,11 +2,7 @@

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 + all_classes = group_classes_by_namespace_for_sidebar(@classes) link = proc do |index_klass, display = index_klass.display?| if display -%><%= index_klass.name %><%- @@ -18,7 +14,6 @@ solo = top.one? {|klass| klass.display?} traverse = proc do |klasses| -%> <%- elsif index_klass.display? -%> -
  • <% link.call(index_klass, true) %> +
  • <% link.call(index_klass) %> <%- end -%> <%- end -%> <%- end -%> From c8713d5e503aa85665bb4ba6dfc34165595f8f83 Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Tue, 18 Feb 2025 15:15:58 +0000 Subject: [PATCH 3/4] 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. --- lib/rdoc/generator/darkfish.rb | 33 +++++++++++++++++++ .../template/darkfish/_sidebar_classes.rhtml | 26 +-------------- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb index 18ac1bab8d..67f719f193 100644 --- a/lib/rdoc/generator/darkfish.rb +++ b/lib/rdoc/generator/darkfish.rb @@ -824,6 +824,39 @@ 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 = +'' + 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)/] diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml index ad5aeeef74..d33ecd43f7 100644 --- a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +++ b/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml @@ -1,29 +1,5 @@
  • <% link.call(index_klass) %> - <%- end -%> - <%- end -%> - <%- end -%> - <%- traverse.call(top) -%> - <%- end -%> + <%= generate_class_index_content(@classes, rel_prefix) %> From 609cf83c45e5b7d027e7fa84886dc3e56f42daa9 Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Wed, 19 Feb 2025 10:51:32 +0000 Subject: [PATCH 4/4] Close sidebar classes' ul and li items --- lib/rdoc/generator/darkfish.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb index 67f719f193..49d4cc0b60 100644 --- a/lib/rdoc/generator/darkfish.rb +++ b/lib/rdoc/generator/darkfish.rb @@ -847,14 +847,14 @@ def traverse_classes(klasses, grouped_classes, rel_prefix, solo = false) 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 << '' + content << '
  • ' solo = false elsif index_klass.display? - content << %(
  • #{generate_class_link(index_klass, rel_prefix)}) + content << %(
  • #{generate_class_link(index_klass, rel_prefix)}
  • ) end end - content + "#{content}" end def group_classes_by_namespace_for_sidebar(classes)