cx 23.4.3 → 23.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/charts.css +649 -0
- package/dist/charts.js +4811 -0
- package/dist/data.js +2109 -0
- package/dist/hooks.js +146 -0
- package/dist/manifest.js +1373 -0
- package/dist/reset.css +89 -0
- package/dist/svg.css +19 -0
- package/dist/svg.js +807 -0
- package/dist/ui.js +4456 -0
- package/dist/util.js +1538 -0
- package/dist/widgets.css +5242 -0
- package/dist/widgets.js +19417 -0
- package/package.json +1 -1
package/dist/util.js
ADDED
|
@@ -0,0 +1,1538 @@
|
|
|
1
|
+
var Console = {
|
|
2
|
+
log: function log() {
|
|
3
|
+
var _console;
|
|
4
|
+
if (typeof window != "undefined" && window.console) (_console = console).log.apply(_console, arguments);
|
|
5
|
+
},
|
|
6
|
+
warn: function warn() {
|
|
7
|
+
var _console2;
|
|
8
|
+
if (typeof window != "undefined" && window.console) (_console2 = console).warn.apply(_console2, arguments);
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
var activeFlags$1 = {
|
|
13
|
+
deprecated: true,
|
|
14
|
+
};
|
|
15
|
+
function debug(flag) {
|
|
16
|
+
if (process.env.NODE_ENV !== "production") {
|
|
17
|
+
if (!activeFlags$1[flag]) return;
|
|
18
|
+
Console.log.apply(Console, arguments);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
var Debug = {
|
|
22
|
+
enable: function enable(flag) {
|
|
23
|
+
if (process.env.NODE_ENV !== "production") {
|
|
24
|
+
activeFlags$1[flag] = true;
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
disable: function disable(flag) {
|
|
28
|
+
if (process.env.NODE_ENV !== "production") {
|
|
29
|
+
activeFlags$1[flag] = false;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
log: debug,
|
|
33
|
+
};
|
|
34
|
+
var renderFlag = "render";
|
|
35
|
+
var prepareFlag = "prepare";
|
|
36
|
+
var processDataFlag = "process-data";
|
|
37
|
+
var cleanupFlag = "cleanup";
|
|
38
|
+
var menuFlag = "menu";
|
|
39
|
+
var focusFlag = "focus";
|
|
40
|
+
var internalFlag = "internal";
|
|
41
|
+
var shouldUpdateFlag = "should-update";
|
|
42
|
+
var appDataFlag = "app-data";
|
|
43
|
+
var tooltipsFlag = "tooltips";
|
|
44
|
+
var deprecatedFlag = "deprecated";
|
|
45
|
+
var destroyFlag = "destroy";
|
|
46
|
+
|
|
47
|
+
function isNumber(n) {
|
|
48
|
+
return typeof n === "number";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function findFirst(el, condition) {
|
|
52
|
+
if (condition(el)) return el;
|
|
53
|
+
var children = el.childNodes;
|
|
54
|
+
if (children)
|
|
55
|
+
for (var i = 0; i < children.length; i++) {
|
|
56
|
+
var child = findFirst(children[i], condition);
|
|
57
|
+
if (child) return child;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
function findFirstChild(el, condition) {
|
|
62
|
+
var children = el.childNodes;
|
|
63
|
+
if (children)
|
|
64
|
+
for (var i = 0; i < children.length; i++) {
|
|
65
|
+
var child = findFirst(children[i], condition);
|
|
66
|
+
if (child) return child;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
function closest(el, condition) {
|
|
71
|
+
while (el) {
|
|
72
|
+
if (condition(el)) return el;
|
|
73
|
+
el = el.parentNode;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
function closestParent(el, condition) {
|
|
78
|
+
return el && closest(el.parentNode, condition);
|
|
79
|
+
}
|
|
80
|
+
function isFocused(el) {
|
|
81
|
+
return document.activeElement == el;
|
|
82
|
+
}
|
|
83
|
+
function isFocusedDeep(el) {
|
|
84
|
+
return document.activeElement == el || (document.activeElement && el.contains(document.activeElement));
|
|
85
|
+
}
|
|
86
|
+
var focusableWithoutTabIndex = ["INPUT", "SELECT", "TEXTAREA", "A", "BUTTON"];
|
|
87
|
+
function isFocusable(el) {
|
|
88
|
+
var firstPass = el && isNumber(el.tabIndex) && el.tabIndex >= 0;
|
|
89
|
+
if (!firstPass) return false;
|
|
90
|
+
if (focusableWithoutTabIndex.indexOf(el.tagName) != -1 && !el.hasAttribute("disabled")) return true;
|
|
91
|
+
return el.hasAttribute("tabindex");
|
|
92
|
+
}
|
|
93
|
+
function getFocusedElement() {
|
|
94
|
+
return document.activeElement;
|
|
95
|
+
}
|
|
96
|
+
function isDescendant(el, descEl) {
|
|
97
|
+
return el.contains(descEl);
|
|
98
|
+
}
|
|
99
|
+
function isSelfOrDescendant(el, descEl) {
|
|
100
|
+
return el == descEl || el.contains(descEl);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var globalCacheIdentifier = 1;
|
|
104
|
+
var GlobalCacheIdentifier = /*#__PURE__*/ (function () {
|
|
105
|
+
function GlobalCacheIdentifier() {}
|
|
106
|
+
GlobalCacheIdentifier.get = function get() {
|
|
107
|
+
return globalCacheIdentifier;
|
|
108
|
+
};
|
|
109
|
+
GlobalCacheIdentifier.change = function change() {
|
|
110
|
+
globalCacheIdentifier++;
|
|
111
|
+
};
|
|
112
|
+
return GlobalCacheIdentifier;
|
|
113
|
+
})();
|
|
114
|
+
|
|
115
|
+
function isUndefined(v) {
|
|
116
|
+
return v === undefined;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function isArray(a) {
|
|
120
|
+
return Array.isArray(a);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
//Culture dependent formatters are defined in the ui package.
|
|
124
|
+
|
|
125
|
+
var defaultFormatter = function defaultFormatter(v) {
|
|
126
|
+
return v.toString();
|
|
127
|
+
};
|
|
128
|
+
var formatFactory = {
|
|
129
|
+
string: function string() {
|
|
130
|
+
return defaultFormatter;
|
|
131
|
+
},
|
|
132
|
+
wrap: function wrap(part0, prefix, suffix) {
|
|
133
|
+
if (!prefix) prefix = "";
|
|
134
|
+
if (!suffix) suffix = "";
|
|
135
|
+
return function (value) {
|
|
136
|
+
return prefix + value.toString() + suffix;
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
fixed: function fixed(part0, digits) {
|
|
140
|
+
return function (value) {
|
|
141
|
+
return value.toFixed(digits);
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
prefix: function prefix(part0, _prefix) {
|
|
145
|
+
if (!_prefix) _prefix = "";
|
|
146
|
+
return function (value) {
|
|
147
|
+
return _prefix + value.toString();
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
suffix: function suffix(part0, _suffix) {
|
|
151
|
+
if (!_suffix) _suffix = "";
|
|
152
|
+
return function (value) {
|
|
153
|
+
return value.toString() + _suffix;
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
uppercase: function uppercase() {
|
|
157
|
+
return function (value) {
|
|
158
|
+
return value.toString().toUpperCase();
|
|
159
|
+
};
|
|
160
|
+
},
|
|
161
|
+
lowercase: function lowercase() {
|
|
162
|
+
return function (value) {
|
|
163
|
+
return value.toString().toLowerCase();
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
urlencode: function urlencode() {
|
|
167
|
+
return function (value) {
|
|
168
|
+
return encodeURIComponent(value);
|
|
169
|
+
};
|
|
170
|
+
},
|
|
171
|
+
number: function number(part0, minFractionDigits, maxFractionDigits) {
|
|
172
|
+
var _resolveMinMaxFractio = resolveMinMaxFractionDigits(minFractionDigits, maxFractionDigits),
|
|
173
|
+
minimumFractionDigits = _resolveMinMaxFractio.minimumFractionDigits,
|
|
174
|
+
maximumFractionDigits = _resolveMinMaxFractio.maximumFractionDigits;
|
|
175
|
+
var trimmable = maximumFractionDigits - minimumFractionDigits;
|
|
176
|
+
if (trimmable > 0) {
|
|
177
|
+
if (minimumFractionDigits == 0) ++trimmable;
|
|
178
|
+
return function (value) {
|
|
179
|
+
return trimFractionZeros(value.toFixed(maximumFractionDigits), trimmable);
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return function (value) {
|
|
183
|
+
return value.toFixed(maximumFractionDigits);
|
|
184
|
+
};
|
|
185
|
+
},
|
|
186
|
+
percentage: function percentage(part0, minFractionDigits, maxFractionDigits) {
|
|
187
|
+
var numberFormatter = formatFactory.number(part0, minFractionDigits, maxFractionDigits);
|
|
188
|
+
return function (value) {
|
|
189
|
+
return numberFormatter(value * 100) + "%";
|
|
190
|
+
};
|
|
191
|
+
},
|
|
192
|
+
percentageSign: function percentageSign(part0, minFractionDigits, maxFractionDigits) {
|
|
193
|
+
var numberFormatter = formatFactory.number(part0, minFractionDigits, maxFractionDigits);
|
|
194
|
+
return function (value) {
|
|
195
|
+
return numberFormatter(value) + "%";
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
date: function date() {
|
|
199
|
+
return function (value) {
|
|
200
|
+
var date = new Date(value);
|
|
201
|
+
return date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear();
|
|
202
|
+
};
|
|
203
|
+
},
|
|
204
|
+
time: function time() {
|
|
205
|
+
return function (value) {
|
|
206
|
+
var date = new Date(value);
|
|
207
|
+
var h = date.getHours() >= 10 ? date.getHours() : "0" + date.getHours();
|
|
208
|
+
var m = date.getMinutes() >= 10 ? date.getMinutes() : "0" + date.getMinutes();
|
|
209
|
+
return h + ":" + m;
|
|
210
|
+
};
|
|
211
|
+
},
|
|
212
|
+
datetime: function datetime() {
|
|
213
|
+
var date = formatFactory.date();
|
|
214
|
+
var time = formatFactory.time();
|
|
215
|
+
return function (value) {
|
|
216
|
+
return date(value) + " " + time(value);
|
|
217
|
+
};
|
|
218
|
+
},
|
|
219
|
+
ellipsis: function ellipsis(part0, length, where) {
|
|
220
|
+
length = Number(length);
|
|
221
|
+
if (!(length > 3)) length = 10;
|
|
222
|
+
switch (where) {
|
|
223
|
+
default:
|
|
224
|
+
case "end":
|
|
225
|
+
return function (value) {
|
|
226
|
+
var s = String(value);
|
|
227
|
+
if (s.length > length) return s.substring(0, length - 3) + "...";
|
|
228
|
+
return s;
|
|
229
|
+
};
|
|
230
|
+
case "start":
|
|
231
|
+
return function (value) {
|
|
232
|
+
var s = String(value);
|
|
233
|
+
if (s.length > length) return "..." + s.substring(s.length - length + 3);
|
|
234
|
+
return s;
|
|
235
|
+
};
|
|
236
|
+
case "middle":
|
|
237
|
+
return function (value) {
|
|
238
|
+
var s = String(value);
|
|
239
|
+
if (s.length > length) {
|
|
240
|
+
var x = Math.floor(length - 2) / 2;
|
|
241
|
+
return s.substring(0, x) + "..." + s.substring(s.length - (length - 3 - x));
|
|
242
|
+
}
|
|
243
|
+
return s;
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
formatFactory.s = formatFactory.str = formatFactory.string;
|
|
249
|
+
formatFactory.f = formatFactory.fixed;
|
|
250
|
+
formatFactory.n = formatFactory.number;
|
|
251
|
+
formatFactory.p = formatFactory.percentage;
|
|
252
|
+
formatFactory.ps = formatFactory.percentageSign;
|
|
253
|
+
formatFactory.d = formatFactory.date;
|
|
254
|
+
formatFactory.t = formatFactory.time;
|
|
255
|
+
formatFactory.dt = formatFactory.datetime;
|
|
256
|
+
function buildFormatter(format) {
|
|
257
|
+
var formatter = defaultFormatter,
|
|
258
|
+
nullText = "";
|
|
259
|
+
if (format) {
|
|
260
|
+
var pipeParts = format.split("|");
|
|
261
|
+
nullText = pipeParts[1] || "";
|
|
262
|
+
var colonSepParts = pipeParts[0].split(":");
|
|
263
|
+
var _loop = function _loop() {
|
|
264
|
+
var parts = colonSepParts[i].split(";");
|
|
265
|
+
var factory = formatFactory[parts[0]];
|
|
266
|
+
if (!factory) debug("Unknown string format: " + format);
|
|
267
|
+
else if (i == 0) formatter = factory.apply(void 0, parts);
|
|
268
|
+
else {
|
|
269
|
+
var outerFmt = factory.apply(void 0, parts);
|
|
270
|
+
var innerFmt = formatter;
|
|
271
|
+
formatter = function formatter(v) {
|
|
272
|
+
return outerFmt(innerFmt(v));
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
for (var i = 0; i < colonSepParts.length; i++) {
|
|
277
|
+
_loop();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return function (v) {
|
|
281
|
+
return v == null || v === "" ? nullText : formatter(v);
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
var format = {
|
|
285
|
+
cache: {},
|
|
286
|
+
};
|
|
287
|
+
function getFormatCache() {
|
|
288
|
+
if (format.cacheIdentifier != GlobalCacheIdentifier.get()) {
|
|
289
|
+
format = {
|
|
290
|
+
cache: {},
|
|
291
|
+
cacheIdentifier: GlobalCacheIdentifier.get(),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
return format.cache;
|
|
295
|
+
}
|
|
296
|
+
function getFormatter(format) {
|
|
297
|
+
if (!format) format = "";
|
|
298
|
+
var formatCache = getFormatCache();
|
|
299
|
+
var formatter = formatCache[format];
|
|
300
|
+
if (!formatter) formatter = formatCache[format] = buildFormatter(format);
|
|
301
|
+
return formatter;
|
|
302
|
+
}
|
|
303
|
+
var Format = /*#__PURE__*/ (function () {
|
|
304
|
+
function Format() {}
|
|
305
|
+
Format.value = function value(v, format) {
|
|
306
|
+
var formatter = getFormatter(format);
|
|
307
|
+
return formatter(v);
|
|
308
|
+
};
|
|
309
|
+
Format.parse = function parse(format) {
|
|
310
|
+
return getFormatter(format);
|
|
311
|
+
};
|
|
312
|
+
Format.register = function register(format, formatter) {
|
|
313
|
+
this.registerFactory(format, function () {
|
|
314
|
+
return formatter;
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
Format.registerFactory = function registerFactory(format, factory) {
|
|
318
|
+
var _this = this;
|
|
319
|
+
if (isArray(format))
|
|
320
|
+
format.forEach(function (f) {
|
|
321
|
+
return _this.registerFactory(f, factory);
|
|
322
|
+
});
|
|
323
|
+
else formatFactory[format] = factory;
|
|
324
|
+
};
|
|
325
|
+
return Format;
|
|
326
|
+
})();
|
|
327
|
+
function resolveMinMaxFractionDigits(minimumFractionDigits, maximumFractionDigits) {
|
|
328
|
+
minimumFractionDigits = minimumFractionDigits != null ? Number(minimumFractionDigits) : minimumFractionDigits;
|
|
329
|
+
maximumFractionDigits = maximumFractionDigits != null ? Number(maximumFractionDigits) : maximumFractionDigits;
|
|
330
|
+
if (isNumber(minimumFractionDigits)) {
|
|
331
|
+
if (isUndefined(maximumFractionDigits)) maximumFractionDigits = minimumFractionDigits;
|
|
332
|
+
else if (isNumber(maximumFractionDigits) && maximumFractionDigits < minimumFractionDigits)
|
|
333
|
+
maximumFractionDigits = minimumFractionDigits;
|
|
334
|
+
} else if (minimumFractionDigits == null && maximumFractionDigits == null) {
|
|
335
|
+
minimumFractionDigits = 0;
|
|
336
|
+
maximumFractionDigits = 18;
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
minimumFractionDigits: minimumFractionDigits,
|
|
340
|
+
maximumFractionDigits: maximumFractionDigits,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function trimFractionZeros(str, max) {
|
|
344
|
+
var cnt = 0,
|
|
345
|
+
l = str.length;
|
|
346
|
+
while (cnt < max && (str[l - 1 - cnt] === "0" || str[l - 1 - cnt] === ".")) cnt++;
|
|
347
|
+
return cnt > 0 ? str.substring(0, l - cnt) : str;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
//http://stackoverflow.com/questions/36428283/arrow-function-eval-preprocessor
|
|
351
|
+
|
|
352
|
+
function expandFatArrows(code) {
|
|
353
|
+
var arrowHeadRegex = RegExp(/(\((?:\w+,)*\w+\)|\(\)|\w+)[\r\t ]*=>\s*/);
|
|
354
|
+
var arrowHeadMatch = arrowHeadRegex.exec(code);
|
|
355
|
+
if (arrowHeadMatch) {
|
|
356
|
+
//if no match return as it is
|
|
357
|
+
var params = arrowHeadMatch[1];
|
|
358
|
+
if (params.charAt(0) !== "(") {
|
|
359
|
+
params = "(" + params + ")";
|
|
360
|
+
}
|
|
361
|
+
var index = arrowHeadMatch.index;
|
|
362
|
+
var startCode = code.substring(0, index);
|
|
363
|
+
var bodyAndNext = code.substring(index + arrowHeadMatch[0].length);
|
|
364
|
+
var curlyCount = 0;
|
|
365
|
+
var curlyPresent = false;
|
|
366
|
+
var singleLineBodyEnd = 0;
|
|
367
|
+
var bodyEnd = 0;
|
|
368
|
+
for (var i = 0; i < bodyAndNext.length; i++) {
|
|
369
|
+
var ch = bodyAndNext[i];
|
|
370
|
+
if (ch === "{") {
|
|
371
|
+
curlyPresent = true;
|
|
372
|
+
curlyCount++;
|
|
373
|
+
} else if (ch === "}") {
|
|
374
|
+
curlyCount--;
|
|
375
|
+
} else if (!curlyPresent) {
|
|
376
|
+
//any character other than { or }
|
|
377
|
+
singleLineBodyEnd = getSingeLineBodyEnd(bodyAndNext, i);
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
if (curlyPresent && curlyCount === 0) {
|
|
381
|
+
bodyEnd = i;
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
var body;
|
|
386
|
+
if (curlyPresent) {
|
|
387
|
+
if (curlyCount !== 0) {
|
|
388
|
+
throw Error("Could not match curly braces for function at : " + index);
|
|
389
|
+
}
|
|
390
|
+
body = bodyAndNext.substring(0, bodyEnd + 1);
|
|
391
|
+
var restCode = bodyAndNext.substring(bodyEnd + 1);
|
|
392
|
+
var expandedFun = "(function " + params + body + ").bind(this)";
|
|
393
|
+
code = startCode + expandedFun + restCode;
|
|
394
|
+
} else {
|
|
395
|
+
if (singleLineBodyEnd <= 0) {
|
|
396
|
+
throw Error("could not get function body at : " + index);
|
|
397
|
+
}
|
|
398
|
+
body = bodyAndNext.substring(0, singleLineBodyEnd + 1);
|
|
399
|
+
restCode = bodyAndNext.substring(singleLineBodyEnd + 1);
|
|
400
|
+
expandedFun = "(function " + params + "{return " + body + "}).bind(this)";
|
|
401
|
+
code = startCode + expandedFun + restCode;
|
|
402
|
+
}
|
|
403
|
+
return expandFatArrows(code); //recursive call
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
return code;
|
|
407
|
+
}
|
|
408
|
+
function getSingeLineBodyEnd(bodyCode, startI) {
|
|
409
|
+
var braceCount = 0;
|
|
410
|
+
var openingQuote = null;
|
|
411
|
+
for (var i = startI; i < bodyCode.length; i++) {
|
|
412
|
+
var ch = bodyCode[i];
|
|
413
|
+
var lastCh = null;
|
|
414
|
+
if (ch === '"' || ch === "'") {
|
|
415
|
+
openingQuote = ch;
|
|
416
|
+
i = skipQuotedString(bodyCode, openingQuote, i);
|
|
417
|
+
ch = bodyCode[i];
|
|
418
|
+
}
|
|
419
|
+
if (i !== 0 && !bodyCode[i - 1].match(/[\t\r ]/)) {
|
|
420
|
+
lastCh = bodyCode[i - 1];
|
|
421
|
+
}
|
|
422
|
+
if (ch === "{" || ch === "(") {
|
|
423
|
+
braceCount++;
|
|
424
|
+
} else if (ch === "}" || ch === ")") {
|
|
425
|
+
braceCount--;
|
|
426
|
+
}
|
|
427
|
+
if (braceCount < 0 || (lastCh !== "." && ch === "\n")) {
|
|
428
|
+
return i - 1;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return bodyCode.length;
|
|
432
|
+
}
|
|
433
|
+
function skipQuotedString(bodyAndNext, openingQuote, i) {
|
|
434
|
+
var matchFound = false; //matching quote
|
|
435
|
+
var openingQuoteI = i;
|
|
436
|
+
i++;
|
|
437
|
+
for (; i < bodyAndNext.length; i++) {
|
|
438
|
+
var ch = bodyAndNext[i];
|
|
439
|
+
var lastCh = i !== 0 ? bodyAndNext[i - 1] : null;
|
|
440
|
+
if (ch !== openingQuote || (ch === openingQuote && lastCh === "\\")) {
|
|
441
|
+
continue; //skip quoted string
|
|
442
|
+
} else if (ch === openingQuote) {
|
|
443
|
+
//matched closing quote
|
|
444
|
+
matchFound = false;
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
if (matchFound) {
|
|
449
|
+
throw new Error("Could not find closing quote for quote at : " + openingQuoteI);
|
|
450
|
+
}
|
|
451
|
+
return i;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
function innerTextTrim(str) {
|
|
455
|
+
str = str.replace(/\t/g, "");
|
|
456
|
+
str = str.replace(/(\s*[\r\n]\s*)/g, "");
|
|
457
|
+
return str;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
function isDigit(x) {
|
|
461
|
+
return x >= "0" && x <= "9";
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
function isFunction(f) {
|
|
465
|
+
return typeof f === "function";
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
function isObject(o) {
|
|
469
|
+
return o !== null && typeof o === "object";
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
function isPromise(x) {
|
|
473
|
+
return isObject(x) && isFunction(x.then);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
var isTouch = null;
|
|
477
|
+
function isTouchDevice() {
|
|
478
|
+
if (isTouch == null) isTouch = typeof window != "undefined" && "ontouchstart" in window;
|
|
479
|
+
return isTouch;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
var KeyCode = {
|
|
483
|
+
backspace: 8,
|
|
484
|
+
tab: 9,
|
|
485
|
+
enter: 13,
|
|
486
|
+
shift: 16,
|
|
487
|
+
ctrl: 17,
|
|
488
|
+
alt: 18,
|
|
489
|
+
esc: 27,
|
|
490
|
+
space: 32,
|
|
491
|
+
pageUp: 33,
|
|
492
|
+
pageDown: 34,
|
|
493
|
+
end: 35,
|
|
494
|
+
home: 36,
|
|
495
|
+
left: 37,
|
|
496
|
+
up: 38,
|
|
497
|
+
right: 39,
|
|
498
|
+
down: 40,
|
|
499
|
+
insert: 45,
|
|
500
|
+
delete: 46,
|
|
501
|
+
a: 65,
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
function parseStyle(str) {
|
|
505
|
+
if (typeof str != "string") return str;
|
|
506
|
+
var style = {},
|
|
507
|
+
parts = str.split(";");
|
|
508
|
+
for (var i = 0; i < parts.length; i++) {
|
|
509
|
+
var part = parts[i];
|
|
510
|
+
var colonIndex = part.indexOf(":");
|
|
511
|
+
if (colonIndex == -1) continue;
|
|
512
|
+
var name = part.substring(0, colonIndex).trim();
|
|
513
|
+
var value = part.substring(colonIndex + 1).trim();
|
|
514
|
+
|
|
515
|
+
//avoid css variables
|
|
516
|
+
if (!name.startsWith("--")) {
|
|
517
|
+
name = name
|
|
518
|
+
.split("-")
|
|
519
|
+
.map(function (p, i) {
|
|
520
|
+
return i == 0 ? p : p[0].toUpperCase() + p.substring(1);
|
|
521
|
+
})
|
|
522
|
+
.join("");
|
|
523
|
+
}
|
|
524
|
+
style[name] = value;
|
|
525
|
+
}
|
|
526
|
+
return style;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
function quoteStr(str) {
|
|
530
|
+
if (str == null) return str;
|
|
531
|
+
return JSON.stringify(str);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
function findScrollableParent(sourceEl, horizontal) {
|
|
535
|
+
if (horizontal === void 0) {
|
|
536
|
+
horizontal = false;
|
|
537
|
+
}
|
|
538
|
+
if (!sourceEl) return null;
|
|
539
|
+
var scrollParent = closest(sourceEl, function (el) {
|
|
540
|
+
if (el.nodeType != Node.ELEMENT_NODE) return false;
|
|
541
|
+
if (!horizontal && el.clientHeight >= el.scrollHeight) return false;
|
|
542
|
+
if (horizontal && el.clientWidth >= el.scrollWidth) return false;
|
|
543
|
+
var overflow = getComputedStyle(el)[horizontal ? "overflow-x" : "overflow-y"];
|
|
544
|
+
return overflow == "auto" || overflow == "scroll";
|
|
545
|
+
});
|
|
546
|
+
return scrollParent || sourceEl.ownerDocument.scrollingElement || sourceEl.ownerDocument.documentElement;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
function getParentFrameBoundingClientRect(el) {
|
|
550
|
+
if (el.ownerDocument != document) {
|
|
551
|
+
var frames = document.getElementsByTagName("iframe");
|
|
552
|
+
for (var i = 0; i < frames.length; i++) {
|
|
553
|
+
if (frames[i].contentDocument == el.ownerDocument) {
|
|
554
|
+
return frames[i].getBoundingClientRect();
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return {
|
|
559
|
+
top: 0,
|
|
560
|
+
left: 0,
|
|
561
|
+
right: window.innerWidth,
|
|
562
|
+
bottom: window.innerHeight,
|
|
563
|
+
width: window.innerWidth,
|
|
564
|
+
height: window.innerHeight,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
function getTopLevelBoundingClientRect(el) {
|
|
569
|
+
var bounds = el.getBoundingClientRect();
|
|
570
|
+
var offset = getParentFrameBoundingClientRect(el);
|
|
571
|
+
return {
|
|
572
|
+
top: bounds.top + offset.top,
|
|
573
|
+
left: bounds.left + offset.left,
|
|
574
|
+
bottom: bounds.bottom + offset.top,
|
|
575
|
+
right: bounds.right + offset.left,
|
|
576
|
+
width: bounds.right - bounds.left,
|
|
577
|
+
height: bounds.bottom - bounds.top,
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
function getScrollerBoundingClientRect(scrollEl, topLevel) {
|
|
582
|
+
if (topLevel === void 0) {
|
|
583
|
+
topLevel = false;
|
|
584
|
+
}
|
|
585
|
+
if (scrollEl == scrollEl.ownerDocument.body || scrollEl == scrollEl.ownerDocument.documentElement) {
|
|
586
|
+
if (topLevel) return getParentFrameBoundingClientRect(scrollEl.ownerDocument.body);
|
|
587
|
+
return {
|
|
588
|
+
left: 0,
|
|
589
|
+
top: 0,
|
|
590
|
+
right: window.innerWidth,
|
|
591
|
+
bottom: window.innerHeight,
|
|
592
|
+
width: window.innerWidth,
|
|
593
|
+
height: window.innerHeight,
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
return topLevel ? getTopLevelBoundingClientRect(scrollEl) : scrollEl.getBoundingClientRect();
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function scrollElementIntoView(el, vertical, horizontal, inflate, scrollContainer) {
|
|
600
|
+
if (vertical === void 0) {
|
|
601
|
+
vertical = true;
|
|
602
|
+
}
|
|
603
|
+
if (horizontal === void 0) {
|
|
604
|
+
horizontal = false;
|
|
605
|
+
}
|
|
606
|
+
if (inflate === void 0) {
|
|
607
|
+
inflate = 0;
|
|
608
|
+
}
|
|
609
|
+
if (scrollContainer === void 0) {
|
|
610
|
+
scrollContainer = null;
|
|
611
|
+
}
|
|
612
|
+
if (horizontal) {
|
|
613
|
+
var parentEl = scrollContainer || findScrollableParent(el, true);
|
|
614
|
+
if (parentEl) {
|
|
615
|
+
var pr = getScrollerBoundingClientRect(parentEl);
|
|
616
|
+
var er = el.getBoundingClientRect();
|
|
617
|
+
var scrollbarWidth = parentEl.offsetWidth - parentEl.clientWidth;
|
|
618
|
+
if (er.right + inflate > pr.right - scrollbarWidth)
|
|
619
|
+
parentEl.scrollLeft = Math.max(0, parentEl.scrollLeft + er.right + inflate - pr.right + scrollbarWidth);
|
|
620
|
+
if (er.left - inflate < pr.left)
|
|
621
|
+
parentEl.scrollLeft = Math.max(0, parentEl.scrollLeft + er.left - inflate - pr.left);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
if (vertical) {
|
|
625
|
+
var _parentEl = scrollContainer || findScrollableParent(el);
|
|
626
|
+
if (_parentEl) {
|
|
627
|
+
var _pr = getScrollerBoundingClientRect(_parentEl);
|
|
628
|
+
var _er = el.getBoundingClientRect();
|
|
629
|
+
var scrollbarHeight = _parentEl.offsetHeight - _parentEl.clientHeight;
|
|
630
|
+
if (_er.bottom + inflate > _pr.bottom - scrollbarHeight)
|
|
631
|
+
_parentEl.scrollTop = Math.max(0, _parentEl.scrollTop + _er.bottom + inflate - _pr.bottom + scrollbarHeight);
|
|
632
|
+
if (_er.top - inflate < _pr.top)
|
|
633
|
+
_parentEl.scrollTop = Math.max(0, _parentEl.scrollTop + _er.top - inflate - _pr.top);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
function shallowEquals(v1, v2) {
|
|
639
|
+
if (v1 === v2) return true;
|
|
640
|
+
var t1 = typeof v1,
|
|
641
|
+
t2 = typeof v2,
|
|
642
|
+
k,
|
|
643
|
+
i;
|
|
644
|
+
if (t1 != t2) return false;
|
|
645
|
+
if (v1 == null || v2 == null)
|
|
646
|
+
//this captures undefined too
|
|
647
|
+
return false;
|
|
648
|
+
if (t1 == "object") {
|
|
649
|
+
if (isArray(v1)) {
|
|
650
|
+
if (!isArray(v2) || v1.length != v2.length) return false;
|
|
651
|
+
for (i = 0; i < v1.length; i++) if (!shallowEquals(v1[i], v2[i])) return false;
|
|
652
|
+
return true;
|
|
653
|
+
} else {
|
|
654
|
+
for (k in v1) if (v1.hasOwnProperty(k) && (!v2.hasOwnProperty(k) || v1[k] !== v2[k])) return false;
|
|
655
|
+
for (k in v2) if (v2.hasOwnProperty(k) && (!v1.hasOwnProperty(k) || v1[k] !== v2[k])) return false;
|
|
656
|
+
return true;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
return v1 === v2;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
var appLoopFlag = "app-loop";
|
|
663
|
+
var vdomRenderFlag = "vdom-render";
|
|
664
|
+
var counter = {};
|
|
665
|
+
var activeFlags = {};
|
|
666
|
+
var nowImpl = function nowImpl() {
|
|
667
|
+
return Date.now();
|
|
668
|
+
};
|
|
669
|
+
function now() {
|
|
670
|
+
if (process.env.NODE_ENV !== "production") {
|
|
671
|
+
return nowImpl();
|
|
672
|
+
} else {
|
|
673
|
+
return 0;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
function enable(flag) {
|
|
677
|
+
if (process.env.NODE_ENV !== "production") {
|
|
678
|
+
activeFlags[flag] = true;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
function disable(flag) {
|
|
682
|
+
if (process.env.NODE_ENV !== "production") {
|
|
683
|
+
activeFlags[flag] = false;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
function count(flag) {
|
|
687
|
+
if (process.env.NODE_ENV !== "production") {
|
|
688
|
+
if (!activeFlags[flag]) return;
|
|
689
|
+
return (counter[flag] = (counter[flag] || 0) + 1);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
function log(flag) {
|
|
693
|
+
if (process.env.NODE_ENV !== "production") {
|
|
694
|
+
if (!activeFlags[flag]) return;
|
|
695
|
+
Console.log.apply(Console, arguments);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
if (
|
|
699
|
+
process.env.NODE_ENV !== "production" &&
|
|
700
|
+
typeof window != "undefined" &&
|
|
701
|
+
window.performance &&
|
|
702
|
+
window.performance.now
|
|
703
|
+
) {
|
|
704
|
+
nowImpl = function nowImpl() {
|
|
705
|
+
return performance.now();
|
|
706
|
+
};
|
|
707
|
+
}
|
|
708
|
+
var Timing = {
|
|
709
|
+
now: now,
|
|
710
|
+
enable: enable,
|
|
711
|
+
disable: disable,
|
|
712
|
+
count: count,
|
|
713
|
+
log: log,
|
|
714
|
+
};
|
|
715
|
+
|
|
716
|
+
function dateDiff(d1, d2) {
|
|
717
|
+
return d1.getTime() - d2.getTime();
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
function zeroTime(d) {
|
|
721
|
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
function monthStart(d) {
|
|
725
|
+
return new Date(d.getFullYear(), d.getMonth(), 1);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
function lowerBoundCheck(date, minDate, exclusive) {
|
|
729
|
+
if (exclusive === void 0) {
|
|
730
|
+
exclusive = false;
|
|
731
|
+
}
|
|
732
|
+
var d = dateDiff(date, minDate);
|
|
733
|
+
return d > 0 || (d == 0 && !exclusive);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
function upperBoundCheck(date, maxDate, exclusive) {
|
|
737
|
+
if (exclusive === void 0) {
|
|
738
|
+
exclusive = false;
|
|
739
|
+
}
|
|
740
|
+
var d = dateDiff(date, maxDate);
|
|
741
|
+
return d < 0 || (d == 0 && !exclusive);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
function maxDate() {
|
|
745
|
+
var max = arguments[0];
|
|
746
|
+
for (var i = 1; i < arguments.length; i++) if (dateDiff(max, arguments[i]) < 0) max = arguments[i];
|
|
747
|
+
return max;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
function minDate() {
|
|
751
|
+
var min = arguments[0];
|
|
752
|
+
for (var i = 1; i < arguments.length; i++) if (dateDiff(min, arguments[i]) > 0) min = arguments[i];
|
|
753
|
+
return min;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
function sameDate(d1, d2) {
|
|
757
|
+
return d1.getDate() == d2.getDate() && d1.getMonth() == d2.getMonth() && d1.getYear() == d2.getYear();
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
//https://stackoverflow.com/questions/17415579/how-to-iso-8601-format-a-date-with-timezone-offset-in-javascript
|
|
761
|
+
|
|
762
|
+
function pad(num) {
|
|
763
|
+
var norm = Math.floor(Math.abs(num));
|
|
764
|
+
return (norm < 10 ? "0" : "") + norm;
|
|
765
|
+
}
|
|
766
|
+
function encodeDateWithTimezoneOffset(date) {
|
|
767
|
+
var tzo = -date.getTimezoneOffset(),
|
|
768
|
+
dif = tzo >= 0 ? "+" : "-";
|
|
769
|
+
return (
|
|
770
|
+
date.getFullYear() +
|
|
771
|
+
"-" +
|
|
772
|
+
pad(date.getMonth() + 1) +
|
|
773
|
+
"-" +
|
|
774
|
+
pad(date.getDate()) +
|
|
775
|
+
"T" +
|
|
776
|
+
pad(date.getHours()) +
|
|
777
|
+
":" +
|
|
778
|
+
pad(date.getMinutes()) +
|
|
779
|
+
":" +
|
|
780
|
+
pad(date.getSeconds()) +
|
|
781
|
+
dif +
|
|
782
|
+
pad(tzo / 60) +
|
|
783
|
+
":" +
|
|
784
|
+
pad(tzo % 60)
|
|
785
|
+
);
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
function hue2rgb(p, q, t) {
|
|
789
|
+
if (t < 0) t += 1;
|
|
790
|
+
if (t > 1) t -= 1;
|
|
791
|
+
if (t < 1 / 6) return p + (q - p) * 6 * t;
|
|
792
|
+
if (t < 1 / 2) return q;
|
|
793
|
+
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
|
|
794
|
+
return p;
|
|
795
|
+
}
|
|
796
|
+
function hslToRgb(h, s, l) {
|
|
797
|
+
h /= 360;
|
|
798
|
+
s /= 100;
|
|
799
|
+
l /= 100;
|
|
800
|
+
var r, g, b;
|
|
801
|
+
if (s == 0) {
|
|
802
|
+
r = g = b = l; // achromatic
|
|
803
|
+
} else {
|
|
804
|
+
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
805
|
+
var p = 2 * l - q;
|
|
806
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
807
|
+
g = hue2rgb(p, q, h);
|
|
808
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
809
|
+
}
|
|
810
|
+
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
function parseColor(color) {
|
|
814
|
+
if (!color) return null;
|
|
815
|
+
if (color[0] == "#") return parseHexColor(color);
|
|
816
|
+
if (color.indexOf("rgb") == 0) return parseRgbColor(color);
|
|
817
|
+
if (color.indexOf("hsl") == 0) return parseHslColor(color);
|
|
818
|
+
throw new Error("Unknown color format: " + color + ".");
|
|
819
|
+
}
|
|
820
|
+
function parseHexColor(color) {
|
|
821
|
+
if (!color) return null;
|
|
822
|
+
if (color[0] != "#") throw new Error("Invalid color " + color + ".");
|
|
823
|
+
if (color.length == 4)
|
|
824
|
+
return {
|
|
825
|
+
type: "rgba",
|
|
826
|
+
r: parseInt(color.charAt(1), 16) * 0x11,
|
|
827
|
+
g: parseInt(color.charAt(2), 16) * 0x11,
|
|
828
|
+
b: parseInt(color.charAt(3), 16) * 0x11,
|
|
829
|
+
a: 1,
|
|
830
|
+
};
|
|
831
|
+
if (color.length != 7) throw new Error("Invalid color " + color + ".");
|
|
832
|
+
return {
|
|
833
|
+
type: "rgba",
|
|
834
|
+
r: parseInt(color.substr(1, 2), 16),
|
|
835
|
+
g: parseInt(color.substr(3, 2), 16),
|
|
836
|
+
b: parseInt(color.substr(5, 2), 16),
|
|
837
|
+
a: 1,
|
|
838
|
+
};
|
|
839
|
+
}
|
|
840
|
+
function parseRgbColor(color) {
|
|
841
|
+
if (!color) return null;
|
|
842
|
+
color = color.trim();
|
|
843
|
+
var values;
|
|
844
|
+
if (color.indexOf("rgba(") == 0) {
|
|
845
|
+
values = color
|
|
846
|
+
.substring(5, color.length - 1)
|
|
847
|
+
.split(",")
|
|
848
|
+
.map(function (x) {
|
|
849
|
+
return parseFloat(x.trim());
|
|
850
|
+
});
|
|
851
|
+
if (values.length != 4) throw new Error("Invalid color " + color + ".");
|
|
852
|
+
return {
|
|
853
|
+
type: "rgba",
|
|
854
|
+
r: values[0],
|
|
855
|
+
g: values[1],
|
|
856
|
+
b: values[2],
|
|
857
|
+
a: values[3],
|
|
858
|
+
};
|
|
859
|
+
}
|
|
860
|
+
if (color.indexOf("rgb(") != 0) throw new Error("Invalid color " + color + ".");
|
|
861
|
+
values = color
|
|
862
|
+
.substring(5, color.length - 1)
|
|
863
|
+
.split(",")
|
|
864
|
+
.map(function (x) {
|
|
865
|
+
return parseFloat(x.trim());
|
|
866
|
+
});
|
|
867
|
+
if (values.length != 3) throw new Error("Invalid color " + color + ".");
|
|
868
|
+
return {
|
|
869
|
+
type: "rgba",
|
|
870
|
+
r: values[0],
|
|
871
|
+
g: values[1],
|
|
872
|
+
b: values[2],
|
|
873
|
+
a: 1,
|
|
874
|
+
};
|
|
875
|
+
}
|
|
876
|
+
function parseHslColor(color) {
|
|
877
|
+
if (!color) return null;
|
|
878
|
+
color = color.trim();
|
|
879
|
+
var values;
|
|
880
|
+
if (color.indexOf("hsla(") == 0) {
|
|
881
|
+
values = color
|
|
882
|
+
.substring(5, color.length - 1)
|
|
883
|
+
.split(",")
|
|
884
|
+
.map(function (x) {
|
|
885
|
+
return parseFloat(x.trim());
|
|
886
|
+
});
|
|
887
|
+
if (values.length != 4) throw new Error("Invalid color " + color + ".");
|
|
888
|
+
return {
|
|
889
|
+
type: "hsla",
|
|
890
|
+
h: values[0],
|
|
891
|
+
s: values[1],
|
|
892
|
+
l: values[2],
|
|
893
|
+
a: values[3],
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
if (color.indexOf("hsl(") != 0) throw new Error("Invalid color " + color + ".");
|
|
897
|
+
values = color
|
|
898
|
+
.substring(5, color.length - 1)
|
|
899
|
+
.split(",")
|
|
900
|
+
.map(function (x) {
|
|
901
|
+
return parseFloat(x.trim());
|
|
902
|
+
});
|
|
903
|
+
if (values.length != 3) throw new Error("Invalid color " + color + ".");
|
|
904
|
+
return {
|
|
905
|
+
type: "hsla",
|
|
906
|
+
h: values[0],
|
|
907
|
+
s: values[1],
|
|
908
|
+
l: values[2],
|
|
909
|
+
a: 1,
|
|
910
|
+
};
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
function componentToHex(c) {
|
|
914
|
+
var hex = c.toString(16);
|
|
915
|
+
return hex.length == 1 ? "0" + hex : hex;
|
|
916
|
+
}
|
|
917
|
+
function rgbToHex(r, g, b) {
|
|
918
|
+
return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
function rgbToHsl(r, g, b) {
|
|
922
|
+
r /= 255;
|
|
923
|
+
g /= 255;
|
|
924
|
+
b /= 255;
|
|
925
|
+
var max = Math.max(r, g, b),
|
|
926
|
+
min = Math.min(r, g, b);
|
|
927
|
+
var h,
|
|
928
|
+
s,
|
|
929
|
+
l = (max + min) / 2;
|
|
930
|
+
if (max == min) {
|
|
931
|
+
h = s = 0; // achromatic
|
|
932
|
+
} else {
|
|
933
|
+
var d = max - min;
|
|
934
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
935
|
+
switch (max) {
|
|
936
|
+
case r:
|
|
937
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
938
|
+
break;
|
|
939
|
+
case g:
|
|
940
|
+
h = (b - r) / d + 2;
|
|
941
|
+
break;
|
|
942
|
+
case b:
|
|
943
|
+
h = (r - g) / d + 4;
|
|
944
|
+
break;
|
|
945
|
+
}
|
|
946
|
+
h /= 6;
|
|
947
|
+
}
|
|
948
|
+
return [h * 360, s * 100, l * 100];
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
//shamelessly taken from https://davidwalsh.name/vendor-prefix
|
|
952
|
+
|
|
953
|
+
var getPrefixes = function getPrefixes() {
|
|
954
|
+
var styles = window.getComputedStyle(document.documentElement, ""),
|
|
955
|
+
pre = (Array.prototype.slice
|
|
956
|
+
.call(styles)
|
|
957
|
+
.join("")
|
|
958
|
+
.match(/-(moz|webkit|ms)-/) ||
|
|
959
|
+
(styles.OLink === "" && ["", "o"]))[1],
|
|
960
|
+
dom = "WebKit|Moz|MS|O".match(new RegExp("(" + pre + ")", "i"))[1];
|
|
961
|
+
return {
|
|
962
|
+
dom: dom,
|
|
963
|
+
lowercase: pre,
|
|
964
|
+
css: "-" + pre + "-",
|
|
965
|
+
js: pre[0].toUpperCase() + pre.substr(1),
|
|
966
|
+
};
|
|
967
|
+
};
|
|
968
|
+
var prefixes;
|
|
969
|
+
function getVendorPrefix(type) {
|
|
970
|
+
if (!prefixes) prefixes = getPrefixes();
|
|
971
|
+
return prefixes[type];
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
var stopPropagation = function stopPropagation(e) {
|
|
975
|
+
return e.stopPropagation();
|
|
976
|
+
};
|
|
977
|
+
var preventDefault = function preventDefault(e) {
|
|
978
|
+
return e.preventDefault();
|
|
979
|
+
};
|
|
980
|
+
|
|
981
|
+
function escapeSpecialRegexCharacters(s) {
|
|
982
|
+
return s.replace(/[\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
function getTermsAndRegularExpressions(query) {
|
|
986
|
+
if (!query) return [[], []];
|
|
987
|
+
var terms = query.split(" ").filter(Boolean);
|
|
988
|
+
var regexes = terms.map(function (word) {
|
|
989
|
+
return new RegExp(escapeSpecialRegexCharacters(word), "gi");
|
|
990
|
+
});
|
|
991
|
+
return [terms, regexes];
|
|
992
|
+
}
|
|
993
|
+
function getSearchQueryPredicate(query, options) {
|
|
994
|
+
var _getTermsAndRegularEx = getTermsAndRegularExpressions(query),
|
|
995
|
+
terms = _getTermsAndRegularEx[0],
|
|
996
|
+
regexes = _getTermsAndRegularEx[1];
|
|
997
|
+
if (terms.length == 0)
|
|
998
|
+
return function () {
|
|
999
|
+
return true;
|
|
1000
|
+
};
|
|
1001
|
+
if (regexes.length == 1) {
|
|
1002
|
+
var regex = regexes[0];
|
|
1003
|
+
return function (text) {
|
|
1004
|
+
return text && text.match(regex);
|
|
1005
|
+
};
|
|
1006
|
+
}
|
|
1007
|
+
return function (text) {
|
|
1008
|
+
return (
|
|
1009
|
+
text &&
|
|
1010
|
+
regexes.every(function (re) {
|
|
1011
|
+
return text.match(re);
|
|
1012
|
+
})
|
|
1013
|
+
);
|
|
1014
|
+
};
|
|
1015
|
+
}
|
|
1016
|
+
var highlighterCache = {};
|
|
1017
|
+
function getSearchQueryHighlighter(query, options) {
|
|
1018
|
+
var _getTermsAndRegularEx2 = getTermsAndRegularExpressions(query),
|
|
1019
|
+
terms = _getTermsAndRegularEx2[0],
|
|
1020
|
+
regexes = _getTermsAndRegularEx2[1];
|
|
1021
|
+
if (terms.length == 0)
|
|
1022
|
+
return function (text) {
|
|
1023
|
+
return [text];
|
|
1024
|
+
};
|
|
1025
|
+
if (highlighterCache[query]) return highlighterCache[query];
|
|
1026
|
+
var result = function result(query) {
|
|
1027
|
+
var chunks = [query];
|
|
1028
|
+
for (var i = 0; i < regexes.length; i++) {
|
|
1029
|
+
var newChunks = [];
|
|
1030
|
+
for (var j = 0; j < chunks.length; j++) {
|
|
1031
|
+
var at = 0;
|
|
1032
|
+
var chunk = chunks[j];
|
|
1033
|
+
var parts = chunk.split(regexes[i]);
|
|
1034
|
+
for (var k = 0; k < parts.length; k++) {
|
|
1035
|
+
newChunks.push(parts[k]);
|
|
1036
|
+
at += parts[k].length;
|
|
1037
|
+
if (k < parts.length - 1) {
|
|
1038
|
+
newChunks.push(chunk.substr(at, terms[i].length));
|
|
1039
|
+
at += terms[i].length;
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
chunks = newChunks;
|
|
1044
|
+
}
|
|
1045
|
+
return chunks;
|
|
1046
|
+
};
|
|
1047
|
+
if (options != null && options.cache) {
|
|
1048
|
+
highlighterCache[query] = result;
|
|
1049
|
+
setTimeout(function () {
|
|
1050
|
+
delete highlighterCache[query];
|
|
1051
|
+
}, (options == null ? void 0 : options.cachePeriod) || 5000);
|
|
1052
|
+
}
|
|
1053
|
+
return result;
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
var passiveEventsSupported = null;
|
|
1057
|
+
function browserSupportsPassiveEventHandlers() {
|
|
1058
|
+
if (passiveEventsSupported == null) {
|
|
1059
|
+
try {
|
|
1060
|
+
passiveEventsSupported = false;
|
|
1061
|
+
var options = Object.defineProperty({}, "passive", {
|
|
1062
|
+
get: function get() {
|
|
1063
|
+
passiveEventsSupported = true;
|
|
1064
|
+
},
|
|
1065
|
+
});
|
|
1066
|
+
window.addEventListener("test", null, options);
|
|
1067
|
+
} catch (e) {}
|
|
1068
|
+
}
|
|
1069
|
+
return passiveEventsSupported;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
var lastTouchEvent = 0;
|
|
1073
|
+
var isTouchDetectionEnabled = false;
|
|
1074
|
+
function enableTouchEventDetection() {
|
|
1075
|
+
if (isTouchDevice() && !isTouchDetectionEnabled) {
|
|
1076
|
+
var options = true; //capture
|
|
1077
|
+
|
|
1078
|
+
if (browserSupportsPassiveEventHandlers())
|
|
1079
|
+
options = {
|
|
1080
|
+
passive: true,
|
|
1081
|
+
capture: true,
|
|
1082
|
+
};
|
|
1083
|
+
document.addEventListener(
|
|
1084
|
+
"touchstart",
|
|
1085
|
+
function () {
|
|
1086
|
+
//console.log('TOUCHSTART');
|
|
1087
|
+
lastTouchEvent = Date.now();
|
|
1088
|
+
},
|
|
1089
|
+
options
|
|
1090
|
+
);
|
|
1091
|
+
document.addEventListener(
|
|
1092
|
+
"touchmove",
|
|
1093
|
+
function () {
|
|
1094
|
+
//console.log('TOUCHMOVE');
|
|
1095
|
+
lastTouchEvent = Date.now();
|
|
1096
|
+
},
|
|
1097
|
+
options
|
|
1098
|
+
);
|
|
1099
|
+
document.addEventListener(
|
|
1100
|
+
"touchend",
|
|
1101
|
+
function () {
|
|
1102
|
+
lastTouchEvent = Date.now();
|
|
1103
|
+
//console.log('TOUCHEND');
|
|
1104
|
+
},
|
|
1105
|
+
options
|
|
1106
|
+
);
|
|
1107
|
+
isTouchDetectionEnabled = true;
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
function isTouchEvent() {
|
|
1111
|
+
return isTouchDevice() && (!isTouchDetectionEnabled || Date.now() - lastTouchEvent < 1000);
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
//enable touch event detection if there is no performance penalty on scrolling
|
|
1115
|
+
if (isTouchDevice() && browserSupportsPassiveEventHandlers()) enableTouchEventDetection();
|
|
1116
|
+
|
|
1117
|
+
function debounce(callback, delay) {
|
|
1118
|
+
var timer;
|
|
1119
|
+
var result = function result() {
|
|
1120
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1121
|
+
args[_key] = arguments[_key];
|
|
1122
|
+
}
|
|
1123
|
+
var context = this;
|
|
1124
|
+
clearTimeout(timer);
|
|
1125
|
+
timer = setTimeout(function () {
|
|
1126
|
+
callback.apply(context, args);
|
|
1127
|
+
}, delay);
|
|
1128
|
+
};
|
|
1129
|
+
result.reset = function reset() {
|
|
1130
|
+
clearTimeout(timer);
|
|
1131
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
1132
|
+
args[_key2] = arguments[_key2];
|
|
1133
|
+
}
|
|
1134
|
+
callback.apply(this, args);
|
|
1135
|
+
};
|
|
1136
|
+
return result;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
function throttle(callback, delay) {
|
|
1140
|
+
var timer, context, args;
|
|
1141
|
+
return function () {
|
|
1142
|
+
context = this;
|
|
1143
|
+
args = arguments;
|
|
1144
|
+
if (!timer)
|
|
1145
|
+
timer = setTimeout(function () {
|
|
1146
|
+
callback.apply(context, args);
|
|
1147
|
+
timer = null;
|
|
1148
|
+
}, delay);
|
|
1149
|
+
};
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
var SubscriberList = /*#__PURE__*/ (function () {
|
|
1153
|
+
function SubscriberList() {
|
|
1154
|
+
this.clear();
|
|
1155
|
+
}
|
|
1156
|
+
var _proto = SubscriberList.prototype;
|
|
1157
|
+
_proto.getSlot = function getSlot() {
|
|
1158
|
+
if (this.freeSlots.length) return this.freeSlots.pop();
|
|
1159
|
+
var slot = String(this.nextSlot++);
|
|
1160
|
+
return slot;
|
|
1161
|
+
};
|
|
1162
|
+
_proto.recycle = function recycle(slot, callback) {
|
|
1163
|
+
if (this.subscriptions[slot] === callback) {
|
|
1164
|
+
this.freeSlots.push(slot);
|
|
1165
|
+
delete this.subscriptions[slot];
|
|
1166
|
+
this.subscriptionCount--;
|
|
1167
|
+
}
|
|
1168
|
+
};
|
|
1169
|
+
_proto.subscribe = function subscribe(callback) {
|
|
1170
|
+
var _this = this;
|
|
1171
|
+
var slot = this.getSlot();
|
|
1172
|
+
this.subscriptions[slot] = callback;
|
|
1173
|
+
this.subscriptionCount++;
|
|
1174
|
+
return function () {
|
|
1175
|
+
_this.recycle(slot, callback);
|
|
1176
|
+
};
|
|
1177
|
+
};
|
|
1178
|
+
_proto.clear = function clear() {
|
|
1179
|
+
this.subscriptions = {};
|
|
1180
|
+
this.freeSlots = [];
|
|
1181
|
+
this.nextSlot = 1;
|
|
1182
|
+
this.subscriptionCount = 0;
|
|
1183
|
+
};
|
|
1184
|
+
_proto.isEmpty = function isEmpty() {
|
|
1185
|
+
return this.subscriptionCount == 0;
|
|
1186
|
+
};
|
|
1187
|
+
_proto.getSubscribers = function getSubscribers() {
|
|
1188
|
+
var result = [];
|
|
1189
|
+
for (var key in this.subscriptions) result.push(this.subscriptions[key]);
|
|
1190
|
+
return result;
|
|
1191
|
+
};
|
|
1192
|
+
_proto.notify = function notify() {
|
|
1193
|
+
for (var key in this.subscriptions) {
|
|
1194
|
+
var _this$subscriptions;
|
|
1195
|
+
(_this$subscriptions = this.subscriptions)[key].apply(_this$subscriptions, arguments);
|
|
1196
|
+
}
|
|
1197
|
+
};
|
|
1198
|
+
_proto.execute = function execute(callback) {
|
|
1199
|
+
for (var key in this.subscriptions) callback(this.subscriptions[key]);
|
|
1200
|
+
};
|
|
1201
|
+
return SubscriberList;
|
|
1202
|
+
})();
|
|
1203
|
+
|
|
1204
|
+
function isNonEmptyArray(x) {
|
|
1205
|
+
return Array.isArray(x) && x.length > 0;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
function isString(s) {
|
|
1209
|
+
return typeof s === "string";
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
function isDefined(v) {
|
|
1213
|
+
return v !== undefined;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
function routeAppend(base, path) {
|
|
1217
|
+
var result = base;
|
|
1218
|
+
if (path) {
|
|
1219
|
+
if (path[0] == "/") {
|
|
1220
|
+
if (result[result.length - 1] == "/") result += path.substring(1);
|
|
1221
|
+
else result += path;
|
|
1222
|
+
} else if (result[result.length - 1] == "/") result += path;
|
|
1223
|
+
else result += "/" + path;
|
|
1224
|
+
}
|
|
1225
|
+
return result;
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
function reverseSlice(array, start) {
|
|
1229
|
+
var last = array.length - 1;
|
|
1230
|
+
while (start < last) {
|
|
1231
|
+
var x = array[start];
|
|
1232
|
+
array[start] = array[last];
|
|
1233
|
+
array[last] = x;
|
|
1234
|
+
start++;
|
|
1235
|
+
last--;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
//IE sometimes returns null while other browsers always return document.body.
|
|
1240
|
+
function getActiveElement() {
|
|
1241
|
+
return document.activeElement || document.body;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
var componentAlias = {};
|
|
1245
|
+
var Component = /*#__PURE__*/ (function () {
|
|
1246
|
+
function Component(config) {
|
|
1247
|
+
if (config && config.$props) {
|
|
1248
|
+
Object.assign(config, config.$props);
|
|
1249
|
+
delete config.$props;
|
|
1250
|
+
}
|
|
1251
|
+
Object.assign(this, config);
|
|
1252
|
+
}
|
|
1253
|
+
Component.alias = function alias(_alias, type) {
|
|
1254
|
+
var _this = this;
|
|
1255
|
+
if (type) {
|
|
1256
|
+
type.prototype.componentAlias = _alias;
|
|
1257
|
+
componentAlias[this.namespace + _alias] = type;
|
|
1258
|
+
}
|
|
1259
|
+
//decorator usage
|
|
1260
|
+
else
|
|
1261
|
+
return function (t) {
|
|
1262
|
+
_this.alias(_alias, t);
|
|
1263
|
+
return t;
|
|
1264
|
+
};
|
|
1265
|
+
};
|
|
1266
|
+
Component.create = function create(typeAlias, config, more) {
|
|
1267
|
+
var _this2 = this;
|
|
1268
|
+
if (!typeAlias) return this.factory(typeAlias, config, more);
|
|
1269
|
+
if (typeAlias.isComponent) return typeAlias;
|
|
1270
|
+
if (isComponentFactory(typeAlias)) return this.create(typeAlias.create(config));
|
|
1271
|
+
if (isArray(typeAlias))
|
|
1272
|
+
return typeAlias.map(function (c) {
|
|
1273
|
+
return _this2.create(c, config, more);
|
|
1274
|
+
});
|
|
1275
|
+
if (typeAlias.$type) return this.create(typeAlias.$type, typeAlias, config);
|
|
1276
|
+
if (typeAlias.type) return this.create(typeAlias.type, typeAlias, config);
|
|
1277
|
+
var cmpType, alias;
|
|
1278
|
+
if (typeAlias.isComponentType) cmpType = typeAlias;
|
|
1279
|
+
else if (isFunction(typeAlias)) {
|
|
1280
|
+
if (this.factory) return this.factory(typeAlias, config, more);
|
|
1281
|
+
throw new Error("Unsupported component type " + typeAlias + ".");
|
|
1282
|
+
} else if (isString(typeAlias)) {
|
|
1283
|
+
alias = this.namespace + typeAlias;
|
|
1284
|
+
cmpType = componentAlias[alias];
|
|
1285
|
+
if (!cmpType) {
|
|
1286
|
+
if (typeAlias && this.factory) return this.factory(typeAlias, config, more);
|
|
1287
|
+
throw new Error("Unknown component alias " + alias + ".");
|
|
1288
|
+
}
|
|
1289
|
+
} else if (typeof typeAlias == "object") {
|
|
1290
|
+
cmpType = typeAlias.type || typeAlias.$type;
|
|
1291
|
+
if (!cmpType) {
|
|
1292
|
+
cmpType = this;
|
|
1293
|
+
more = more ? Object.assign({}, config, more) : config;
|
|
1294
|
+
config = typeAlias;
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
if (isArray(config))
|
|
1298
|
+
return config.map(function (cfg) {
|
|
1299
|
+
return _this2.create(cmpType, cfg, more);
|
|
1300
|
+
});
|
|
1301
|
+
var cfg = config;
|
|
1302
|
+
if (more) cfg = Object.assign({}, config, more);
|
|
1303
|
+
var cmp = new cmpType(cfg);
|
|
1304
|
+
if (cmpType.autoInit && cmp.init) cmp.init();
|
|
1305
|
+
return cmp;
|
|
1306
|
+
};
|
|
1307
|
+
return Component;
|
|
1308
|
+
})();
|
|
1309
|
+
Component.prototype.isComponent = true;
|
|
1310
|
+
Component.isComponentType = true;
|
|
1311
|
+
Component.namespace = "";
|
|
1312
|
+
Component.autoInit = false;
|
|
1313
|
+
Component.factory = function (alias, config, more) {
|
|
1314
|
+
throw new Error("Unknown component alias " + alias + ".");
|
|
1315
|
+
};
|
|
1316
|
+
function createComponentFactory(factory, jsxDriver, meta) {
|
|
1317
|
+
factory.$isComponentFactory = true;
|
|
1318
|
+
factory.$meta = meta;
|
|
1319
|
+
factory.create = jsxDriver;
|
|
1320
|
+
return factory;
|
|
1321
|
+
}
|
|
1322
|
+
function isComponentFactory(factory) {
|
|
1323
|
+
return factory && factory.$isComponentFactory;
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
function onIdleCallback(callback, options) {
|
|
1327
|
+
var token = null;
|
|
1328
|
+
if (typeof requestIdleCallback == "function") token = requestIdleCallback(callback, options);
|
|
1329
|
+
else token = setTimeout(callback, 1);
|
|
1330
|
+
return function () {
|
|
1331
|
+
if (typeof cancelIdleCallback == "function") cancelIdleCallback(token);
|
|
1332
|
+
else clearTimeout(token);
|
|
1333
|
+
};
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
function validatedDebounce(callback, valueGetter, delay) {
|
|
1337
|
+
var timer;
|
|
1338
|
+
var result = function result() {
|
|
1339
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1340
|
+
args[_key] = arguments[_key];
|
|
1341
|
+
}
|
|
1342
|
+
clearTimeout(timer);
|
|
1343
|
+
var prev = valueGetter();
|
|
1344
|
+
timer = setTimeout(function () {
|
|
1345
|
+
var now = valueGetter();
|
|
1346
|
+
if (prev !== now) return;
|
|
1347
|
+
callback.apply(void 0, args);
|
|
1348
|
+
}, delay);
|
|
1349
|
+
};
|
|
1350
|
+
result.reset = function reset() {
|
|
1351
|
+
clearTimeout(timer);
|
|
1352
|
+
callback.apply(void 0, arguments);
|
|
1353
|
+
};
|
|
1354
|
+
return result;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
function addEventListenerWithOptions(element, event, callback, options) {
|
|
1358
|
+
var thirdParam = browserSupportsPassiveEventHandlers() ? options : options.capture === true;
|
|
1359
|
+
element.addEventListener(event, callback, thirdParam);
|
|
1360
|
+
return function () {
|
|
1361
|
+
element.removeEventListener(event, callback, thirdParam);
|
|
1362
|
+
};
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
function coalesce() {
|
|
1366
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1367
|
+
args[_key] = arguments[_key];
|
|
1368
|
+
}
|
|
1369
|
+
for (var i = 0; i < args.length; i++) {
|
|
1370
|
+
if (args[i] != null) return args[i];
|
|
1371
|
+
}
|
|
1372
|
+
return null;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
function dummyCallback() {}
|
|
1376
|
+
|
|
1377
|
+
function calculateNaturalElementHeight(el) {
|
|
1378
|
+
if (el.scrollHeight > el.clientHeight) return naturalElementHeight(el);
|
|
1379
|
+
var h = el.offsetHeight;
|
|
1380
|
+
for (var i = 0; i < el.children.length; i++) {
|
|
1381
|
+
var child = el.children[i];
|
|
1382
|
+
if (child.scrollHeight > child.clientHeight) {
|
|
1383
|
+
h -= child.offsetHeight;
|
|
1384
|
+
h += naturalElementHeight(child);
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
return h;
|
|
1388
|
+
}
|
|
1389
|
+
function naturalElementHeight(el) {
|
|
1390
|
+
var h = el.offsetHeight;
|
|
1391
|
+
var overflow = el.scrollHeight - el.clientHeight;
|
|
1392
|
+
if (overflow <= 0) return h;
|
|
1393
|
+
var computedStyle = getComputedStyle(el);
|
|
1394
|
+
var maxH = parseFloat(computedStyle.getPropertyValue("max-height"));
|
|
1395
|
+
if (!isNaN(maxH)) return Math.min(parseFloat(maxH), h + overflow);
|
|
1396
|
+
return h + overflow;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
function isTextInputElement(el) {
|
|
1400
|
+
return el.tagName == "INPUT" || el.tagName == "TEXTAREA";
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
var TraversalStack = /*#__PURE__*/ (function () {
|
|
1404
|
+
function TraversalStack() {
|
|
1405
|
+
this.data = [];
|
|
1406
|
+
}
|
|
1407
|
+
var _proto = TraversalStack.prototype;
|
|
1408
|
+
_proto.push = function push(node) {
|
|
1409
|
+
if (this.data.length == 0) this.hop();
|
|
1410
|
+
this.data[this.data.length - 1].elements.push(node);
|
|
1411
|
+
};
|
|
1412
|
+
_proto.hop = function hop() {
|
|
1413
|
+
this.data.push({
|
|
1414
|
+
elements: [],
|
|
1415
|
+
index: 0,
|
|
1416
|
+
});
|
|
1417
|
+
};
|
|
1418
|
+
_proto.pop = function pop() {
|
|
1419
|
+
while (this.data.length > 0) {
|
|
1420
|
+
var line = this.data[this.data.length - 1];
|
|
1421
|
+
if (line.index < line.elements.length) {
|
|
1422
|
+
line.index++;
|
|
1423
|
+
return line.elements[line.index - 1];
|
|
1424
|
+
}
|
|
1425
|
+
this.data.pop();
|
|
1426
|
+
}
|
|
1427
|
+
return null;
|
|
1428
|
+
};
|
|
1429
|
+
_proto.empty = function empty() {
|
|
1430
|
+
while (this.data.length > 0) {
|
|
1431
|
+
var line = this.data[this.data.length - 1];
|
|
1432
|
+
if (line.index < line.elements.length) return false;
|
|
1433
|
+
this.data.pop();
|
|
1434
|
+
}
|
|
1435
|
+
return true;
|
|
1436
|
+
};
|
|
1437
|
+
return TraversalStack;
|
|
1438
|
+
})();
|
|
1439
|
+
|
|
1440
|
+
export {
|
|
1441
|
+
Component,
|
|
1442
|
+
Console,
|
|
1443
|
+
Debug,
|
|
1444
|
+
Format,
|
|
1445
|
+
GlobalCacheIdentifier,
|
|
1446
|
+
KeyCode,
|
|
1447
|
+
SubscriberList,
|
|
1448
|
+
Timing,
|
|
1449
|
+
TraversalStack,
|
|
1450
|
+
addEventListenerWithOptions,
|
|
1451
|
+
appDataFlag,
|
|
1452
|
+
appLoopFlag,
|
|
1453
|
+
browserSupportsPassiveEventHandlers,
|
|
1454
|
+
calculateNaturalElementHeight,
|
|
1455
|
+
cleanupFlag,
|
|
1456
|
+
closest,
|
|
1457
|
+
closestParent,
|
|
1458
|
+
coalesce,
|
|
1459
|
+
createComponentFactory,
|
|
1460
|
+
dateDiff,
|
|
1461
|
+
debounce,
|
|
1462
|
+
debug,
|
|
1463
|
+
deprecatedFlag,
|
|
1464
|
+
destroyFlag,
|
|
1465
|
+
dummyCallback,
|
|
1466
|
+
enableTouchEventDetection,
|
|
1467
|
+
encodeDateWithTimezoneOffset,
|
|
1468
|
+
escapeSpecialRegexCharacters,
|
|
1469
|
+
expandFatArrows,
|
|
1470
|
+
findFirst,
|
|
1471
|
+
findFirstChild,
|
|
1472
|
+
findScrollableParent,
|
|
1473
|
+
focusFlag,
|
|
1474
|
+
getActiveElement,
|
|
1475
|
+
getFocusedElement,
|
|
1476
|
+
getParentFrameBoundingClientRect,
|
|
1477
|
+
getScrollerBoundingClientRect,
|
|
1478
|
+
getSearchQueryHighlighter,
|
|
1479
|
+
getSearchQueryPredicate,
|
|
1480
|
+
getTopLevelBoundingClientRect,
|
|
1481
|
+
getVendorPrefix,
|
|
1482
|
+
hslToRgb,
|
|
1483
|
+
innerTextTrim,
|
|
1484
|
+
internalFlag,
|
|
1485
|
+
isArray,
|
|
1486
|
+
isComponentFactory,
|
|
1487
|
+
isDefined,
|
|
1488
|
+
isDescendant,
|
|
1489
|
+
isDigit,
|
|
1490
|
+
isFocusable,
|
|
1491
|
+
isFocused,
|
|
1492
|
+
isFocusedDeep,
|
|
1493
|
+
isFunction,
|
|
1494
|
+
isNonEmptyArray,
|
|
1495
|
+
isNumber,
|
|
1496
|
+
isObject,
|
|
1497
|
+
isPromise,
|
|
1498
|
+
isSelfOrDescendant,
|
|
1499
|
+
isString,
|
|
1500
|
+
isTextInputElement,
|
|
1501
|
+
isTouchDevice,
|
|
1502
|
+
isTouchEvent,
|
|
1503
|
+
isUndefined,
|
|
1504
|
+
lowerBoundCheck,
|
|
1505
|
+
maxDate,
|
|
1506
|
+
menuFlag,
|
|
1507
|
+
minDate,
|
|
1508
|
+
monthStart,
|
|
1509
|
+
now,
|
|
1510
|
+
onIdleCallback,
|
|
1511
|
+
parseColor,
|
|
1512
|
+
parseHexColor,
|
|
1513
|
+
parseHslColor,
|
|
1514
|
+
parseRgbColor,
|
|
1515
|
+
parseStyle,
|
|
1516
|
+
prepareFlag,
|
|
1517
|
+
preventDefault,
|
|
1518
|
+
processDataFlag,
|
|
1519
|
+
quoteStr,
|
|
1520
|
+
renderFlag,
|
|
1521
|
+
resolveMinMaxFractionDigits,
|
|
1522
|
+
reverseSlice,
|
|
1523
|
+
rgbToHex,
|
|
1524
|
+
rgbToHsl,
|
|
1525
|
+
routeAppend,
|
|
1526
|
+
sameDate,
|
|
1527
|
+
scrollElementIntoView,
|
|
1528
|
+
shallowEquals,
|
|
1529
|
+
shouldUpdateFlag,
|
|
1530
|
+
stopPropagation,
|
|
1531
|
+
throttle,
|
|
1532
|
+
tooltipsFlag,
|
|
1533
|
+
trimFractionZeros,
|
|
1534
|
+
upperBoundCheck,
|
|
1535
|
+
validatedDebounce,
|
|
1536
|
+
vdomRenderFlag,
|
|
1537
|
+
zeroTime,
|
|
1538
|
+
};
|