448 lines
32 KiB
HTML
448 lines
32 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>Code coverage report for ./src/ocLazyLoad.loaders.common.js</title>
|
|
<meta charset="utf-8">
|
|
<link rel="stylesheet" href="../prettify.css">
|
|
<link rel="stylesheet" href="../base.css">
|
|
<style type='text/css'>
|
|
div.coverage-summary .sorter {
|
|
background-image: url(../sort-arrow-sprite.png);
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header medium">
|
|
<h1>Code coverage report for <span class="entity">./src/ocLazyLoad.loaders.common.js</span></h1>
|
|
<h2>
|
|
Statements: <span class="metric">66.67% <small>(46 / 69)</small></span>
|
|
Branches: <span class="metric">52.94% <small>(27 / 51)</small></span>
|
|
Functions: <span class="metric">87.5% <small>(7 / 8)</small></span>
|
|
Lines: <span class="metric">67.65% <small>(46 / 68)</small></span>
|
|
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
|
</h2>
|
|
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">./src/</a> » ocLazyLoad.loaders.common.js</div>
|
|
</div>
|
|
<div class="body">
|
|
<pre><table class="coverage">
|
|
<tr><td class="line-count">1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
|
22
|
|
23
|
|
24
|
|
25
|
|
26
|
|
27
|
|
28
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
|
36
|
|
37
|
|
38
|
|
39
|
|
40
|
|
41
|
|
42
|
|
43
|
|
44
|
|
45
|
|
46
|
|
47
|
|
48
|
|
49
|
|
50
|
|
51
|
|
52
|
|
53
|
|
54
|
|
55
|
|
56
|
|
57
|
|
58
|
|
59
|
|
60
|
|
61
|
|
62
|
|
63
|
|
64
|
|
65
|
|
66
|
|
67
|
|
68
|
|
69
|
|
70
|
|
71
|
|
72
|
|
73
|
|
74
|
|
75
|
|
76
|
|
77
|
|
78
|
|
79
|
|
80
|
|
81
|
|
82
|
|
83
|
|
84
|
|
85
|
|
86
|
|
87
|
|
88
|
|
89
|
|
90
|
|
91
|
|
92
|
|
93
|
|
94
|
|
95
|
|
96
|
|
97
|
|
98
|
|
99
|
|
100
|
|
101
|
|
102
|
|
103
|
|
104
|
|
105
|
|
106
|
|
107
|
|
108
|
|
109
|
|
110
|
|
111
|
|
112
|
|
113
|
|
114
|
|
115
|
|
116
|
|
117
|
|
118
|
|
119
|
|
120
|
|
121
|
|
122
|
|
123
|
|
124
|
|
125
|
|
126
|
|
127
|
|
128
|
|
129
|
|
130
|
|
131
|
|
132
|
|
133
|
|
134
|
|
135</td><td class="line-coverage"><span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">29</span>
|
|
<span class="cline-any cline-yes">28</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">28</span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">13</span>
|
|
<span class="cline-any cline-yes">13</span>
|
|
<span class="cline-any cline-yes">13</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-yes">14</span>
|
|
<span class="cline-any cline-yes">14</span>
|
|
<span class="cline-any cline-yes">14</span>
|
|
<span class="cline-any cline-yes">14</span>
|
|
<span class="cline-any cline-yes">14</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-yes">2</span>
|
|
<span class="cline-any cline-yes">2</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">16</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">28</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">'use strict';
|
|
|
|
(function (angular) {
|
|
'use strict';
|
|
|
|
angular.module('oc.lazyLoad').config(function ($provide) {
|
|
$provide.decorator('$ocLazyLoad', function ($delegate, $q, $window, $interval) {
|
|
var uaCssChecked = false,
|
|
useCssLoadPatch = false,
|
|
anchor = $window.document.getElementsByTagName('head')[0] || <span class="branch-1 cbranch-no" title="branch not covered" >$window.document.getElementsByTagName('body')[0];</span>
|
|
|
|
/**
|
|
* Load a js/css file
|
|
* @param type
|
|
* @param path
|
|
* @param params
|
|
* @returns promise
|
|
*/
|
|
$delegate.buildElement = function buildElement(type, path, params) {
|
|
var deferred = $q.defer(),
|
|
el,
|
|
loaded,
|
|
filesCache = $delegate._getFilesCache(),
|
|
cacheBuster = function cacheBuster(url) {
|
|
var dc = new Date().getTime();
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (url.indexOf('?') >= 0) {
|
|
<span class="cstat-no" title="statement not covered" > if (url.substring(0, url.length - 1) === '&') {</span>
|
|
<span class="cstat-no" title="statement not covered" > return url + '_dc=' + dc;</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return url + '&_dc=' + dc;</span>
|
|
} else {
|
|
return url + '?_dc=' + dc;
|
|
}
|
|
};
|
|
|
|
// Store the promise early so the file load can be detected by other parallel lazy loads
|
|
// (ie: multiple routes on one page) a 'true' value isn't sufficient
|
|
// as it causes false positive load results.
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (angular.isUndefined(filesCache.get(path))) {
|
|
filesCache.put(path, deferred.promise);
|
|
}
|
|
|
|
// Switch in case more content types are added later
|
|
switch (type) {
|
|
case 'css':
|
|
el = $window.document.createElement('link');
|
|
el.type = 'text/css';
|
|
el.rel = 'stylesheet';
|
|
el.href = params.cache === false ? <span class="branch-0 cbranch-no" title="branch not covered" >cacheBuster(path) </span>: path;
|
|
break;
|
|
case 'js':
|
|
el = $window.document.createElement('script');
|
|
el.src = params.cache === false ? cacheBuster(path) : path;
|
|
break;
|
|
<span class="branch-2 cbranch-no" title="branch not covered" > default:</span>
|
|
<span class="cstat-no" title="statement not covered" > filesCache.remove(path);</span>
|
|
<span class="cstat-no" title="statement not covered" > deferred.reject(new Error('Requested type "' + type + '" is not known. Could not inject "' + path + '"'));</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
}
|
|
el.onload = el['onreadystatechange'] = function (e) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (el['readyState'] && <span class="branch-1 cbranch-no" title="branch not covered" >!/^c|loade/.test(el['readyState']) </span>|| loaded) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
el.onload = el['onreadystatechange'] = null;
|
|
loaded = 1;
|
|
$delegate._broadcast('ocLazyLoad.fileLoaded', path);
|
|
deferred.resolve(el);
|
|
};
|
|
el.onerror = function () {
|
|
filesCache.remove(path);
|
|
deferred.reject(new Error('Unable to load ' + path));
|
|
};
|
|
el.async = params.serie ? 0 : 1;
|
|
|
|
var insertBeforeElem = anchor.lastChild;
|
|
if (params.insertBefore) {
|
|
var element = angular.element(angular.isDefined(window.jQuery) ? <span class="branch-0 cbranch-no" title="branch not covered" >params.insertBefore </span>: document.querySelector(params.insertBefore));
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (element && element.length > 0) {
|
|
insertBeforeElem = element[0];
|
|
}
|
|
}
|
|
insertBeforeElem.parentNode.insertBefore(el, insertBeforeElem);
|
|
|
|
/*
|
|
The event load or readystatechange doesn't fire in:
|
|
- PhantomJS 1.9 (headless webkit browser)
|
|
- iOS < 6 (default mobile browser)
|
|
- Android < 4.4 (default mobile browser)
|
|
- Safari < 6 (desktop browser)
|
|
*/
|
|
if (type == 'css') {
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (!uaCssChecked) {
|
|
var ua = $window.navigator.userAgent.toLowerCase();
|
|
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (ua.indexOf('phantomjs/1.9') > -1) {
|
|
// PhantomJS ~1.9
|
|
<span class="cstat-no" title="statement not covered" > useCssLoadPatch = true;</span>
|
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (/iP(hone|od|ad)/.test($window.navigator.platform)) {
|
|
// iOS < 6
|
|
<span class="cstat-no" title="statement not covered" > var v = $window.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);</span>
|
|
<span class="cstat-no" title="statement not covered" > var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));</span>
|
|
<span class="cstat-no" title="statement not covered" > useCssLoadPatch = iOSVersion < 6;</span>
|
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (ua.indexOf('android') > -1) {
|
|
// Android < 4.4
|
|
<span class="cstat-no" title="statement not covered" > var androidVersion = parseFloat(ua.slice(ua.indexOf('android') + 8));</span>
|
|
<span class="cstat-no" title="statement not covered" > useCssLoadPatch = androidVersion < 4.4;</span>
|
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (ua.indexOf('safari') > -1) {
|
|
// Safari < 6
|
|
<span class="cstat-no" title="statement not covered" > var versionMatch = ua.match(/version\/([\.\d]+)/i);</span>
|
|
<span class="cstat-no" title="statement not covered" > useCssLoadPatch = versionMatch && versionMatch[1] && parseFloat(versionMatch[1]) < 6;</span>
|
|
}
|
|
}
|
|
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (useCssLoadPatch) {
|
|
<span class="cstat-no" title="statement not covered" > var tries = 1000; </span>// * 20 = 20000 miliseconds
|
|
<span class="cstat-no" title="statement not covered" > var interval = $interval(<span class="fstat-no" title="function not covered" >function () {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
<span class="cstat-no" title="statement not covered" > el.sheet.cssRules;</span>
|
|
<span class="cstat-no" title="statement not covered" > $interval.cancel(interval);</span>
|
|
<span class="cstat-no" title="statement not covered" > el.onload();</span>
|
|
} catch (e) {
|
|
<span class="cstat-no" title="statement not covered" > if (--tries <= 0) {</span>
|
|
<span class="cstat-no" title="statement not covered" > el.onerror();</span>
|
|
}
|
|
}
|
|
}, 20);
|
|
}
|
|
}
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
return $delegate;
|
|
});
|
|
});
|
|
})(angular);
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkM6L3d3dy9vY0xhenlMb2FkL3NyYy9vY0xhenlMb2FkLmxvYWRlcnMuY29tbW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsQ0FBQyxVQUFBLE9BQU8sRUFBSTtBQUNSLGdCQUFZLENBQUM7O0FBRWIsV0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxRQUFRLEVBQUk7QUFDN0MsZ0JBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFVBQVMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQzFFLGdCQUFJLFlBQVksR0FBRyxLQUFLO2dCQUNwQixlQUFlLEdBQUcsS0FBSztnQkFDdkIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7O0FBU2xILHFCQUFTLENBQUMsWUFBWSxHQUFHLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQy9ELG9CQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFO29CQUNyQixFQUFFO29CQUNGLE1BQU07b0JBQ04sVUFBVSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUU7b0JBQ3ZDLFdBQVcsR0FBRyxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDcEMsd0JBQUksRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsd0JBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEIsNEJBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFH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Q0FBQyxDQUFDO0FBQ3JFLDJDQUFlLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQzt5QkFDMUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7O0FBRWxDLGdDQUFJLFlBQVksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDbkQsMkNBQWUsR0FBSSxZQUFZLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEFBQUMsQ0FBQzt5QkFDMUY7cUJBQ0o7O0FBRUQsd0JBQUcsZUFBZSxFQUFFO0FBQ2hCLDRCQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsNEJBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFNO0FBQzNCLGdDQUFJO0FBQ0Esa0NBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ2xCLHlDQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNCLGtDQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7NkJBQ2YsQ0FBQyxPQUFNLENBQUMsRUFBRTtBQUNQLG9DQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUNiLHNDQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7aUNBQ2hCOzZCQUNKO3lCQUNKLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ1Y7aUJBQ0o7O0FBRUQsdUJBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQzthQUMzQixDQUFDOztBQUVGLG1CQUFPLFNBQVMsQ0FBQztTQUNwQixDQUFDLENBQUE7S0FDTCxDQUFDLENBQUM7Q0FFTixDQUFBLENBQUUsT0FBTyxDQUFDLENBQUMiLCJmaWxlIjoiQzovd3d3L29jTGF6eUxvYWQvc3JjL29jTGF6eUxvYWQubG9hZGVycy5jb21tb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoYW5ndWxhciA9PiB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcblxyXG4gICAgYW5ndWxhci5tb2R1bGUoJ29jLmxhenlMb2FkJykuY29uZmlnKCRwcm92aWRlID0+IHtcclxuICAgICAgICAkcHJvdmlkZS5kZWNvcmF0b3IoJyRvY0xhenlMb2FkJywgZnVuY3Rpb24oJGRlbGVnYXRlLCAkcSwgJHdpbmRvdywgJGludGVydmFsKSB7XHJcbiAgICAgICAgICAgIHZhciB1YUNzc0NoZWNrZWQgPSBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yID0gJHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8ICR3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTtcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBMb2FkIGEganMvY3NzIGZpbGVcclxuICAgICAgICAgICAgICogQHBhcmFtIHR5cGVcclxuICAgICAgICAgICAgICogQHBhcmFtIHBhdGhcclxuICAgICAgICAgICAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBwcm9taXNlXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAkZGVsZWdhdGUuYnVpbGRFbGVtZW50ID0gZnVuY3Rpb24gYnVpbGRFbGVtZW50KHR5cGUsIHBhdGgsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICBlbCxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNDYWNoZSA9ICRkZWxlZ2F0ZS5fZ2V0RmlsZXNDYWNoZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlQnVzdGVyID0gZnVuY3Rpb24gY2FjaGVCdXN0ZXIodXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih1cmwuaW5kZXhPZignPycpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVybC5zdWJzdHJpbmcoMCwgdXJsLmxlbmd0aCAtIDEpID09PSAnJicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7IHVybCB9X2RjPSR7IGRjIH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAkeyB1cmwgfSZfZGM9JHsgZGMgfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7IHVybCB9P19kYz0keyBkYyB9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHByb21pc2UgZWFybHkgc28gdGhlIGZpbGUgbG9hZCBjYW4gYmUgZGV0ZWN0ZWQgYnkgb3RoZXIgcGFyYWxsZWwgbGF6eSBsb2Fkc1xyXG4gICAgICAgICAgICAgICAgLy8gKGllOiBtdWx0aXBsZSByb3V0ZXMgb24gb25lIHBhZ2UpIGEgJ3RydWUnIHZhbHVlIGlzbid0IHN1ZmZpY2llbnRcclxuICAgICAgICAgICAgICAgIC8vIGFzIGl0IGNhdXNlcyBmYWxzZSBwb3NpdGl2ZSBsb2FkIHJlc3VsdHMuXHJcbiAgICAgICAgICAgICAgICBpZihhbmd1bGFyLmlzVW5kZWZpbmVkKGZpbGVzQ2FjaGUuZ2V0KHBhdGgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzQ2FjaGUucHV0KHBhdGgsIGRlZmVycmVkLnByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBpbiBjYXNlIG1vcmUgY29udGVudCB0eXBlcyBhcmUgYWRkZWQgbGF0ZXJcclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY3NzJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSAkd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudHlwZSA9ICd0ZXh0L2Nzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuaHJlZiA9IHBhcmFtcy5jYWNoZSA9PT0gZmFsc2UgPyBjYWNoZUJ1c3RlcihwYXRoKSA6IHBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2pzJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSAkd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5zcmMgPSBwYXJhbXMuY2FjaGUgPT09IGZhbHNlID8gY2FjaGVCdXN0ZXIocGF0aCkgOiBwYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlc0NhY2hlLnJlbW92ZShwYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihgUmVxdWVzdGVkIHR5cGUgXCIkeyB0eXBlIH1cIiBpcyBub3Qga25vd24uIENvdWxkIG5vdCBpbmplY3QgXCIkeyBwYXRoIH1cImApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbC5vbmxvYWQgPSBlbFsnb25yZWFkeXN0YXRlY2hhbmdlJ10gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoKGVsWydyZWFkeVN0YXRlJ10gJiYgIS9eY3xsb2FkZS8udGVzdChlbFsncmVhZHlTdGF0ZSddKSkgfHwgbG9hZGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgZWwub25sb2FkID0gZWxbJ29ucmVhZHlzdGF0ZWNoYW5nZSddID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZWQgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICRkZWxlZ2F0ZS5fYnJvYWRjYXN0KCdvY0xhenlMb2FkLmZpbGVMb2FkZWQnLCBwYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGVsKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBlbC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNDYWNoZS5yZW1vdmUocGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgJHsgcGF0aCB9YCkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGVsLmFzeW5jID0gcGFyYW1zLnNlcmllID8gMCA6IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGluc2VydEJlZm9yZUVsZW0gPSBhbmNob3IubGFzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgaWYocGFyYW1zLmluc2VydEJlZm9yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYW5ndWxhci5lbGVtZW50KGFuZ3VsYXIuaXNEZWZpbmVkKHdpbmRvdy5qUXVlcnkpID8gcGFyYW1zLmluc2VydEJlZm9yZSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyYW1zLmluc2VydEJlZm9yZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQgJiYgZWxlbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZUVsZW0gPSBlbGVtZW50WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZUVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwsIGluc2VydEJlZm9yZUVsZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgVGhlIGV2ZW50IGxvYWQgb3IgcmVhZHlzdGF0ZWNoYW5nZSBkb2Vzbid0IGZpcmUgaW46XHJcbiAgICAgICAgICAgICAgICAgLSBQaGFudG9tSlMgMS45IChoZWFkbGVzcyB3ZWJraXQgYnJvd3NlcilcclxuICAgICAgICAgICAgICAgICAtIGlPUyA8IDYgICAgICAgKGRlZmF1bHQgbW9iaWxlIGJyb3dzZXIpXHJcbiAgICAgICAgICAgICAgICAgLSBBbmRyb2lkIDwgNC40IChkZWZhdWx0IG1vYmlsZSBicm93c2VyKVxyXG4gICAgICAgICAgICAgICAgIC0gU2FmYXJpIDwgNiAgICAoZGVza3RvcCBicm93c2VyKVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZih0eXBlID09ICdjc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVhQ3NzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWEgPSAkd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1YS5pbmRleE9mKCdwaGFudG9tanMvMS45JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUpTIH4xLjlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2lQKGhvbmV8b2R8YWQpLy50ZXN0KCR3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaU9TIDwgNlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSAkd2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9PUyAoXFxkKylfKFxcZCspXz8oXFxkKyk/Lyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaU9TVmVyc2lvbiA9IHBhcnNlRmxvYXQoW3BhcnNlSW50KHZbMV0sIDEwKSwgcGFyc2VJbnQodlsyXSwgMTApLCBwYXJzZUludCh2WzNdIHx8IDAsIDEwKV0uam9pbignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IGlPU1ZlcnNpb24gPCA2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVhLmluZGV4T2YoJ2FuZHJvaWQnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmRyb2lkIDwgNC40XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5kcm9pZFZlcnNpb24gPSBwYXJzZUZsb2F0KHVhLnNsaWNlKHVhLmluZGV4T2YoJ2FuZHJvaWQnKSArIDgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IGFuZHJvaWRWZXJzaW9uIDwgNC40O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVhLmluZGV4T2YoJ3NhZmFyaScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8IDZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uTWF0Y2ggPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhbXFwuXFxkXSspL2kpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ3NzTG9hZFBhdGNoID0gKHZlcnNpb25NYXRjaCAmJiB2ZXJzaW9uTWF0Y2hbMV0gJiYgcGFyc2VGbG9hdCh2ZXJzaW9uTWF0Y2hbMV0pIDwgNik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHVzZUNzc0xvYWRQYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJpZXMgPSAxMDAwOyAvLyAqIDIwID0gMjAwMDAgbWlsaXNlY29uZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gJGludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2hlZXQuY3NzUnVsZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGludGVydmFsLmNhbmNlbChpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwub25sb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigtLXRyaWVzIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwub25lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAkZGVsZWdhdGU7XHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxufSkoYW5ndWxhcik7XHJcbiJdfQ==</pre></td></tr>
|
|
</table></pre>
|
|
|
|
</div>
|
|
<div class="footer">
|
|
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Fri Feb 03 2017 10:04:58 GMT+0100 (Paris, Madrid)</div>
|
|
</div>
|
|
<script src="../prettify.js"></script>
|
|
<script>
|
|
window.onload = function () {
|
|
if (typeof prettyPrint === 'function') {
|
|
prettyPrint();
|
|
}
|
|
};
|
|
</script>
|
|
<script src="../sorter.js"></script>
|
|
</body>
|
|
</html>
|