package JQuery::Tabs ;
our $VERSION = '1.00';
use warnings;
use strict;
use CGI::Util ;
sub new {
my $this = shift;
my $class = ref($this) || $this;
my $my ;
%{$my->{param}} = @_ ;
$my->{param}{texts} = [] if ! defined $my->{param}{texts} ;
$my->{param}{tabs} = [] if ! defined $my->{param}{tabs} ;
$my->{param}{remote} = 0 if ! defined $my->{param}{remote} ;
die "No id defined for Tabs" unless $my->{param}{id} =~ /\S/ ;
bless $my, $class;
if ($my->{param}{css}) {
push @{$my->{css}},$my->{param}{css} ;
}
my $jquery = $my->{param}{addToJQuery} ;
$my->{param}{history} = 0 unless defined $my->{param}{history} ;
my $jqueryDir = $jquery->getJQueryDir ;
$my->{fileDir} = "$jqueryDir/plugins" ;
$my->add_to_jquery ;
return $my ;
}
sub add_to_jquery {
my $my = shift ;
my $jquery = $my->{param}{addToJQuery} ;
if (defined $jquery) {
$jquery->add($my) ;
}
}
sub id {
my $my = shift ;
return $my->{param}{id} ;
}
sub packages_needed {
my $my = shift ;
my @packages = ('tabs/jquery.tabs.js') ;
push @packages,'history_remote/jquery.history_remote.js' if $my->{param}{history} ;
return @packages ;
}
sub get_css {
my $my = shift ;
my $id = $my->id ;
my $cssFile1 = "$my->{fileDir}/tabs/tabs.css" ;
my $cssFile2 = '' ;
# There is apparently a problem with IE 6.0
if (defined $ENV{HTTP_USER_AGENT} and $ENV{HTTP_USER_AGENT} =~ /MSIE\s*6/) {
$cssFile2 = "$my->{fileDir}/tabs/tabs_ie.css" ;
}
my $css1 = new JQuery::CSS(file => $cssFile1) ;
my $css2 = '' ;
$css2 = new JQuery::CSS(file => $cssFile2) unless $cssFile2 eq '' ;
my $css3Text =<<'EOD';
.tabs-loading span {
padding: 0 0 0 20px;
background: url(PLUGIN_DIR/tabs/loading.gif) no-repeat 0 50%;
}
EOD
$css3Text =~ s!PLUGIN_DIR!$my->{fileDir}!g ;
my $css3 = new JQuery::CSS(text => $css3Text) ;
if (!$my->{param}{spinner}) {
$css3 = '' ;
}
return [$css1,$css2,$css3] ;
}
sub HTML {
my $my = shift ;
my $id = $my->id ;
my @tabs = @{$my->{param}{tabs}} ;
my @texts = @{$my->{param}{texts}} ;
my $n = 0 ;
my $html = qq[
\n
\n" ;
$n = 0 ;
for my $text (@texts) {
$n ++ ;
$html .= qq[
\n$text\n
\n] ;
}
$html .= "
\n" ;
return $html ;
}
sub get_jquery_code {
my $my = shift ;
my $id = $my->id ;
my $remoteProgram = $my->{param}{remoteProgram} ;
return '' unless $id =~ /\S/ ;
my $function =<<'EOD';
$('#ID').tabs({PARAMS});
EOD
$function =~ s/ID/$id/g ;
my @params = () ;
for (qw[remote defaultTab fxFade fxSpeed fxAutoHeight bookmarkable navClass selectedClass disabledClass containerClass loadingClass]) {
push @params, "$_: $my->{param}{$_}" if defined $my->{param}{$_} ;
}
my $params = join(',',@params) ;
$function =~ s/PARAMS/$params/ ;
return $function ;
}
=head1 NAME
JQuery::Tabs - Have tabs to see different pages
=head1 SYNOPSIS
my @tabs = ("tab 1","tab 2","tab 3","tab 4") ;
my @texts = ("line 1","line 2","line 3","line4") ;
my $tab = JQuery::Tabs->new(id => 'myTab',
tabs => \@tabs,
texts => \@texts,
addToJQuery => $jquery,
) ;
my $tab = JQuery::Tabs->new(id => 'myTab',
tabs => \@tabs,
remote => 'true', # no texts needed if remote
remoteProgram => '/cgi-bin/jquery_tabs_results.pl',
rm => 'myMode',
addToJQuery => $jquery,
spinner => 1,
) ;
my $html = $tab->HTML ;
=head1 DESCRIPTION
Allow the user to see different pages using tabs. For an example of
how it looks, see L.
This module sets up tabs for different pages. The HTML can be supplied
directly, or the page can be updated remotely. When used remotely, the
program returns the run mode parameter, rm, as well as the parameter
tab, which contains the text in the tab header.
In remote mode, taconite is not used to refresh the page. All that is
expected is a normal html. If you are using CGI, something like this
is expected:
use CGI ;
my $q = new CGI ;
print $q->header(-type=>'text/html');
print $env ;
=head1 FUNCTIONS
=over
=item new
Instantiate the object
=item HTML
Get the HTML for the object
=back
=head2 Parameters
=over 4
=item id
This is the id of the tab
=item addToJQuery
The JQuery object to be added to.
=item tabs
This is a list of tab names for the headers
=item texts
This is a list of HTML texts needed for each tab. If the page is going
to be updated remotely, this is not needed.
=item rm
The run mode that will be returned to the server.
=item spinner
When updated remotely, this add a little spinning wheel to the tab to
show that it is being updated.
=item bookmarkable
Allow the back button in the browser to give the expected results.
=back
=head1 AUTHOR
Peter Gordon, C<< >>
=head1 BUGS
Please report any bugs or feature requests to
C, or through the web interface at
L.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc JQuery
You can also look for information at:
=over 4
=item * AnnoCPAN: Annotated CPAN documentation
L
=item * CPAN Ratings
L
=item * RT: CPAN's request tracker
L
=item * Search CPAN
L
=back
=head1 ACKNOWLEDGEMENTS
=head1 COPYRIGHT & LICENSE
Copyright 2007 Peter Gordon, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1; # End of JQuery::Tabs