File Coverage

blib/lib/JQuery/Tabs.pm
Criterion Covered Total %
statement 9 87 10.3
branch 0 28 0.0
condition 0 6 0.0
subroutine 3 10 30.0
pod 3 7 42.8
total 15 138 10.8


line stmt bran cond sub pod time code
1             package JQuery::Tabs ;
2              
3             our $VERSION = '1.00';
4              
5 1     1   1488 use warnings;
  1         2  
  1         34  
6 1     1   5 use strict;
  1         2  
  1         63  
7 1     1   961 use CGI::Util ;
  1         2554  
  1         1213  
8              
9             sub new {
10 0     0 1   my $this = shift;
11 0   0       my $class = ref($this) || $this;
12 0           my $my ;
13 0           %{$my->{param}} = @_ ;
  0            
14              
15 0 0         $my->{param}{texts} = [] if ! defined $my->{param}{texts} ;
16 0 0         $my->{param}{tabs} = [] if ! defined $my->{param}{tabs} ;
17 0 0         $my->{param}{remote} = 0 if ! defined $my->{param}{remote} ;
18              
19 0 0         die "No id defined for Tabs" unless $my->{param}{id} =~ /\S/ ;
20              
21 0           bless $my, $class;
22 0 0         if ($my->{param}{css}) {
23 0           push @{$my->{css}},$my->{param}{css} ;
  0            
24             }
25 0           my $jquery = $my->{param}{addToJQuery} ;
26 0 0         $my->{param}{history} = 0 unless defined $my->{param}{history} ;
27 0           my $jqueryDir = $jquery->getJQueryDir ;
28 0           $my->{fileDir} = "$jqueryDir/plugins" ;
29              
30 0           $my->add_to_jquery ;
31 0           return $my ;
32             }
33              
34             sub add_to_jquery {
35 0     0 0   my $my = shift ;
36 0           my $jquery = $my->{param}{addToJQuery} ;
37 0 0         if (defined $jquery) {
38 0           $jquery->add($my) ;
39             }
40             }
41              
42             sub id {
43 0     0 1   my $my = shift ;
44 0           return $my->{param}{id} ;
45             }
46              
47              
48             sub packages_needed {
49 0     0 0   my $my = shift ;
50 0           my @packages = ('tabs/jquery.tabs.js') ;
51 0 0         push @packages,'history_remote/jquery.history_remote.js' if $my->{param}{history} ;
52 0           return @packages ;
53             }
54              
55             sub get_css {
56 0     0 0   my $my = shift ;
57              
58 0           my $id = $my->id ;
59              
60 0           my $cssFile1 = "$my->{fileDir}/tabs/tabs.css" ;
61 0           my $cssFile2 = '' ;
62             # There is apparently a problem with IE 6.0
63 0 0 0       if (defined $ENV{HTTP_USER_AGENT} and $ENV{HTTP_USER_AGENT} =~ /MSIE\s*6/) {
64 0           $cssFile2 = "$my->{fileDir}/tabs/tabs_ie.css" ;
65             }
66 0           my $css1 = new JQuery::CSS(file => $cssFile1) ;
67 0           my $css2 = '' ;
68 0 0         $css2 = new JQuery::CSS(file => $cssFile2) unless $cssFile2 eq '' ;
69              
70 0           my $css3Text =<<'EOD';
71             .tabs-loading span {
72             padding: 0 0 0 20px;
73             background: url(PLUGIN_DIR/tabs/loading.gif) no-repeat 0 50%;
74             }
75             EOD
76              
77 0           $css3Text =~ s!PLUGIN_DIR!$my->{fileDir}!g ;
78            
79 0           my $css3 = new JQuery::CSS(text => $css3Text) ;
80 0 0         if (!$my->{param}{spinner}) {
81 0           $css3 = '' ;
82             }
83              
84 0           return [$css1,$css2,$css3] ;
85             }
86              
87             sub HTML {
88 0     0 1   my $my = shift ;
89 0           my $id = $my->id ;
90 0           my @tabs = @{$my->{param}{tabs}} ;
  0            
91 0           my @texts = @{$my->{param}{texts}} ;
  0            
92 0           my $n = 0 ;
93 0           my $html = qq[
\n
    \n] ;
94 0           my $headerId = $n ;
95 0           for my $h (@tabs) {
96 0           $n ++ ;
97 0           my $href = qq[] ;
98 0           my $tabLabel = CGI::Util::escape($h) ;
99 0 0         $href = qq[] if $my->{param}{remote} ;
100 0           $html .= qq[
  • $href] . $h . qq[
  • \n] ;
    101             }
    102 0           $html .= "\n" ;
    103 0           $n = 0 ;
    104 0           for my $text (@texts) {
    105 0           $n ++ ;
    106 0           $html .= qq[
    \n$text\n
    \n] ;
    107             }
    108 0           $html .= "\n" ;
    109 0           return $html ;
    110             }
    111              
    112             sub get_jquery_code {
    113 0     0 0   my $my = shift ;
    114 0           my $id = $my->id ;
    115 0           my $remoteProgram = $my->{param}{remoteProgram} ;
    116 0 0         return '' unless $id =~ /\S/ ;
    117            
    118 0           my $function =<<'EOD';
    119            
    120             $('#ID').tabs({PARAMS});
    121             EOD
    122 0           $function =~ s/ID/$id/g ;
    123 0           my @params = () ;
    124 0           for (qw[remote defaultTab fxFade fxSpeed fxAutoHeight bookmarkable navClass selectedClass disabledClass containerClass loadingClass]) {
    125 0 0         push @params, "$_: $my->{param}{$_}" if defined $my->{param}{$_} ;
    126             }
    127              
    128 0           my $params = join(',',@params) ;
    129 0           $function =~ s/PARAMS/$params/ ;
    130              
    131 0           return $function ;
    132             }
    133              
    134              
    135             =head1 NAME
    136              
    137             JQuery::Tabs - Have tabs to see different pages
    138              
    139             =head1 SYNOPSIS
    140              
    141             my @tabs = ("tab 1","tab 2","tab 3","tab 4") ;
    142             my @texts = ("line 1","line 2","line 3","line4") ;
    143              
    144             my $tab = JQuery::Tabs->new(id => 'myTab',
    145             tabs => \@tabs,
    146             texts => \@texts,
    147             addToJQuery => $jquery,
    148             ) ;
    149              
    150             my $tab = JQuery::Tabs->new(id => 'myTab',
    151             tabs => \@tabs,
    152             remote => 'true', # no texts needed if remote
    153             remoteProgram => '/cgi-bin/jquery_tabs_results.pl',
    154             rm => 'myMode',
    155             addToJQuery => $jquery,
    156             spinner => 1,
    157             ) ;
    158             my $html = $tab->HTML ;
    159              
    160             =head1 DESCRIPTION
    161              
    162             Allow the user to see different pages using tabs. For an example of
    163             how it looks, see L.
    164              
    165             This module sets up tabs for different pages. The HTML can be supplied
    166             directly, or the page can be updated remotely. When used remotely, the
    167             program returns the run mode parameter, rm, as well as the parameter
    168             tab, which contains the text in the tab header.
    169              
    170             In remote mode, taconite is not used to refresh the page. All that is
    171             expected is a normal html. If you are using CGI, something like this
    172             is expected:
    173              
    174             use CGI ;
    175             my $q = new CGI ;
    176             print $q->header(-type=>'text/html');
    177             print $env ;
    178              
    179             =head1 FUNCTIONS
    180              
    181             =over
    182              
    183             =item new
    184              
    185             Instantiate the object
    186              
    187             =item HTML
    188              
    189             Get the HTML for the object
    190              
    191             =back
    192              
    193             =head2 Parameters
    194              
    195             =over 4
    196              
    197             =item id
    198              
    199             This is the id of the tab
    200              
    201             =item addToJQuery
    202              
    203             The JQuery object to be added to.
    204              
    205             =item tabs
    206              
    207             This is a list of tab names for the headers
    208              
    209             =item texts
    210              
    211             This is a list of HTML texts needed for each tab. If the page is going
    212             to be updated remotely, this is not needed.
    213              
    214             =item rm
    215              
    216             The run mode that will be returned to the server.
    217              
    218             =item spinner
    219              
    220             When updated remotely, this add a little spinning wheel to the tab to
    221             show that it is being updated.
    222              
    223             =item bookmarkable
    224              
    225             Allow the back button in the browser to give the expected results.
    226              
    227             =back
    228              
    229             =head1 AUTHOR
    230              
    231             Peter Gordon, C<< >>
    232              
    233             =head1 BUGS
    234              
    235             Please report any bugs or feature requests to
    236             C, or through the web interface at
    237             L.
    238             I will be notified, and then you'll automatically be notified of progress on
    239             your bug as I make changes.
    240              
    241             =head1 SUPPORT
    242              
    243             You can find documentation for this module with the perldoc command.
    244              
    245             perldoc JQuery
    246              
    247             You can also look for information at:
    248              
    249             =over 4
    250              
    251             =item * AnnoCPAN: Annotated CPAN documentation
    252              
    253             L
    254              
    255             =item * CPAN Ratings
    256              
    257             L
    258              
    259             =item * RT: CPAN's request tracker
    260              
    261             L
    262              
    263             =item * Search CPAN
    264              
    265             L
    266              
    267             =back
    268              
    269             =head1 ACKNOWLEDGEMENTS
    270              
    271             =head1 COPYRIGHT & LICENSE
    272              
    273             Copyright 2007 Peter Gordon, all rights reserved.
    274              
    275             This program is free software; you can redistribute it and/or modify it
    276             under the same terms as Perl itself.
    277              
    278             =cut
    279              
    280             1; # End of JQuery::Tabs
    281              
    282