File Coverage

blib/lib/Mojolicious/Plugin/JQuery.pm
Criterion Covered Total %
statement 39 39 100.0
branch 8 10 80.0
condition 6 7 85.7
subroutine 9 9 100.0
pod 3 3 100.0
total 65 68 95.5


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::JQuery;
2 4     4   3270 use File::Find;
  4         8  
  4         276  
3 4     4   19 use File::Basename ();
  4         8  
  4         139  
4              
5             =head1 NAME
6              
7             Mojolicious::Plugin::JQuery - Mojolicious + http://jquery.com/
8              
9             =head1 VERSION
10              
11             2.14002
12              
13             =head1 DESCRIPTION
14              
15             L push L
16             JavaScript files into your project.
17              
18             This is done using L.
19              
20             =head1 SYNOPSIS
21              
22             =head2 Mojolicious::Lite
23              
24             use Mojolicious::Lite;
25             plugin "JQuery";
26             get "/" => "index";
27             app->start;
28              
29             =head2 Mojolicious
30              
31             sub startup {
32             my $self = shift;
33              
34             $self->plugin("JQuery");
35             }
36              
37             =head2 Template
38              
39            
40            
41            
42            
43             class demo
44            
54             %= asset "jquery.js"
55            
56            
57            
div class="notMe"
58            
div class="myClass"
59             span class="myClass"
60            
63            
64            
65              
66             =head1 STATIC FILE STRUCTURE
67              
68             Following the list of the static files of this project. All js are uncompressed
69             for developing.
70              
71             js/jquery-1.11.3.js
72             js/jquery-2.1.4.js
73             js/jquery-migrate-1.2.1.js
74              
75             =head1 Versions installed
76              
77             This module ship the following version of JQuery and JQuery Migrate:
78              
79             jquery-1.11.3.js
80             jquery-2.1.4.js
81             jquery-migrate-1.2.1.js
82              
83             =over 4
84              
85             =item * jquery-migrate
86              
87             The JQuery migrate plugin allow to use old plugin restoring the deprecated functions
88             on JQuery 2.x. You can use it simply enabling the migrate option on this plugin.
89              
90             =back
91              
92             =cut
93              
94 4     4   20 use Mojo::Base 'Mojolicious::Plugin';
  4         6  
  4         31  
95 4     4   804 use File::Spec::Functions 'catdir';
  4         7  
  4         230  
96 4     4   23 use Cwd ();
  4         6  
  4         2410  
97              
98             our $VERSION = '2.14002';
99              
100             =head1 METHODS
101              
102             =head2 asset_path
103              
104             $path = Mojolicious::Plugin::JQuery->asset_path();
105             $path = $self->asset_path();
106              
107             Returns the base path to the assets bundled with this module.
108              
109             =cut
110              
111             sub asset_path {
112 8     8 1 50 my $class = $_;
113 8         1108 my $path = Cwd::abs_path(__FILE__);
114              
115 8         39 $path =~ s!\.pm$!!;
116              
117 8         39 return $path;
118             }
119              
120             =head2 register
121              
122             $app->plugin(
123             JQuery => {
124             migrate => $bool, # default false
125             jquery_1 => $bool # default false (prevent migrate inclusion)
126             },
127             );
128              
129             Default values:
130              
131             =over 4
132              
133             =item * migrate
134              
135             This will include the last JQuery Migrate version shipped with this plugin.
136             Set this to 1 if you want to include this js.
137              
138             =item * jquery_1
139              
140             This will include the last 1.x.x JQuery version shipped with this plugin.
141             Set this to 1 if you want to use this version.
142             (This option will prevent JQuery Migrate inclusion)
143              
144             =back
145              
146             =cut
147              
148             sub register {
149 4     4 1 160 my ( $self, $app, $config ) = @_;
150 4         10 my $file_type = "js";
151              
152 4 50       7 $app->plugin('AssetPack') unless eval { $app->asset };
  4         64  
153              
154 4   100     128844 $config->{migrate} //= 0;
155 4   100     41 $config->{jquery_1} //= 0;
156              
157 4         15 my $location = "/" . $file_type . "/";
158             my @files
159 4         21 = $self->find_files( [ $self->asset_path . '/' . $file_type ],
160             $file_type );
161              
162 4         11 push @{ $app->static->paths }, $self->asset_path;
  4         22  
163             $app->asset(
164             'jquery.js' => $config->{jquery_1}
165             ? ( $location . ( grep /^jquery-1\.(\d+)\.(\d+)\.js$/, @files )[0] )
166             : ( $location . ( grep /^jquery-2\.(\d+)\.(\d+)\.js$/, @files )[0] ),
167             $config->{migrate} && !( $config->{jquery_1} )
168 4 100 66     97 ? ( $location
    100          
169             . ( grep /^jquery-migrate-(\d+)\.(\d+)\.(\d+)\.js$/, @files )[0]
170             )
171             : (),
172             );
173              
174             }
175              
176             =head2 find_files
177              
178             @files = Mojolicious::Plugin::JQuery->find_files($dir,$type);
179             @files = $self->find_files($dir,$type);
180              
181             Search a given file type in all directories of the array.
182              
183             Required parameters:
184              
185             =over 4
186              
187             =item * $dir
188              
189             This must be a reference to array of directories where we are looking for
190             our files.
191              
192             =item * $type
193              
194             This is a string of the file's extension that we are looking for.
195              
196             =back
197              
198             =cut
199              
200             sub find_files {
201 4     4 1 9 my $self = shift;
202 4         11 my $dir = shift;
203 4         8 my $type = shift;
204 4         9 my @files;
205             find(
206             { follow => 1,
207             no_chdir => 1,
208             wanted => sub {
209 16 100   16   894 return unless -f;
210 12 50       958 push @files, File::Basename::basename($_) if $_ =~ /\.$type$/;
211             },
212             },
213 4         31 @{$dir},
  4         665  
214             );
215 4         32 return @files;
216             }
217              
218             =head1 CREDITS
219              
220             L is an opensource project with
221             a lot of L, thank you.
222              
223             Thanks even to L because this plugin is widely based
224             on his L.
225              
226             =head1 LICENSE
227              
228             JQuery is licensed under L
229              
230             This code is licensed under Artistic License version 2.0.
231              
232             =head1 AUTHOR
233              
234             Ferro - C
235              
236             =cut
237              
238             1;