← Index
NYTProf Performance Profile   « line view »
For webmerge/scripts/webmerge.pl
  Run on Mon Oct 7 02:42:42 2013
Reported on Mon Oct 7 03:03:22 2013

Filename/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/RTP/Webmerge/Embedder/JS.pm
StatementsExecuted 15 statements in 5.95ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110.8ms99.6msRTP::Webmerge::Embedder::JS::::BEGIN@20RTP::Webmerge::Embedder::JS::BEGIN@20
11195µs368µsRTP::Webmerge::Embedder::JS::::BEGIN@8RTP::Webmerge::Embedder::JS::BEGIN@8
11164µs262µsRTP::Webmerge::Embedder::JS::::BEGIN@23RTP::Webmerge::Embedder::JS::BEGIN@23
11163µs99µsRTP::Webmerge::Embedder::JS::::BEGIN@10RTP::Webmerge::Embedder::JS::BEGIN@10
11154µs143µsRTP::Webmerge::Embedder::JS::::BEGIN@9RTP::Webmerge::Embedder::JS::BEGIN@9
11150µs271µsRTP::Webmerge::Embedder::JS::::BEGIN@26RTP::Webmerge::Embedder::JS::BEGIN@26
11124µs24µsRTP::Webmerge::Embedder::JS::::BEGIN@15RTP::Webmerge::Embedder::JS::BEGIN@15
0000s0sRTP::Webmerge::Embedder::JS::::embedderRTP::Webmerge::Embedder::JS::embedder
0000s0sRTP::Webmerge::Embedder::JS::::is_enabledRTP::Webmerge::Embedder::JS::is_enabled
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1###################################################################################################
2# Copyright 2013 by Marcel Greter
3# This file is part of Webmerge (GPL3)
4###################################################################################################
5package RTP::Webmerge::Embedder::JS;
6###################################################################################################
7
82163µs2640µs
# spent 368µs (95+273) within RTP::Webmerge::Embedder::JS::BEGIN@8 which was called: # once (95µs+273µs) by RTP::Webmerge::Embedder::BEGIN@252 at line 8
use Carp;
# spent 368µs making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@8 # spent 273µs making 1 call to Exporter::import
92373µs2233µs
# spent 143µs (54+90) within RTP::Webmerge::Embedder::JS::BEGIN@9 which was called: # once (54µs+90µs) by RTP::Webmerge::Embedder::BEGIN@252 at line 9
use strict;
# spent 143µs making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@9 # spent 90µs making 1 call to strict::import
102203µs2136µs
# spent 99µs (63+36) within RTP::Webmerge::Embedder::JS::BEGIN@10 which was called: # once (63µs+36µs) by RTP::Webmerge::Embedder::BEGIN@252 at line 10
use warnings;
# spent 99µs making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@10 # spent 36µs making 1 call to warnings::import
11
12###################################################################################################
13
14# define our version string
151142µs124µs
# spent 24µs within RTP::Webmerge::Embedder::JS::BEGIN@15 which was called: # once (24µs+0s) by RTP::Webmerge::Embedder::BEGIN@252 at line 15
BEGIN { $RTP::Webmerge::Embedder::JS::VERSION = "0.70" }
# spent 24µs making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@15
16
17###################################################################################################
18
19# use module to dump js data
202768µs2100ms
# spent 99.6ms (10.8+88.8) within RTP::Webmerge::Embedder::JS::BEGIN@20 which was called: # once (10.8ms+88.8ms) by RTP::Webmerge::Embedder::BEGIN@252 at line 20
use JSON qw(to_json);
# spent 99.6ms making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@20 # spent 886µs making 1 call to JSON::import
21
22# load our local modules
232190µs2460µs
# spent 262µs (64+198) within RTP::Webmerge::Embedder::JS::BEGIN@23 which was called: # once (64µs+198µs) by RTP::Webmerge::Embedder::BEGIN@252 at line 23
use RTP::Webmerge::IO;
# spent 262µs making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@23 # spent 198µs making 1 call to Exporter::import
24
25# end of line in code
2624.08ms2492µs
# spent 271µs (50+221) within RTP::Webmerge::Embedder::JS::BEGIN@26 which was called: # once (50µs+221µs) by RTP::Webmerge::Embedder::BEGIN@252 at line 26
use constant EOL => "\n";
# spent 271µs making 1 call to RTP::Webmerge::Embedder::JS::BEGIN@26 # spent 221µs making 1 call to constant::import
27
28###################################################################################################
29
30sub is_enabled ($)
31{
32 return 0 unless (defined $_[0]);
33 return 1 if (lc $_[0] eq 'true');
34 return 1 if (lc $_[0] eq 'enabled');
35 return 0;
36}
37
38sub embedder
39{
40
41 # get variables and collections from parent
42 my ($domains, $contents, $features, $detects, $config) = @_;
43
44 # create switcher code
45 my $switcher = '';
46
47 # process all header detect entries
48 foreach my $detect (@{$detects || [] })
49 {
50
51 # get options for this detection
52 my $target = $detect->{'target'};
53 my $enabled = $detect->{'enabled'};
54 my $disabled = $detect->{'disabled'};
55
56 # class is a reserved keyword in js
57 $target = 'klass' if $target eq 'class';
58
59 unless ( defined $detect->{'feature'} )
60 { die 'detect without feature id found'; }
61
62 my $id = $detect->{'feature'};
63 my $feature = $features->{$id};
64
65 unless ($feature || is_enabled($detect->{'optional'}))
66 { die "feature detection <$id> not available"; }
67
68 $switcher .= ' ' . '// default feature setting' . EOL;
69 $switcher .= ' ' . 'var enabled = null;' . EOL;
70
71 # process all header detect entries
72 foreach my $test (@{$feature->{'test'} || [] })
73 {
74
75 my $types = lc $test->{'type'};
76
77 foreach my $type (split(/\s*,\s*/, $types))
78 {
79
80 my $var;
81
82 unless (defined $type) { $var = 'webmerge.SERVER'; }
83 elsif ($type eq 'env') { $var = 'webmerge.ENV'; }
84 elsif ($type eq 'get') { $var = 'webmerge.GET'; }
85 elsif ($type eq 'post') { $var = 'webmerge.POST'; }
86 elsif ($type eq 'server') { $var = 'webmerge.SERVER'; }
87 elsif ($type eq 'cookie') { $var = 'webmerge.COOKIE'; }
88 elsif ($type eq 'session') { $var = 'webmerge.SESSION'; }
89 elsif ($type eq 'request') { $var = 'webmerge.REQUEST'; }
90 else { die "Fatal: unknown test type <$type>"; }
91
92 my ($enabled, $disabled) = ('true', 'false');
93
94 $switcher .= EOL;
95 $switcher .= " // make sure the variable exists" . EOL;
96 $switcher .= " if (typeof $var == 'undefined') $var = {};" . EOL;
97
98 if (exists $test->{'enable'} && scalar(@{$test->{'enable'}}))
99 {
100 $enabled = '(' . $var . '[\'' . $test->{'key'} . '\'] || \'\').' .
101 'match(/^(?:' . join( '|', @{$test->{'enable'}} ) . ')$/)';
102 }
103
104 if (exists $test->{'disable'} && scalar(@{$test->{'disable'}}))
105 {
106 $disabled = '(' . $var . '[\'' . $test->{'key'} . '\'] || \'\').' .
107 'match(/^(?:' . join( '|', @{$test->{'disable'}} ) . ')$/)';
108 }
109
110 $switcher .= EOL;
111 $switcher .= ' ' . ' // sniff for useragent' . EOL;
112 $switcher .= ' ' . 'if (\'' . $test->{'key'} . '\' in ' . $var . ') {' . EOL;
113 $switcher .= ' ' . 'enabled = ( enabled || ( ' . $enabled . ' )) && ! ' . $disabled . ';' . EOL;
114 $switcher .= ' ' . '}' . EOL;
115
116 }
117
118 }
119
120 $switcher .= EOL;
121 $switcher .= ' ' . ' // change ' . $target . ' if feature is enabled' . EOL;
122 $switcher .= ' ' . 'if (enabled === true) { ' . $target .' = \'' . $enabled . '\'; }'. EOL if (defined $enabled);
123 $switcher .= ' ' . 'if (enabled === false) { ' . $target .' = \'' . $disabled . '\'; }'. EOL if (defined $disabled);
124
125 };
126 # EO each detect
127
128 # load the template (readfile will resolve path)
129 my $tmpl = readfile($config->{'tmpl-embed-js'});
130
131 # create data for template
132 my %data =
133 (
134 'switcher' => $switcher,
135 'includes' => to_json(
136 $contents,
137 { pretty => 1 }
138 ),
139 );
140
141 # insert data into loaded template
142 ${$tmpl} =~ s/%%([a-z]+)%%/$data{$1}/eg;
143
144 # return tmpl pointer
145 return $tmpl;
146
147}
148# EO sub embedder
149
150###################################################################################################
151
152# register this embedder type to parent module
153120µs137µsRTP::Webmerge::Embedder::register('js', \&embedder);
# spent 37µs making 1 call to RTP::Webmerge::Embedder::register
154
155###################################################################################################
156###################################################################################################
157116µs1;