← 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/EditTablePlugin.pm
StatementsExecuted 2323 statements in 28.1ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11311112.6ms15.3msFoswiki::Plugins::EditTablePlugin::::beforeCommonTagsHandlerFoswiki::Plugins::EditTablePlugin::beforeCommonTagsHandler
11511111.3ms13.9msFoswiki::Plugins::EditTablePlugin::::commonTagsHandlerFoswiki::Plugins::EditTablePlugin::commonTagsHandler
2282215.32ms5.32msFoswiki::Plugins::EditTablePlugin::::CORE:matchFoswiki::Plugins::EditTablePlugin::CORE:match (opcode)
511111µs160µsFoswiki::Plugins::EditTablePlugin::::postRenderingHandlerFoswiki::Plugins::EditTablePlugin::postRenderingHandler
11148µs300µsFoswiki::Plugins::EditTablePlugin::::initPluginFoswiki::Plugins::EditTablePlugin::initPlugin
51126µs26µsFoswiki::Plugins::EditTablePlugin::::CORE:regcompFoswiki::Plugins::EditTablePlugin::CORE:regcomp (opcode)
11126µs34µsFoswiki::Plugins::EditTablePlugin::::BEGIN@7Foswiki::Plugins::EditTablePlugin::BEGIN@7
51122µs22µsFoswiki::Plugins::EditTablePlugin::::CORE:substFoswiki::Plugins::EditTablePlugin::CORE:subst (opcode)
11117µs34µsFoswiki::Plugins::EditTablePlugin::::BEGIN@8Foswiki::Plugins::EditTablePlugin::BEGIN@8
0000s0sFoswiki::Plugins::EditTablePlugin::::addEditModeHeadersToHeadFoswiki::Plugins::EditTablePlugin::addEditModeHeadersToHead
0000s0sFoswiki::Plugins::EditTablePlugin::::addJavaScriptInterfaceDisabledToHeadFoswiki::Plugins::EditTablePlugin::addJavaScriptInterfaceDisabledToHead
0000s0sFoswiki::Plugins::EditTablePlugin::::addViewModeHeadersToHeadFoswiki::Plugins::EditTablePlugin::addViewModeHeadersToHead
0000s0sFoswiki::Plugins::EditTablePlugin::::decodeValueFoswiki::Plugins::EditTablePlugin::decodeValue
0000s0sFoswiki::Plugins::EditTablePlugin::::encodeValueFoswiki::Plugins::EditTablePlugin::encodeValue
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
2#
3# This is the EditTablePlugin used to edit tables in place.
4
5package Foswiki::Plugins::EditTablePlugin;
6
7247µs241µs
# spent 34µs (26+8) within Foswiki::Plugins::EditTablePlugin::BEGIN@7 which was called: # once (26µs+8µs) by Foswiki::Plugin::BEGIN@2.7 at line 7
use strict;
# spent 34µs making 1 call to Foswiki::Plugins::EditTablePlugin::BEGIN@7 # spent 8µs making 1 call to strict::import
821.86ms252µs
# spent 34µs (17+18) within Foswiki::Plugins::EditTablePlugin::BEGIN@8 which was called: # once (17µs+18µs) by Foswiki::Plugin::BEGIN@2.7 at line 8
use warnings;
# spent 34µs making 1 call to Foswiki::Plugins::EditTablePlugin::BEGIN@8 # spent 18µs making 1 call to warnings::import
9
1012µsour $VERSION = '$Rev$';
11
12# Please note that the second is now two digit.
13# Someone increased 4.22 to 4.3 which is not correct.
1412µsour $RELEASE = '4.39';
15
1611µsour $pluginName = 'EditTablePlugin';
1711µsour $ENCODE_START = '--EditTableEncodeStart--';
1811µsour $ENCODE_END = '--EditTableEncodeEnd--';
1911µsour $ASSET_URL = '%PUBURL%/%SYSTEMWEB%/EditTablePlugin';
2011µsour $NO_PREFS_IN_TOPIC = 1;
2111µsour $SHORTDESCRIPTION =
22 'Edit tables using edit fields, date pickers and drop down boxes';
2311µsour $web;
241800nsour $topic;
251700nsour $user;
261800nsour $debug;
271800nsour $usesJavascriptInterface;
281800nsour $viewModeHeaderDone;
291800nsour $editModeHeaderDone;
301700nsour $recursionBlock;
31
32=pod
33
34=cut
35
36
# spent 300µs (48+252) within Foswiki::Plugins::EditTablePlugin::initPlugin which was called: # once (48µs+252µs) 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 {
371040µs ( $topic, $web, $user ) = @_;
38
39 # check for Plugins.pm versions
40 if ( $Foswiki::Plugins::VERSION < 1.026 ) {
41 Foswiki::Func::writeWarning(
42 "Version mismatch between EditTablePlugin and Plugins.pm");
43 return 0;
44 }
45
46138µs my $query = Foswiki::Func::getCgiQuery();
# spent 38µs making 1 call to Foswiki::Func::getCgiQuery
47 if ( !$query ) {
48 return 0;
49 }
50
51 # Get plugin debug flag
521114µs $debug = Foswiki::Func::getPreferencesFlag('EDITTABLEPLUGIN_DEBUG');
# spent 114µs making 1 call to Foswiki::Func::getPreferencesFlag
531101µs $usesJavascriptInterface =
# spent 101µs making 1 call to Foswiki::Func::getPreferencesFlag
54 Foswiki::Func::getPreferencesFlag('EDITTABLEPLUGIN_JAVASCRIPTINTERFACE')
55 || 1;
56 $viewModeHeaderDone = 0;
57 $editModeHeaderDone = 0;
58
59 # Plugin correctly initialized
60 Foswiki::Func::writeDebug(
61 "- Foswiki::Plugins::EditTablePlugin::initPlugin( $web.$topic ) is OK")
62 if $debug;
63
64 return 1;
65}
66
67=pod
68
69Calls EditTablePlugin::Core::parseTables to lift out tables and put them back later.
70But because tables inside INCLUDEd topics won't expand - beforeCommonTagsHandler is called only once for the parent topic - parseTables needs to get called for included topics separatedly in commonTagsHandler.
71
72We cannot do table parsing in commonTagsHandler because by then the TML has been rendered, and tags like %ICON{pdf}% rendered to their <img ... /> equivalent.
73
74=cut
75
76
# spent 15.3ms (12.6+2.74) within Foswiki::Plugins::EditTablePlugin::beforeCommonTagsHandler which was called 1131 times, avg 14µs/call: # 1131 times (12.6ms+2.74ms) by Foswiki::Plugin::invoke at line 287 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm, avg 14µs/call
sub beforeCommonTagsHandler {
77113113.2ms11312.74ms return unless $_[0] =~ /%EDIT(?:TABLE|CELL){.*}%/;
# spent 2.74ms making 1131 calls to Foswiki::Plugins::EditTablePlugin::CORE:match, avg 2µs/call
78 Foswiki::Func::writeDebug(
79 "EditTablePlugin::beforeCommonTagsHandler( $web.$topic )")
80 if $debug;
81
82 my $query = Foswiki::Func::getCgiQuery();
83 my $tableNr = $query->param('ettablenr');
84 my $isEditing = defined $query->param('etedit')
85 && defined $tableNr;
86
87 require Foswiki::Plugins::EditTablePlugin::Core;
88 Foswiki::Plugins::EditTablePlugin::Core::init();
89 if ($isEditing) {
90 Foswiki::Plugins::EditTablePlugin::Core::parseTables( $_[0], $_[1],
91 $_[2] );
92 }
93}
94
95=pod
96
97Calls EditTablePlugin::Core::parseTables for INCLUDEd topics.
98
99=cut
100
101
# spent 13.9ms (11.3+2.57) within Foswiki::Plugins::EditTablePlugin::commonTagsHandler which was called 1151 times, avg 12µs/call: # 1151 times (11.3ms+2.57ms) by Foswiki::Plugin::invoke at line 287 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm, avg 12µs/call
sub commonTagsHandler {
102115112.8ms11512.57ms return unless $_[0] =~ /%EDIT(?:TABLE|CELL|TABLESTUB){.*}%/;
# spent 2.57ms making 1151 calls to Foswiki::Plugins::EditTablePlugin::CORE:match, avg 2µs/call
103
104 Foswiki::Func::writeDebug(
105 "EditTablePlugin::commonTagsHandler( $web.$topic )")
106 if $debug;
107
108 return if $recursionBlock;
109 $recursionBlock = 1;
110 addViewModeHeadersToHead();
111 require Foswiki::Plugins::EditTablePlugin::Core;
112
113 Foswiki::Plugins::EditTablePlugin::Core::initIncludedTopic();
114 Foswiki::Plugins::EditTablePlugin::Core::parseTables( $_[0], $_[1], $_[2] );
115 Foswiki::Plugins::EditTablePlugin::Core::process( $_[0], $_[1], $_[2],
116 $topic, $web );
117 $recursionBlock = 0;
118}
119
120=pod
121
122=cut
123
124
# spent 160µs (111+49) within Foswiki::Plugins::EditTablePlugin::postRenderingHandler which was called 5 times, avg 32µs/call: # 5 times (111µs+49µs) by Foswiki::Plugin::invoke at line 287 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm, avg 32µs/call
sub postRenderingHandler {
12510146µs Foswiki::Func::writeDebug(
126 "EditTablePlugin::postRenderingHandler( $web.$topic )")
127 if $debug;
1281049µs $_[0] =~ s/$ENCODE_START(.*?)$ENCODE_END/decodeValue($1)/ges;
# spent 26µs making 5 calls to Foswiki::Plugins::EditTablePlugin::CORE:regcomp, avg 5µs/call # spent 22µs making 5 calls to Foswiki::Plugins::EditTablePlugin::CORE:subst, avg 4µs/call
129}
130
131=pod
132
133=cut
134
135sub encodeValue {
136
137 # FIXME: *very* crude encoding to escape Wiki rendering inside form fields
138 # also prevents urls to get expanded to links
139 $_[0] =~ s/\./%dot%/gs;
140 $_[0] =~ s/(.)/\.$1/gs;
141
142 # convert <br /> markup to unicode linebreak character for text areas
143 $_[0] =~ s/.<.b.r. .\/.>/&#10;/gs;
144 $_[0] = $ENCODE_START . $_[0] . $ENCODE_END;
145}
146
147=pod
148
149=cut
150
151sub decodeValue {
152 my ($theText) = @_;
153
154 $theText =~ s/\.(.)/$1/gs;
155 $theText =~ s/%dot%/\./gs;
156 $theText =~ s/\&([^#a-z])/&amp;$1/g; # escape non-entities
157 $theText =~ s/</\&lt;/g; # change < to entity
158 $theText =~ s/>/\&gt;/g; # change > to entity
159 $theText =~ s/\"/\&quot;/g; # change " to entity
160 return $theText;
161}
162
163=begin TML
164
165Style sheet for table in view mode
166
167=cut
168
169sub addViewModeHeadersToHead {
170 return if $viewModeHeaderDone;
171
172 $viewModeHeaderDone = 1;
173
174 my $header = <<'EOF';
175<style type="text/css" media="all">
176@import url("%PUBURL%/%SYSTEMWEB%/EditTablePlugin/edittable.css");
177</style>
178EOF
179 Foswiki::Func::addToZone( 'head', 'EditTablePlugin/edittable.css',
180 $header );
181}
182
183=begin TML
184
185Style sheet and javascript for table in edit mode
186
187=cut
188
189sub addEditModeHeadersToHead {
190 my ( $tableNr, $paramJavascriptInterface ) = @_;
191 return if $editModeHeaderDone;
192 return
193 if !$usesJavascriptInterface && ( $paramJavascriptInterface ne 'on' );
194
195 $editModeHeaderDone = 1;
196
197 my $formName = "edittable$tableNr";
198 my $header = "";
199 $header .=
200 '<meta name="EDITTABLEPLUGIN_FormName" content="' . $formName . '" />';
201 $header .= "\n"
202 . '<meta name="EDITTABLEPLUGIN_EditTableUrl" content="'
203 . $ASSET_URL . '" />';
204
205 Foswiki::Func::addToZone( 'head', 'EditTablePlugin/Meta', $header );
206 addViewModeHeadersToHead();
207 Foswiki::Func::addToZone( 'script', 'EditTablePlugin/edittable.js', <<JS);
208<script type="text/javascript" src="%PUBURL%/%SYSTEMWEB%/EditTablePlugin/edittable.js"></script>
209JS
210}
211
212=begin TML
213
214If param javscriptinterface="off", adds field to html meta.
215
216=cut
217
218sub addJavaScriptInterfaceDisabledToHead {
219 my ($tableNr) = @_;
220
221 my $tableId = "edittable$tableNr";
222 my $header = "";
223 $header .=
224'<meta name="EDITTABLEPLUGIN_NO_JAVASCRIPTINTERFACE_EditTableId" content="'
225 . $tableId . '" />';
226 $header .= "\n";
227 Foswiki::Func::addToZone( 'head', 'EDITTABLEPLUGIN_NO_JAVASCRIPTINTERFACE',
228 $header );
229}
230
231110µs1;
232__END__
 
# spent 5.32ms within Foswiki::Plugins::EditTablePlugin::CORE:match which was called 2282 times, avg 2µs/call: # 1151 times (2.57ms+0s) by Foswiki::Plugins::EditTablePlugin::commonTagsHandler at line 102, avg 2µs/call # 1131 times (2.74ms+0s) by Foswiki::Plugins::EditTablePlugin::beforeCommonTagsHandler at line 77, avg 2µs/call
sub Foswiki::Plugins::EditTablePlugin::CORE:match; # opcode
# spent 26µs within Foswiki::Plugins::EditTablePlugin::CORE:regcomp which was called 5 times, avg 5µs/call: # 5 times (26µs+0s) by Foswiki::Plugins::EditTablePlugin::postRenderingHandler at line 128, avg 5µs/call
sub Foswiki::Plugins::EditTablePlugin::CORE:regcomp; # opcode
# spent 22µs within Foswiki::Plugins::EditTablePlugin::CORE:subst which was called 5 times, avg 4µs/call: # 5 times (22µs+0s) by Foswiki::Plugins::EditTablePlugin::postRenderingHandler at line 128, avg 4µs/call
sub Foswiki::Plugins::EditTablePlugin::CORE:subst; # opcode