← Index
NYTProf Performance Profile   « block view • line view • sub view »
For /usr/local/src/github.com/foswiki/core/bin/view
  Run on Sun Dec 4 17:17:59 2011
Reported on Sun Dec 4 17:26:34 2011

Filename/usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugins/JQueryPlugin.pm
StatementsExecuted 36 statements in 3.00ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.19ms2.30msFoswiki::Plugins::JQueryPlugin::::BEGIN@15Foswiki::Plugins::JQueryPlugin::BEGIN@15
111182µs9.16msFoswiki::Plugins::JQueryPlugin::::initPluginFoswiki::Plugins::JQueryPlugin::initPlugin
11132µs107µsFoswiki::Plugins::JQueryPlugin::::registerPluginFoswiki::Plugins::JQueryPlugin::registerPlugin
11128µs36µsFoswiki::Plugins::JQueryPlugin::::BEGIN@3Foswiki::Plugins::JQueryPlugin::BEGIN@3
21127µs3.64msFoswiki::Plugins::JQueryPlugin::::createPluginFoswiki::Plugins::JQueryPlugin::createPlugin
11124µs235µsFoswiki::Plugins::JQueryPlugin::::modifyHeaderHandlerFoswiki::Plugins::JQueryPlugin::modifyHeaderHandler
11119µs162µsFoswiki::Plugins::JQueryPlugin::::BEGIN@17Foswiki::Plugins::JQueryPlugin::BEGIN@17
11118µs37µsFoswiki::Plugins::JQueryPlugin::::BEGIN@4Foswiki::Plugins::JQueryPlugin::BEGIN@4
11112µs110µsFoswiki::Plugins::JQueryPlugin::::createThemeFoswiki::Plugins::JQueryPlugin::createTheme
11110µs10µsFoswiki::Plugins::JQueryPlugin::::BEGIN@14Foswiki::Plugins::JQueryPlugin::BEGIN@14
0000s0sFoswiki::Plugins::JQueryPlugin::::handleButtonFoswiki::Plugins::JQueryPlugin::handleButton
0000s0sFoswiki::Plugins::JQueryPlugin::::handleEndTabFoswiki::Plugins::JQueryPlugin::handleEndTab
0000s0sFoswiki::Plugins::JQueryPlugin::::handleEndTabPaneFoswiki::Plugins::JQueryPlugin::handleEndTabPane
0000s0sFoswiki::Plugins::JQueryPlugin::::handleJQueryIconFoswiki::Plugins::JQueryPlugin::handleJQueryIcon
0000s0sFoswiki::Plugins::JQueryPlugin::::handleJQueryIconPathFoswiki::Plugins::JQueryPlugin::handleJQueryIconPath
0000s0sFoswiki::Plugins::JQueryPlugin::::handleJQueryPluginsFoswiki::Plugins::JQueryPlugin::handleJQueryPlugins
0000s0sFoswiki::Plugins::JQueryPlugin::::handleJQueryRequireFoswiki::Plugins::JQueryPlugin::handleJQueryRequire
0000s0sFoswiki::Plugins::JQueryPlugin::::handleJQueryThemeFoswiki::Plugins::JQueryPlugin::handleJQueryTheme
0000s0sFoswiki::Plugins::JQueryPlugin::::handlePopUpWindowFoswiki::Plugins::JQueryPlugin::handlePopUpWindow
0000s0sFoswiki::Plugins::JQueryPlugin::::handleTabFoswiki::Plugins::JQueryPlugin::handleTab
0000s0sFoswiki::Plugins::JQueryPlugin::::handleTabPaneFoswiki::Plugins::JQueryPlugin::handleTabPane
0000s0sFoswiki::Plugins::JQueryPlugin::::handleToggleFoswiki::Plugins::JQueryPlugin::handleToggle
0000s0sFoswiki::Plugins::JQueryPlugin::::registerThemeFoswiki::Plugins::JQueryPlugin::registerTheme
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# See bottom of file for license and copyright information
2package Foswiki::Plugins::JQueryPlugin;
3252µs245µs
# spent 36µs (28+8) within Foswiki::Plugins::JQueryPlugin::BEGIN@3 which was called: # once (28µs+8µs) by Foswiki::Plugin::BEGIN@2.10 at line 3
use strict;
# spent 36µs making 1 call to Foswiki::Plugins::JQueryPlugin::BEGIN@3 # spent 8µs making 1 call to strict::import
4260µs256µs
# spent 37µs (18+19) within Foswiki::Plugins::JQueryPlugin::BEGIN@4 which was called: # once (18µs+19µs) by Foswiki::Plugin::BEGIN@2.10 at line 4
use warnings;
# spent 37µs making 1 call to Foswiki::Plugins::JQueryPlugin::BEGIN@4 # spent 19µs making 1 call to warnings::import
5
6=begin TML
7
8---+ package Foswiki::Plugins::JQueryPlugin
9
10Container for jQuery and plugins
11
12=cut
13
14239µs110µs
# spent 10µs within Foswiki::Plugins::JQueryPlugin::BEGIN@14 which was called: # once (10µs+0s) by Foswiki::Plugin::BEGIN@2.10 at line 14
use Foswiki::Plugins ();
# spent 10µs making 1 call to Foswiki::Plugins::JQueryPlugin::BEGIN@14
152184µs12.30ms
# spent 2.30ms (2.19+102µs) within Foswiki::Plugins::JQueryPlugin::BEGIN@15 which was called: # once (2.19ms+102µs) by Foswiki::Plugin::BEGIN@2.10 at line 15
use Foswiki::Plugins::JQueryPlugin::Plugins ();
# spent 2.30ms making 1 call to Foswiki::Plugins::JQueryPlugin::BEGIN@15
16
171143µs
# spent 162µs (19+143) within Foswiki::Plugins::JQueryPlugin::BEGIN@17 which was called: # once (19µs+143µs) by Foswiki::Plugin::BEGIN@2.10 at line 20
use vars qw(
# spent 143µs making 1 call to vars::import
18 $VERSION $RELEASE $SHORTDESCRIPTION
19 $NO_PREFS_IN_TOPIC
2022.44ms1162µs);
# spent 162µs making 1 call to Foswiki::Plugins::JQueryPlugin::BEGIN@17
21
2212µs$VERSION = '$Rev$';
2311µs$RELEASE = '4.30';
2411µs$SHORTDESCRIPTION = 'jQuery <nop>JavaScript library for Foswiki';
2511µs$NO_PREFS_IN_TOPIC = 1;
26
27=begin TML
28
29---++ initPlugin($topic, $web, $user) -> $boolean
30
31=cut
32
33
# spent 9.16ms (182µs+8.98) within Foswiki::Plugins::JQueryPlugin::initPlugin which was called: # once (182µs+8.98ms) by Foswiki::Plugin::__ANON__[/usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm:235] at line 228 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm
sub initPlugin {
3416138µs my ( $topic, $web, $user ) = @_;
35
36 # check for prerequisites
37 unless ( defined(&Foswiki::Func::addToZone) ) {
38 Foswiki::Func::writeWarning(
39 "ZonePlugin not installed/enabled...disabling JQueryPlugin");
40 return 0;
41 }
42
431107µs Foswiki::Func::registerTagHandler( 'JQTHEME', \&handleJQueryTheme );
# spent 107µs making 1 call to Foswiki::Func::registerTagHandler
44160µs Foswiki::Func::registerTagHandler( 'JQREQUIRE', \&handleJQueryRequire );
# spent 60µs making 1 call to Foswiki::Func::registerTagHandler
45155µs Foswiki::Func::registerTagHandler( 'JQICON', \&handleJQueryIcon );
# spent 55µs making 1 call to Foswiki::Func::registerTagHandler
46155µs Foswiki::Func::registerTagHandler( 'JQICONPATH', \&handleJQueryIconPath );
# spent 55µs making 1 call to Foswiki::Func::registerTagHandler
47156µs Foswiki::Func::registerTagHandler( 'JQPLUGINS', \&handleJQueryPlugins );
# spent 56µs making 1 call to Foswiki::Func::registerTagHandler
48
49 # jquery.tabpane
50157µs Foswiki::Func::registerTagHandler( 'TABPANE', \&handleTabPane );
# spent 57µs making 1 call to Foswiki::Func::registerTagHandler
51156µs Foswiki::Func::registerTagHandler( 'ENDTABPANE', \&handleEndTabPane );
# spent 56µs making 1 call to Foswiki::Func::registerTagHandler
52154µs Foswiki::Func::registerTagHandler( 'TAB', \&handleTab );
# spent 54µs making 1 call to Foswiki::Func::registerTagHandler
53156µs Foswiki::Func::registerTagHandler( 'ENDTAB', \&handleEndTab );
# spent 56µs making 1 call to Foswiki::Func::registerTagHandler
54
55 # jquery.button
56173µs Foswiki::Func::registerTagHandler( 'BUTTON', \&handleButton );
# spent 73µs making 1 call to Foswiki::Func::registerTagHandler
57
58 # jquery.popupwindow
59181µs Foswiki::Func::registerTagHandler( 'POPUPWINDOW', \&handlePopUpWindow );
# spent 81µs making 1 call to Foswiki::Func::registerTagHandler
60
61 # init plugin handler and preload default plugins
6218.27ms Foswiki::Plugins::JQueryPlugin::Plugins::init();
# spent 8.27ms making 1 call to Foswiki::Plugins::JQueryPlugin::Plugins::init
63
64 # backwards compatibility
65 if ( $Foswiki::Plugins::VERSION < 2.1 ) {
66 Foswiki::Func::setPreferencesValue( "CLEAR",
67 "<span class='foswikiClear'></span>" );
68 }
69
70 return 1;
71}
72
73=begin TML
74
75finish up the plugins container
76
77SMELL: I'd prefer a proper finishHandler, alas it does not exist
78
79=cut
80
81
# spent 235µs (24+211) within Foswiki::Plugins::JQueryPlugin::modifyHeaderHandler which was called: # once (24µs+211µs) by Foswiki::Plugin::invoke at line 287 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm
sub modifyHeaderHandler {
82115µs1211µs Foswiki::Plugins::JQueryPlugin::Plugins::finish();
# spent 211µs making 1 call to Foswiki::Plugins::JQueryPlugin::Plugins::finish
83}
84
85=begin TML
86
87---++ createPlugin($pluginName, ...) -> $plugin
88
89API to create a jQuery plugin. Instantiating it adds all required javascript
90and css files to the html page header.
91
92=cut
93
94
# spent 3.64ms (27µs+3.62) within Foswiki::Plugins::JQueryPlugin::createPlugin which was called 2 times, avg 1.82ms/call: # 2 times (27µs+3.62ms) by Foswiki::Form::Textboxlist::new at line 15 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Form/Textboxlist.pm, avg 1.82ms/call
sub createPlugin {
95229µs23.62ms return Foswiki::Plugins::JQueryPlugin::Plugins::createPlugin(@_);
# spent 3.62ms making 2 calls to Foswiki::Plugins::JQueryPlugin::Plugins::createPlugin, avg 1.81ms/call
96}
97
98=begin TML
99
100---++ createTheme($themeName) -> $boolean
101
102API to load a jQuery UI theme. Returns true if the theme has
103been loaded successfully.
104
105=cut
106
107
# spent 110µs (12+99) within Foswiki::Plugins::JQueryPlugin::createTheme which was called: # once (12µs+99µs) by Foswiki::Plugins::JQueryPlugin::UI::init at line 59 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugins/JQueryPlugin/UI.pm
sub createTheme {
108113µs199µs return Foswiki::Plugins::JQueryPlugin::Plugins::createTheme(@_);
109}
110
111=begin TML
112
113---++ registerPlugin($pluginName, $class) -> $plugin
114
115API to register a jQuery plugin. this is of use for other Foswiki plugins
116to register their javascript modules as a jQuery plugin. Registering a plugin 'foobar'
117will make it available via =%<nop>JQREQUIRE{"foobar"}%=.
118
119Class will default to 'Foswiki::Plugins::JQueryPlugin::FOOBAR,
120
121The FOOBAR.pm stub must be derived from Foswiki::Plugins::JQueryPlugin::PLUGIN class.
122
123=cut
124
125
# spent 107µs (32+75) within Foswiki::Plugins::JQueryPlugin::registerPlugin which was called: # once (32µs+75µs) by Foswiki::Plugins::TwistyPlugin::initPlugin at line 48 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugins/TwistyPlugin.pm
sub registerPlugin {
126119µs175µs return Foswiki::Plugins::JQueryPlugin::Plugins::registerPlugin(@_);
127}
128
129=begin TML
130
131---++ registerTheme($themeName, $url)
132
133API to register a jQuery theme. this is of use for other Foswiki plugins
134to register their theme. Registering a theme 'foobar'
135will make it available via =%<nop>JQTHEME{"foobar"}%=.
136
137The =$url= parameter will default to '%PUBURLPATH%/%SYSTEMWEB%/JQueryPlugin/ui/$themeName/jquery-ui.css'.
138
139=cut
140
141sub registerTheme {
142 return Foswiki::Plugins::JQueryPlugin::Plugins::registerTheme(@_);
143}
144
145=begin TML
146
147---++ handleButton($session, $params, $topic, $web) -> $result
148
149Handles the =%<nop>BUTTON% tag.
150
151=cut
152
153sub handleButton {
154 my $session = shift;
155 my $plugin = createPlugin( 'Button', $session );
156 return $plugin->handleButton(@_) if $plugin;
157 return '';
158}
159
160=begin TML
161
162---++ handlePopUpWindow($session, $params, $topic, $web) -> $result
163
164Handles the =%<nop>POPUPWINDOW% tag.
165
166=cut
167
168sub handlePopUpWindow {
169 my $session = shift;
170 my $plugin = createPlugin( 'PopUpWindow', $session );
171 return $plugin->handlePopUpWindow(@_) if $plugin;
172 return '';
173}
174
175=begin TML
176
177---++ handleToggle($session, $params, $topic, $web) -> $result
178
179Handles the =%<nop>TOGGLE% tag.
180
181=cut
182
183sub handleToggle {
184 my $session = shift;
185 my $plugin = createPlugin( 'Toggle', $session );
186 return $plugin->handleToggle(@_) if $plugin;
187 return '';
188}
189
190=begin TML
191
192---++ handleTabPane($session, $params, $topic, $web) -> $result
193
194Handles the =%<nop>TABPANE% tag.
195
196=cut
197
198sub handleTabPane {
199 my $session = shift;
200 my $plugin = createPlugin( 'Tabpane', $session );
201 return $plugin->handleTabPane(@_) if $plugin;
202 return '';
203}
204
205=begin TML
206
207---++ handleTab($session, $params, $topic, $web) -> $result
208
209Handles the =%<nop>TAB% tag.
210
211=cut
212
213sub handleTab {
214 my $session = shift;
215 my $plugin = createPlugin( 'Tabpane', $session );
216 return $plugin->handleTab(@_) if $plugin;
217 return '';
218}
219
220=begin TML
221
222---++ handleEndTab($session, $params, $topic, $web) -> $result
223
224Handles the =%<nop>ENDTAB% tag.
225
226=cut
227
228sub handleEndTab {
229 my $session = shift;
230 my $plugin = createPlugin( 'Tabpane', $session );
231 return $plugin->handleEndTab(@_) if $plugin;
232 return '';
233}
234
235=begin TML
236
237---++ handleEndTabPane($session, $params, $topic, $web) -> $result
238
239Handles the =%<nop>ENDTABPANE% tag.
240
241=cut
242
243sub handleEndTabPane {
244 my $session = shift;
245 my $plugin = createPlugin( 'Tabpane', $session );
246 return $plugin->handleEndTabPane(@_) if $plugin;
247 return '';
248}
249
250=begin TML
251
252---++ handleJQueryRequire($session, $params, $topic, $web) -> $result
253
254Handles the =%<nop>JQREQUIRE% tag.
255
256=cut
257
258sub handleJQueryRequire {
259 my ( $session, $params, $theTopic, $theWeb ) = @_;
260
261 my $plugins = $params->{_DEFAULT} || '';
262 my $warn = Foswiki::Func::isTrue( $params->{warn}, 1 );
263 my $errorMsg = '';
264 foreach my $pluginName ( split( /\s*,\s*/, $plugins ) ) {
265 my $plugin = createPlugin( $pluginName, $session );
266 $errorMsg .=
267 "<div class='foswikiAlert'>Error: no such plugin $pluginName</div>"
268 if !$plugin && $warn;
269 }
270
271 return $errorMsg;
272}
273
274=begin TML
275
276---++ handleJQueryTheme($session, $params, $topic, $web) -> $result
277
278Handles the =%<nop>JQTHEME% tag.
279
280=cut
281
282sub handleJQueryTheme {
283 my ( $session, $params, $theTopic, $theWeb ) = @_;
284
285 my $themeName = $params->{_DEFAULT}
286 || $Foswiki::cfg{JQueryPlugin}{JQueryTheme};
287
288 my $warn = $params->{warn} || '';
289
290 return "<div class='foswikiAlert'>Error: no such theme $themeName</div>"
291 if !createTheme($themeName) && $warn ne 'off';
292
293 return '';
294}
295
296=begin TML
297
298---++ handleJQueryIconPath($session, $params, $topic, $web) -> $result
299
300Handles the =%<nop>JQICONPATH% tag.
301
302=cut
303
304sub handleJQueryIconPath {
305 my ( $session, $params, $theTopic, $theWeb ) = @_;
306
307 my $iconName = $params->{_DEFAULT} || '';
308 return Foswiki::Plugins::JQueryPlugin::Plugins::getIconUrlPath($iconName);
309}
310
311=begin TML
312
313---++ handleJQueryIcon($session, $params, $topic, $web) -> $result
314
315Handles the =%<nop>JQICON% tag.
316
317=cut
318
319sub handleJQueryIcon {
320 my ( $session, $params, $theTopic, $theWeb ) = @_;
321
322 my $iconName = $params->{_DEFAULT} || '';
323 my $iconAlt = $params->{alt} || $iconName;
324 my $iconTitle = $params->{title} || '';
325 my $iconFormat = $params->{format}
326 || '<img src=\'$iconPath\' class=\'$iconClass\' $iconAlt$iconTitle/>';
327 my $iconPath =
328 Foswiki::Plugins::JQueryPlugin::Plugins::getIconUrlPath($iconName);
329
330 return '' unless $iconPath;
331
332 my $iconClass = "foswikiIcon jqIcon";
333 $iconClass .= " $params->{class}" if $params->{class};
334
335 my $img = $iconFormat;
336 $img =~ s/\$iconPath/$iconPath/g;
337 $img =~ s/\$iconClass/$iconClass/g;
338 $img =~ s/\$iconAlt/alt='$iconAlt' /g if $iconAlt;
339 $img =~ s/\$iconTitle/title='$iconTitle' /g if $iconTitle;
340 $img =~ s/\$(iconAlt|iconTitle)//go;
341
342 return $img;
343}
344
345=begin TML
346
347---++ handleJQueryPlugins($session, $params, $topic, $web) -> $result
348
349Handles the =%<nop>JQPLUGINS% tag.
350
351=cut
352
353sub handleJQueryPlugins {
354 my ( $session, $params, $theTopic, $theWeb ) = @_;
355
356 my $thePlugin = $params->{_DEFAULT} || '';
357 my $theFormat = $params->{format};
358 my $theHeader = $params->{header} || '';
359 my $theFooter = $params->{footer} || '';
360 my $theSeparator = $params->{separator};
361 my $theTagFormat = $params->{tagformat};
362
363 $theFormat = ' 1 <a href="$homepage">$name</a> $active $version $author'
364 unless defined $theFormat;
365 $theSeparator = '$n'
366 unless defined $theSeparator;
367 $theTagFormat = '[[%SYSTEMWEB%.Var$tag][$tag]]'
368 unless defined $theTagFormat;
369
370 my @plugins =
371 Foswiki::Plugins::JQueryPlugin::Plugins::getPlugins($thePlugin);
372
373 my @result;
374 my $counter = 0;
375 foreach my $plugin (@plugins) {
376 my $summary = $plugin->getSummary();
377 $summary =~ s/^\s+//;
378 $summary =~ s/\s+$//;
379 my $tags = '';
380 if ( $theFormat =~ /\$tags/ ) {
381 my @tags = ();
382 foreach my $tag ( sort split( /\s*,\s*/, $plugin->{tags} ) ) {
383 my $line = $theTagFormat;
384 $line =~ s/\$tag/$tag/g;
385 push @tags, $line if $line;
386 }
387 $tags = join( ', ', @tags );
388 }
389 my $active =
390 defined( $plugin->{isInit} )
391 ? '<span class="foswikiAlert">(active)</span>'
392 : '';
393 my $line = Foswiki::Plugins::JQueryPlugin::Plugins::expandVariables(
394 $theFormat,
395 'index' => ( $counter + 1 ),
396 name => $plugin->{name},
397 version => $plugin->{version},
398 summary => $summary,
399 documentation => $plugin->{documentation},
400 author => $plugin->{author},
401 homepage => $plugin->{homepage},
402 tags => $tags,
403 active => $active,
404 );
405 next unless $line;
406 push @result, $line;
407 $counter++;
408 }
409
410 $theHeader =
411 Foswiki::Plugins::JQueryPlugin::Plugins::expandVariables( $theHeader,
412 counter => $counter, );
413 $theFooter =
414 Foswiki::Plugins::JQueryPlugin::Plugins::expandVariables( $theFooter,
415 counter => $counter, );
416 $theSeparator =
417 Foswiki::Plugins::JQueryPlugin::Plugins::expandVariables($theSeparator);
418
419 return $theHeader . join( $theSeparator, @result ) . $theFooter;
420}
421
42217µs1;
423__END__