Catalyst-View-Component-jQuery
view release on metacpan or search on metacpan
examples/README view on Meta::CPAN
1234567891011This example requires:
CatalystX::Menu::Suckerfish - used to generate a Superfish navbar from test application's action attributes.
Read the begin action in TestApp/Controller/Root.pm to see how the jQuery wrapper instance
(JavaScript::Framework::jQuery::Plugin::Superfish) is instantiated so that its assets
will be inserted into the template (TestApp/root/src/
index
.tt2).
Run the example
with
:
perl script/testapp_server.pl
examples/TestApp/Controller/Root.pm view on Meta::CPAN
12345678910111213141516171819202122232425262728293031package
TestApp::Controller::Root;
use
strict;
use
warnings;
use
Catalyst;
__PACKAGE__->config(
namespace
=>
q{}
);
sub
begin :Private {
my
(
$self
,
$c
) =
@_
;
my
$suckerfish
= CatalystX::Menu::Suckerfish->new(
context
=>
$c
,
ul_id
=>
'navmenu'
,
ul_class
=>
'sf-menu'
,
menupath_attr
=>
'MenuPath'
,
menutitle_attr
=>
'MenuTitle'
,
text_container
=> {
element
=>
'span'
,
attrs
=> {
class
=>
'sf-label'
},
},
add_nodes
=> [
{
menupath
=>
'/Other sites/Google'
,
menutitle
=>
'Google'
,
},
examples/TestApp/Controller/Root.pm view on Meta::CPAN
54555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
$c
->stash(
menu
=>
$suckerfish
->output);
}
sub
end :Private {
my
(
$self
,
$c
) =
@_
;
$c
->forward(
'TestApp::View::TT'
)
unless
$c
->res->body;
}
sub
index
:Path
:MenuPath(
'/Home'
)
:MenuTitle(
'Home Page'
)
{
my
(
$self
,
$c
) =
@_
;
}
sub
dostuff
:Local
:MenuPath(
'/Stuff'
)
:MenuTitle(
'Do Stuff'
)
{
my
(
$self
,
$c
) =
@_
;
$c
->stash->{template} =
'index.tt2'
;
$c
->forward(
'index'
);
}
sub
prettypix
:Local
:MenuPath(
'/Pretty/Pictures'
)
:MenuTitle(
'See pretty pictures'
)
{
my
(
$self
,
$c
) =
@_
;
$c
->stash->{template} =
'index.tt2'
;
$c
->forward(
'index'
);
}
sub
printtemplate
:Local
:MenuPath(
'/How it works/The template'
)
:MenuTitle(
'The template'
)
{
my
(
$self
,
$c
) =
@_
;
my
$text
;
{
local
(
@ARGV
, $/) =
'TestApp/root/src/index.tt2'
;
$text
= <> }
$c
->res->content_type(
'text/plain'
);
$c
->res->body(
$text
);
}
1;
examples/TestApp/root/src/index.tt2 view on Meta::CPAN
4567891011121314151617181920212223242526272829303132333435<head>
<title>Catalyst::View::Component::jQuery Demo</title>
[% jquery.link_elements %]
[% jquery.script_src_elements %]
</head>
<body>
<h2>Catalyst::View::Component::jQuery Demo</h2>
<p>
Navigation menu generated automatically from Catalyst application action attributes (MenuPath and MenuTitle).
</p>
<div style=
"float: left"
>
[% menu %]
</div>
<p style=
"clear: both"
>
This page demonstrates the
use
of <a href=
"http://search.cpan.org/perldoc?Catalyst::View::Component::jQuery"
>Catalyst::View::Component::jQuery</a>
to make a
"jquery"
method available in your TT templates.
</p>
<p><a href=
"http://search.cpan.org/perldoc?CatalystX::Menu::Suckerfish"
>CatalystX::Menu::Suckerfish</a>
is used to generate a Suckerfish-style menu from action attributes
defined
in the TestApp application.
Modify the MenuPath and MenuTitle attributes and restart the application to see how the menu is
automatically generated on-the-fly.
</p>
<p>
Running the testapp_server.pl script
with
the -r switch will automatically restart the script
if
you
want a quick way to test changes.
</p>
<p>
The following three lines in the template
the html elements required to fetch the stylesheets and
JavaScript files required by your jQuery plugins, and then the jQuery ready event.
[% stag =
"[\%"
examples/TestApp/root/static/js/superfish.js view on Meta::CPAN
10111213141516171819202122232425262728293031323334353637383940414243
*/
;(function($){
$.fn.superfish = function(op){
var sf = $.fn.superfish,
c = sf.c,
$arrow
= $([
'<span class="'
,c.arrowClass,
'"> »</span>'
].
join
(
''
)),
over = function(){
var $$ = $(this), menu = getMenu($$);
clearTimeout(menu.sfTimer);
$$.showSuperfishUl().siblings().hideSuperfishUl();
},
out = function(){
var $$ = $(this), menu = getMenu($$), o = sf.op;
clearTimeout(menu.sfTimer);
menu.sfTimer=setTimeout(function(){
o.retainPath=($.inArray($$[0],o.
$path
)>-1);
$$.hideSuperfishUl();
if
(o.
$path
.
length
&& $$.parents([
'li.'
,o.hoverClass].
join
(
''
)).
length
<1){over.call(o.
$path
);}
},o.delay);
},
getMenu = function(
$menu
){
var menu =
$menu
.parents([
'ul.'
,c.menuClass,
':first'
].
join
(
''
))[0];
sf.op = sf.o[menu.serial];
return
menu;
},
addArrow = function(
$a
){
$a
.addClass(c.anchorClass).append(
$arrow
.clone()); };
return
this.
each
(function() {
var s = this.serial = sf.o.
length
;
var o = $.extend({},sf.defaults,op);
o.
$path
= $(
'li.'
+o.pathClass,this).slice(0,o.pathLevels).
each
(function(){
lib/Catalyst/View/Component/jQuery.pm view on Meta::CPAN
9899100101102103104105106107108109110111112113114115116117In your Controller:
$c
->view(
'TT'
)->jquery->construct_plugin(
name
=>
'Superfish'
,
target_selector
=>
'#navbar'
,
);
I<
#navbar> is the document id of a UL element containing navigation links.
See L<CatalystX::Menu::Suckerfish>
for
one method
for
generating such a
UL element automatically by decorating C<action> methods
with
attributes.
In your template:
[% jquery.script_src_elements %]
[% jquery.link_elements %]
[% jquery.document_ready %]
lib/Catalyst/View/Component/jQuery.pm view on Meta::CPAN
259260261262263264265266267268269270271272273274275276277278=item * Search CPAN
=back
=cut
=head1 SEE ALSO
L<JavaScript::Framework::jQuery>, L<CatalystX::Menu::Suckerfish>, L<Moose>, L<Moose::Role>, L<Catalyst>, L<perl>
=head1 COPYRIGHT AND LICENSE
Copyright 2009 David P.C. Wollmann, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
( run in 0.443 second using v1.01-cache-2.11-cpan-87723dcf8b7 )