package JQuery::Accordion ; our $VERSION = '1.00'; use warnings; use strict; sub new { my $this = shift; my $class = ref($this) || $this; my $my ; $my->{param}{headers} = [] ; $my->{param}{texts} = [] ; %{$my->{param}} = @_ ; die "No id defined for Accordion" unless $my->{param}{id} =~ /\S/ ; bless $my, $class; if ($my->{param}{css}) { push @{$my->{css}},$my->{param}{css} ; } $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 ; return ('interface/interface.js') ; } sub get_css { my $my = shift ; my $id = $my->id ; my $panelWidth = $my->{param}{panelWidth} || '400px' ; my $panelHeight = $my->{param}{panelHeight} || '200px' ; # The position was absolute my $css=<id ; my $html = qq[
\n] ; my @headers = @{$my->{param}{headers}} ; my @texts = @{$my->{param}{texts}} ; my $n = -1 ; for my $h (@headers) { $n ++ ; my $t = $texts[$n] ; $html .= qq[
$h
\n] ; $html .= qq[
$t
\n] ; } $html .= qq[
] ; } sub get_jquery_code { my $my = shift ; my $id = $my->id ; my $remoteProgram = $my->{param}{remoteProgram} ; return '' unless $id =~ /\S/ ; my $function =<<'EOD'; $('#ID').Accordion({headerSelector : 'dt', panelSelector : 'dd', activeClass : 'IDActive', hoverClass : 'IDHover', panelHeight : PANEL_HEIGHT, speed : 300 } ); EOD my $panelHeight = $my->{param}{panelHeight} || 200 ; $function =~ s/PANEL_HEIGHT/$panelHeight/ ; $function =~ s/ID/$id/g ; return $function ; } =head1 NAME JQuery::Accordion - produce an accordion effect =head1 SYNOPSIS my @headers = ("header 1","header 2","header 3","header4") ; my @texts = ("line 1","line 2","line 3","line4") ; my $accordion = JQuery::Accordion->new(id => 'myAccordion', headers => \@headers, texts => \@texts, panelHeight => 200, panelWidth => '400px' addToJQuery => $jquery, ) ; # Change css defaults - add at the bottom $jquery->add_css_last(new JQuery::CSS( hash => {'#myAccordion' => {width => '600px'}})) ; my $html = $accordion->HTML ; =head1 DESCRIPTION Add an accordion effect. For an example of how it looks, see L. You will also be wondering how to change colours etc. There are a number of CSS items that are defined, and taht can be changed. Each accordion needs an id. So the CSS paragraphs that are created are: #id #id dt #id dd #id dt.idHover and #id dt.idActive =head1 FUNCTIONS =over =item HTML Get the HTML for the object =item new Instantiate the object =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::Accordion