You need to sign in or sign up before continuing.
Bugzilla.pm 3.34 KB
Newer Older
1 2 3
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
#
5 6
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
7 8 9

package Pod::Simple::HTMLBatch::Bugzilla;

10
use 5.10.1;
11
use strict;
12
use warnings;
13

14
use base qw(Pod::Simple::HTMLBatch);
15 16 17 18 19 20 21 22 23

# This is the same hack that HTMLBatch does to "import" this subroutine.
BEGIN { *esc = \&Pod::Simple::HTML::esc }

# Describes how top-level modules should be sorted and named. This
# is a translation from HTMLBatch's names to our categories.
# Note that if you leave out a category here, it will not be indexed
# in the contents file, even though its HTML POD will still exist.
use constant FILE_TRANSLATION => {
24 25 26 27 28 29 30
  Files => [
    'importxml',      'contrib',     'checksetup', 'email_in',
    'install-module', 'sanitycheck', 'jobqueue',   'migrate',
    'collectstats'
  ],
  Modules    => ['bugzilla'],
  Extensions => ['extensions'],
31 32 33 34 35
};

# This is basically copied from Pod::Simple::HTMLBatch, and overridden
# so that we can format things more nicely.
sub _write_contents_middle {
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
  my ($self, $Contents, $outfile, $toplevel2submodules) = @_;

  my $file_trans = FILE_TRANSLATION;

  # For every top-level category...
  foreach my $category (sort keys %$file_trans) {

    # Get all of the HTMLBatch categories that should be in this
    # category.
    my @category_data;
    foreach my $b_category (@{$file_trans->{$category}}) {
      my $data = $toplevel2submodules->{$b_category};
      push(@category_data, @$data) if $data;
    }
    next unless @category_data;

    my @downlines = sort { $a->[-1] cmp $b->[-1] } @category_data;

    # And finally, actually print out the table for this category.
    printf $Contents qq[<dt><a name="%s">%s</a></dt>\n<dd>\n], esc($category),
      esc($category);
    print $Contents '<table class="pod_desc_table">' . "\n";

    # For every POD...
    my $row_count = 0;
    foreach my $e (@downlines) {
      $row_count++;
      my $even_or_odd = $row_count % 2 ? 'even' : 'odd';
64
      my $name        = esc($e->[0]);
65 66 67 68
      my $path = join("/", '.', esc(@{$e->[3]})) . $Pod::Simple::HTML::HTML_EXTENSION;
      my $description = $self->{bugzilla_desc}->{$name} || '';
      $description = esc($description);
      my $html = <<END_HTML;
69 70 71 72 73
<tr class="$even_or_odd">
  <th><a href="$path">$name</a></th>
  <td>$description</td>
</tr>
END_HTML
74 75

      print $Contents $html;
76
    }
77 78
    print $Contents "</table></dd>\n\n";
  }
79

80
  return 1;
81 82 83 84 85
}

# This stores the name and description for each file, so that
# we can get that information out later.
sub note_for_contents_file {
86 87 88 89 90 91 92 93 94 95 96 97 98 99
  my $self   = shift;
  my $retval = $self->SUPER::note_for_contents_file(@_);

  my ($namelets, $infile) = @_;
  my $parser = $self->html_render_class->new;
  $parser->set_source($infile);
  my $full_title = $parser->get_title;
  $full_title =~ /^\S+\s+-+\s+(.+)/;
  my $description = $1;

  $self->{bugzilla_desc} ||= {};
  $self->{bugzilla_desc}->{join('::', @$namelets)} = $description;

  return $retval;
100 101
}

102 103
# Exclude modules being in lib/.
sub find_all_pods {
104 105 106 107 108 109
  my ($self, $dirs) = @_;
  my $mod2path = $self->SUPER::find_all_pods($dirs);
  foreach my $mod (keys %$mod2path) {
    delete $mod2path->{$mod} if $mod =~ /^lib::/;
  }
  return $mod2path;
110 111
}

112
1;