File Coverage

blib/lib/JQuery/TableSorter.pm
Criterion Covered Total %
statement 12 75 16.0
branch 0 16 0.0
condition 0 3 0.0
subroutine 4 11 36.3
pod 3 7 42.8
total 19 112 16.9


line stmt bran cond sub pod time code
1             package JQuery::TableSorter ;
2              
3             our $VERSION = '1.00';
4              
5 1     1   1180 use warnings;
  1         3  
  1         31  
6 1     1   6 use strict;
  1         2  
  1         30  
7              
8 1     1   1760 use HTML::Table ;
  1         25814  
  1         78  
9 1     1   12 use JQuery::CSS ;
  1         2  
  1         759  
10              
11             sub new {
12 0     0 1   my $this = shift;
13 0   0       my $class = ref($this) || $this;
14 0           my $my ;
15 0           %{$my->{param}} = @_ ;
  0            
16 0 0         die "No id defined for TableSorter" unless $my->{param}{id} =~ /\S/ ;
17 0 0         die "No data defined for TableSorter" unless ref($my->{param}{data}) eq 'ARRAY' ;
18              
19 0           bless $my, $class;
20              
21 0           my $jquery = $my->{param}{addToJQuery} ;
22 0           my $jqueryDir = $jquery->getJQueryDir ;
23 0           $my->{fileDir} = "$jqueryDir/plugins" ;
24              
25 0 0         if ($my->{param}{css}) {
26 0           push @{$my->{css}},$my->{param}{css} ;
  0            
27             }
28              
29 0           $my->add_to_jquery ;
30 0           return $my ;
31             }
32              
33             sub add_to_jquery {
34 0     0 0   my $my = shift ;
35 0           my $jquery = $my->{param}{addToJQuery} ;
36 0 0         if (defined $jquery) {
37 0           $jquery->add($my) ;
38             }
39             }
40              
41             sub id {
42 0     0 1   my $my = shift ;
43 0           return $my->{param}{id} ;
44             }
45              
46              
47             sub HTML {
48 0     0 1   my $my = shift ;
49 0           my $data = $my->{param}{'data'} ;
50 0 0         if (!defined $data) {
51 0           die "TableSorter: No data field supplied\n" ;
52             }
53 0           my @data = @{$data} ;
  0            
54 0           my $head = shift @data ;
55 0           my $tile = new HTML::Table(-spacing=>0,-head=>$head ,-data=>\@data) ;
56 0           my $id = $my->{param}{'id'} ;
57 0 0         $tile =~ s!!! ; !! ;
58 0           $tile =~ s!
59 0           $tile =~ s!
60 0           $tile =~ s!
!
! ; 61             62 0           return $tile ; 63             } 64               65             sub packages_needed { 66 0     0 0   my $my = shift ; 67 0           return ('tablesorter/jquery.tablesorter.js') ; 68             } 69               70             sub get_css { 71 0     0 0   my $my = shift ; 72 0           my $id = $my->id ; 73 0           my $css =<<'EOD' ; 74               75             #ID th { 76             background-color: #e9e9da; 77             } 78             #ID td { 79             80             padding:5px; 81             } 82               83             .headerSimple { 84             background: 85             #e9e9da 86             url('PLUGIN_DIR/tablesorter/green_arrows.gif') 87             no-repeat 88             center left; 89             color: #333; 90             padding: 5px; 91             padding-left: 25px; 92             text-align: left; 93             cursor: pointer; 94             } 95               96             .headerSimpleSortUp { 97             background: 98             #e9e900 99             url('PLUGIN_DIR/tablesorter/green_descending.gif') 100             no-repeat 101             center left; 102             } 103               104             .headerSimpleSortDown { 105             background: 106             #e9e900 107             url('PLUGIN_DIR/tablesorter/green_ascending.gif') 108             no-repeat 109             center left; 110             } 111               112             .even { 113             background-color: lightblue; 114             } 115               116             .odd { 117             background-color: #5AAFFF; 118             } 119               120             .highlight { 121             color: grey; 122             } 123               124             .header { 125             background-image: url(PLUGIN_DIR/tablesorter/header-bg.png); 126             background-repeat: no-repeat; 127             border-left: 1px solid #FFF; 128             border-right: 1px solid #000; 129             border-top: 1px solid #FFF; 130             padding-left: 30px; 131             padding-top: 4px; 132             padding-bottom: 4px; 133             height: auto; 134             cursor: pointer; 135             } 136               137             .headerSortUp { 138             background-image: url(PLUGIN_DIR/tablesorter/header-asc.png); 139             background-repeat: no-repeat; 140             border-left: 1px solid #FFF; 141             border-right: 1px solid #000; 142             border-top: 1px solid #FFF; 143             padding-left: 30px; 144             padding-top: 4px; 145             padding-bottom: 4px; 146             height: auto; 147             cursor: pointer; 148             } 149             .headerSortDown { 150             background-image: url(PLUGIN_DIR/tablesorter/header-desc.png); 151             background-repeat: no-repeat; 152             border-left: 1px solid #FFF; 153             border-right: 1px solid #000; 154             border-top: 1px solid #FFF; 155             padding-left: 30px; 156             padding-top: 4px; 157             padding-bottom: 4px; 158             height: auto; 159             cursor: pointer; 160             } 161             EOD 162 0           $css =~ s!#ID!#$id!g ; 163 0           $css =~ s!PLUGIN_DIR!$my->{fileDir}!g ; 164 0           return $css ; 165               166               167               168             } 169               170               171             sub get_jquery_code { 172 0     0 0   my $my = shift ; 173               174             # Construct the function for the table sorter 175             # ????? disableHeader: ['ip'] This is an array 176             # ????? columnParser: [[1,'url']] What is this???? 177               178 0           my @names = qw[sortClassAsc sortClassDesc headerClass disableHeader columnParser dateFormat stripe sortColumn stripingRowClass highlightClass stripRowsOnStartUp] ; 179             180 0           my $param = $my->{param} ; 181               182 0           my $tableName = $param->{id} ; 183 0           my $function = qq[\$("#$tableName").tableSorter({] . "\n" ; 184 0           my @lines ; 185 0           for my $name (@names) { 186 0           my $value = $param->{$name} ; 187 0 0         next unless defined $value ; 188 0 0         if (ref($value) eq 'ARRAY') { 189 0           my $values = join ',', map { "'" . $_ . "'" } @$value ;   0             190 0           push @lines, " $name: [$values]" ; 191 0           next ; 192             } 193 0           push @lines," $name: '$param->{$name}'" ; 194             } 195 0           my $lines = join(",\n",@lines) ; 196 0           $function .= $lines ; 197 0           $function .= "});\n" ; 198 0           return $function ; 199             } 200             1; 201               202               203               204             =head1 NAME 205               206             JQuery::TableSorter - The JQuery TableSorter 207               208             =head1 SYNOPSIS 209               210             use JQuery ; 211             use JQuery::TableSorter ; 212               213             # define JQuery 214             my $jquery = new JQuery ; 215               216               217             # Create data for the table 218             my $data = [['Id','Total','Ip','Time','US Short Date','US Long Date'], 219             ['66672', '$22.79','172.78.200.124','08:02','12-24-2000','Jul 6, 2006 8:14 AM'], 220             ['66672','$2482.79','172.78.200.124','15:10','12-12-2001','Jan 6, 2006 8:14 AM'], 221             ['66672', '$22.79','172.78.200.124','08:02','12-24-2000','Jul 6, 2006 8:14 AM'], 222             ['66672','$2482.79','172.78.200.124','15:10','12-12-2001','Jan 6, 2006 8:14 AM'] 223             ] ; 224               225             $jquery->add_css(new JQuery::CSS( hash => { 226             '#table1' => {width => '900px', 'font-size' => '15px'} 227             })) ; 228               229             # Create a TableSorter, add it to JQuery, and get the result as HTML 230             my $tableHTML = JQuery::TableSorter->new(id => 'table1', 231             addToJQuery => $jquery, 232             data => $data, 233             dateFormat=>'dd/mm/yyyy', 234             sortColumn => 'Total', 235             sortClassAsc => 'headerSortUp', 236             sortClassDesc => 'headerSortDown', 237             headerClass => 'header', 238             stripingRowClass => ['even','odd'], 239             stripRowsOnStartUp => 'true', 240             #highlightClass => 'highlight', 241             disableHeader => 'true' 242             ))->HTML ; 243             # Get the JQuery code 244             my $code = $jquery->get_jquery_code ; 245               246             # Get the CSS 247             my $css = $jquery->get_css ; 248               249             # All that needs to be done is to place the html, jquery code and css in a template 250               251             =head1 DESCRIPTION 252               253             This module defines a table which is sorted when the user clicks the 254             header. There are two builtin styles, to use them you have to set: 255               256             headerClass => 'header', 257             sortClassAsc => 'headerSortUp', 258             sortClassDesc => 'headerSortDown', 259               260             or 261               262             headerClass => 'headerSimple', 263             sortClassAsc => 'headerSimpleSortUp', 264             sortClassDesc => 'headerSimpleSortDown', 265               266             To see them, run the jquery_tablesorter1.pl and jquery_tablesorter2.pl examples. 267               268             In any event, you can always add CSS afterwards to change the appearance. 269               270             This module is based on the JQuery TableSorter. Definitive information 271             for TableSorter can be found at L. Examples can be found at 272             L. 273               274             =head1 PARAMETERS 275             These are the parameters that new can take. 276               277             =over 278               279             =item id 280             id - css id - mandatory 281               282             =item data 283             data - a double array containing the data - mandatory 284               285             =item headerClass 286             headerClass - the name of the css class defining the header 287               288             =item dateFormat 289             dateFormat - format to display the date 'dd/mm/yyyy' 290               291             =item sortColumn 292             sortColumn - String of the name of the column to sort by. 293               294             =item sortClassAsc 295             sortClassAsc - headerSortUp - Class name for ascending sorting action to header 296               297             =item sortClassDesc 298             sortClassDesc - headerSortDown - Class name for descending sorting action to header 299               300             =item headerClass 301             headerClass -header Class name for headers (th's) 302               303             =item highlightClass 304             highlightClass - highlight - class name for sort column highlighting. 305               306             =item headerClass 307             headerClass - header Class name for headers (th's)=back 308               309             =item stripingRowClass 310             stripingRowClass - class 311               312             =item disableHeader 313             disableHeader - true/false 314               315             =back 316               317             =head1 FUNCTIONS 318               319             =over 320               321             =item HTML 322               323             Get the HTML text for the object 324               325             =item new 326               327             Instantiate the object 328               329             =back 330               331               332               333             =head1 AUTHOR 334               335             Peter Gordon, C<< >> 336               337             =head1 BUGS 338               339             Please report any bugs or feature requests to 340             C, or through the web interface at 341             L. 342             I will be notified, and then you'll automatically be notified of progress on 343             your bug as I make changes. 344               345             =head1 SUPPORT 346               347             You can find documentation for this module with the perldoc command. 348               349             perldoc JQuery 350               351             You can also look for information at: 352               353             =over 4 354               355             =item * AnnoCPAN: Annotated CPAN documentation 356               357             L 358               359             =item * CPAN Ratings 360               361             L 362               363             =item * RT: CPAN's request tracker 364               365             L 366               367             =item * Search CPAN 368               369             L 370               371             =back 372               373             =head1 ACKNOWLEDGEMENTS 374               375             =head1 COPYRIGHT & LICENSE 376               377             Copyright 2007 Peter Gordon, all rights reserved. 378               379             This program is free software; you can redistribute it and/or modify it 380             under the same terms as Perl itself. 381               382             =cut 383               384             1; # End of JQuery::TableSorter 385               386