File Coverage

blib/lib/Bootylicious/Plugin/AjaxLibLoader.pm
Criterion Covered Total %
statement 9 40 22.5
branch 0 8 0.0
condition 0 12 0.0
subroutine 3 7 42.8
pod 1 1 100.0
total 13 68 19.1


line stmt bran cond sub pod time code
1             package Bootylicious::Plugin::AjaxLibLoader;
2 1     1   26841 use strict;
  1         4  
  1         41  
3 1     1   7 use warnings;
  1         3  
  1         32  
4 1     1   6 use base 'Mojolicious::Plugin';
  1         2  
  1         966  
5              
6             our $VERSION = '0.05';
7              
8             my %AjaxLibs = (
9             'jquery' => [
10             '1.3.2', 'http://ajax.googleapis.com/ajax/libs/jquery/%s/jquery.min.js'
11             ],
12             'jqueryui' => [
13             '1.7.2',
14             'http://ajax.googleapis.com/ajax/libs/jqueryui/%s/jquery-ui.min.js'
15             ],
16             'prototype' => [
17             '1.6.0.3',
18             'http://ajax.googleapis.com/ajax/libs/prototype/%s/prototype.js'
19             ],
20             'scriptaculous' => [
21             '1.8.2',
22             'http://ajax.googleapis.com/ajax/libs/scriptaculous/%s/scriptaculous.js'
23             ],
24             'mootools' => [
25             '1.2.3',
26             'http://ajax.googleapis.com/ajax/libs/mootools/%s/mootools-yui-compressed.js'
27             ],
28             'dojo' => [
29             '1.3.1', 'http://ajax.googleapis.com/ajax/libs/dojo/%s/dojo/dojo.xd.js'
30             ],
31             'swfobject' => [
32             '2.2', 'http://ajax.googleapis.com/ajax/libs/swfobject/%s/swfobject.js'
33             ],
34             'yui' => [
35             '2.7.0',
36             'http://ajax.googleapis.com/ajax/libs/yui/%s/build/yuiloader/yuiloader-min.js'
37             ],
38             'ext_core' => [
39             '3.0.0', 'http://ajax.googleapis.com/ajax/libs/ext-core/%s/ext-core.js'
40             ],
41             );
42              
43              
44             sub register {
45 0     0 1   my ( $self, $app, $args ) = @_;
46 0   0       $args ||= {};
47             $app->plugins->add_hook(
48             after_dispatch => sub {
49 0     0     shift; #Skip Mojolicious::Plugins obj
50 0           my $c = shift;
51 0           my ( $is_load, $libs ) = $self->_to_load( $c, $args );
52 0 0         return unless $is_load;
53 0           $c->stash( 'libs_to_load' => $libs );
54 0           my $load_html = $c->render_partial( 'ajax_load',
55             template_class => 'Bootylicious::Plugin::AjaxLibLoader' );
56 0           my $body = $c->res->body;
57 0           $body =~ s/<[hH][eE][aA][dD]>/\n$load_html\n/;
58 0           $c->res->body($body);
59             }
60              
61 0           );
62             }
63              
64             sub _to_load {
65 0     0     my $self = shift;
66 0           my $c = shift;
67 0   0       my $args = shift || {};
68 0           my $path = $c->req->url->path;
69 0           $path =~ s/^\///;
70 0           my @lib_to_load = ();
71 0           foreach my $lib ( keys %AjaxLibs ) {
72 0 0         if ( exists $args->{$lib} ) {
73 0   0       my $path_for = $args->{ $lib . '_path' } || 'all';
74 0 0 0       if ( $path_for eq 'all' or $path =~ /^(?:$path_for)/ ) {
75 0   0       push(
76             @lib_to_load,
77             {
78             'lib' => $lib,
79             'version' => $args->{ $lib . '_version' }
80             || $AjaxLibs{$lib}->[0]
81             }
82             );
83             }
84              
85             }
86             }
87              
88 0           my $is_load = scalar(@lib_to_load);
89 0 0         return () unless $is_load;
90              
91             #build libs url
92 0           foreach my $l (@lib_to_load) {
93 0           $l->{'src_url'} = $self->_build_src_url($l);
94              
95             }
96              
97 0           return ( $is_load, \@lib_to_load );
98             }
99              
100             sub _build_src_url {
101 0     0     my $self = shift;
102 0           my $data = shift;
103 0           return sprintf( $AjaxLibs{ $data->{'lib'} }->[1], $data->{'version'} );
104             }
105              
106             1;
107             __DATA__