File Coverage

blib/lib/HTML/EditableTable/Horizontal.pm
Criterion Covered Total %
statement 9 116 7.7
branch 0 56 0.0
condition 0 21 0.0
subroutine 3 5 60.0
pod 1 2 50.0
total 13 200 6.5


"; "; "; \n";
line stmt bran cond sub pod time code
1             package HTML::EditableTable::Horizontal;
2              
3             @ISA = qw(HTML::EditableTable);
4              
5 1     1   1553 use strict;
  1         2  
  1         43  
6 1     1   7 use warnings;
  1         10  
  1         35  
7 1     1   6 use Carp qw(confess);
  1         1  
  1         1547  
8              
9             =head1 NAME
10              
11             HTML::EditableTable::Horizontal
12              
13             =head1 VERSION
14              
15             Version 0.21
16              
17             =cut
18              
19             our $VERSION = '0.21';
20              
21             =head2 'Protected' Virtual Methods
22              
23             =cut
24              
25             # makeTable is the 'abstract virtual' method that must be implemented by a derivative of HTML::EditableTable
26              
27             sub makeTable {
28              
29 0     0 1   my $self = shift @_;
30              
31 0           my $data = $self->{'data'};
32 0           my $spec = $self->{'tableFields'};
33 0           my $mode = $self->{'editMode'};
34            
35 0           my $sortHeader = undef;
36            
37 0 0         if (exists $self->{'sortHeader'}) {
38 0           $sortHeader = $self->{'sortHeader'};
39             }
40              
41 0 0 0       if (!$data || !$spec || !$mode) {
      0        
42 0           confess("Missing requirement for table, throwing exception");
43             }
44            
45 0           my $tableAttributes = $self->getTableTagAttributes();
46 0           print "\n\n"; "; \n\n"; "; \n\n"; "; \n\n"; "; \n\n"; "; \n";
47            
48 0 0         unless (exists $self->{'noheader'}) {
49 0           $self->staticTableHeader($spec, $mode, $sortHeader);
50             }
51            
52 0           print "\n";
53            
54 0 0         if (ref($data) eq 'ARRAY') {
    0          
55            
56             # autodetermine rowspan drivers and call setRowspanDriver() from the first row of data
57 0 0         if(scalar(@$data)) {
58 0           foreach my $dbfield (keys %{$data->[0]}) {
  0            
59 0 0         if (ref($data->[0]->{$dbfield}) eq 'ARRAY') {
60 0           push @{$self->{variableRowspanDriver}}, $dbfield;
  0            
61             }
62             }
63             }
64            
65 0           foreach my $row (@$data) {
66            
67 0 0         if (exists $self->{variableRowspanDriver}) {
68            
69 0           my $maxRowspanSubcount = 0;
70            
71 0           for (my $j = 0; $j < scalar(@{$self->{variableRowspanDriver}}); $j++) {
  0            
72 0 0         if (ref($row->{$self->{variableRowspanDriver}->[$j]}) eq 'ARRAY') {
73 0           my $nextRowspanSubcount = scalar(@{$row->{$self->{variableRowspanDriver}->[$j]}});
  0            
74              
75 0 0         if ($nextRowspanSubcount > $maxRowspanSubcount) {
76 0           $maxRowspanSubcount = $nextRowspanSubcount;
77             }
78             }
79             }
80            
81 0           for (my $i = 0; $i < $maxRowspanSubcount; $i++) {
82 0           print "
83 0           $self->staticTableRow($row, $spec, $maxRowspanSubcount, $i);
84 0           print "
85             }
86             }
87             else {
88 0           print "
89 0           $self->staticTableRow($row, $spec);
90 0           print "
91             }
92             }
93             }
94             elsif (ref($data) eq 'HASH') {
95            
96             # autodetermine rowspan drivers and call setRowspanDriver() from the first row of data
97            
98 0           my ($key, $row) = each %$data;
99            
100 0 0         if($row) {
101 0           foreach my $dbfield (keys %$row) {
102 0 0         if (ref($row->{$dbfield}) eq 'ARRAY') {
103 0           push @{$self->{variableRowspanDriver}}, $dbfield;
  0            
104             }
105             }
106             }
107            
108 0 0         if ( my $so = $self->{'sortOrder'}) {
109            
110 0 0         foreach my $rowKey (sort { my $aPos; my $bPos; for ($aPos = 0; $aPos < scalar(@$so); $aPos++) { if ($so->[$aPos] eq $a) { last; } } for ($bPos = 0; $bPos < scalar(@$so); $bPos++) { if ($so->[$bPos] eq $b) { last; } } $aPos <=> $bPos; } keys %$data) {
  0 0          
  0            
  0            
  0            
  0            
  0            
  0            
  0            
111              
112 0           my $row = $data->{$rowKey};
113            
114 0 0         if (exists $self->{variableRowspanDriver}) {
115            
116 0           my $maxRowspanSubcount = 0;
117            
118 0           for (my $j = 0; $j < scalar(@{$self->{variableRowspanDriver}}); $j++) {
  0            
119 0 0         if (ref($row->{$self->{variableRowspanDriver}->[$j]}) eq 'ARRAY') {
120 0           my $nextRowspanSubcount = scalar(@{$row->{$self->{variableRowspanDriver}->[$j]}});
  0            
121            
122 0 0         if ($nextRowspanSubcount > $maxRowspanSubcount) {
123 0           $maxRowspanSubcount = $nextRowspanSubcount;
124             }
125             }
126             }
127            
128 0           for (my $i = 0; $i < $maxRowspanSubcount; $i++) {
129 0           print "
130 0           $self->staticTableRow($row, $spec, $maxRowspanSubcount, $i);
131 0           print "
132             }
133             }
134             else {
135 0           print "
136 0           $self->staticTableRow($row, $spec);
137 0           print "
138             }
139             }
140             }
141             else {
142 0           foreach my $rowKey (sort keys %$data) {
143 0           print "
144 0           $self->staticTableRow($data->{$rowKey}, $spec);
145 0           print "
146             }
147             }
148             }
149            
150             else {
151 0           confess "data must by a hash or array reference, not a " . ref($data);
152             }
153            
154 0           print "
\n";
155             }
156              
157             sub staticTableHeader {
158            
159 0     0 0   my $self = shift @_;
160              
161 0           my $spec = $self->{'tableFields'};
162 0           my $mode = $self->{'editMode'};
163              
164 0           my $sortHeader = undef;
165 0           my $orderBy = undef;
166            
167 0 0         if (exists $self->{'sortHeader'}) {
168              
169             # each click causes sort to revserse
170            
171 0           $orderBy = 'orderByAsc';
172            
173 0 0         if (CGI::param('orderByAsc')) {
174 0           $orderBy = 'orderByDesc';
175             }
176            
177 0           $sortHeader = $self->{'sortHeader'};
178             }
179              
180 0           print "
181              
182 0           foreach my $colSpec (@$spec) {
183            
184 0 0 0       next if (exists $colSpec->{'viewOnly'} && $mode eq 'edit');
185 0 0 0       next if (exists $colSpec->{'editOnly'} && $mode eq 'view');
186            
187 0 0 0       if ($colSpec->{'formElement'} && ($colSpec->{'formElement'} eq 'deleteRowButton')) {
    0          
188 0           print "" . "" . "
189             }
190             elsif (!exists($colSpec->{'label'})) {
191 0           print "" . "label missing" . "
192             }
193             else {
194 0 0 0       if ($sortHeader && exists $colSpec->{'dbfield'}) {
195 0           print "" . "{'dbfield'} . ">" . $colSpec->{'label'} . "";
196             }
197             else {
198            
199 0 0         if (exists $colSpec->{'tooltip'}) {
200 0           print "{'tooltip'} . "\" onmouseover=\"Tooltip.schedule(this, event);\">" . $colSpec->{'label'};
201             }
202             else {
203 0           print "" . $colSpec->{'label'};
204             }
205             }
206            
207 0 0 0       if ($mode eq 'edit' && exists $colSpec->{'jsClearColumnOnEdit'}) {
208 0           print "
";
209              
210 0           my $name = $colSpec->{'dbfield'};
211            
212 0 0         if (exists $colSpec->{'rowspanArrayKey'}) {
213 0           $name = $colSpec->{'rowspanArrayKey'}
214             }
215            
216 0           print "";
217            
218             }
219            
220 0           print "";
221            
222             }
223             }
224 0           print "
225             }
226              
227              
228             =head1 SYNOPSIS
229              
230             Implementation of EditableTable for the 'horizontal' case, where the first row presents the data header. There are no public methods in this class. See L for documentation.
231              
232             =head1 COPYRIGHT & LICENSE
233              
234             Copyright 2010 Freescale Semiconductor, all rights reserved.
235              
236             This program is free software; you can redistribute it and/or modify it
237             under the same terms as Perl itself.
238              
239              
240             =cut
241              
242             1; # End of HTML::EditableTable::Horizontal