package Template::Plugin::Tooltip; =pod =head1 NAME Template::Plugin::Tooltip - Template Toolkit plugin for HTML::Tooltip::JavaScript =head1 SYNOPSIS Load the tooltip generator. Params are passed straight to to HTML::Tooltip::JavaScript->new [% USE Tooltip( 'javascript_dir', '../../../static/js/', 'options', bordercolor => "#000000", title => '', ) %] Add a tooltip to a link Link content =head1 DESCRIPTION Template::Plugin::Tooltip is a Template Toolkit hook to the marvelous L module. The first version was written in 30 minutes following the talk on HTML::Tooltip::Javascript at the Open Source Developers Conference, just after its initial release. =head2 API Overview This module is very much just a thin layer over the top of the HTML::Tooltip::JavaScript API, and you should probably go read and understand its API before using this module. To summarise VERY briefly, when you load in the plugin, the params go as params to the H::T::Javascript C constructor, with the new Tooltip object stored internally. When you create a tooltip, the HTML content and parameters are passed directly to H::T::Javascript C method. =head2 Loading the Tooltip Generator To load the tooltip generator with the default options, you can simple do the following. [% USE Tooltip %] In the same way you pass params to the HTML::Tooltip::Javascript constructor, you can also pass params when loading in the Tooltip plugin. [% USE Tooltip('param', 'value') %] =head2 Using the Tooltip Generator L provides one simple method through which you generate all the different tooltips. In Template::Plugin::Tooltip, you just use the loaded plugin directly. [% Tooltip( 'This is my plain tooltip' ) %] This only generates the Javascript tag properties, so this needs to be used within a tag, like an anchor tag. item The first param is literal HTML content, and you can provide any additional parameters you want for the tooltip, as you would do create the tooltip directly. item =head2 Initialising the Tooltip Library The one additional step you will need to do is load in the tooltip JavaScript library that drives the whole thing. To do this, simple add the following to the end of the page, or to the EheadE section of your HTML document. [% Tooltip() %] =head2 Use as a Filter TO BE COMPLETED =cut use 5.005; use strict; use Scalar::Util (); use Template::Plugin (); use HTML::Tooltip::Javascript (); use vars qw{$VERSION @ISA}; BEGIN { $VERSION = '1.08'; @ISA = 'Template::Plugin'; } # Inlined copy of Params::Util::_INSTANCE sub _INSTANCE ($$) { (Scalar::Util::blessed($_[0]) and $_[0]->isa($_[1])) ? $_[0] : undef; } ##################################################################### # Constructor sub new { my $class = ref $_[0] ? ref shift : shift; my $Context = _INSTANCE(shift, 'Template::Context') or $class->error('Tooltip constructor called without Template::Context'); # Create a new ::Tooltip object, passing on params my $Tooltip = HTML::Tooltip::Javascript->new( @_ ) or $class->error('Bad params to Tooltip generator constructor'); # Create our TT interface object my $self = bless { Tooltip => $Tooltip, }, $class; # Wrap in the closure subroutine sub { defined $_[0] ? $self->tooltip(@_) : $self->head }; } sub tooltip { my $self = shift; # If we don't get any parameters, we want a direct handle to the # object so that we can call init. return $self unless @_; # Pass everything straight through to the HTML::Tooltip::JavaScript # object we created earlier. my ($html, %params) = @_; $self->{Tooltip}->tooltip( $html, \%params ); } sub head { $_[0]->at_end; } sub at_end { $_[0]->{Tooltip}->at_end; } 1; =pod =head1 SUPPORT Bugs should be submitted via the CPAN bug tracker, located at L For other issues, or commercial enhancement or support, contact the author.. =head1 AUTHOR Adam Kennedy Eadamk@cpan.orgE =head1 ACKOWLEDGEMENTS Thank you to Phase N Australia for permitting the open sourcing and release of this distribution as a spin-off from a commercial project. =head1 COPYRIGHT Copyright 2004 - 2008 Adam Kennedy. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. =cut