diff --git a/bin/dev_scripts/PODtoHTML.pm b/bin/dev_scripts/PODtoHTML.pm
index 1956dedfa0..6a7925a35b 100644
--- a/bin/dev_scripts/PODtoHTML.pm
+++ b/bin/dev_scripts/PODtoHTML.pm
@@ -31,11 +31,21 @@ use POSIX qw(strftime);
use WeBWorK::Utils::PODParser;
our @sections = (
- bin => 'Scripts',
- conf => 'Config Files',
doc => 'Documentation',
+ bin => 'Scripts',
+ macros => 'Macros',
lib => 'Libraries',
- macros => 'Macros'
+);
+our %macro_names = (
+ answers => 'Answers',
+ contexts => 'Contexts',
+ core => 'Core',
+ deprecated => 'Deprecated',
+ graph => 'Graph',
+ math => 'Math',
+ misc => 'Miscellaneous',
+ parsers => 'Parsers',
+ ui => 'User Interface'
);
sub new {
@@ -52,6 +62,7 @@ sub new {
idx => {},
section_hash => $section_hash,
section_order => $section_order,
+ macros_hash => {},
};
return bless $self, $class;
}
@@ -131,7 +142,14 @@ sub update_index {
$subdir =~ s|/.*$||;
my $idx = $self->{idx};
my $sections = $self->{section_hash};
- if (exists $sections->{$subdir}) {
+ if ($subdir eq 'macros') {
+ $idx->{macros} = [];
+ if ($pod_name =~ m!^(.+)/(.+)$!) {
+ push @{ $self->{macros_hash}{$1} }, [ $html_rel_path, $2 ];
+ } else {
+ push @{ $idx->{doc} }, [ $html_rel_path, $pod_name ];
+ }
+ } elsif (exists $sections->{$subdir}) {
push @{ $idx->{$subdir} }, [ $html_rel_path, $pod_name ];
} else {
warn "no section for subdir '$subdir'\n";
@@ -152,6 +170,9 @@ sub write_index {
pod_index => $self->{idx},
sections => $self->{section_hash},
section_order => $self->{section_order},
+ macros => $self->{macros_hash},
+ macros_order => [ sort keys %{ $self->{macros_hash} } ],
+ macro_names => \%macro_names,
date => strftime('%a %b %e %H:%M:%S %Z %Y', localtime)
}
);
diff --git a/bin/dev_scripts/pod-templates/category-index.mt b/bin/dev_scripts/pod-templates/category-index.mt
index 78c9bb3724..a5d980d599 100644
--- a/bin/dev_scripts/pod-templates/category-index.mt
+++ b/bin/dev_scripts/pod-templates/category-index.mt
@@ -23,18 +23,44 @@
%
- % my ($index, $content) = ('', '');
+ % my ($index, $macro_index, $content, $macro_content) = ('', '', '', '');
+ % for my $macro (@$macros_order) {
+ % my $new_index = begin
+ <%= $macro_names->{$macro} // $macro %>
+ % end
+ % $macro_index .= $new_index->();
+ % my $new_content = begin
+
+
+ % for my $file (sort { $a->[1] cmp $b->[1] } @{ $macros->{$macro} }) {
+
<%= $file->[1] %>
+ % }
+
+ % end
+ % $macro_content .= $new_content->();
+ % }
% for my $section (@$section_order) {
% next unless defined $pod_index->{$section};
% my $new_index = begin
<%= $sections->{$section} %>
+ % if ($section eq 'macros') {
+
+ <%= $macro_index %>
+
+ % }
% end
% $index .= $new_index->();
% my $new_content = begin
- % for my $file (sort { $a->[1] cmp $b->[1] } @{ $pod_index->{$section} }) {
-
<%= $file->[1] %>
+ % if ($section eq 'macros') {
+ <%= $macro_content =%>
+ % } else {
+ % for my $file (sort { $a->[1] cmp $b->[1] } @{ $pod_index->{$section} }) {
+
+ <%= $file->[1] %>
+
+ % }
% }
% end
diff --git a/lib/WeBWorK/ContentGenerator/PODViewer.pm b/lib/WeBWorK/ContentGenerator/PODViewer.pm
index e07ac0a61a..3d88598315 100644
--- a/lib/WeBWorK/ContentGenerator/PODViewer.pm
+++ b/lib/WeBWorK/ContentGenerator/PODViewer.pm
@@ -30,15 +30,37 @@ use WeBWorK::Utils::PODParser;
sub PODindex ($c) {
my $pgRoot = $c->ce->{pg_dir};
- my $podFiles = Pod::Simple::Search->new->inc(0)->limit_re(qr/^doc|^lib|^macros/)->survey($pgRoot);
+ my $docFiles = Pod::Simple::Search->new->inc(0)->survey("$pgRoot/doc");
+ my $macroFiles = Pod::Simple::Search->new->inc(0)->survey("$pgRoot/macros");
+ my $libFiles = Pod::Simple::Search->new->inc(0)->survey("$pgRoot/lib");
- my $sections = {};
- for (sort keys %$podFiles) {
- my $section = $_ =~ s/::.*$//r;
- push(@{ $sections->{$section} }, $podFiles->{$_} =~ s!^$pgRoot/$section/!!r);
+ my $docs = [];
+ for (sort keys %$docFiles) {
+ push(@$docs, $docFiles->{$_} =~ s!^$pgRoot/!!r);
}
- return $c->render('ContentGenerator/PODViewer', sections => $sections, sidebar_title => $c->maketext('Categories'));
+ my $macros = {};
+ for (sort keys %$macroFiles) {
+ my $macro = $macroFiles->{$_} =~ s!^$pgRoot/macros/(.+)/.+$!$1!r;
+ if ($macro =~ /^$pgRoot/) {
+ push(@$docs, $macroFiles->{$_} =~ s!^$pgRoot/!!r);
+ } else {
+ push(@{ $macros->{$macro} }, $macroFiles->{$_} =~ s!^$pgRoot/macros/$macro/!!r);
+ }
+ }
+
+ my $libs = [];
+ for (sort keys %$libFiles) {
+ push(@$libs, $libFiles->{$_} =~ s!^$pgRoot/lib/!!r);
+ }
+
+ return $c->render(
+ 'ContentGenerator/PODViewer',
+ docs => $docs,
+ macros => $macros,
+ libs => $libs,
+ sidebar_title => $c->maketext('Categories')
+ );
}
sub renderPOD ($c) {
diff --git a/templates/ContentGenerator/PODViewer.html.ep b/templates/ContentGenerator/PODViewer.html.ep
index 89804f5fa6..1383095d5f 100644
--- a/templates/ContentGenerator/PODViewer.html.ep
+++ b/templates/ContentGenerator/PODViewer.html.ep
@@ -6,26 +6,62 @@
% lib => maketext('Libraries'),
% macros => maketext('Macros')
% );
+% my %macro_names = (
+ % answers => maketext('Answers'),
+ % contexts => maketext('Contexts'),
+ % core => maketext('Core'),
+ % deprecated => maketext('Deprecated'),
+ % graph => maketext('Graph'),
+ % math => maketext('Math'),
+ % misc => maketext('Miscellaneous'),
+ % parsers => maketext('Parsers'),
+ % ui => maketext('User Interface')
+% );
%
-% for my $section (sort keys %$sections) {
- % content_for toc => begin
- <%= link_to $section_names{$section} => "#$section", class => 'nav-link' %>
+% content_for pod_links => begin
+
+
+ % for (@$docs) {
+ % my $link_name = $_ =~ s!^(doc|macros)/!!r;
+ <%= link_to $link_name, 'pod_viewer', { filePath => "$_" },
+ class => 'list-group-item list-group-item-action' =%>
+ % }
+
+
+% end
+% for my $macro (sort keys %$macros) {
+ % content_for macros_toc => begin
+ <%= link_to $macro_names{$macro} // $macro => "#macro-$macro", class => 'nav-link' %>
% end
- % content_for subjects => begin
-
+ % content_for pod_links => begin
+
- % for (@{ $sections->{$section} }) {
- % my $link_name = $_;
- % $link_name = $1 =~ s!/!::!gr if $link_name =~ m/^(.*)\.pm$/;
- <%= link_to $link_name, 'pod_viewer', { filePath => "$section/$_" },
+ % for (@{ $macros->{$macro} }) {
+ <%= link_to $_, 'pod_viewer', { filePath => "macros/$macro/$_" },
class => 'list-group-item list-group-item-action' =%>
% }
% end
% }
+% content_for pod_links => begin
+
+
+ % for (@$libs) {
+ % my $link_name = $_;
+ % $link_name = $1 =~ s!/!::!gr if $link_name =~ m/^(.*)\.pm$/;
+ <%= link_to $link_name, 'pod_viewer', { filePath => "lib/$_" },
+ class => 'list-group-item list-group-item-action' =%>
+ % }
+
+% end
% content_for sidebar => begin
- <%= content 'toc' %>
+ <%= link_to $section_names{doc} => '#doc', class => 'nav-link' %>
+ <%= link_to $section_names{macros} => '#macros', class => 'nav-link' %>
+
+ <%= content 'macros_toc' %>
+
+ <%= link_to $section_names{lib} => '#lib', class => 'nav-link' %>
% end
-<%= content 'subjects' %>
+<%= content 'pod_links' %>