File Coverage

lib/Pod/Elemental/Transformer/Splint/AttributeRenderer/HtmlDefault.pm
Criterion Covered Total %
statement 77 87 88.5
branch 10 24 41.6
condition 1 2 50.0
subroutine 11 12 91.6
pod 0 5 0.0
total 99 130 76.1


line stmt bran cond sub pod time code
1 3     3   2116 use 5.14.0;
  3         9  
2 3     3   18 use strict;
  3         5  
  3         73  
3 3     3   16 use warnings;
  3         5  
  3         199  
4              
5             package Pod::Elemental::Transformer::Splint::AttributeRenderer::HtmlDefault;
6              
7             our $VERSION = '0.1100'; # VERSION
8             # ABSTRACT: Default html attribute renderer
9              
10 3     3   15 use Moose;
  3         6  
  3         19  
11 3     3   20312 use Path::Tiny;
  3         6  
  3         179  
12 3     3   15 use Pod::Simple::XHTML;
  3         6  
  3         112  
13 3     3   2321 use syntax 'qs';
  3         3981  
  3         13  
14              
15             with 'Pod::Elemental::Transformer::Splint::AttributeRenderer';
16              
17             sub render_attribute {
18 2     2 0 5 my $self = shift;
19 2         5 my $data = shift;
20              
21 2         4 my $settings = $data->{'settings'};
22 2         6 my $documentation_alts = $data->{'documentation_alts'};
23 2         3 my $documentation = $data->{'documentation'};
24              
25 2         5 my $items = [];
26 2 50       12 push @$items => $settings->{'type'} if defined $settings->{'type'};
27 2         4 my $req_and_default = '';
28              
29 2 50       10 if(!$settings->{'has_init_arg'}) {
    50          
    0          
30 0         0 $req_and_default = 'not in constructor';
31             }
32             elsif(!defined $settings->{'default'}) {
33 2         6 $req_and_default = $settings->{'required_text'};
34             }
35             elsif($settings->{'is_default_a_coderef'}) {
36 0 0       0 if(defined $settings->{'documentation_default'}) {
37 0         0 $req_and_default = $self->parse_pod(sprintf '%s, default: C<%s>', $settings->{'required_text'}, $settings->{'documentation_default'});
38             }
39             else {
40 0         0 $req_and_default = $self->parse_pod(sprintf '%s, default is a C<coderef>', $settings->{'required_text'});
41             }
42             }
43             else {
44 0         0 $req_and_default = $self->parse_pod(sprintf '%s, default: C<%s>', $settings->{'required_text'}, $settings->{'default'});
45             }
46              
47 2         5 push @$items => $req_and_default;
48 2         5 push @$items => $settings->{'is_text'};
49              
50 2         3 my $last_item = pop @$items;
51 2         6 my $cells = [ map { $self->make_cell_with_border(nowrap => 1, text => $_) } @$items ];
  4         19  
52              
53 2 50       5 push @$cells => scalar @{ $documentation_alts } ? $self->make_cell_with_border(nowrap => 1, text => $last_item)
  2         10  
54             : $self->make_cell_without_border(nowrap => 1, text => $last_item)
55             ;
56              
57 2 50       5 if(scalar @{ $documentation_alts }) {
  2         9  
58 2         3 my $first_doc_alt = shift @{ $documentation_alts };
  2         6  
59              
60 2         17 push @$cells => $self->make_cell_without_border_right_aligned(nowrap => 0, text => $self->parse_pod(sprintf 'C<%s>:', $first_doc_alt->[0]) ),
61             $self->make_cell_extra_padded_without_border(nowrap => 0, text => $first_doc_alt->[1]);
62             }
63              
64 2         6 my $rows = [ $cells ];
65              
66 2 100       4 if(scalar @{ $documentation_alts} ){
  2         6  
67 1         2 my $number_of_cells_left_of_doc = scalar @$cells - 2;
68              
69 1         3 foreach my $doc_alt (@{ $documentation_alts }) {
  1         3  
70 1         4 my $row = [ (' <td>&#160;</td>') x $number_of_cells_left_of_doc ];
71 1         3 push @{ $row } => $self->make_cell_without_border_right_aligned(nowrap => 0, text => $self->parse_pod(sprintf 'C<%s>:', $doc_alt->[0]) ),
  1         7  
72             $self->make_cell_extra_padded_without_border(nowrap => 0, text => $doc_alt->[1]);
73 1         3 push @{ $rows } => $row;
  1         4  
74             }
75             }
76              
77 2         5 my @table = ();
78 2         4 foreach my $row (@{ $rows }) {
  2         5  
79 3         4 push @table => ('<tr>');
80 3         4 push @table => @{ $row };
  3         8  
81 3         8 push @table => ('</tr>');
82             }
83              
84 2   50     9 my $content = sprintf qs{
85             =begin %s
86 2         21  
87             <table cellpadding="0" cellspacing="0">
88             %s
89             </table>
90 0     0 0 0  
91 0         0 <p>%s</p>
92 0         0  
93 0 0       0 =end %s
94             }, $self->for, join ("\n" => @table), ($documentation // ''), $self->for;
95 0         0  
96             return $content;
97             }
98 3     3 0 6  
99 3         8 sub make_cell_without_border {
100 3         5 my $self = shift;
101 3 50       7 my %args = @_;
102             my $text = $args{'text'};
103 3         13 my $nowrap = !$args{'nowrap'} ? '' : ' white-space: nowrap;';
104              
105             return qq{ <td style="padding-left: 6px; padding-right: 6px;$nowrap">$text</td>};
106 6     6 0 9 }
107 6         20 sub make_cell_extra_padded_without_border {
108 6         10 my $self = shift;
109 6 50       16 my %args = @_;
110             my $text = $args{'text'};
111 6         34 my $nowrap = !$args{'nowrap'} ? '' : ' white-space: nowrap;';
112              
113             return qq{ <td style="padding-left: 12px;$nowrap">$text</td>};
114 3     3 0 5 }
115 3         10 sub make_cell_with_border {
116 3         5 my $self = shift;
117 3 50       10 my %args = @_;
118             my $text = $args{'text'};
119 3         17 my $nowrap = !$args{'nowrap'} ? '' : ' white-space: nowrap;';
120              
121             return qq{ <td style="padding-right: 6px; padding-left: 6px; border-right: 1px solid #b8b8b8;$nowrap">$text</td>};
122             }
123             sub make_cell_without_border_right_aligned {
124             my $self = shift;
125             my %args = @_;
126             my $text = $args{'text'};
127             my $nowrap = !$args{'nowrap'} ? '' : ' white-space: nowrap;';
128              
129             return qq{ <td style="text-align: right; padding-right: 6px; padding-left: 6px;$nowrap">$text</td>};
130             }
131              
132             1;
133              
134             __END__
135              
136             =pod
137              
138             =encoding UTF-8
139              
140             =head1 NAME
141              
142             Pod::Elemental::Transformer::Splint::AttributeRenderer::HtmlDefault - Default html attribute renderer
143              
144             =head1 VERSION
145              
146             Version 0.1100, released 2016-01-12.
147              
148             =head1 SOURCE
149              
150             L<https://github.com/Csson/p5-Pod-Elemental-Transformer-Splint>
151              
152             =head1 HOMEPAGE
153              
154             L<https://metacpan.org/release/Pod-Elemental-Transformer-Splint>
155              
156             =head1 AUTHOR
157              
158             Erik Carlsson <info@code301.com>
159              
160             =head1 COPYRIGHT AND LICENSE
161              
162             This software is copyright (c) 2016 by Erik Carlsson.
163              
164             This is free software; you can redistribute it and/or modify it under
165             the same terms as the Perl 5 programming language system itself.
166              
167             =cut