Skip to content

Commit

Permalink
Merge pull request #2615 from somiaj/pod-index
Browse files Browse the repository at this point in the history
Split up macros on PODViewer index page.
  • Loading branch information
Alex-Jordan authored Dec 16, 2024
2 parents e9ef2fa + cf64d0c commit 3a128d0
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 24 deletions.
29 changes: 25 additions & 4 deletions bin/dev_scripts/PODtoHTML.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -52,6 +62,7 @@ sub new {
idx => {},
section_hash => $section_hash,
section_order => $section_order,
macros_hash => {},
};
return bless $self, $class;
}
Expand Down Expand Up @@ -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";
Expand All @@ -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)
}
);
Expand Down
32 changes: 29 additions & 3 deletions bin/dev_scripts/pod-templates/category-index.mt
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,44 @@
</div>
</div>
%
% my ($index, $content) = ('', '');
% my ($index, $macro_index, $content, $macro_content) = ('', '', '', '');
% for my $macro (@$macros_order) {
% my $new_index = begin
<a href="#macro-<%= $macro %>" class="nav-link"><%= $macro_names->{$macro} // $macro %></a>
% end
% $macro_index .= $new_index->();
% my $new_content = begin
<h3><a href="#_podtop_" id="macro-<%= $macro %>"><%= $macro_names->{$macro} // $macro %></a></h3>
<div class="list-group mb-2">
% for my $file (sort { $a->[1] cmp $b->[1] } @{ $macros->{$macro} }) {
<a href="<%= $file->[0] %>" class="list-group-item list-group-item-action"><%= $file->[1] %></a>
% }
</div>
% end
% $macro_content .= $new_content->();
% }
% for my $section (@$section_order) {
% next unless defined $pod_index->{$section};
% my $new_index = begin
<a href="#<%= $section %>" class="nav-link"><%= $sections->{$section} %></a>
% if ($section eq 'macros') {
<div class="nav flex-column ms-3">
<%= $macro_index %>
</div>
% }
% end
% $index .= $new_index->();
% my $new_content = begin
<h2><a href="#_podtop_" id="<%= $section %>"><%= $sections->{$section} %></a></h2>
<div class="list-group mb-2">
% for my $file (sort { $a->[1] cmp $b->[1] } @{ $pod_index->{$section} }) {
<a href="<%= $file->[0] %>" class="list-group-item list-group-item-action"><%= $file->[1] %></a>
% if ($section eq 'macros') {
<%= $macro_content =%>
% } else {
% for my $file (sort { $a->[1] cmp $b->[1] } @{ $pod_index->{$section} }) {
<a href="<%= $file->[0] %>" class="list-group-item list-group-item-action">
<%= $file->[1] %>
</a>
% }
% }
</div>
% end
Expand Down
34 changes: 28 additions & 6 deletions lib/WeBWorK/ContentGenerator/PODViewer.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
58 changes: 47 additions & 11 deletions templates/ContentGenerator/PODViewer.html.ep
Original file line number Diff line number Diff line change
Expand Up @@ -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
<h2><a href="#_podtop_" id="doc"><%= $section_names{doc} %></a></h2>
<div class="list-group mb-2">
% for (@$docs) {
% my $link_name = $_ =~ s!^(doc|macros)/!!r;
<%= link_to $link_name, 'pod_viewer', { filePath => "$_" },
class => 'list-group-item list-group-item-action' =%>
% }
</div>
<h2><a href="#_podtop_" id="macros"><%= $section_names{macros} %></a></h2>
% 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
<h2><a href="#_podtop_" id="<%= $section %>"><%= $section_names{$section} %></a></h2>
% content_for pod_links => begin
<h3><a href="#_podtop_" id="macro-<%= $macro %>"><%= $macro_names{$macro} %></a></h3>
<div class="list-group mb-2">
% 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' =%>
% }
</div>
% end
% }
% content_for pod_links => begin
<h2><a href="#_podtop_" id="lib"><%= $section_names{lib} %></a></h2>
<div class="list-group mb-2">
% 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' =%>
% }
</div>
% end
% content_for sidebar => begin
<nav class="nav flex-column w-100">
<%= content 'toc' %>
<%= link_to $section_names{doc} => '#doc', class => 'nav-link' %>
<%= link_to $section_names{macros} => '#macros', class => 'nav-link' %>
<div class="nav flex-column ms-3">
<%= content 'macros_toc' %>
</div>
<%= link_to $section_names{lib} => '#lib', class => 'nav-link' %>
</nav>
% end
<%= content 'subjects' %>
<%= content 'pod_links' %>

0 comments on commit 3a128d0

Please sign in to comment.