File Coverage

blib/lib/App/Pods2Site/SiteBuilder/BasicFramesTreeTOC.pm
Criterion Covered Total %
statement 76 82 92.6
branch 22 26 84.6
condition n/a
subroutine 8 8 100.0
pod 0 1 0.0
total 106 117 90.6


line stmt bran cond sub pod time code
1             package App::Pods2Site::SiteBuilder::BasicFramesTreeTOC;
2              
3 2     2   12 use strict;
  2         4  
  2         50  
4 2     2   10 use warnings;
  2         3  
  2         109  
5              
6             our $VERSION = '1.003';
7             my $version = $VERSION;
8             $VERSION = eval $VERSION;
9              
10 2     2   10 use base qw(App::Pods2Site::SiteBuilder::AbstractBasicFrames);
  2         11  
  2         294  
11              
12 2     2   12 use App::Pods2Site::Util qw(slashify readUTF8File writeUTF8File);
  2         4  
  2         1630  
13              
14             sub new
15             {
16 3     3 0 7 my $class = shift;
17              
18 3         47 my $self = $class->SUPER::new(@_);
19 3         9 $self->{maxtocdepth} = -1;
20              
21 3         12 return $self;
22             }
23              
24             sub _getCategoryTOC
25             {
26 6     6   12 my $self = shift;
27 6         7 my $groupName = shift;
28 6         11 my $podInfo = shift;
29 6         7 my $sitedir = shift;
30            
31 6         20 my $toc = '';
32 6         10 my %tree;
33 6         42 foreach my $podName (sort(keys(%$podInfo)))
34             {
35 10         21 my $treeloc = \%tree;
36 10         35 for my $level (split(/::/, $podName))
37             {
38 12 100       55 $treeloc->{$level} = {} unless exists($treeloc->{$level});
39 12         32 $treeloc = $treeloc->{$level};
40             }
41             }
42 6         44 $self->_genRefs($sitedir, \$toc, $podInfo, \%tree, -1);
43 6         12 chomp($toc);
44 6 50       15 if ($toc)
45             {
46 6 50       16 if ($groupName)
47             {
48 6         34 $toc = qq(
\n\t\t\t$groupName\n\t\t\t\t$toc\n\t\t
\n);
49             }
50             else
51             {
52 0         0 my $newtoc = '';
53 0         0 while ($toc =~ /class="toc-(top|\d+)"/g)
54             {
55 0 0       0 my $lvl = ($1 == 0) ? 'top' : $1 - 1;
56 0         0 $newtoc .= substr( $toc, 0, $-[0] ) . qq(class="toc-$lvl");
57 0         0 $toc = substr( $toc, $+[0] );
58             }
59 0         0 $toc = "$newtoc$toc";
60             }
61             }
62            
63 6         26 return $toc;
64             }
65              
66             sub _genRefs
67             {
68 17     17   28 my $self = shift;
69 17         24 my $sitedir = shift;
70 17         21 my $ref = shift;
71 17         21 my $podInfo = shift;
72 17         21 my $treeloc = shift;
73 17         19 my $depth = shift;
74 17         34 my $n = shift;
75 17         25 my $np = shift;
76              
77 17 100       37 $self->{maxtocdepth} = $depth if $depth > $self->{maxtocdepth};
78            
79 17 100       46 my $hasSubNodes = keys(%$treeloc) ? 1 : 0;
80            
81 17         34 my $r = '';
82 17 100       35 if ($n)
83             {
84 11         25 $r = "${n}::";
85              
86 11 100       22 $$ref .= qq(
\n) if $hasSubNodes;
87            
88 11 100       32 $$ref .= ($hasSubNodes ? qq() : qq(
));
89 11         29 my $p = $podInfo->{$n}->{htmlfile};
90 11 100       27 if ($p)
91             {
92 10         89 $p =~ s#\Q$sitedir\E.##;
93 10         33 $p = slashify($p, '/');
94 10         31 $$ref .= qq($np);
95             }
96             else
97             {
98 1         3 $$ref .= qq($np);
99             }
100 11 100       30 $$ref .= ($hasSubNodes ? qq() : qq());
101 11         21 $$ref .= "\n";
102             }
103            
104 17         77 foreach my $subnp (sort { lc($a) cmp lc($b) } (keys(%$treeloc)))
  3         26  
105             {
106 11         92 my $subn = "$r$subnp";
107            
108 11         17 $depth++;
109 11         42 $self->_genRefs($sitedir, $ref, $podInfo, $treeloc->{$subnp}, $depth, $subn, $subnp);
110 11         13 $depth--;
111             }
112            
113 17 100       39 if ($n)
114             {
115 11 100       27 $$ref .= qq(\n) if $hasSubNodes;
116             }
117             }
118              
119             sub _rewriteCss
120             {
121 3     3   6 my $self = shift;
122 3         6 my $args = shift;
123              
124 3         11 my $tocrules = <
125             summary.toc-top
126             {
127             font-weight: bolder;
128             }
129              
130             TOCTOPRULES
131              
132 3         33 for my $num (0 .. $self->{maxtocdepth})
133             {
134 5         16 my $sumem = $num + 1;
135 5         8 my $divem = $num + 2;
136 5         21 $tocrules .= <
137             summary.toc-$num
138             {
139             font-size: small;
140             margin-left: ${sumem}em;
141             }
142              
143             div.toc-$num
144             {
145             font-size: small;
146             margin-left: ${divem}em;
147             }
148              
149             TOCNUMRULES
150             }
151              
152 3         12 my $sitedir = $args->getSiteDir();
153 3         10 my $sbName = $self->getStyleName();
154 3         12 my $sbCssFile = slashify("$sitedir/$sbName.css");
155 3         52 my $cssContent = readUTF8File($sbCssFile);
156 3         25 writeUTF8File($sbCssFile, "$cssContent\n$tocrules");
157             }
158              
159             1;