1 # BEGIN BPS TAGGED BLOCK {{{
5 # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
6 # <sales@bestpractical.com>
8 # (Except where explicitly superseded by other copyright notices)
13 # This work is made available to you under the terms of Version 2 of
14 # the GNU General Public License. A copy of that license should have
15 # been provided with this software, but in any event can be snarfed
18 # This work is distributed in the hope that it will be useful, but
19 # WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 # General Public License for more details.
23 # You should have received a copy of the GNU General Public License
24 # along with this program; if not, write to the Free Software
25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26 # 02110-1301 or visit their web page on the internet at
27 # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
30 # CONTRIBUTION SUBMISSION POLICY:
32 # (The following paragraph is not intended to limit the rights granted
33 # to you to modify and distribute this software under the terms of
34 # the GNU General Public License and is only of importance to you if
35 # you choose to contribute your changes and enhancements to the
36 # community by submitting them to Best Practical Solutions, LLC.)
38 # By intentionally submitting any modifications, corrections or
39 # derivatives to this work, or any other work intended for use with
40 # Request Tracker, to Best Practical Solutions, LLC, you confirm that
41 # you are the copyright holder for those contributions and you grant
42 # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43 # royalty-free, perpetual, license to use, copy, create derivative
44 # works based on those contributions, and sublicense and distribute
45 # those contributions and any derivatives thereof.
47 # END BPS TAGGED BLOCK }}}
52 package RT::Pod::HTMLBatch;
53 use base 'Pod::Simple::HTMLBatch';
55 use List::MoreUtils qw/all/;
61 my $self = shift->SUPER::new(@_);
64 # Per-page output options
65 $self->css_flurry(0); # No CSS
66 $self->javascript_flurry(0); # No JS
67 $self->no_contents_links(1); # No header/footer "Back to contents" links
70 $self->index(1); # Write a per-page TOC
71 $self->contents_file("index.html"); # Write a global TOC
73 $self->html_render_class('RT::Pod::HTML');
74 $self->search_class('RT::Pod::Search');
83 my $is_install_doc = sub {
85 local $_ = $page{name};
86 return 1 if /^(README|UPGRADING)/;
87 return 1 if /^RT\w*?_Config$/;
88 return 1 if $_ eq "web_deployment";
89 return 1 if $page{infile} =~ m{^configure(\.ac)?$};
93 my $section = $info{infile} =~ m{/plugins/([^/]+)} ? "05 Extension: $1" :
94 $info{infile} =~ m{/local/} ? '04 Local Documenation' :
95 $is_install_doc->(%info) ? '00 Install and Upgrade '.
97 $info{infile} =~ m{/(docs|etc)/} ? '01 User Documentation' :
98 $info{infile} =~ m{/bin/} ? '02 Utilities (bin)' :
99 $info{infile} =~ m{/sbin/} ? '03 Utilities (sbin)' :
100 $info{name} =~ /^RT::Action/ ? '08 Actions' :
101 $info{name} =~ /^RT::Condition/ ? '09 Conditions' :
102 $info{name} =~ /^RT(::|$)/ ? '07 Developer Documentation' :
103 $info{infile} =~ m{/devel/tools/} ? '20 Utilities (devel/tools)' :
106 if ($info{infile} =~ m{/(docs|etc)/}) {
107 $info{name} =~ s/_/ /g;
108 $info{name} = join "/", map { ucfirst } split /::/, $info{name};
111 return ($info{name}, $section);
114 sub write_contents_file {
115 my ($self, $to) = @_;
116 return unless $self->contents_file;
118 my $file = join "/", $to, $self->contents_file;
119 open my $index, ">", $file
120 or warn "Unable to open index file '$file': $!\n", return;
122 my $pages = $self->_contents;
123 return unless @$pages;
127 for my $page (@$pages) {
128 my ($name, $infile, $outfile, $pieces) = @$page;
130 my ($title, $section) = $self->classify(
135 (my $path = $outfile) =~ s{^\Q$to\E/?}{};
137 push @{ $toc{$section} }, {
144 print $index "<dl class='superindex'>\n";
146 for my $key (sort keys %toc) {
147 next unless @{ $toc{$key} };
149 (my $section = $key) =~ s/^\d+ //;
150 print $index "<dt>", esc($section), "</dt>\n";
151 print $index "<dd>\n";
154 my @names = map { $_->{name} } $a, $b;
156 # Sort just the upgrading docs descending within everything else
157 @names = reverse @names
158 if all { /^UPGRADING-/ } @names;
160 $names[0] cmp $names[1]
163 for my $page (@sorted) {
164 print $index " <a href='", esc($page->{path}), "'>",
168 print $index "</dd>\n";
170 print $index '</dl>';
176 Pod::Simple::HTMLBatch::esc(@_);
180 my ($self, $module) = @_;
181 return grep { $_->[0] eq $module } @{$self->_contents};