@tko/builder 4.0.0-alpha9.0 → 4.0.0-beta1.0
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/Builder.js +214 -0
- package/dist/Builder.js.map +7 -0
- package/dist/index.cjs +4232 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +7 -0
- package/package.json +31 -31
- package/dist/builder.es6.js +0 -166
- package/dist/builder.es6.js.map +0 -1
- package/dist/builder.js +0 -220
- package/dist/builder.js.map +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,4232 @@
|
|
|
1
|
+
// @tko/builder 🥊 4.0.0-beta1.0 CommonJS
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
|
|
19
|
+
|
|
20
|
+
// index.ts
|
|
21
|
+
var builder_exports = {};
|
|
22
|
+
__export(builder_exports, {
|
|
23
|
+
Builder: () => Builder
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(builder_exports);
|
|
26
|
+
|
|
27
|
+
// ../utils/dist/array.js
|
|
28
|
+
var { isArray } = Array;
|
|
29
|
+
function arrayForEach(array, action, thisArg) {
|
|
30
|
+
if (arguments.length > 2) {
|
|
31
|
+
action = action.bind(thisArg);
|
|
32
|
+
}
|
|
33
|
+
for (let i = 0, j = array.length; i < j; ++i) {
|
|
34
|
+
action(array[i], i, array);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function arrayIndexOf(array, item) {
|
|
38
|
+
return (isArray(array) ? array : [...array]).indexOf(item);
|
|
39
|
+
}
|
|
40
|
+
function arrayFirst(array, predicate, predicateOwner) {
|
|
41
|
+
return (isArray(array) ? array : [...array]).find(predicate, predicateOwner);
|
|
42
|
+
}
|
|
43
|
+
function arrayMap(array = [], mapping, thisArg) {
|
|
44
|
+
if (arguments.length > 2) {
|
|
45
|
+
mapping = mapping.bind(thisArg);
|
|
46
|
+
}
|
|
47
|
+
return array === null ? [] : Array.from(array, mapping);
|
|
48
|
+
}
|
|
49
|
+
function arrayRemoveItem(array, itemToRemove) {
|
|
50
|
+
var index = arrayIndexOf(array, itemToRemove);
|
|
51
|
+
if (index > 0) {
|
|
52
|
+
array.splice(index, 1);
|
|
53
|
+
} else if (index === 0) {
|
|
54
|
+
array.shift();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function arrayGetDistinctValues(array = []) {
|
|
58
|
+
const seen = /* @__PURE__ */ new Set();
|
|
59
|
+
if (array === null) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return (isArray(array) ? array : [...array]).filter((item) => seen.has(item) ? false : seen.add(item));
|
|
63
|
+
}
|
|
64
|
+
function arrayFilter(array, predicate, thisArg) {
|
|
65
|
+
if (arguments.length > 2) {
|
|
66
|
+
predicate = predicate.bind(thisArg);
|
|
67
|
+
}
|
|
68
|
+
return array === null ? [] : (isArray(array) ? array : [...array]).filter(predicate);
|
|
69
|
+
}
|
|
70
|
+
function arrayPushAll(array, valuesToPush) {
|
|
71
|
+
if (isArray(valuesToPush)) {
|
|
72
|
+
array.push.apply(array, valuesToPush);
|
|
73
|
+
} else {
|
|
74
|
+
for (var i = 0, j = valuesToPush.length; i < j; i++) {
|
|
75
|
+
array.push(valuesToPush[i]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return array;
|
|
79
|
+
}
|
|
80
|
+
function addOrRemoveItem(array, value, included) {
|
|
81
|
+
var existingEntryIndex = arrayIndexOf(typeof array.peek === "function" ? array.peek() : array, value);
|
|
82
|
+
if (existingEntryIndex < 0) {
|
|
83
|
+
if (included) {
|
|
84
|
+
array.push(value);
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
if (!included) {
|
|
88
|
+
array.splice(existingEntryIndex, 1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function makeArray(arrayLikeObject) {
|
|
93
|
+
return Array.from(arrayLikeObject);
|
|
94
|
+
}
|
|
95
|
+
function range(min, max) {
|
|
96
|
+
min = typeof min === "function" ? min() : min;
|
|
97
|
+
max = typeof max === "function" ? max() : max;
|
|
98
|
+
var result = [];
|
|
99
|
+
for (var i = min; i <= max; i++) {
|
|
100
|
+
result.push(i);
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
function findMovesInArrayComparison(left, right, limitFailedCompares) {
|
|
105
|
+
if (left.length && right.length) {
|
|
106
|
+
var failedCompares, l, r, leftItem, rightItem;
|
|
107
|
+
for (failedCompares = l = 0; (!limitFailedCompares || failedCompares < limitFailedCompares) && (leftItem = left[l]); ++l) {
|
|
108
|
+
for (r = 0; rightItem = right[r]; ++r) {
|
|
109
|
+
if (leftItem.value === rightItem.value) {
|
|
110
|
+
leftItem.moved = rightItem.index;
|
|
111
|
+
rightItem.moved = leftItem.index;
|
|
112
|
+
right.splice(r, 1);
|
|
113
|
+
failedCompares = r = 0;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
failedCompares += r;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
var statusNotInOld = "added";
|
|
122
|
+
var statusNotInNew = "deleted";
|
|
123
|
+
function compareArrays(oldArray, newArray, options2) {
|
|
124
|
+
options2 = typeof options2 === "boolean" ? { dontLimitMoves: options2 } : options2 || {};
|
|
125
|
+
oldArray = oldArray || [];
|
|
126
|
+
newArray = newArray || [];
|
|
127
|
+
if (oldArray.length < newArray.length) {
|
|
128
|
+
return compareSmallArrayToBigArray(oldArray, newArray, statusNotInOld, statusNotInNew, options2);
|
|
129
|
+
} else {
|
|
130
|
+
return compareSmallArrayToBigArray(newArray, oldArray, statusNotInNew, statusNotInOld, options2);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, options2) {
|
|
134
|
+
var myMin = Math.min, myMax = Math.max, editDistanceMatrix = [], smlIndex, smlIndexMax = smlArray.length, bigIndex, bigIndexMax = bigArray.length, compareRange = bigIndexMax - smlIndexMax || 1, maxDistance = smlIndexMax + bigIndexMax + 1, thisRow, lastRow, bigIndexMaxForRow, bigIndexMinForRow;
|
|
135
|
+
for (smlIndex = 0; smlIndex <= smlIndexMax; smlIndex++) {
|
|
136
|
+
lastRow = thisRow;
|
|
137
|
+
editDistanceMatrix.push(thisRow = []);
|
|
138
|
+
bigIndexMaxForRow = myMin(bigIndexMax, smlIndex + compareRange);
|
|
139
|
+
bigIndexMinForRow = myMax(0, smlIndex - 1);
|
|
140
|
+
for (bigIndex = bigIndexMinForRow; bigIndex <= bigIndexMaxForRow; bigIndex++) {
|
|
141
|
+
if (!bigIndex) {
|
|
142
|
+
thisRow[bigIndex] = smlIndex + 1;
|
|
143
|
+
} else if (!smlIndex) {
|
|
144
|
+
thisRow[bigIndex] = bigIndex + 1;
|
|
145
|
+
} else if (smlArray[smlIndex - 1] === bigArray[bigIndex - 1]) {
|
|
146
|
+
thisRow[bigIndex] = lastRow[bigIndex - 1];
|
|
147
|
+
} else {
|
|
148
|
+
var northDistance = lastRow[bigIndex] || maxDistance;
|
|
149
|
+
var westDistance = thisRow[bigIndex - 1] || maxDistance;
|
|
150
|
+
thisRow[bigIndex] = myMin(northDistance, westDistance) + 1;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
var editScript = [], meMinusOne, notInSml = [], notInBig = [];
|
|
155
|
+
for (smlIndex = smlIndexMax, bigIndex = bigIndexMax; smlIndex || bigIndex; ) {
|
|
156
|
+
meMinusOne = editDistanceMatrix[smlIndex][bigIndex] - 1;
|
|
157
|
+
if (bigIndex && meMinusOne === editDistanceMatrix[smlIndex][bigIndex - 1]) {
|
|
158
|
+
notInSml.push(editScript[editScript.length] = {
|
|
159
|
+
"status": statusNotInSml,
|
|
160
|
+
"value": bigArray[--bigIndex],
|
|
161
|
+
"index": bigIndex
|
|
162
|
+
});
|
|
163
|
+
} else if (smlIndex && meMinusOne === editDistanceMatrix[smlIndex - 1][bigIndex]) {
|
|
164
|
+
notInBig.push(editScript[editScript.length] = {
|
|
165
|
+
"status": statusNotInBig,
|
|
166
|
+
"value": smlArray[--smlIndex],
|
|
167
|
+
"index": smlIndex
|
|
168
|
+
});
|
|
169
|
+
} else {
|
|
170
|
+
--bigIndex;
|
|
171
|
+
--smlIndex;
|
|
172
|
+
if (!options2.sparse) {
|
|
173
|
+
editScript.push({
|
|
174
|
+
"status": "retained",
|
|
175
|
+
"value": bigArray[bigIndex]
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
findMovesInArrayComparison(notInBig, notInSml, !options2.dontLimitMoves && smlIndexMax * 10);
|
|
181
|
+
return editScript.reverse();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ../utils/dist/options.js
|
|
185
|
+
var options = {
|
|
186
|
+
deferUpdates: false,
|
|
187
|
+
useOnlyNativeEvents: false,
|
|
188
|
+
protoProperty: "__ko_proto__",
|
|
189
|
+
defaultBindingAttribute: "data-bind",
|
|
190
|
+
allowVirtualElements: true,
|
|
191
|
+
bindingGlobals: /* @__PURE__ */ Object.create(null),
|
|
192
|
+
bindingProviderInstance: null,
|
|
193
|
+
createChildContextWithAs: false,
|
|
194
|
+
jQuery: globalThis.jQuery,
|
|
195
|
+
Promise: globalThis.Promise,
|
|
196
|
+
taskScheduler: null,
|
|
197
|
+
debug: false,
|
|
198
|
+
global: globalThis,
|
|
199
|
+
document: globalThis.document,
|
|
200
|
+
filters: {},
|
|
201
|
+
includeDestroyed: false,
|
|
202
|
+
foreachHidesDestroyed: false,
|
|
203
|
+
onError: function(e) {
|
|
204
|
+
throw e;
|
|
205
|
+
},
|
|
206
|
+
set: function(name, value) {
|
|
207
|
+
options[name] = value;
|
|
208
|
+
},
|
|
209
|
+
getBindingHandler() {
|
|
210
|
+
},
|
|
211
|
+
cleanExternalData() {
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
Object.defineProperty(options, "$", {
|
|
215
|
+
get: function() {
|
|
216
|
+
return options.jQuery;
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
var options_default = options;
|
|
220
|
+
|
|
221
|
+
// ../utils/dist/error.js
|
|
222
|
+
function catchFunctionErrors(delegate) {
|
|
223
|
+
if (!options_default.onError) {
|
|
224
|
+
return delegate;
|
|
225
|
+
}
|
|
226
|
+
return (...args) => {
|
|
227
|
+
try {
|
|
228
|
+
return delegate(...args);
|
|
229
|
+
} catch (err) {
|
|
230
|
+
options_default.onError(err);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function deferError(error) {
|
|
235
|
+
safeSetTimeout(function() {
|
|
236
|
+
throw error;
|
|
237
|
+
}, 0);
|
|
238
|
+
}
|
|
239
|
+
function safeSetTimeout(handler, timeout) {
|
|
240
|
+
return setTimeout(catchFunctionErrors(handler), timeout);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ../utils/dist/async.js
|
|
244
|
+
function throttle(callback, timeout) {
|
|
245
|
+
var timeoutInstance;
|
|
246
|
+
return function(...args) {
|
|
247
|
+
if (!timeoutInstance) {
|
|
248
|
+
timeoutInstance = safeSetTimeout(function() {
|
|
249
|
+
timeoutInstance = void 0;
|
|
250
|
+
callback(...args);
|
|
251
|
+
}, timeout);
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function debounce(callback, timeout) {
|
|
256
|
+
var timeoutInstance;
|
|
257
|
+
return function(...args) {
|
|
258
|
+
clearTimeout(timeoutInstance);
|
|
259
|
+
timeoutInstance = safeSetTimeout(() => callback(...args), timeout);
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// ../utils/dist/ie.js
|
|
264
|
+
var ieVersion = options_default.document && function() {
|
|
265
|
+
var version = 3, div2 = options_default.document.createElement("div"), iElems = div2.getElementsByTagName("i");
|
|
266
|
+
while (div2.innerHTML = "<!--[if gt IE " + ++version + "]><i></i><![endif]-->", iElems[0]) {
|
|
267
|
+
}
|
|
268
|
+
if (!version) {
|
|
269
|
+
const userAgent = window.navigator.userAgent;
|
|
270
|
+
return ua.match(/MSIE ([^ ]+)/) || ua.match(/rv:([^ )]+)/);
|
|
271
|
+
}
|
|
272
|
+
return version > 4 ? version : void 0;
|
|
273
|
+
}();
|
|
274
|
+
|
|
275
|
+
// ../utils/dist/object.js
|
|
276
|
+
function hasOwnProperty(obj, propName) {
|
|
277
|
+
return Object.prototype.hasOwnProperty.call(obj, propName);
|
|
278
|
+
}
|
|
279
|
+
function isObjectLike(obj) {
|
|
280
|
+
if (obj === null) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
return typeof obj === "object" || typeof obj === "function";
|
|
284
|
+
}
|
|
285
|
+
function extend(target, source) {
|
|
286
|
+
if (source) {
|
|
287
|
+
for (var prop in source) {
|
|
288
|
+
if (hasOwnProperty(source, prop)) {
|
|
289
|
+
target[prop] = source[prop];
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return target;
|
|
294
|
+
}
|
|
295
|
+
function objectForEach(obj, action) {
|
|
296
|
+
for (var prop in obj) {
|
|
297
|
+
if (hasOwnProperty(obj, prop)) {
|
|
298
|
+
action(prop, obj[prop]);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
function objectMap(source, mapping, thisArg) {
|
|
303
|
+
if (!source) {
|
|
304
|
+
return source;
|
|
305
|
+
}
|
|
306
|
+
if (arguments.length > 2) {
|
|
307
|
+
mapping = mapping.bind(thisArg);
|
|
308
|
+
}
|
|
309
|
+
var target = {};
|
|
310
|
+
for (var prop in source) {
|
|
311
|
+
if (hasOwnProperty(source, prop)) {
|
|
312
|
+
target[prop] = mapping(source[prop], prop, source);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return target;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// ../utils/dist/function.js
|
|
319
|
+
function testOverwrite() {
|
|
320
|
+
try {
|
|
321
|
+
Object.defineProperty(function x() {
|
|
322
|
+
}, "length", {});
|
|
323
|
+
return true;
|
|
324
|
+
} catch (e) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
var functionSupportsLengthOverwrite = testOverwrite();
|
|
329
|
+
function overwriteLengthPropertyIfSupported(fn, descriptor) {
|
|
330
|
+
if (functionSupportsLengthOverwrite) {
|
|
331
|
+
Object.defineProperty(fn, "length", descriptor);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// ../utils/dist/string.js
|
|
336
|
+
function stringTrim(string) {
|
|
337
|
+
return string === null || string === void 0 ? "" : string.trim ? string.trim() : string.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g, "");
|
|
338
|
+
}
|
|
339
|
+
function parseJson(jsonString) {
|
|
340
|
+
if (typeof jsonString === "string") {
|
|
341
|
+
jsonString = stringTrim(jsonString);
|
|
342
|
+
if (jsonString) {
|
|
343
|
+
if (JSON && JSON.parse) {
|
|
344
|
+
return JSON.parse(jsonString);
|
|
345
|
+
}
|
|
346
|
+
return new Function("return " + jsonString)();
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// ../utils/dist/symbol.js
|
|
353
|
+
var useSymbols = typeof Symbol === "function";
|
|
354
|
+
function createSymbolOrString(identifier) {
|
|
355
|
+
return useSymbols ? Symbol(identifier) : identifier;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// ../utils/dist/css.js
|
|
359
|
+
var cssClassNameRegex = /\S+/g;
|
|
360
|
+
function toggleDomNodeCssClass(node, classNames, shouldHaveClass) {
|
|
361
|
+
var addOrRemoveFn;
|
|
362
|
+
if (!classNames) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (typeof node.classList === "object") {
|
|
366
|
+
addOrRemoveFn = node.classList[shouldHaveClass ? "add" : "remove"];
|
|
367
|
+
arrayForEach(classNames.match(cssClassNameRegex), function(className) {
|
|
368
|
+
addOrRemoveFn.call(node.classList, className);
|
|
369
|
+
});
|
|
370
|
+
} else if (typeof node.className["baseVal"] === "string") {
|
|
371
|
+
toggleObjectClassPropertyString(node.className, "baseVal", classNames, shouldHaveClass);
|
|
372
|
+
} else {
|
|
373
|
+
toggleObjectClassPropertyString(node, "className", classNames, shouldHaveClass);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
function toggleObjectClassPropertyString(obj, prop, classNames, shouldHaveClass) {
|
|
377
|
+
var currentClassNames = obj[prop].match(cssClassNameRegex) || [];
|
|
378
|
+
arrayForEach(classNames.match(cssClassNameRegex), function(className) {
|
|
379
|
+
addOrRemoveItem(currentClassNames, className, shouldHaveClass);
|
|
380
|
+
});
|
|
381
|
+
obj[prop] = currentClassNames.join(" ");
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// ../utils/dist/jquery.js
|
|
385
|
+
var jQueryInstance = options_default.global && options_default.global.jQuery;
|
|
386
|
+
|
|
387
|
+
// ../utils/dist/dom/info.js
|
|
388
|
+
function domNodeIsContainedBy(node, containedByNode) {
|
|
389
|
+
if (node === containedByNode) {
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
if (node.nodeType === 11) {
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
if (containedByNode.contains) {
|
|
396
|
+
return containedByNode.contains(node.nodeType !== 1 ? node.parentNode : node);
|
|
397
|
+
}
|
|
398
|
+
if (containedByNode.compareDocumentPosition) {
|
|
399
|
+
return (containedByNode.compareDocumentPosition(node) & 16) == 16;
|
|
400
|
+
}
|
|
401
|
+
while (node && node != containedByNode) {
|
|
402
|
+
node = node.parentNode;
|
|
403
|
+
}
|
|
404
|
+
return !!node;
|
|
405
|
+
}
|
|
406
|
+
function domNodeIsAttachedToDocument(node) {
|
|
407
|
+
return domNodeIsContainedBy(node, node.ownerDocument.documentElement);
|
|
408
|
+
}
|
|
409
|
+
function anyDomNodeIsAttachedToDocument(nodes) {
|
|
410
|
+
return !!arrayFirst(nodes, domNodeIsAttachedToDocument);
|
|
411
|
+
}
|
|
412
|
+
function tagNameLower(element) {
|
|
413
|
+
return element && element.tagName && element.tagName.toLowerCase();
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// ../utils/dist/dom/data.js
|
|
417
|
+
var data_exports = {};
|
|
418
|
+
__export(data_exports, {
|
|
419
|
+
clear: () => clear,
|
|
420
|
+
get: () => get,
|
|
421
|
+
getOrSet: () => getOrSet,
|
|
422
|
+
nextKey: () => nextKey,
|
|
423
|
+
set: () => set
|
|
424
|
+
});
|
|
425
|
+
var datastoreTime = new Date().getTime();
|
|
426
|
+
var dataStoreKeyExpandoPropertyName = `__ko__${datastoreTime}`;
|
|
427
|
+
var dataStoreSymbol = Symbol("Knockout data");
|
|
428
|
+
var dataStore;
|
|
429
|
+
var uniqueId = 0;
|
|
430
|
+
var modern = {
|
|
431
|
+
getDataForNode(node, createIfNotFound) {
|
|
432
|
+
let dataForNode = node[dataStoreSymbol];
|
|
433
|
+
if (!dataForNode && createIfNotFound) {
|
|
434
|
+
dataForNode = node[dataStoreSymbol] = {};
|
|
435
|
+
}
|
|
436
|
+
return dataForNode;
|
|
437
|
+
},
|
|
438
|
+
clear(node) {
|
|
439
|
+
if (node[dataStoreSymbol]) {
|
|
440
|
+
delete node[dataStoreSymbol];
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
var IE = {
|
|
447
|
+
getDataforNode(node, createIfNotFound) {
|
|
448
|
+
let dataStoreKey = node[dataStoreKeyExpandoPropertyName];
|
|
449
|
+
const hasExistingDataStore = dataStoreKey && dataStoreKey !== "null" && dataStore[dataStoreKey];
|
|
450
|
+
if (!hasExistingDataStore) {
|
|
451
|
+
if (!createIfNotFound) {
|
|
452
|
+
return void 0;
|
|
453
|
+
}
|
|
454
|
+
dataStoreKey = node[dataStoreKeyExpandoPropertyName] = "ko" + uniqueId++;
|
|
455
|
+
dataStore[dataStoreKey] = {};
|
|
456
|
+
}
|
|
457
|
+
return dataStore[dataStoreKey];
|
|
458
|
+
},
|
|
459
|
+
clear(node) {
|
|
460
|
+
const dataStoreKey = node[dataStoreKeyExpandoPropertyName];
|
|
461
|
+
if (dataStoreKey) {
|
|
462
|
+
delete dataStore[dataStoreKey];
|
|
463
|
+
node[dataStoreKeyExpandoPropertyName] = null;
|
|
464
|
+
return true;
|
|
465
|
+
}
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
var { getDataForNode, clear } = ieVersion ? IE : modern;
|
|
470
|
+
function nextKey() {
|
|
471
|
+
return uniqueId++ + dataStoreKeyExpandoPropertyName;
|
|
472
|
+
}
|
|
473
|
+
function get(node, key) {
|
|
474
|
+
const dataForNode = getDataForNode(node, false);
|
|
475
|
+
return dataForNode && dataForNode[key];
|
|
476
|
+
}
|
|
477
|
+
function set(node, key, value) {
|
|
478
|
+
var dataForNode = getDataForNode(node, value !== void 0);
|
|
479
|
+
dataForNode && (dataForNode[key] = value);
|
|
480
|
+
}
|
|
481
|
+
function getOrSet(node, key, value) {
|
|
482
|
+
const dataForNode = getDataForNode(node, true);
|
|
483
|
+
return dataForNode[key] || (dataForNode[key] = value);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// ../utils/dist/dom/disposal.js
|
|
487
|
+
var domDataKey = nextKey();
|
|
488
|
+
var cleanableNodeTypes = { 1: true, 8: true, 9: true };
|
|
489
|
+
var cleanableNodeTypesWithDescendants = { 1: true, 9: true };
|
|
490
|
+
function getDisposeCallbacksCollection(node, createIfNotFound) {
|
|
491
|
+
var allDisposeCallbacks = get(node, domDataKey);
|
|
492
|
+
if (allDisposeCallbacks === void 0 && createIfNotFound) {
|
|
493
|
+
allDisposeCallbacks = [];
|
|
494
|
+
set(node, domDataKey, allDisposeCallbacks);
|
|
495
|
+
}
|
|
496
|
+
return allDisposeCallbacks;
|
|
497
|
+
}
|
|
498
|
+
function destroyCallbacksCollection(node) {
|
|
499
|
+
set(node, domDataKey, void 0);
|
|
500
|
+
}
|
|
501
|
+
function cleanSingleNode(node) {
|
|
502
|
+
var callbacks = getDisposeCallbacksCollection(node, false);
|
|
503
|
+
if (callbacks) {
|
|
504
|
+
callbacks = callbacks.slice(0);
|
|
505
|
+
for (let i = 0; i < callbacks.length; i++) {
|
|
506
|
+
callbacks[i](node);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
clear(node);
|
|
510
|
+
for (let i = 0, j = otherNodeCleanerFunctions.length; i < j; ++i) {
|
|
511
|
+
otherNodeCleanerFunctions[i](node);
|
|
512
|
+
}
|
|
513
|
+
if (options_default.cleanExternalData) {
|
|
514
|
+
options_default.cleanExternalData(node);
|
|
515
|
+
}
|
|
516
|
+
if (cleanableNodeTypesWithDescendants[node.nodeType]) {
|
|
517
|
+
cleanNodesInList(node.childNodes, true);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
function cleanNodesInList(nodeList, onlyComments) {
|
|
521
|
+
const cleanedNodes = [];
|
|
522
|
+
let lastCleanedNode;
|
|
523
|
+
for (var i = 0; i < nodeList.length; i++) {
|
|
524
|
+
if (!onlyComments || nodeList[i].nodeType === 8) {
|
|
525
|
+
cleanSingleNode(cleanedNodes[cleanedNodes.length] = lastCleanedNode = nodeList[i]);
|
|
526
|
+
if (nodeList[i] !== lastCleanedNode) {
|
|
527
|
+
while (i-- && arrayIndexOf(cleanedNodes, nodeList[i]) === -1) {
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
function addDisposeCallback(node, callback) {
|
|
534
|
+
if (typeof callback !== "function") {
|
|
535
|
+
throw new Error("Callback must be a function");
|
|
536
|
+
}
|
|
537
|
+
getDisposeCallbacksCollection(node, true).push(callback);
|
|
538
|
+
}
|
|
539
|
+
function removeDisposeCallback(node, callback) {
|
|
540
|
+
var callbacksCollection = getDisposeCallbacksCollection(node, false);
|
|
541
|
+
if (callbacksCollection) {
|
|
542
|
+
arrayRemoveItem(callbacksCollection, callback);
|
|
543
|
+
if (callbacksCollection.length === 0) {
|
|
544
|
+
destroyCallbacksCollection(node);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
function cleanNode(node) {
|
|
549
|
+
if (cleanableNodeTypes[node.nodeType]) {
|
|
550
|
+
cleanSingleNode(node);
|
|
551
|
+
if (cleanableNodeTypesWithDescendants[node.nodeType]) {
|
|
552
|
+
cleanNodesInList(node.getElementsByTagName("*"));
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
return node;
|
|
556
|
+
}
|
|
557
|
+
function removeNode(node) {
|
|
558
|
+
cleanNode(node);
|
|
559
|
+
if (node.parentNode) {
|
|
560
|
+
node.parentNode.removeChild(node);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
var otherNodeCleanerFunctions = [];
|
|
564
|
+
function addCleaner(fn) {
|
|
565
|
+
otherNodeCleanerFunctions.push(fn);
|
|
566
|
+
}
|
|
567
|
+
function removeCleaner(fn) {
|
|
568
|
+
const fnIndex = otherNodeCleanerFunctions.indexOf(fn);
|
|
569
|
+
if (fnIndex >= 0) {
|
|
570
|
+
otherNodeCleanerFunctions.splice(fnIndex, 1);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
function cleanjQueryData(node) {
|
|
574
|
+
var jQueryCleanNodeFn = jQueryInstance ? jQueryInstance.cleanData : null;
|
|
575
|
+
if (jQueryCleanNodeFn) {
|
|
576
|
+
jQueryCleanNodeFn([node]);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
otherNodeCleanerFunctions.push(cleanjQueryData);
|
|
580
|
+
|
|
581
|
+
// ../utils/dist/dom/event.js
|
|
582
|
+
var knownEvents = {};
|
|
583
|
+
var knownEventTypesByEventName = {};
|
|
584
|
+
var keyEventTypeName = options_default.global.navigator && /Firefox\/2/i.test(options_default.global.navigator.userAgent) ? "KeyboardEvent" : "UIEvents";
|
|
585
|
+
knownEvents[keyEventTypeName] = ["keyup", "keydown", "keypress"];
|
|
586
|
+
knownEvents["MouseEvents"] = [
|
|
587
|
+
"click",
|
|
588
|
+
"dblclick",
|
|
589
|
+
"mousedown",
|
|
590
|
+
"mouseup",
|
|
591
|
+
"mousemove",
|
|
592
|
+
"mouseover",
|
|
593
|
+
"mouseout",
|
|
594
|
+
"mouseenter",
|
|
595
|
+
"mouseleave"
|
|
596
|
+
];
|
|
597
|
+
objectForEach(knownEvents, function(eventType, knownEventsForType) {
|
|
598
|
+
if (knownEventsForType.length) {
|
|
599
|
+
for (var i = 0, j = knownEventsForType.length; i < j; i++) {
|
|
600
|
+
knownEventTypesByEventName[knownEventsForType[i]] = eventType;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
});
|
|
604
|
+
function isClickOnCheckableElement(element, eventType) {
|
|
605
|
+
if (tagNameLower(element) !== "input" || !element.type)
|
|
606
|
+
return false;
|
|
607
|
+
if (eventType.toLowerCase() != "click")
|
|
608
|
+
return false;
|
|
609
|
+
var inputType = element.type;
|
|
610
|
+
return inputType == "checkbox" || inputType == "radio";
|
|
611
|
+
}
|
|
612
|
+
var eventsThatMustBeRegisteredUsingAttachEvent = { "propertychange": true };
|
|
613
|
+
var jQueryEventAttachName;
|
|
614
|
+
function registerEventHandler(element, eventType, handler, eventOptions = false) {
|
|
615
|
+
const wrappedHandler = catchFunctionErrors(handler);
|
|
616
|
+
const mustUseAttachEvent = ieVersion && eventsThatMustBeRegisteredUsingAttachEvent[eventType];
|
|
617
|
+
const mustUseNative = Boolean(eventOptions);
|
|
618
|
+
if (!options_default.useOnlyNativeEvents && !mustUseAttachEvent && !mustUseNative && jQueryInstance) {
|
|
619
|
+
if (!jQueryEventAttachName) {
|
|
620
|
+
jQueryEventAttachName = typeof jQueryInstance(element).on === "function" ? "on" : "bind";
|
|
621
|
+
}
|
|
622
|
+
jQueryInstance(element)[jQueryEventAttachName](eventType, wrappedHandler);
|
|
623
|
+
} else if (!mustUseAttachEvent && typeof element.addEventListener === "function") {
|
|
624
|
+
element.addEventListener(eventType, wrappedHandler, eventOptions);
|
|
625
|
+
} else if (typeof element.attachEvent !== "undefined") {
|
|
626
|
+
const attachEventHandler = function(event) {
|
|
627
|
+
wrappedHandler.call(element, event);
|
|
628
|
+
};
|
|
629
|
+
const attachEventName = "on" + eventType;
|
|
630
|
+
element.attachEvent(attachEventName, attachEventHandler);
|
|
631
|
+
addDisposeCallback(element, function() {
|
|
632
|
+
element.detachEvent(attachEventName, attachEventHandler);
|
|
633
|
+
});
|
|
634
|
+
} else {
|
|
635
|
+
throw new Error("Browser doesn't support addEventListener or attachEvent");
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
function triggerEvent(element, eventType) {
|
|
639
|
+
if (!(element && element.nodeType)) {
|
|
640
|
+
throw new Error("element must be a DOM node when calling triggerEvent");
|
|
641
|
+
}
|
|
642
|
+
var useClickWorkaround = isClickOnCheckableElement(element, eventType);
|
|
643
|
+
if (!options_default.useOnlyNativeEvents && jQueryInstance && !useClickWorkaround) {
|
|
644
|
+
jQueryInstance(element).trigger(eventType);
|
|
645
|
+
} else if (typeof document.createEvent === "function") {
|
|
646
|
+
if (typeof element.dispatchEvent === "function") {
|
|
647
|
+
var eventCategory = knownEventTypesByEventName[eventType] || "HTMLEvents";
|
|
648
|
+
var event = document.createEvent(eventCategory);
|
|
649
|
+
event.initEvent(eventType, true, true, options_default.global, 0, 0, 0, 0, 0, false, false, false, false, 0, element);
|
|
650
|
+
element.dispatchEvent(event);
|
|
651
|
+
} else {
|
|
652
|
+
throw new Error("The supplied element doesn't support dispatchEvent");
|
|
653
|
+
}
|
|
654
|
+
} else if (useClickWorkaround && element.click) {
|
|
655
|
+
element.click();
|
|
656
|
+
} else if (typeof element.fireEvent !== "undefined") {
|
|
657
|
+
element.fireEvent("on" + eventType);
|
|
658
|
+
} else {
|
|
659
|
+
throw new Error("Browser doesn't support triggering events");
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
// ../utils/dist/dom/manipulation.js
|
|
664
|
+
function moveCleanedNodesToContainerElement(nodes) {
|
|
665
|
+
var nodesArray = makeArray(nodes);
|
|
666
|
+
var templateDocument = nodesArray[0] && nodesArray[0].ownerDocument || document;
|
|
667
|
+
var container = templateDocument.createElement("div");
|
|
668
|
+
for (var i = 0, j = nodesArray.length; i < j; i++) {
|
|
669
|
+
container.appendChild(cleanNode(nodesArray[i]));
|
|
670
|
+
}
|
|
671
|
+
return container;
|
|
672
|
+
}
|
|
673
|
+
function cloneNodes(nodesArray, shouldCleanNodes) {
|
|
674
|
+
for (var i = 0, j = nodesArray.length, newNodesArray = []; i < j; i++) {
|
|
675
|
+
var clonedNode = nodesArray[i].cloneNode(true);
|
|
676
|
+
newNodesArray.push(shouldCleanNodes ? cleanNode(clonedNode) : clonedNode);
|
|
677
|
+
}
|
|
678
|
+
return newNodesArray;
|
|
679
|
+
}
|
|
680
|
+
function setDomNodeChildren(domNode, childNodes2) {
|
|
681
|
+
emptyDomNode(domNode);
|
|
682
|
+
if (childNodes2) {
|
|
683
|
+
for (var i = 0, j = childNodes2.length; i < j; i++) {
|
|
684
|
+
domNode.appendChild(childNodes2[i]);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
function replaceDomNodes(nodeToReplaceOrNodeArray, newNodesArray) {
|
|
689
|
+
var nodesToReplaceArray = nodeToReplaceOrNodeArray.nodeType ? [nodeToReplaceOrNodeArray] : nodeToReplaceOrNodeArray;
|
|
690
|
+
if (nodesToReplaceArray.length > 0) {
|
|
691
|
+
var insertionPoint = nodesToReplaceArray[0];
|
|
692
|
+
var parent = insertionPoint.parentNode;
|
|
693
|
+
for (var i = 0, j = newNodesArray.length; i < j; i++) {
|
|
694
|
+
parent.insertBefore(newNodesArray[i], insertionPoint);
|
|
695
|
+
}
|
|
696
|
+
for (i = 0, j = nodesToReplaceArray.length; i < j; i++) {
|
|
697
|
+
removeNode(nodesToReplaceArray[i]);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
function emptyDomNode(domNode) {
|
|
702
|
+
while (domNode.firstChild) {
|
|
703
|
+
removeNode(domNode.firstChild);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// ../utils/dist/dom/fixes.js
|
|
708
|
+
function fixUpContinuousNodeArray(continuousNodeArray, parentNode) {
|
|
709
|
+
if (continuousNodeArray.length) {
|
|
710
|
+
parentNode = parentNode.nodeType === 8 && parentNode.parentNode || parentNode;
|
|
711
|
+
while (continuousNodeArray.length && continuousNodeArray[0].parentNode !== parentNode) {
|
|
712
|
+
continuousNodeArray.splice(0, 1);
|
|
713
|
+
}
|
|
714
|
+
while (continuousNodeArray.length > 1 && continuousNodeArray[continuousNodeArray.length - 1].parentNode !== parentNode) {
|
|
715
|
+
continuousNodeArray.length--;
|
|
716
|
+
}
|
|
717
|
+
if (continuousNodeArray.length > 1) {
|
|
718
|
+
var current = continuousNodeArray[0], last = continuousNodeArray[continuousNodeArray.length - 1];
|
|
719
|
+
continuousNodeArray.length = 0;
|
|
720
|
+
while (current !== last) {
|
|
721
|
+
continuousNodeArray.push(current);
|
|
722
|
+
current = current.nextSibling;
|
|
723
|
+
}
|
|
724
|
+
continuousNodeArray.push(last);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
return continuousNodeArray;
|
|
728
|
+
}
|
|
729
|
+
function forceRefresh(node) {
|
|
730
|
+
if (ieVersion >= 9) {
|
|
731
|
+
var elem = node.nodeType == 1 ? node : node.parentNode;
|
|
732
|
+
if (elem.style) {
|
|
733
|
+
elem.style.zoom = elem.style.zoom;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
// ../utils/dist/dom/virtualElements.js
|
|
739
|
+
var virtualElements_exports = {};
|
|
740
|
+
__export(virtualElements_exports, {
|
|
741
|
+
allowedBindings: () => allowedBindings,
|
|
742
|
+
childNodes: () => childNodes,
|
|
743
|
+
emptyNode: () => emptyNode,
|
|
744
|
+
endCommentRegex: () => endCommentRegex,
|
|
745
|
+
firstChild: () => firstChild,
|
|
746
|
+
getVirtualChildren: () => getVirtualChildren,
|
|
747
|
+
hasBindingValue: () => hasBindingValue,
|
|
748
|
+
insertAfter: () => insertAfter,
|
|
749
|
+
isEndComment: () => isEndComment,
|
|
750
|
+
isStartComment: () => isStartComment,
|
|
751
|
+
lastChild: () => lastChild,
|
|
752
|
+
nextSibling: () => nextSibling,
|
|
753
|
+
normaliseVirtualElementDomStructure: () => normaliseVirtualElementDomStructure,
|
|
754
|
+
prepend: () => prepend,
|
|
755
|
+
previousSibling: () => previousSibling,
|
|
756
|
+
setDomNodeChildren: () => setDomNodeChildren2,
|
|
757
|
+
startCommentRegex: () => startCommentRegex,
|
|
758
|
+
virtualNodeBindingValue: () => virtualNodeBindingValue
|
|
759
|
+
});
|
|
760
|
+
var commentNodesHaveTextProperty = options_default.document && options_default.document.createComment("test").text === "<!--test-->";
|
|
761
|
+
var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\s*ko(?:\s+([\s\S]+))?\s*-->$/ : /^\s*ko(?:\s+([\s\S]+))?\s*$/;
|
|
762
|
+
var endCommentRegex = commentNodesHaveTextProperty ? /^<!--\s*\/ko\s*-->$/ : /^\s*\/ko\s*$/;
|
|
763
|
+
var htmlTagsWithOptionallyClosingChildren = { "ul": true, "ol": true };
|
|
764
|
+
function isStartComment(node) {
|
|
765
|
+
return node.nodeType == 8 && startCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);
|
|
766
|
+
}
|
|
767
|
+
function isEndComment(node) {
|
|
768
|
+
return node.nodeType == 8 && endCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);
|
|
769
|
+
}
|
|
770
|
+
function isUnmatchedEndComment(node) {
|
|
771
|
+
return isEndComment(node) && !get(node, matchedEndCommentDataKey);
|
|
772
|
+
}
|
|
773
|
+
var matchedEndCommentDataKey = "__ko_matchedEndComment__";
|
|
774
|
+
function getVirtualChildren(startComment, allowUnbalanced) {
|
|
775
|
+
var currentNode = startComment;
|
|
776
|
+
var depth = 1;
|
|
777
|
+
var children = [];
|
|
778
|
+
while (currentNode = currentNode.nextSibling) {
|
|
779
|
+
if (isEndComment(currentNode)) {
|
|
780
|
+
set(currentNode, matchedEndCommentDataKey, true);
|
|
781
|
+
depth--;
|
|
782
|
+
if (depth === 0) {
|
|
783
|
+
return children;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
children.push(currentNode);
|
|
787
|
+
if (isStartComment(currentNode)) {
|
|
788
|
+
depth++;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
if (!allowUnbalanced) {
|
|
792
|
+
throw new Error("Cannot find closing comment tag to match: " + startComment.nodeValue);
|
|
793
|
+
}
|
|
794
|
+
return null;
|
|
795
|
+
}
|
|
796
|
+
function getMatchingEndComment(startComment, allowUnbalanced) {
|
|
797
|
+
var allVirtualChildren = getVirtualChildren(startComment, allowUnbalanced);
|
|
798
|
+
if (allVirtualChildren) {
|
|
799
|
+
if (allVirtualChildren.length > 0) {
|
|
800
|
+
return allVirtualChildren[allVirtualChildren.length - 1].nextSibling;
|
|
801
|
+
}
|
|
802
|
+
return startComment.nextSibling;
|
|
803
|
+
} else {
|
|
804
|
+
return null;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
function getUnbalancedChildTags(node) {
|
|
808
|
+
var childNode = node.firstChild, captureRemaining = null;
|
|
809
|
+
if (childNode) {
|
|
810
|
+
do {
|
|
811
|
+
if (captureRemaining) {
|
|
812
|
+
captureRemaining.push(childNode);
|
|
813
|
+
} else if (isStartComment(childNode)) {
|
|
814
|
+
var matchingEndComment = getMatchingEndComment(childNode, true);
|
|
815
|
+
if (matchingEndComment) {
|
|
816
|
+
childNode = matchingEndComment;
|
|
817
|
+
} else {
|
|
818
|
+
captureRemaining = [childNode];
|
|
819
|
+
}
|
|
820
|
+
} else if (isEndComment(childNode)) {
|
|
821
|
+
captureRemaining = [childNode];
|
|
822
|
+
}
|
|
823
|
+
} while (childNode = childNode.nextSibling);
|
|
824
|
+
}
|
|
825
|
+
return captureRemaining;
|
|
826
|
+
}
|
|
827
|
+
var allowedBindings = {};
|
|
828
|
+
var hasBindingValue = isStartComment;
|
|
829
|
+
function childNodes(node) {
|
|
830
|
+
return isStartComment(node) ? getVirtualChildren(node) : node.childNodes;
|
|
831
|
+
}
|
|
832
|
+
function emptyNode(node) {
|
|
833
|
+
if (!isStartComment(node)) {
|
|
834
|
+
emptyDomNode(node);
|
|
835
|
+
} else {
|
|
836
|
+
var virtualChildren = childNodes(node);
|
|
837
|
+
for (var i = 0, j = virtualChildren.length; i < j; i++) {
|
|
838
|
+
removeNode(virtualChildren[i]);
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
function setDomNodeChildren2(node, childNodes2) {
|
|
843
|
+
if (!isStartComment(node)) {
|
|
844
|
+
setDomNodeChildren(node, childNodes2);
|
|
845
|
+
} else {
|
|
846
|
+
emptyNode(node);
|
|
847
|
+
const endCommentNode = node.nextSibling;
|
|
848
|
+
const parentNode = endCommentNode.parentNode;
|
|
849
|
+
for (var i = 0, j = childNodes2.length; i < j; ++i) {
|
|
850
|
+
parentNode.insertBefore(childNodes2[i], endCommentNode);
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
function prepend(containerNode, nodeToPrepend) {
|
|
855
|
+
if (!isStartComment(containerNode)) {
|
|
856
|
+
if (containerNode.firstChild) {
|
|
857
|
+
containerNode.insertBefore(nodeToPrepend, containerNode.firstChild);
|
|
858
|
+
} else {
|
|
859
|
+
containerNode.appendChild(nodeToPrepend);
|
|
860
|
+
}
|
|
861
|
+
} else {
|
|
862
|
+
containerNode.parentNode.insertBefore(nodeToPrepend, containerNode.nextSibling);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
function insertAfter(containerNode, nodeToInsert, insertAfterNode) {
|
|
866
|
+
if (!insertAfterNode) {
|
|
867
|
+
prepend(containerNode, nodeToInsert);
|
|
868
|
+
} else if (!isStartComment(containerNode)) {
|
|
869
|
+
if (insertAfterNode.nextSibling) {
|
|
870
|
+
containerNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);
|
|
871
|
+
} else {
|
|
872
|
+
containerNode.appendChild(nodeToInsert);
|
|
873
|
+
}
|
|
874
|
+
} else {
|
|
875
|
+
containerNode.parentNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
function firstChild(node) {
|
|
879
|
+
if (!isStartComment(node)) {
|
|
880
|
+
if (node.firstChild && isEndComment(node.firstChild)) {
|
|
881
|
+
throw new Error("Found invalid end comment, as the first child of " + node.outerHTML);
|
|
882
|
+
}
|
|
883
|
+
return node.firstChild;
|
|
884
|
+
}
|
|
885
|
+
if (!node.nextSibling || isEndComment(node.nextSibling)) {
|
|
886
|
+
return null;
|
|
887
|
+
}
|
|
888
|
+
return node.nextSibling;
|
|
889
|
+
}
|
|
890
|
+
function lastChild(node) {
|
|
891
|
+
let nextChild = firstChild(node);
|
|
892
|
+
let lastChildNode;
|
|
893
|
+
do {
|
|
894
|
+
lastChildNode = nextChild;
|
|
895
|
+
} while (nextChild = nextSibling(nextChild));
|
|
896
|
+
return lastChildNode;
|
|
897
|
+
}
|
|
898
|
+
function nextSibling(node) {
|
|
899
|
+
if (isStartComment(node)) {
|
|
900
|
+
node = getMatchingEndComment(node);
|
|
901
|
+
}
|
|
902
|
+
if (node.nextSibling && isEndComment(node.nextSibling)) {
|
|
903
|
+
if (isUnmatchedEndComment(node.nextSibling)) {
|
|
904
|
+
throw Error("Found end comment without a matching opening comment, as next sibling of " + node.outerHTML);
|
|
905
|
+
}
|
|
906
|
+
return null;
|
|
907
|
+
} else {
|
|
908
|
+
return node.nextSibling;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
function previousSibling(node) {
|
|
912
|
+
var depth = 0;
|
|
913
|
+
do {
|
|
914
|
+
if (node.nodeType === 8) {
|
|
915
|
+
if (isStartComment(node)) {
|
|
916
|
+
if (--depth === 0) {
|
|
917
|
+
return node;
|
|
918
|
+
}
|
|
919
|
+
} else if (isEndComment(node)) {
|
|
920
|
+
depth++;
|
|
921
|
+
}
|
|
922
|
+
} else {
|
|
923
|
+
if (depth === 0) {
|
|
924
|
+
return node;
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
} while (node = node.previousSibling);
|
|
928
|
+
}
|
|
929
|
+
function virtualNodeBindingValue(node) {
|
|
930
|
+
var regexMatch = (commentNodesHaveTextProperty ? node.text : node.nodeValue).match(startCommentRegex);
|
|
931
|
+
return regexMatch ? regexMatch[1] : null;
|
|
932
|
+
}
|
|
933
|
+
function normaliseVirtualElementDomStructure(elementVerified) {
|
|
934
|
+
if (!htmlTagsWithOptionallyClosingChildren[tagNameLower(elementVerified)]) {
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
937
|
+
var childNode = elementVerified.firstChild;
|
|
938
|
+
if (childNode) {
|
|
939
|
+
do {
|
|
940
|
+
if (childNode.nodeType === 1) {
|
|
941
|
+
var unbalancedTags = getUnbalancedChildTags(childNode);
|
|
942
|
+
if (unbalancedTags) {
|
|
943
|
+
var nodeToInsertBefore = childNode.nextSibling;
|
|
944
|
+
for (var i = 0; i < unbalancedTags.length; i++) {
|
|
945
|
+
if (nodeToInsertBefore) {
|
|
946
|
+
elementVerified.insertBefore(unbalancedTags[i], nodeToInsertBefore);
|
|
947
|
+
} else {
|
|
948
|
+
elementVerified.appendChild(unbalancedTags[i]);
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
} while (childNode = childNode.nextSibling);
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
// ../utils/dist/dom/html.js
|
|
958
|
+
var none = [0, "", ""];
|
|
959
|
+
var table = [1, "<table>", "</table>"];
|
|
960
|
+
var tbody = [2, "<table><tbody>", "</tbody></table>"];
|
|
961
|
+
var colgroup = [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"];
|
|
962
|
+
var tr = [3, "<table><tbody><tr>", "</tr></tbody></table>"];
|
|
963
|
+
var select = [1, "<select multiple='multiple'>", "</select>"];
|
|
964
|
+
var fieldset = [1, "<fieldset>", "</fieldset>"];
|
|
965
|
+
var map = [1, "<map>", "</map>"];
|
|
966
|
+
var object = [1, "<object>", "</object>"];
|
|
967
|
+
var lookup = {
|
|
968
|
+
"area": map,
|
|
969
|
+
"col": colgroup,
|
|
970
|
+
"colgroup": table,
|
|
971
|
+
"caption": table,
|
|
972
|
+
"legend": fieldset,
|
|
973
|
+
"thead": table,
|
|
974
|
+
"tbody": table,
|
|
975
|
+
"tfoot": table,
|
|
976
|
+
"tr": tbody,
|
|
977
|
+
"td": tr,
|
|
978
|
+
"th": tr,
|
|
979
|
+
"option": select,
|
|
980
|
+
"optgroup": select,
|
|
981
|
+
"param": object
|
|
982
|
+
};
|
|
983
|
+
var supportsTemplateTag = options_default.document && "content" in options_default.document.createElement("template");
|
|
984
|
+
function getWrap(tags) {
|
|
985
|
+
const m = tags.match(/^(?:<!--.*?-->\s*?)*?<([a-z]+)[\s>]/);
|
|
986
|
+
return m && lookup[m[1]] || none;
|
|
987
|
+
}
|
|
988
|
+
function simpleHtmlParse(html, documentContext) {
|
|
989
|
+
documentContext || (documentContext = document);
|
|
990
|
+
var windowContext = documentContext["parentWindow"] || documentContext["defaultView"] || window;
|
|
991
|
+
var tags = stringTrim(html).toLowerCase(), div2 = documentContext.createElement("div"), wrap = getWrap(tags), depth = wrap[0];
|
|
992
|
+
var markup = "ignored<div>" + wrap[1] + html + wrap[2] + "</div>";
|
|
993
|
+
if (typeof windowContext["innerShiv"] === "function") {
|
|
994
|
+
div2.appendChild(windowContext["innerShiv"](markup));
|
|
995
|
+
} else {
|
|
996
|
+
div2.innerHTML = markup;
|
|
997
|
+
}
|
|
998
|
+
while (depth--) {
|
|
999
|
+
div2 = div2.lastChild;
|
|
1000
|
+
}
|
|
1001
|
+
return makeArray(div2.lastChild.childNodes);
|
|
1002
|
+
}
|
|
1003
|
+
function templateHtmlParse(html, documentContext) {
|
|
1004
|
+
if (!documentContext) {
|
|
1005
|
+
documentContext = document;
|
|
1006
|
+
}
|
|
1007
|
+
var template = documentContext.createElement("template");
|
|
1008
|
+
template.innerHTML = html;
|
|
1009
|
+
return makeArray(template.content.childNodes);
|
|
1010
|
+
}
|
|
1011
|
+
function jQueryHtmlParse(html, documentContext) {
|
|
1012
|
+
if (jQueryInstance.parseHTML) {
|
|
1013
|
+
return jQueryInstance.parseHTML(html, documentContext) || [];
|
|
1014
|
+
} else {
|
|
1015
|
+
var elems = jQueryInstance.clean([html], documentContext);
|
|
1016
|
+
if (elems && elems[0]) {
|
|
1017
|
+
var elem = elems[0];
|
|
1018
|
+
while (elem.parentNode && elem.parentNode.nodeType !== 11) {
|
|
1019
|
+
elem = elem.parentNode;
|
|
1020
|
+
}
|
|
1021
|
+
if (elem.parentNode) {
|
|
1022
|
+
elem.parentNode.removeChild(elem);
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
return elems;
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
function parseHtmlFragment(html, documentContext) {
|
|
1029
|
+
return supportsTemplateTag ? templateHtmlParse(html, documentContext) : jQueryInstance ? jQueryHtmlParse(html, documentContext) : simpleHtmlParse(html, documentContext);
|
|
1030
|
+
}
|
|
1031
|
+
function parseHtmlForTemplateNodes(html, documentContext) {
|
|
1032
|
+
const nodes = parseHtmlFragment(html, documentContext);
|
|
1033
|
+
return nodes.length && nodes[0].parentElement || moveCleanedNodesToContainerElement(nodes);
|
|
1034
|
+
}
|
|
1035
|
+
function setHtml(node, html) {
|
|
1036
|
+
emptyDomNode(node);
|
|
1037
|
+
if (typeof html === "function") {
|
|
1038
|
+
html = html();
|
|
1039
|
+
}
|
|
1040
|
+
if (html !== null && html !== void 0) {
|
|
1041
|
+
if (typeof html !== "string") {
|
|
1042
|
+
html = html.toString();
|
|
1043
|
+
}
|
|
1044
|
+
if (jQueryInstance && !supportsTemplateTag) {
|
|
1045
|
+
jQueryInstance(node).html(html);
|
|
1046
|
+
} else {
|
|
1047
|
+
var parsedNodes = parseHtmlFragment(html, node.ownerDocument);
|
|
1048
|
+
if (node.nodeType === 8) {
|
|
1049
|
+
if (html === null) {
|
|
1050
|
+
emptyNode(node);
|
|
1051
|
+
} else {
|
|
1052
|
+
setDomNodeChildren2(node, parsedNodes);
|
|
1053
|
+
}
|
|
1054
|
+
} else {
|
|
1055
|
+
for (var i = 0; i < parsedNodes.length; i++) {
|
|
1056
|
+
node.appendChild(parsedNodes[i]);
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
function setTextContent(element, textContent) {
|
|
1063
|
+
var value = typeof textContent === "function" ? textContent() : textContent;
|
|
1064
|
+
if (value === null || value === void 0) {
|
|
1065
|
+
value = "";
|
|
1066
|
+
}
|
|
1067
|
+
var innerTextNode = firstChild(element);
|
|
1068
|
+
if (!innerTextNode || innerTextNode.nodeType != 3 || nextSibling(innerTextNode)) {
|
|
1069
|
+
setDomNodeChildren2(element, [element.ownerDocument.createTextNode(value)]);
|
|
1070
|
+
} else {
|
|
1071
|
+
innerTextNode.data = value;
|
|
1072
|
+
}
|
|
1073
|
+
forceRefresh(element);
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
// ../utils/dist/dom/selectExtensions.js
|
|
1077
|
+
var hasDomDataExpandoProperty = Symbol("Knockout selectExtensions hasDomDataProperty");
|
|
1078
|
+
var selectExtensions = {
|
|
1079
|
+
optionValueDomDataKey: nextKey(),
|
|
1080
|
+
readValue: function(element) {
|
|
1081
|
+
switch (tagNameLower(element)) {
|
|
1082
|
+
case "option":
|
|
1083
|
+
if (element[hasDomDataExpandoProperty] === true) {
|
|
1084
|
+
return get(element, selectExtensions.optionValueDomDataKey);
|
|
1085
|
+
}
|
|
1086
|
+
return element.value;
|
|
1087
|
+
case "select":
|
|
1088
|
+
return element.selectedIndex >= 0 ? selectExtensions.readValue(element.options[element.selectedIndex]) : void 0;
|
|
1089
|
+
default:
|
|
1090
|
+
return element.value;
|
|
1091
|
+
}
|
|
1092
|
+
},
|
|
1093
|
+
writeValue: function(element, value, allowUnset) {
|
|
1094
|
+
switch (tagNameLower(element)) {
|
|
1095
|
+
case "option":
|
|
1096
|
+
if (typeof value === "string") {
|
|
1097
|
+
set(element, selectExtensions.optionValueDomDataKey, void 0);
|
|
1098
|
+
if (hasDomDataExpandoProperty in element) {
|
|
1099
|
+
delete element[hasDomDataExpandoProperty];
|
|
1100
|
+
}
|
|
1101
|
+
element.value = value;
|
|
1102
|
+
} else {
|
|
1103
|
+
set(element, selectExtensions.optionValueDomDataKey, value);
|
|
1104
|
+
element[hasDomDataExpandoProperty] = true;
|
|
1105
|
+
element.value = typeof value === "number" ? value : "";
|
|
1106
|
+
}
|
|
1107
|
+
break;
|
|
1108
|
+
case "select":
|
|
1109
|
+
if (value === "" || value === null) {
|
|
1110
|
+
value = void 0;
|
|
1111
|
+
}
|
|
1112
|
+
var selection = -1;
|
|
1113
|
+
for (let i = 0, n = element.options.length, optionValue; i < n; ++i) {
|
|
1114
|
+
optionValue = selectExtensions.readValue(element.options[i]);
|
|
1115
|
+
const strictEqual = optionValue === value;
|
|
1116
|
+
const blankEqual = optionValue === "" && value === void 0;
|
|
1117
|
+
const numericEqual = typeof value === "number" && Number(optionValue) === value;
|
|
1118
|
+
if (strictEqual || blankEqual || numericEqual) {
|
|
1119
|
+
selection = i;
|
|
1120
|
+
break;
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
if (allowUnset || selection >= 0 || value === void 0 && element.size > 1) {
|
|
1124
|
+
element.selectedIndex = selection;
|
|
1125
|
+
}
|
|
1126
|
+
break;
|
|
1127
|
+
default:
|
|
1128
|
+
if (value === null || value === void 0) {
|
|
1129
|
+
value = "";
|
|
1130
|
+
}
|
|
1131
|
+
element.value = value;
|
|
1132
|
+
break;
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
};
|
|
1136
|
+
|
|
1137
|
+
// ../utils/dist/memoization.js
|
|
1138
|
+
var memoization_exports = {};
|
|
1139
|
+
__export(memoization_exports, {
|
|
1140
|
+
memoize: () => memoize,
|
|
1141
|
+
parseMemoText: () => parseMemoText,
|
|
1142
|
+
unmemoize: () => unmemoize,
|
|
1143
|
+
unmemoizeDomNodeAndDescendants: () => unmemoizeDomNodeAndDescendants
|
|
1144
|
+
});
|
|
1145
|
+
var memos = {};
|
|
1146
|
+
function randomMax8HexChars() {
|
|
1147
|
+
return ((1 + Math.random()) * 4294967296 | 0).toString(16).substring(1);
|
|
1148
|
+
}
|
|
1149
|
+
function generateRandomId() {
|
|
1150
|
+
return randomMax8HexChars() + randomMax8HexChars();
|
|
1151
|
+
}
|
|
1152
|
+
function findMemoNodes(rootNode, appendToArray) {
|
|
1153
|
+
if (!rootNode) {
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
if (rootNode.nodeType == 8) {
|
|
1157
|
+
var memoId = parseMemoText(rootNode.nodeValue);
|
|
1158
|
+
if (memoId != null) {
|
|
1159
|
+
appendToArray.push({ domNode: rootNode, memoId });
|
|
1160
|
+
}
|
|
1161
|
+
} else if (rootNode.nodeType == 1) {
|
|
1162
|
+
for (var i = 0, childNodes2 = rootNode.childNodes, j = childNodes2.length; i < j; i++) {
|
|
1163
|
+
findMemoNodes(childNodes2[i], appendToArray);
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
function memoize(callback) {
|
|
1168
|
+
if (typeof callback !== "function") {
|
|
1169
|
+
throw new Error("You can only pass a function to memoization.memoize()");
|
|
1170
|
+
}
|
|
1171
|
+
var memoId = generateRandomId();
|
|
1172
|
+
memos[memoId] = callback;
|
|
1173
|
+
return "<!--[ko_memo:" + memoId + "]-->";
|
|
1174
|
+
}
|
|
1175
|
+
function unmemoize(memoId, callbackParams) {
|
|
1176
|
+
var callback = memos[memoId];
|
|
1177
|
+
if (callback === void 0) {
|
|
1178
|
+
throw new Error("Couldn't find any memo with ID " + memoId + ". Perhaps it's already been unmemoized.");
|
|
1179
|
+
}
|
|
1180
|
+
try {
|
|
1181
|
+
callback.apply(null, callbackParams || []);
|
|
1182
|
+
return true;
|
|
1183
|
+
} finally {
|
|
1184
|
+
delete memos[memoId];
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
function unmemoizeDomNodeAndDescendants(domNode, extraCallbackParamsArray) {
|
|
1188
|
+
var memos2 = [];
|
|
1189
|
+
findMemoNodes(domNode, memos2);
|
|
1190
|
+
for (var i = 0, j = memos2.length; i < j; i++) {
|
|
1191
|
+
var node = memos2[i].domNode;
|
|
1192
|
+
var combinedParams = [node];
|
|
1193
|
+
if (extraCallbackParamsArray) {
|
|
1194
|
+
arrayPushAll(combinedParams, extraCallbackParamsArray);
|
|
1195
|
+
}
|
|
1196
|
+
unmemoize(memos2[i].memoId, combinedParams);
|
|
1197
|
+
node.nodeValue = "";
|
|
1198
|
+
if (node.parentNode) {
|
|
1199
|
+
node.parentNode.removeChild(node);
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
function parseMemoText(memoText) {
|
|
1204
|
+
var match = memoText.match(/^\[ko_memo\:(.*?)\]$/);
|
|
1205
|
+
return match ? match[1] : null;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
// ../utils/dist/tasks.js
|
|
1209
|
+
var tasks_exports = {};
|
|
1210
|
+
__export(tasks_exports, {
|
|
1211
|
+
cancel: () => cancel,
|
|
1212
|
+
resetForTesting: () => resetForTesting,
|
|
1213
|
+
runEarly: () => processTasks,
|
|
1214
|
+
schedule: () => schedule
|
|
1215
|
+
});
|
|
1216
|
+
var taskQueue = [];
|
|
1217
|
+
var taskQueueLength = 0;
|
|
1218
|
+
var nextHandle = 1;
|
|
1219
|
+
var nextIndexToProcess = 0;
|
|
1220
|
+
var w = options_default.global;
|
|
1221
|
+
if (w && w.MutationObserver && !(w.navigator && w.navigator.standalone)) {
|
|
1222
|
+
options_default.taskScheduler = function(callback) {
|
|
1223
|
+
var div2 = w.document.createElement("div");
|
|
1224
|
+
new w.MutationObserver(callback).observe(div2, { attributes: true });
|
|
1225
|
+
return function() {
|
|
1226
|
+
div2.classList.toggle("foo");
|
|
1227
|
+
};
|
|
1228
|
+
}(scheduledProcess);
|
|
1229
|
+
} else if (w && w.document && "onreadystatechange" in w.document.createElement("script")) {
|
|
1230
|
+
options_default.taskScheduler = function(callback) {
|
|
1231
|
+
var script = document.createElement("script");
|
|
1232
|
+
script.onreadystatechange = function() {
|
|
1233
|
+
script.onreadystatechange = null;
|
|
1234
|
+
document.documentElement.removeChild(script);
|
|
1235
|
+
script = null;
|
|
1236
|
+
callback();
|
|
1237
|
+
};
|
|
1238
|
+
document.documentElement.appendChild(script);
|
|
1239
|
+
};
|
|
1240
|
+
} else {
|
|
1241
|
+
options_default.taskScheduler = function(callback) {
|
|
1242
|
+
setTimeout(callback, 0);
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
function processTasks() {
|
|
1246
|
+
if (taskQueueLength) {
|
|
1247
|
+
var mark = taskQueueLength, countMarks = 0;
|
|
1248
|
+
for (var task; nextIndexToProcess < taskQueueLength; ) {
|
|
1249
|
+
if (task = taskQueue[nextIndexToProcess++]) {
|
|
1250
|
+
if (nextIndexToProcess > mark) {
|
|
1251
|
+
if (++countMarks >= 5e3) {
|
|
1252
|
+
nextIndexToProcess = taskQueueLength;
|
|
1253
|
+
deferError(Error("'Too much recursion' after processing " + countMarks + " task groups."));
|
|
1254
|
+
break;
|
|
1255
|
+
}
|
|
1256
|
+
mark = taskQueueLength;
|
|
1257
|
+
}
|
|
1258
|
+
try {
|
|
1259
|
+
task();
|
|
1260
|
+
} catch (ex) {
|
|
1261
|
+
deferError(ex);
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
function scheduledProcess() {
|
|
1268
|
+
processTasks();
|
|
1269
|
+
nextIndexToProcess = taskQueueLength = taskQueue.length = 0;
|
|
1270
|
+
}
|
|
1271
|
+
function scheduleTaskProcessing() {
|
|
1272
|
+
options_default.taskScheduler(scheduledProcess);
|
|
1273
|
+
}
|
|
1274
|
+
function schedule(func) {
|
|
1275
|
+
if (!taskQueueLength) {
|
|
1276
|
+
scheduleTaskProcessing();
|
|
1277
|
+
}
|
|
1278
|
+
taskQueue[taskQueueLength++] = func;
|
|
1279
|
+
return nextHandle++;
|
|
1280
|
+
}
|
|
1281
|
+
function cancel(handle) {
|
|
1282
|
+
var index = handle - (nextHandle - taskQueueLength);
|
|
1283
|
+
if (index >= nextIndexToProcess && index < taskQueueLength) {
|
|
1284
|
+
taskQueue[index] = null;
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
function resetForTesting() {
|
|
1288
|
+
var length = taskQueueLength - nextIndexToProcess;
|
|
1289
|
+
nextIndexToProcess = taskQueueLength = taskQueue.length = 0;
|
|
1290
|
+
return length;
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
// ../observable/dist/dependencyDetection.js
|
|
1294
|
+
var dependencyDetection_exports = {};
|
|
1295
|
+
__export(dependencyDetection_exports, {
|
|
1296
|
+
begin: () => begin,
|
|
1297
|
+
end: () => end,
|
|
1298
|
+
getDependencies: () => getDependencies,
|
|
1299
|
+
getDependenciesCount: () => getDependenciesCount,
|
|
1300
|
+
ignore: () => ignore,
|
|
1301
|
+
ignoreDependencies: () => ignore,
|
|
1302
|
+
isInitial: () => isInitial,
|
|
1303
|
+
registerDependency: () => registerDependency
|
|
1304
|
+
});
|
|
1305
|
+
|
|
1306
|
+
// ../observable/dist/subscribableSymbol.js
|
|
1307
|
+
var SUBSCRIBABLE_SYM = Symbol("Knockout Subscribable");
|
|
1308
|
+
function isSubscribable(instance) {
|
|
1309
|
+
return instance && instance[SUBSCRIBABLE_SYM] || false;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
// ../observable/dist/dependencyDetection.js
|
|
1313
|
+
var outerFrames = [];
|
|
1314
|
+
var currentFrame;
|
|
1315
|
+
var lastId = 0;
|
|
1316
|
+
function getId() {
|
|
1317
|
+
return ++lastId;
|
|
1318
|
+
}
|
|
1319
|
+
function begin(options2) {
|
|
1320
|
+
outerFrames.push(currentFrame);
|
|
1321
|
+
currentFrame = options2;
|
|
1322
|
+
}
|
|
1323
|
+
function end() {
|
|
1324
|
+
currentFrame = outerFrames.pop();
|
|
1325
|
+
}
|
|
1326
|
+
function registerDependency(subscribable2) {
|
|
1327
|
+
if (currentFrame) {
|
|
1328
|
+
if (!isSubscribable(subscribable2)) {
|
|
1329
|
+
throw new Error("Only subscribable things can act as dependencies");
|
|
1330
|
+
}
|
|
1331
|
+
currentFrame.callback.call(currentFrame.callbackTarget, subscribable2, subscribable2._id || (subscribable2._id = getId()));
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
function ignore(callback, callbackTarget, callbackArgs) {
|
|
1335
|
+
try {
|
|
1336
|
+
begin();
|
|
1337
|
+
return callback.apply(callbackTarget, callbackArgs || []);
|
|
1338
|
+
} finally {
|
|
1339
|
+
end();
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
function getDependenciesCount() {
|
|
1343
|
+
if (currentFrame) {
|
|
1344
|
+
return currentFrame.computed.getDependenciesCount();
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
function getDependencies() {
|
|
1348
|
+
if (currentFrame) {
|
|
1349
|
+
return currentFrame.computed.getDependencies();
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
function isInitial() {
|
|
1353
|
+
if (currentFrame) {
|
|
1354
|
+
return currentFrame.isInitial;
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
// ../observable/dist/defer.js
|
|
1359
|
+
function deferUpdates(target) {
|
|
1360
|
+
if (target._deferUpdates) {
|
|
1361
|
+
return;
|
|
1362
|
+
}
|
|
1363
|
+
target._deferUpdates = true;
|
|
1364
|
+
target.limit(function(callback) {
|
|
1365
|
+
let handle;
|
|
1366
|
+
let ignoreUpdates = false;
|
|
1367
|
+
return function() {
|
|
1368
|
+
if (!ignoreUpdates) {
|
|
1369
|
+
tasks_exports.cancel(handle);
|
|
1370
|
+
handle = tasks_exports.schedule(callback);
|
|
1371
|
+
try {
|
|
1372
|
+
ignoreUpdates = true;
|
|
1373
|
+
target.notifySubscribers(void 0, "dirty");
|
|
1374
|
+
} finally {
|
|
1375
|
+
ignoreUpdates = false;
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
};
|
|
1379
|
+
});
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
// ../observable/dist/Subscription.js
|
|
1383
|
+
var Subscription = class {
|
|
1384
|
+
constructor(target, observer, disposeCallback) {
|
|
1385
|
+
this._target = target;
|
|
1386
|
+
this._callback = observer.next;
|
|
1387
|
+
this._disposeCallback = disposeCallback;
|
|
1388
|
+
this._isDisposed = false;
|
|
1389
|
+
this._domNodeDisposalCallback = null;
|
|
1390
|
+
}
|
|
1391
|
+
dispose() {
|
|
1392
|
+
if (this._domNodeDisposalCallback) {
|
|
1393
|
+
removeDisposeCallback(this._node, this._domNodeDisposalCallback);
|
|
1394
|
+
}
|
|
1395
|
+
this._isDisposed = true;
|
|
1396
|
+
this._disposeCallback();
|
|
1397
|
+
}
|
|
1398
|
+
disposeWhenNodeIsRemoved(node) {
|
|
1399
|
+
this._node = node;
|
|
1400
|
+
addDisposeCallback(node, this._domNodeDisposalCallback = this.dispose.bind(this));
|
|
1401
|
+
}
|
|
1402
|
+
unsubscribe() {
|
|
1403
|
+
this.dispose();
|
|
1404
|
+
}
|
|
1405
|
+
get closed() {
|
|
1406
|
+
return this._isDisposed;
|
|
1407
|
+
}
|
|
1408
|
+
};
|
|
1409
|
+
|
|
1410
|
+
// ../observable/dist/extenders.js
|
|
1411
|
+
var primitiveTypes = {
|
|
1412
|
+
"undefined": 1,
|
|
1413
|
+
"boolean": 1,
|
|
1414
|
+
"number": 1,
|
|
1415
|
+
"string": 1
|
|
1416
|
+
};
|
|
1417
|
+
function valuesArePrimitiveAndEqual(a, b) {
|
|
1418
|
+
var oldValueIsPrimitive = a === null || typeof a in primitiveTypes;
|
|
1419
|
+
return oldValueIsPrimitive ? a === b : false;
|
|
1420
|
+
}
|
|
1421
|
+
function applyExtenders(requestedExtenders) {
|
|
1422
|
+
var target = this;
|
|
1423
|
+
if (requestedExtenders) {
|
|
1424
|
+
objectForEach(requestedExtenders, function(key, value) {
|
|
1425
|
+
var extenderHandler = extenders[key];
|
|
1426
|
+
if (typeof extenderHandler === "function") {
|
|
1427
|
+
target = extenderHandler(target, value) || target;
|
|
1428
|
+
} else {
|
|
1429
|
+
options_default.onError(new Error("Extender not found: " + key));
|
|
1430
|
+
}
|
|
1431
|
+
});
|
|
1432
|
+
}
|
|
1433
|
+
return target;
|
|
1434
|
+
}
|
|
1435
|
+
function notify(target, notifyWhen) {
|
|
1436
|
+
target.equalityComparer = notifyWhen == "always" ? null : valuesArePrimitiveAndEqual;
|
|
1437
|
+
}
|
|
1438
|
+
function deferred(target, option) {
|
|
1439
|
+
if (option !== true) {
|
|
1440
|
+
throw new Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");
|
|
1441
|
+
}
|
|
1442
|
+
deferUpdates(target);
|
|
1443
|
+
}
|
|
1444
|
+
function rateLimit(target, options2) {
|
|
1445
|
+
var timeout, method, limitFunction;
|
|
1446
|
+
if (typeof options2 === "number") {
|
|
1447
|
+
timeout = options2;
|
|
1448
|
+
} else {
|
|
1449
|
+
timeout = options2.timeout;
|
|
1450
|
+
method = options2.method;
|
|
1451
|
+
}
|
|
1452
|
+
target._deferUpdates = false;
|
|
1453
|
+
limitFunction = method === "notifyWhenChangesStop" ? debounce : throttle;
|
|
1454
|
+
target.limit(function(callback) {
|
|
1455
|
+
return limitFunction(callback, timeout);
|
|
1456
|
+
});
|
|
1457
|
+
}
|
|
1458
|
+
var extenders = {
|
|
1459
|
+
notify,
|
|
1460
|
+
deferred,
|
|
1461
|
+
rateLimit
|
|
1462
|
+
};
|
|
1463
|
+
|
|
1464
|
+
// ../observable/dist/subscribable.js
|
|
1465
|
+
var LATEST_VALUE = Symbol("Knockout latest value");
|
|
1466
|
+
if (!Symbol.observable) {
|
|
1467
|
+
Symbol.observable = Symbol.for("@tko/Symbol.observable");
|
|
1468
|
+
}
|
|
1469
|
+
function subscribable() {
|
|
1470
|
+
Object.setPrototypeOf(this, ko_subscribable_fn);
|
|
1471
|
+
ko_subscribable_fn.init(this);
|
|
1472
|
+
}
|
|
1473
|
+
var defaultEvent = "change";
|
|
1474
|
+
var ko_subscribable_fn = {
|
|
1475
|
+
[SUBSCRIBABLE_SYM]: true,
|
|
1476
|
+
[Symbol.observable]() {
|
|
1477
|
+
return this;
|
|
1478
|
+
},
|
|
1479
|
+
init(instance) {
|
|
1480
|
+
instance._subscriptions = { change: [] };
|
|
1481
|
+
instance._versionNumber = 1;
|
|
1482
|
+
},
|
|
1483
|
+
subscribe(callback, callbackTarget, event) {
|
|
1484
|
+
const isTC39Callback = typeof callback === "object" && callback.next;
|
|
1485
|
+
event = event || defaultEvent;
|
|
1486
|
+
const observer = isTC39Callback ? callback : {
|
|
1487
|
+
next: callbackTarget ? callback.bind(callbackTarget) : callback
|
|
1488
|
+
};
|
|
1489
|
+
const subscriptionInstance = new Subscription(this, observer, () => {
|
|
1490
|
+
arrayRemoveItem(this._subscriptions[event], subscriptionInstance);
|
|
1491
|
+
if (this.afterSubscriptionRemove) {
|
|
1492
|
+
this.afterSubscriptionRemove(event);
|
|
1493
|
+
}
|
|
1494
|
+
});
|
|
1495
|
+
if (this.beforeSubscriptionAdd) {
|
|
1496
|
+
this.beforeSubscriptionAdd(event);
|
|
1497
|
+
}
|
|
1498
|
+
if (!this._subscriptions[event]) {
|
|
1499
|
+
this._subscriptions[event] = [];
|
|
1500
|
+
}
|
|
1501
|
+
this._subscriptions[event].push(subscriptionInstance);
|
|
1502
|
+
if (isTC39Callback && LATEST_VALUE in this) {
|
|
1503
|
+
observer.next(this[LATEST_VALUE]);
|
|
1504
|
+
}
|
|
1505
|
+
return subscriptionInstance;
|
|
1506
|
+
},
|
|
1507
|
+
notifySubscribers(valueToNotify, event) {
|
|
1508
|
+
event = event || defaultEvent;
|
|
1509
|
+
if (event === defaultEvent) {
|
|
1510
|
+
this.updateVersion();
|
|
1511
|
+
}
|
|
1512
|
+
if (this.hasSubscriptionsForEvent(event)) {
|
|
1513
|
+
const subs = event === defaultEvent && this._changeSubscriptions || [...this._subscriptions[event]];
|
|
1514
|
+
try {
|
|
1515
|
+
begin();
|
|
1516
|
+
for (let i = 0, subscriptionInstance; subscriptionInstance = subs[i]; ++i) {
|
|
1517
|
+
if (!subscriptionInstance._isDisposed) {
|
|
1518
|
+
subscriptionInstance._callback(valueToNotify);
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
} finally {
|
|
1522
|
+
end();
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
},
|
|
1526
|
+
getVersion() {
|
|
1527
|
+
return this._versionNumber;
|
|
1528
|
+
},
|
|
1529
|
+
hasChanged(versionToCheck) {
|
|
1530
|
+
return this.getVersion() !== versionToCheck;
|
|
1531
|
+
},
|
|
1532
|
+
updateVersion() {
|
|
1533
|
+
++this._versionNumber;
|
|
1534
|
+
},
|
|
1535
|
+
hasSubscriptionsForEvent(event) {
|
|
1536
|
+
return this._subscriptions[event] && this._subscriptions[event].length;
|
|
1537
|
+
},
|
|
1538
|
+
getSubscriptionsCount(event) {
|
|
1539
|
+
if (event) {
|
|
1540
|
+
return this._subscriptions[event] && this._subscriptions[event].length || 0;
|
|
1541
|
+
} else {
|
|
1542
|
+
var total = 0;
|
|
1543
|
+
objectForEach(this._subscriptions, function(eventName, subscriptions) {
|
|
1544
|
+
if (eventName !== "dirty") {
|
|
1545
|
+
total += subscriptions.length;
|
|
1546
|
+
}
|
|
1547
|
+
});
|
|
1548
|
+
return total;
|
|
1549
|
+
}
|
|
1550
|
+
},
|
|
1551
|
+
isDifferent(oldValue, newValue) {
|
|
1552
|
+
return !this.equalityComparer || !this.equalityComparer(oldValue, newValue);
|
|
1553
|
+
},
|
|
1554
|
+
once(cb) {
|
|
1555
|
+
const subs = this.subscribe((nv) => {
|
|
1556
|
+
subs.dispose();
|
|
1557
|
+
cb(nv);
|
|
1558
|
+
});
|
|
1559
|
+
},
|
|
1560
|
+
when(test, returnValue) {
|
|
1561
|
+
const current = this.peek();
|
|
1562
|
+
const givenRv = arguments.length > 1;
|
|
1563
|
+
const testFn = typeof test === "function" ? test : (v) => v === test;
|
|
1564
|
+
if (testFn(current)) {
|
|
1565
|
+
return options_default.Promise.resolve(givenRv ? returnValue : current);
|
|
1566
|
+
}
|
|
1567
|
+
return new options_default.Promise((resolve, reject) => {
|
|
1568
|
+
const subs = this.subscribe((newValue) => {
|
|
1569
|
+
if (testFn(newValue)) {
|
|
1570
|
+
subs.dispose();
|
|
1571
|
+
resolve(givenRv ? returnValue : newValue);
|
|
1572
|
+
}
|
|
1573
|
+
});
|
|
1574
|
+
});
|
|
1575
|
+
},
|
|
1576
|
+
yet(test, ...args) {
|
|
1577
|
+
const testFn = typeof test === "function" ? test : (v) => v === test;
|
|
1578
|
+
const negated = (v) => !testFn(v);
|
|
1579
|
+
return this.when(negated, ...args);
|
|
1580
|
+
},
|
|
1581
|
+
next() {
|
|
1582
|
+
return new Promise((resolve) => this.once(resolve));
|
|
1583
|
+
},
|
|
1584
|
+
toString() {
|
|
1585
|
+
return "[object Object]";
|
|
1586
|
+
},
|
|
1587
|
+
extend: applyExtenders
|
|
1588
|
+
};
|
|
1589
|
+
Object.setPrototypeOf(ko_subscribable_fn, Function.prototype);
|
|
1590
|
+
subscribable.fn = ko_subscribable_fn;
|
|
1591
|
+
|
|
1592
|
+
// ../observable/dist/observable.js
|
|
1593
|
+
function observable(initialValue) {
|
|
1594
|
+
function Observable() {
|
|
1595
|
+
if (arguments.length > 0) {
|
|
1596
|
+
if (Observable.isDifferent(Observable[LATEST_VALUE], arguments[0])) {
|
|
1597
|
+
Observable.valueWillMutate();
|
|
1598
|
+
Observable[LATEST_VALUE] = arguments[0];
|
|
1599
|
+
Observable.valueHasMutated();
|
|
1600
|
+
}
|
|
1601
|
+
return this;
|
|
1602
|
+
} else {
|
|
1603
|
+
registerDependency(Observable);
|
|
1604
|
+
return Observable[LATEST_VALUE];
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
overwriteLengthPropertyIfSupported(Observable, { value: void 0 });
|
|
1608
|
+
Observable[LATEST_VALUE] = initialValue;
|
|
1609
|
+
subscribable.fn.init(Observable);
|
|
1610
|
+
Object.setPrototypeOf(Observable, observable.fn);
|
|
1611
|
+
if (options_default.deferUpdates) {
|
|
1612
|
+
deferUpdates(Observable);
|
|
1613
|
+
}
|
|
1614
|
+
return Observable;
|
|
1615
|
+
}
|
|
1616
|
+
observable.fn = {
|
|
1617
|
+
equalityComparer: valuesArePrimitiveAndEqual,
|
|
1618
|
+
peek() {
|
|
1619
|
+
return this[LATEST_VALUE];
|
|
1620
|
+
},
|
|
1621
|
+
valueHasMutated() {
|
|
1622
|
+
this.notifySubscribers(this[LATEST_VALUE], "spectate");
|
|
1623
|
+
this.notifySubscribers(this[LATEST_VALUE]);
|
|
1624
|
+
},
|
|
1625
|
+
valueWillMutate() {
|
|
1626
|
+
this.notifySubscribers(this[LATEST_VALUE], "beforeChange");
|
|
1627
|
+
},
|
|
1628
|
+
modify(fn, peek22 = true) {
|
|
1629
|
+
return this(fn(peek22 ? this.peek() : this()));
|
|
1630
|
+
},
|
|
1631
|
+
isWriteable: true
|
|
1632
|
+
};
|
|
1633
|
+
function limitNotifySubscribers(value, event) {
|
|
1634
|
+
if (!event || event === defaultEvent) {
|
|
1635
|
+
this._limitChange(value);
|
|
1636
|
+
} else if (event === "beforeChange") {
|
|
1637
|
+
this._limitBeforeChange(value);
|
|
1638
|
+
} else {
|
|
1639
|
+
this._origNotifySubscribers(value, event);
|
|
1640
|
+
}
|
|
1641
|
+
}
|
|
1642
|
+
subscribable.fn.limit = function limit(limitFunction) {
|
|
1643
|
+
var self = this;
|
|
1644
|
+
var selfIsObservable = isObservable(self);
|
|
1645
|
+
var beforeChange = "beforeChange";
|
|
1646
|
+
var ignoreBeforeChange, notifyNextChange, previousValue, pendingValue, didUpdate;
|
|
1647
|
+
if (!self._origNotifySubscribers) {
|
|
1648
|
+
self._origNotifySubscribers = self.notifySubscribers;
|
|
1649
|
+
self.notifySubscribers = limitNotifySubscribers;
|
|
1650
|
+
}
|
|
1651
|
+
var finish = limitFunction(function() {
|
|
1652
|
+
self._notificationIsPending = false;
|
|
1653
|
+
if (selfIsObservable && pendingValue === self) {
|
|
1654
|
+
pendingValue = self._evalIfChanged ? self._evalIfChanged() : self();
|
|
1655
|
+
}
|
|
1656
|
+
const shouldNotify = notifyNextChange || didUpdate && self.isDifferent(previousValue, pendingValue);
|
|
1657
|
+
self._notifyNextChange = didUpdate = ignoreBeforeChange = false;
|
|
1658
|
+
if (shouldNotify) {
|
|
1659
|
+
self._origNotifySubscribers(previousValue = pendingValue);
|
|
1660
|
+
}
|
|
1661
|
+
});
|
|
1662
|
+
Object.assign(self, {
|
|
1663
|
+
_limitChange(value, isDirty) {
|
|
1664
|
+
if (!isDirty || !self._notificationIsPending) {
|
|
1665
|
+
didUpdate = !isDirty;
|
|
1666
|
+
}
|
|
1667
|
+
self._changeSubscriptions = [...self._subscriptions[defaultEvent]];
|
|
1668
|
+
self._notificationIsPending = ignoreBeforeChange = true;
|
|
1669
|
+
pendingValue = value;
|
|
1670
|
+
finish();
|
|
1671
|
+
},
|
|
1672
|
+
_limitBeforeChange(value) {
|
|
1673
|
+
if (!ignoreBeforeChange) {
|
|
1674
|
+
previousValue = value;
|
|
1675
|
+
self._origNotifySubscribers(value, beforeChange);
|
|
1676
|
+
}
|
|
1677
|
+
},
|
|
1678
|
+
_notifyNextChangeIfValueIsDifferent() {
|
|
1679
|
+
if (self.isDifferent(previousValue, self.peek(true))) {
|
|
1680
|
+
notifyNextChange = true;
|
|
1681
|
+
}
|
|
1682
|
+
},
|
|
1683
|
+
_recordUpdate() {
|
|
1684
|
+
didUpdate = true;
|
|
1685
|
+
}
|
|
1686
|
+
});
|
|
1687
|
+
};
|
|
1688
|
+
Object.setPrototypeOf(observable.fn, subscribable.fn);
|
|
1689
|
+
var protoProperty = observable.protoProperty = options_default.protoProperty;
|
|
1690
|
+
observable.fn[protoProperty] = observable;
|
|
1691
|
+
observable.observablePrototypes = /* @__PURE__ */ new Set([observable]);
|
|
1692
|
+
function isObservable(instance) {
|
|
1693
|
+
const proto = typeof instance === "function" && instance[protoProperty];
|
|
1694
|
+
if (proto && !observable.observablePrototypes.has(proto)) {
|
|
1695
|
+
throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");
|
|
1696
|
+
}
|
|
1697
|
+
return !!proto;
|
|
1698
|
+
}
|
|
1699
|
+
function unwrap(value) {
|
|
1700
|
+
return isObservable(value) ? value() : value;
|
|
1701
|
+
}
|
|
1702
|
+
function peek(value) {
|
|
1703
|
+
return isObservable(value) ? value.peek() : value;
|
|
1704
|
+
}
|
|
1705
|
+
function isWriteableObservable(instance) {
|
|
1706
|
+
return isObservable(instance) && instance.isWriteable;
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
// ../observable/dist/observableArray.changeTracking.js
|
|
1710
|
+
var arrayChangeEventName = "arrayChange";
|
|
1711
|
+
function trackArrayChanges(target, options2) {
|
|
1712
|
+
target.compareArrayOptions = {};
|
|
1713
|
+
if (options2 && typeof options2 === "object") {
|
|
1714
|
+
extend(target.compareArrayOptions, options2);
|
|
1715
|
+
}
|
|
1716
|
+
target.compareArrayOptions.sparse = true;
|
|
1717
|
+
if (target.cacheDiffForKnownOperation) {
|
|
1718
|
+
return;
|
|
1719
|
+
}
|
|
1720
|
+
let trackingChanges = false;
|
|
1721
|
+
let cachedDiff = null;
|
|
1722
|
+
let arrayChangeSubscription;
|
|
1723
|
+
let pendingNotifications = 0;
|
|
1724
|
+
let underlyingNotifySubscribersFunction;
|
|
1725
|
+
let underlyingBeforeSubscriptionAddFunction = target.beforeSubscriptionAdd;
|
|
1726
|
+
let underlyingAfterSubscriptionRemoveFunction = target.afterSubscriptionRemove;
|
|
1727
|
+
target.beforeSubscriptionAdd = function(event) {
|
|
1728
|
+
if (underlyingBeforeSubscriptionAddFunction) {
|
|
1729
|
+
underlyingBeforeSubscriptionAddFunction.call(target, event);
|
|
1730
|
+
}
|
|
1731
|
+
if (event === arrayChangeEventName) {
|
|
1732
|
+
trackChanges();
|
|
1733
|
+
}
|
|
1734
|
+
};
|
|
1735
|
+
target.afterSubscriptionRemove = function(event) {
|
|
1736
|
+
if (underlyingAfterSubscriptionRemoveFunction) {
|
|
1737
|
+
underlyingAfterSubscriptionRemoveFunction.call(target, event);
|
|
1738
|
+
}
|
|
1739
|
+
if (event === arrayChangeEventName && !target.hasSubscriptionsForEvent(arrayChangeEventName)) {
|
|
1740
|
+
if (underlyingNotifySubscribersFunction) {
|
|
1741
|
+
target.notifySubscribers = underlyingNotifySubscribersFunction;
|
|
1742
|
+
underlyingNotifySubscribersFunction = void 0;
|
|
1743
|
+
}
|
|
1744
|
+
if (arrayChangeSubscription) {
|
|
1745
|
+
arrayChangeSubscription.dispose();
|
|
1746
|
+
}
|
|
1747
|
+
arrayChangeSubscription = null;
|
|
1748
|
+
trackingChanges = false;
|
|
1749
|
+
}
|
|
1750
|
+
};
|
|
1751
|
+
function trackChanges() {
|
|
1752
|
+
if (trackingChanges) {
|
|
1753
|
+
return;
|
|
1754
|
+
}
|
|
1755
|
+
trackingChanges = true;
|
|
1756
|
+
underlyingNotifySubscribersFunction = target["notifySubscribers"];
|
|
1757
|
+
target.notifySubscribers = function(valueToNotify, event) {
|
|
1758
|
+
if (!event || event === defaultEvent) {
|
|
1759
|
+
++pendingNotifications;
|
|
1760
|
+
}
|
|
1761
|
+
return underlyingNotifySubscribersFunction.apply(this, arguments);
|
|
1762
|
+
};
|
|
1763
|
+
var previousContents = [].concat(target.peek() === void 0 ? [] : target.peek());
|
|
1764
|
+
cachedDiff = null;
|
|
1765
|
+
arrayChangeSubscription = target.subscribe(function(currentContents) {
|
|
1766
|
+
let changes;
|
|
1767
|
+
currentContents = [].concat(currentContents || []);
|
|
1768
|
+
if (target.hasSubscriptionsForEvent(arrayChangeEventName)) {
|
|
1769
|
+
changes = getChanges(previousContents, currentContents);
|
|
1770
|
+
}
|
|
1771
|
+
previousContents = currentContents;
|
|
1772
|
+
cachedDiff = null;
|
|
1773
|
+
pendingNotifications = 0;
|
|
1774
|
+
if (changes && changes.length) {
|
|
1775
|
+
target.notifySubscribers(changes, arrayChangeEventName);
|
|
1776
|
+
}
|
|
1777
|
+
});
|
|
1778
|
+
}
|
|
1779
|
+
function getChanges(previousContents, currentContents) {
|
|
1780
|
+
if (!cachedDiff || pendingNotifications > 1) {
|
|
1781
|
+
cachedDiff = trackArrayChanges.compareArrays(previousContents, currentContents, target.compareArrayOptions);
|
|
1782
|
+
}
|
|
1783
|
+
return cachedDiff;
|
|
1784
|
+
}
|
|
1785
|
+
target.cacheDiffForKnownOperation = function(rawArray, operationName, args) {
|
|
1786
|
+
if (!trackingChanges || pendingNotifications) {
|
|
1787
|
+
return;
|
|
1788
|
+
}
|
|
1789
|
+
var diff = [], arrayLength = rawArray.length, argsLength = args.length, offset = 0;
|
|
1790
|
+
function pushDiff(status, value, index) {
|
|
1791
|
+
return diff[diff.length] = { "status": status, "value": value, "index": index };
|
|
1792
|
+
}
|
|
1793
|
+
switch (operationName) {
|
|
1794
|
+
case "push":
|
|
1795
|
+
offset = arrayLength;
|
|
1796
|
+
case "unshift":
|
|
1797
|
+
for (let index = 0; index < argsLength; index++) {
|
|
1798
|
+
pushDiff("added", args[index], offset + index);
|
|
1799
|
+
}
|
|
1800
|
+
break;
|
|
1801
|
+
case "pop":
|
|
1802
|
+
offset = arrayLength - 1;
|
|
1803
|
+
case "shift":
|
|
1804
|
+
if (arrayLength) {
|
|
1805
|
+
pushDiff("deleted", rawArray[offset], offset);
|
|
1806
|
+
}
|
|
1807
|
+
break;
|
|
1808
|
+
case "splice":
|
|
1809
|
+
var startIndex = Math.min(Math.max(0, args[0] < 0 ? arrayLength + args[0] : args[0]), arrayLength), endDeleteIndex = argsLength === 1 ? arrayLength : Math.min(startIndex + (args[1] || 0), arrayLength), endAddIndex = startIndex + argsLength - 2, endIndex = Math.max(endDeleteIndex, endAddIndex), additions = [], deletions = [];
|
|
1810
|
+
for (let index = startIndex, argsIndex = 2; index < endIndex; ++index, ++argsIndex) {
|
|
1811
|
+
if (index < endDeleteIndex) {
|
|
1812
|
+
deletions.push(pushDiff("deleted", rawArray[index], index));
|
|
1813
|
+
}
|
|
1814
|
+
if (index < endAddIndex) {
|
|
1815
|
+
additions.push(pushDiff("added", args[argsIndex], index));
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
findMovesInArrayComparison(deletions, additions);
|
|
1819
|
+
break;
|
|
1820
|
+
default:
|
|
1821
|
+
return;
|
|
1822
|
+
}
|
|
1823
|
+
cachedDiff = diff;
|
|
1824
|
+
};
|
|
1825
|
+
}
|
|
1826
|
+
trackArrayChanges.compareArrays = compareArrays;
|
|
1827
|
+
extenders.trackArrayChanges = trackArrayChanges;
|
|
1828
|
+
|
|
1829
|
+
// ../observable/dist/observableArray.js
|
|
1830
|
+
function observableArray(initialValues) {
|
|
1831
|
+
initialValues = initialValues || [];
|
|
1832
|
+
if (typeof initialValues !== "object" || !("length" in initialValues)) {
|
|
1833
|
+
throw new Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");
|
|
1834
|
+
}
|
|
1835
|
+
var result = observable(initialValues);
|
|
1836
|
+
Object.setPrototypeOf(result, observableArray.fn);
|
|
1837
|
+
trackArrayChanges(result);
|
|
1838
|
+
overwriteLengthPropertyIfSupported(result, { get: () => result().length });
|
|
1839
|
+
return result;
|
|
1840
|
+
}
|
|
1841
|
+
function isObservableArray(instance) {
|
|
1842
|
+
return isObservable(instance) && typeof instance.remove === "function" && typeof instance.push === "function";
|
|
1843
|
+
}
|
|
1844
|
+
observableArray.fn = {
|
|
1845
|
+
remove(valueOrPredicate) {
|
|
1846
|
+
var underlyingArray = this.peek();
|
|
1847
|
+
var removedValues = [];
|
|
1848
|
+
var predicate = typeof valueOrPredicate === "function" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value2) {
|
|
1849
|
+
return value2 === valueOrPredicate;
|
|
1850
|
+
};
|
|
1851
|
+
for (var i = 0; i < underlyingArray.length; i++) {
|
|
1852
|
+
var value = underlyingArray[i];
|
|
1853
|
+
if (predicate(value)) {
|
|
1854
|
+
if (removedValues.length === 0) {
|
|
1855
|
+
this.valueWillMutate();
|
|
1856
|
+
}
|
|
1857
|
+
if (underlyingArray[i] !== value) {
|
|
1858
|
+
throw Error("Array modified during remove; cannot remove item");
|
|
1859
|
+
}
|
|
1860
|
+
removedValues.push(value);
|
|
1861
|
+
underlyingArray.splice(i, 1);
|
|
1862
|
+
i--;
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1865
|
+
if (removedValues.length) {
|
|
1866
|
+
this.valueHasMutated();
|
|
1867
|
+
}
|
|
1868
|
+
return removedValues;
|
|
1869
|
+
},
|
|
1870
|
+
removeAll(arrayOfValues) {
|
|
1871
|
+
if (arrayOfValues === void 0) {
|
|
1872
|
+
var underlyingArray = this.peek();
|
|
1873
|
+
var allValues = underlyingArray.slice(0);
|
|
1874
|
+
this.valueWillMutate();
|
|
1875
|
+
underlyingArray.splice(0, underlyingArray.length);
|
|
1876
|
+
this.valueHasMutated();
|
|
1877
|
+
return allValues;
|
|
1878
|
+
}
|
|
1879
|
+
if (!arrayOfValues) {
|
|
1880
|
+
return [];
|
|
1881
|
+
}
|
|
1882
|
+
return this["remove"](function(value) {
|
|
1883
|
+
return arrayIndexOf(arrayOfValues, value) >= 0;
|
|
1884
|
+
});
|
|
1885
|
+
},
|
|
1886
|
+
destroy(valueOrPredicate) {
|
|
1887
|
+
var underlyingArray = this.peek();
|
|
1888
|
+
var predicate = typeof valueOrPredicate === "function" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value2) {
|
|
1889
|
+
return value2 === valueOrPredicate;
|
|
1890
|
+
};
|
|
1891
|
+
this.valueWillMutate();
|
|
1892
|
+
for (var i = underlyingArray.length - 1; i >= 0; i--) {
|
|
1893
|
+
var value = underlyingArray[i];
|
|
1894
|
+
if (predicate(value)) {
|
|
1895
|
+
value["_destroy"] = true;
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
this.valueHasMutated();
|
|
1899
|
+
},
|
|
1900
|
+
destroyAll(arrayOfValues) {
|
|
1901
|
+
if (arrayOfValues === void 0) {
|
|
1902
|
+
return this.destroy(function() {
|
|
1903
|
+
return true;
|
|
1904
|
+
});
|
|
1905
|
+
}
|
|
1906
|
+
if (!arrayOfValues) {
|
|
1907
|
+
return [];
|
|
1908
|
+
}
|
|
1909
|
+
return this.destroy(function(value) {
|
|
1910
|
+
return arrayIndexOf(arrayOfValues, value) >= 0;
|
|
1911
|
+
});
|
|
1912
|
+
},
|
|
1913
|
+
indexOf(item) {
|
|
1914
|
+
return arrayIndexOf(this(), item);
|
|
1915
|
+
},
|
|
1916
|
+
replace(oldItem, newItem) {
|
|
1917
|
+
var index = this.indexOf(oldItem);
|
|
1918
|
+
if (index >= 0) {
|
|
1919
|
+
this.valueWillMutate();
|
|
1920
|
+
this.peek()[index] = newItem;
|
|
1921
|
+
this.valueHasMutated();
|
|
1922
|
+
}
|
|
1923
|
+
},
|
|
1924
|
+
sorted(compareFn) {
|
|
1925
|
+
return [...this()].sort(compareFn);
|
|
1926
|
+
},
|
|
1927
|
+
reversed() {
|
|
1928
|
+
return [...this()].reverse();
|
|
1929
|
+
},
|
|
1930
|
+
[Symbol.iterator]: function* () {
|
|
1931
|
+
yield* this();
|
|
1932
|
+
}
|
|
1933
|
+
};
|
|
1934
|
+
Object.setPrototypeOf(observableArray.fn, observable.fn);
|
|
1935
|
+
arrayForEach(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(methodName) {
|
|
1936
|
+
observableArray.fn[methodName] = function() {
|
|
1937
|
+
var underlyingArray = this.peek();
|
|
1938
|
+
this.valueWillMutate();
|
|
1939
|
+
this.cacheDiffForKnownOperation(underlyingArray, methodName, arguments);
|
|
1940
|
+
var methodCallResult = underlyingArray[methodName].apply(underlyingArray, arguments);
|
|
1941
|
+
this.valueHasMutated();
|
|
1942
|
+
return methodCallResult === underlyingArray ? this : methodCallResult;
|
|
1943
|
+
};
|
|
1944
|
+
});
|
|
1945
|
+
arrayForEach(["slice"], function(methodName) {
|
|
1946
|
+
observableArray.fn[methodName] = function() {
|
|
1947
|
+
var underlyingArray = this();
|
|
1948
|
+
return underlyingArray[methodName].apply(underlyingArray, arguments);
|
|
1949
|
+
};
|
|
1950
|
+
});
|
|
1951
|
+
observableArray.trackArrayChanges = trackArrayChanges;
|
|
1952
|
+
|
|
1953
|
+
// ../observable/dist/mappingHelpers.js
|
|
1954
|
+
var maxNestedObservableDepth = 10;
|
|
1955
|
+
function toJS(rootObject) {
|
|
1956
|
+
if (arguments.length == 0) {
|
|
1957
|
+
throw new Error("When calling ko.toJS, pass the object you want to convert.");
|
|
1958
|
+
}
|
|
1959
|
+
return mapJsObjectGraph(rootObject, function(valueToMap) {
|
|
1960
|
+
for (var i = 0; isObservable(valueToMap) && i < maxNestedObservableDepth; i++) {
|
|
1961
|
+
valueToMap = valueToMap();
|
|
1962
|
+
}
|
|
1963
|
+
return valueToMap;
|
|
1964
|
+
});
|
|
1965
|
+
}
|
|
1966
|
+
function toJSON(rootObject, replacer, space) {
|
|
1967
|
+
var plainJavaScriptObject = toJS(rootObject);
|
|
1968
|
+
return JSON.stringify(plainJavaScriptObject, replacer, space);
|
|
1969
|
+
}
|
|
1970
|
+
function mapJsObjectGraph(rootObject, mapInputCallback, visitedObjects = /* @__PURE__ */ new Map()) {
|
|
1971
|
+
rootObject = mapInputCallback(rootObject);
|
|
1972
|
+
var canHaveProperties = typeof rootObject === "object" && rootObject !== null && rootObject !== void 0 && !(rootObject instanceof RegExp) && !(rootObject instanceof Date) && !(rootObject instanceof String) && !(rootObject instanceof Number) && !(rootObject instanceof Boolean);
|
|
1973
|
+
if (!canHaveProperties) {
|
|
1974
|
+
return rootObject;
|
|
1975
|
+
}
|
|
1976
|
+
var outputProperties = rootObject instanceof Array ? [] : {};
|
|
1977
|
+
visitedObjects.set(rootObject, outputProperties);
|
|
1978
|
+
visitPropertiesOrArrayEntries(rootObject, function(indexer) {
|
|
1979
|
+
var propertyValue = mapInputCallback(rootObject[indexer]);
|
|
1980
|
+
switch (typeof propertyValue) {
|
|
1981
|
+
case "boolean":
|
|
1982
|
+
case "number":
|
|
1983
|
+
case "string":
|
|
1984
|
+
case "function":
|
|
1985
|
+
outputProperties[indexer] = propertyValue;
|
|
1986
|
+
break;
|
|
1987
|
+
case "object":
|
|
1988
|
+
case "undefined":
|
|
1989
|
+
var previouslyMappedValue = visitedObjects.get(propertyValue);
|
|
1990
|
+
outputProperties[indexer] = previouslyMappedValue !== void 0 ? previouslyMappedValue : mapJsObjectGraph(propertyValue, mapInputCallback, visitedObjects);
|
|
1991
|
+
break;
|
|
1992
|
+
}
|
|
1993
|
+
});
|
|
1994
|
+
return outputProperties;
|
|
1995
|
+
}
|
|
1996
|
+
function visitPropertiesOrArrayEntries(rootObject, visitorCallback) {
|
|
1997
|
+
if (rootObject instanceof Array) {
|
|
1998
|
+
for (var i = 0; i < rootObject.length; i++) {
|
|
1999
|
+
visitorCallback(i);
|
|
2000
|
+
}
|
|
2001
|
+
if (typeof rootObject["toJSON"] === "function") {
|
|
2002
|
+
visitorCallback("toJSON");
|
|
2003
|
+
}
|
|
2004
|
+
} else {
|
|
2005
|
+
for (var propertyName in rootObject) {
|
|
2006
|
+
visitorCallback(propertyName);
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
2009
|
+
}
|
|
2010
|
+
|
|
2011
|
+
// ../utils.parser/dist/operators.js
|
|
2012
|
+
function LAMBDA() {
|
|
2013
|
+
}
|
|
2014
|
+
function unwrapOrCall(a, b) {
|
|
2015
|
+
while (typeof b === "function") {
|
|
2016
|
+
b = b();
|
|
2017
|
+
}
|
|
2018
|
+
return b;
|
|
2019
|
+
}
|
|
2020
|
+
var operators = {
|
|
2021
|
+
"@": unwrapOrCall,
|
|
2022
|
+
"#": (a, b) => () => unwrap(b),
|
|
2023
|
+
"=>": LAMBDA,
|
|
2024
|
+
"!": function not(a, b) {
|
|
2025
|
+
return !b;
|
|
2026
|
+
},
|
|
2027
|
+
"!!": function notnot(a, b) {
|
|
2028
|
+
return !!b;
|
|
2029
|
+
},
|
|
2030
|
+
"++": function preinc(a, b) {
|
|
2031
|
+
return ++b;
|
|
2032
|
+
},
|
|
2033
|
+
"--": function preinc2(a, b) {
|
|
2034
|
+
return --b;
|
|
2035
|
+
},
|
|
2036
|
+
"*": function mul(a, b) {
|
|
2037
|
+
return a * b;
|
|
2038
|
+
},
|
|
2039
|
+
"/": function div(a, b) {
|
|
2040
|
+
return a / b;
|
|
2041
|
+
},
|
|
2042
|
+
"%": function mod(a, b) {
|
|
2043
|
+
return a % b;
|
|
2044
|
+
},
|
|
2045
|
+
"+": function add(a, b) {
|
|
2046
|
+
return a + b;
|
|
2047
|
+
},
|
|
2048
|
+
"-": function sub(a, b) {
|
|
2049
|
+
return (a || 0) - (b || 0);
|
|
2050
|
+
},
|
|
2051
|
+
"&-": function neg(a, b) {
|
|
2052
|
+
return -1 * b;
|
|
2053
|
+
},
|
|
2054
|
+
"<": function lt(a, b) {
|
|
2055
|
+
return a < b;
|
|
2056
|
+
},
|
|
2057
|
+
"<=": function le(a, b) {
|
|
2058
|
+
return a <= b;
|
|
2059
|
+
},
|
|
2060
|
+
">": function gt(a, b) {
|
|
2061
|
+
return a > b;
|
|
2062
|
+
},
|
|
2063
|
+
">=": function ge(a, b) {
|
|
2064
|
+
return a >= b;
|
|
2065
|
+
},
|
|
2066
|
+
"==": function equal(a, b) {
|
|
2067
|
+
return a === b;
|
|
2068
|
+
},
|
|
2069
|
+
"!=": function ne(a, b) {
|
|
2070
|
+
return a !== b;
|
|
2071
|
+
},
|
|
2072
|
+
"===": function sequal(a, b) {
|
|
2073
|
+
return a === b;
|
|
2074
|
+
},
|
|
2075
|
+
"!==": function sne(a, b) {
|
|
2076
|
+
return a !== b;
|
|
2077
|
+
},
|
|
2078
|
+
"&": function bitAnd(a, b) {
|
|
2079
|
+
return a & b;
|
|
2080
|
+
},
|
|
2081
|
+
"^": function xor(a, b) {
|
|
2082
|
+
return a ^ b;
|
|
2083
|
+
},
|
|
2084
|
+
"|": function bitOr(a, b) {
|
|
2085
|
+
return a | b;
|
|
2086
|
+
},
|
|
2087
|
+
"&&": function logicAnd(a, b) {
|
|
2088
|
+
return a && b;
|
|
2089
|
+
},
|
|
2090
|
+
"||": function logicOr(a, b) {
|
|
2091
|
+
return a || b;
|
|
2092
|
+
},
|
|
2093
|
+
".": function member(a, b) {
|
|
2094
|
+
return a[b];
|
|
2095
|
+
},
|
|
2096
|
+
"[": function member2(a, b) {
|
|
2097
|
+
return a[b];
|
|
2098
|
+
},
|
|
2099
|
+
",": function comma(a, b) {
|
|
2100
|
+
return b;
|
|
2101
|
+
},
|
|
2102
|
+
"call": function callOp(a, b) {
|
|
2103
|
+
return a.apply(null, b);
|
|
2104
|
+
}
|
|
2105
|
+
};
|
|
2106
|
+
operators["@"].precedence = 21;
|
|
2107
|
+
operators["#"].precedence = 21;
|
|
2108
|
+
operators["."].precedence = 19;
|
|
2109
|
+
operators["["].precedence = 19;
|
|
2110
|
+
operators["!"].precedence = 16;
|
|
2111
|
+
operators["!!"].precedence = 16;
|
|
2112
|
+
operators["++"].precedence = 16;
|
|
2113
|
+
operators["--"].precedence = 16;
|
|
2114
|
+
operators["&-"].precedence = 16;
|
|
2115
|
+
operators["%"].precedence = 14;
|
|
2116
|
+
operators["*"].precedence = 14;
|
|
2117
|
+
operators["/"].precedence = 14;
|
|
2118
|
+
operators["+"].precedence = 13;
|
|
2119
|
+
operators["-"].precedence = 13;
|
|
2120
|
+
operators["|"].precedence = 12;
|
|
2121
|
+
operators["^"].precedence = 11;
|
|
2122
|
+
operators["&"].precedence = 10;
|
|
2123
|
+
operators["<"].precedence = 11;
|
|
2124
|
+
operators["<="].precedence = 11;
|
|
2125
|
+
operators[">"].precedence = 11;
|
|
2126
|
+
operators[">="].precedence = 11;
|
|
2127
|
+
operators["=="].precedence = 10;
|
|
2128
|
+
operators["!="].precedence = 10;
|
|
2129
|
+
operators["==="].precedence = 10;
|
|
2130
|
+
operators["!=="].precedence = 10;
|
|
2131
|
+
operators["&&"].precedence = 6;
|
|
2132
|
+
operators["||"].precedence = 5;
|
|
2133
|
+
operators["&&"].earlyOut = (a) => !a;
|
|
2134
|
+
operators["||"].earlyOut = (a) => a;
|
|
2135
|
+
operators[","].precedence = 2;
|
|
2136
|
+
operators["call"].precedence = 1;
|
|
2137
|
+
operators["=>"].precedence = 1;
|
|
2138
|
+
|
|
2139
|
+
// ../utils.parser/dist/Node.js
|
|
2140
|
+
var IS_EXPR_OR_IDENT = Symbol("Node - Is Expression Or Identifier");
|
|
2141
|
+
var Node = class {
|
|
2142
|
+
constructor(lhs, op, rhs) {
|
|
2143
|
+
this.lhs = lhs;
|
|
2144
|
+
this.op = op;
|
|
2145
|
+
this.rhs = rhs;
|
|
2146
|
+
}
|
|
2147
|
+
static get operators() {
|
|
2148
|
+
return operators;
|
|
2149
|
+
}
|
|
2150
|
+
get_leaf_value(leaf, context, globals, node) {
|
|
2151
|
+
if (typeof leaf === "function") {
|
|
2152
|
+
return unwrap(leaf());
|
|
2153
|
+
}
|
|
2154
|
+
if (typeof leaf !== "object" || leaf === null) {
|
|
2155
|
+
return leaf;
|
|
2156
|
+
}
|
|
2157
|
+
if (leaf[Node.isExpressionOrIdentifierSymbol]) {
|
|
2158
|
+
return unwrap(leaf.get_value(void 0, context, globals, node));
|
|
2159
|
+
}
|
|
2160
|
+
return leaf;
|
|
2161
|
+
}
|
|
2162
|
+
get_value(notused, context, globals, node) {
|
|
2163
|
+
var node = this;
|
|
2164
|
+
if (node.op === LAMBDA) {
|
|
2165
|
+
return (...args) => {
|
|
2166
|
+
let lambdaContext = context;
|
|
2167
|
+
if (node.lhs) {
|
|
2168
|
+
lambdaContext = node.lhs.extendContext(context, args);
|
|
2169
|
+
}
|
|
2170
|
+
return node.get_leaf_value(node.rhs, lambdaContext, globals, node);
|
|
2171
|
+
};
|
|
2172
|
+
}
|
|
2173
|
+
const lhv = node.get_leaf_value(node.lhs, context, globals, node);
|
|
2174
|
+
const earlyOut = node.op.earlyOut;
|
|
2175
|
+
if (earlyOut && earlyOut(lhv)) {
|
|
2176
|
+
return lhv;
|
|
2177
|
+
}
|
|
2178
|
+
const rhv = node.get_leaf_value(node.rhs, context, globals, node);
|
|
2179
|
+
return node.op(lhv, rhv, context, globals);
|
|
2180
|
+
}
|
|
2181
|
+
static get isExpressionOrIdentifierSymbol() {
|
|
2182
|
+
return IS_EXPR_OR_IDENT;
|
|
2183
|
+
}
|
|
2184
|
+
get [IS_EXPR_OR_IDENT]() {
|
|
2185
|
+
return true;
|
|
2186
|
+
}
|
|
2187
|
+
static value_of(item, context, globals, node) {
|
|
2188
|
+
if (item && item[Node.isExpressionOrIdentifierSymbol]) {
|
|
2189
|
+
return item.get_value(item, context, globals, node);
|
|
2190
|
+
}
|
|
2191
|
+
return item;
|
|
2192
|
+
}
|
|
2193
|
+
static create_root(nodes, debug = false) {
|
|
2194
|
+
const out = [];
|
|
2195
|
+
const ops = [];
|
|
2196
|
+
for (let i = 0; i < nodes.length; i += 2) {
|
|
2197
|
+
out.push(nodes[i]);
|
|
2198
|
+
const op = nodes[i + 1];
|
|
2199
|
+
const prec = (op == null ? void 0 : op.precedence) || 0;
|
|
2200
|
+
while (ops.length && prec <= ops[ops.length - 1].precedence) {
|
|
2201
|
+
const rhs = out.pop();
|
|
2202
|
+
const lhs = out.pop();
|
|
2203
|
+
out.push(new Node(lhs, ops.pop(), rhs));
|
|
2204
|
+
}
|
|
2205
|
+
ops.push(op);
|
|
2206
|
+
}
|
|
2207
|
+
if (out.length !== 1) {
|
|
2208
|
+
throw new Error(`unexpected nodes remain in shunting yard output stack: ${out}`);
|
|
2209
|
+
}
|
|
2210
|
+
return out[0];
|
|
2211
|
+
}
|
|
2212
|
+
};
|
|
2213
|
+
operators["?"] = function ternary(a, b, context, globals, node) {
|
|
2214
|
+
return Node.value_of(a ? b.yes : b.no, context, globals, node);
|
|
2215
|
+
};
|
|
2216
|
+
operators["?"].precedence = 4;
|
|
2217
|
+
|
|
2218
|
+
// ../utils.parser/dist/Expression.js
|
|
2219
|
+
var Expression = class {
|
|
2220
|
+
constructor(nodes) {
|
|
2221
|
+
this.nodes = nodes;
|
|
2222
|
+
this.root = Node.create_root(nodes);
|
|
2223
|
+
}
|
|
2224
|
+
get_value(parent, context, globals, node) {
|
|
2225
|
+
if (!this.root) {
|
|
2226
|
+
this.root = Node.create_root(this.nodes);
|
|
2227
|
+
}
|
|
2228
|
+
return this.root.get_value(parent, context, globals, node);
|
|
2229
|
+
}
|
|
2230
|
+
};
|
|
2231
|
+
Expression.prototype[Node.isExpressionOrIdentifierSymbol] = true;
|
|
2232
|
+
|
|
2233
|
+
// ../utils.parser/dist/Arguments.js
|
|
2234
|
+
var Arguments = class {
|
|
2235
|
+
constructor(parser, args) {
|
|
2236
|
+
this.parser = parser;
|
|
2237
|
+
this.args = args;
|
|
2238
|
+
}
|
|
2239
|
+
get_value(parent, context, globals, node) {
|
|
2240
|
+
var deReffedArgs = [];
|
|
2241
|
+
for (var i = 0, j = this.args.length; i < j; ++i) {
|
|
2242
|
+
deReffedArgs.push(Node.value_of(this.args[i], context, globals, node));
|
|
2243
|
+
}
|
|
2244
|
+
return deReffedArgs;
|
|
2245
|
+
}
|
|
2246
|
+
get [Node.isExpressionOrIdentifierSymbol]() {
|
|
2247
|
+
return true;
|
|
2248
|
+
}
|
|
2249
|
+
};
|
|
2250
|
+
|
|
2251
|
+
// ../utils.parser/dist/identifierExpressions.js
|
|
2252
|
+
var IDStart = /[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/;
|
|
2253
|
+
var IDContinue = /[\$0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/;
|
|
2254
|
+
|
|
2255
|
+
// ../utils.parser/dist/Identifier.js
|
|
2256
|
+
var Identifier = class {
|
|
2257
|
+
constructor(parser, token, dereferences) {
|
|
2258
|
+
this.token = token;
|
|
2259
|
+
this.dereferences = dereferences;
|
|
2260
|
+
this.parser = parser;
|
|
2261
|
+
}
|
|
2262
|
+
dereference(value, $context, globals, node) {
|
|
2263
|
+
let member3;
|
|
2264
|
+
let refs = this.dereferences || [];
|
|
2265
|
+
const $data = $context.$data || {};
|
|
2266
|
+
let lastValue;
|
|
2267
|
+
let i, n;
|
|
2268
|
+
for (i = 0, n = refs.length; i < n; ++i) {
|
|
2269
|
+
member3 = Node.value_of(refs[i], $context, globals, node);
|
|
2270
|
+
if (typeof value === "function" && refs[i] instanceof Arguments) {
|
|
2271
|
+
value = value.apply(lastValue || $data, member3);
|
|
2272
|
+
lastValue = value;
|
|
2273
|
+
} else if (value === null || value === void 0) {
|
|
2274
|
+
throw new Error(`dereference of null value in ${JSON.stringify(this, null, 2)} context: ${JSON.stringify($context, null, 2)}`);
|
|
2275
|
+
} else {
|
|
2276
|
+
lastValue = value;
|
|
2277
|
+
value = Node.value_of(value[member3], $context, globals, node);
|
|
2278
|
+
}
|
|
2279
|
+
}
|
|
2280
|
+
if (typeof value === "function" && n > 0 && lastValue !== value && !hasOwnProperty(lastValue, member3)) {
|
|
2281
|
+
return value.bind(lastValue);
|
|
2282
|
+
}
|
|
2283
|
+
return value;
|
|
2284
|
+
}
|
|
2285
|
+
get_value(parent, context, globals, node) {
|
|
2286
|
+
const intermediate = parent && !(parent instanceof Identifier) ? Node.value_of(parent, context, globals, node)[this.token] : context.lookup(this.token, globals, node);
|
|
2287
|
+
return this.dereference(intermediate, context, globals, node);
|
|
2288
|
+
}
|
|
2289
|
+
assign(object2, property, value) {
|
|
2290
|
+
if (isWriteableObservable(object2[property])) {
|
|
2291
|
+
object2[property](value);
|
|
2292
|
+
} else if (!isObservable(object2[property])) {
|
|
2293
|
+
object2[property] = value;
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
set_value(new_value, $context, globals) {
|
|
2297
|
+
const $data = $context.$data || {};
|
|
2298
|
+
const refs = this.dereferences || [];
|
|
2299
|
+
let leaf = this.token;
|
|
2300
|
+
let i, n, root;
|
|
2301
|
+
if (isObjectLike($data) && leaf in $data) {
|
|
2302
|
+
root = $data;
|
|
2303
|
+
} else if (leaf in $context) {
|
|
2304
|
+
root = $context;
|
|
2305
|
+
} else if (leaf in globals) {
|
|
2306
|
+
root = globals;
|
|
2307
|
+
} else {
|
|
2308
|
+
throw new Error("Identifier::set_value -- The property '" + leaf + "' does not exist on the $data, $context, or globals.");
|
|
2309
|
+
}
|
|
2310
|
+
n = refs.length;
|
|
2311
|
+
if (n === 0) {
|
|
2312
|
+
this.assign(root, leaf, new_value);
|
|
2313
|
+
return;
|
|
2314
|
+
}
|
|
2315
|
+
root = root[leaf];
|
|
2316
|
+
for (i = 0; i < n - 1; ++i) {
|
|
2317
|
+
leaf = refs[i];
|
|
2318
|
+
if (leaf instanceof Arguments) {
|
|
2319
|
+
root = root();
|
|
2320
|
+
} else {
|
|
2321
|
+
root = root[Node.value_of(leaf)];
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
2324
|
+
if (refs[i] === true) {
|
|
2325
|
+
throw new Error("Cannot assign a value to a function.");
|
|
2326
|
+
}
|
|
2327
|
+
if (refs[i]) {
|
|
2328
|
+
this.assign(root, Node.value_of(refs[i]), new_value);
|
|
2329
|
+
}
|
|
2330
|
+
}
|
|
2331
|
+
static is_valid_start_char(ch) {
|
|
2332
|
+
return IDStart.test(ch);
|
|
2333
|
+
}
|
|
2334
|
+
static is_valid_continue_char(ch) {
|
|
2335
|
+
return IDContinue.test(ch);
|
|
2336
|
+
}
|
|
2337
|
+
get [Node.isExpressionOrIdentifierSymbol]() {
|
|
2338
|
+
return true;
|
|
2339
|
+
}
|
|
2340
|
+
};
|
|
2341
|
+
|
|
2342
|
+
// ../utils.parser/dist/Parameters.js
|
|
2343
|
+
var Parameters = class {
|
|
2344
|
+
constructor(parser, node) {
|
|
2345
|
+
if (node instanceof Expression) {
|
|
2346
|
+
node = node.root;
|
|
2347
|
+
}
|
|
2348
|
+
try {
|
|
2349
|
+
this.names = Parameters.nodeTreeToNames(node);
|
|
2350
|
+
} catch (e) {
|
|
2351
|
+
parser.error(e);
|
|
2352
|
+
}
|
|
2353
|
+
}
|
|
2354
|
+
extendContext(context, args) {
|
|
2355
|
+
if (!this.names) {
|
|
2356
|
+
return context;
|
|
2357
|
+
} else {
|
|
2358
|
+
const newValues = {};
|
|
2359
|
+
this.names.forEach((name, index) => {
|
|
2360
|
+
newValues[name] = args[index];
|
|
2361
|
+
});
|
|
2362
|
+
return context.extend(newValues);
|
|
2363
|
+
}
|
|
2364
|
+
}
|
|
2365
|
+
get [Node.isExpressionOrIdentifierSymbol]() {
|
|
2366
|
+
return true;
|
|
2367
|
+
}
|
|
2368
|
+
static nodeTreeToNames(node) {
|
|
2369
|
+
const names = [];
|
|
2370
|
+
while (node) {
|
|
2371
|
+
if (node instanceof Identifier) {
|
|
2372
|
+
names.push(node.token);
|
|
2373
|
+
node = null;
|
|
2374
|
+
} else if (this.isCommaNode(node)) {
|
|
2375
|
+
names.push(node.rhs.token);
|
|
2376
|
+
node = node.lhs;
|
|
2377
|
+
} else {
|
|
2378
|
+
throw new Error(`only simple identifiers allowed in lambda parameter list but found ${JSON.stringify(node, null, 2)}`);
|
|
2379
|
+
}
|
|
2380
|
+
}
|
|
2381
|
+
names.reverse();
|
|
2382
|
+
return names;
|
|
2383
|
+
}
|
|
2384
|
+
static isCommaNode(node) {
|
|
2385
|
+
return node instanceof Node && node.op === operators[","] && node.rhs instanceof Identifier;
|
|
2386
|
+
}
|
|
2387
|
+
};
|
|
2388
|
+
|
|
2389
|
+
// ../utils.parser/dist/Ternary.js
|
|
2390
|
+
var Ternary = class {
|
|
2391
|
+
constructor(yes, no) {
|
|
2392
|
+
Object.assign(this, { yes, no });
|
|
2393
|
+
}
|
|
2394
|
+
get_value() {
|
|
2395
|
+
return this;
|
|
2396
|
+
}
|
|
2397
|
+
get [Node.isExpressionOrIdentifierSymbol]() {
|
|
2398
|
+
return true;
|
|
2399
|
+
}
|
|
2400
|
+
};
|
|
2401
|
+
|
|
2402
|
+
// ../utils.parser/dist/preparse.js
|
|
2403
|
+
var specials = ",\"'`{}()/:[\\]";
|
|
2404
|
+
var bindingToken = RegExp([
|
|
2405
|
+
'"(?:\\\\.|[^"])*"',
|
|
2406
|
+
"'(?:\\\\.|[^'])*'",
|
|
2407
|
+
"`(?:\\\\.|[^`])*`",
|
|
2408
|
+
"/\\*(?:[^*]|\\*+[^*/])*\\*+/",
|
|
2409
|
+
"//.*\n",
|
|
2410
|
+
"/(?:\\\\.|[^/])+/\\w*",
|
|
2411
|
+
"[^\\s:,/][^" + specials + "]*[^\\s" + specials + "]",
|
|
2412
|
+
"[^\\s]"
|
|
2413
|
+
].join("|"), "g");
|
|
2414
|
+
var divisionLookBehind = /[\])"'A-Za-z0-9_$]+$/;
|
|
2415
|
+
var keywordRegexLookBehind = { "in": 1, "return": 1, "typeof": 1 };
|
|
2416
|
+
function parseObjectLiteral(objectLiteralString) {
|
|
2417
|
+
var str = stringTrim(objectLiteralString);
|
|
2418
|
+
if (str.charCodeAt(0) === 123)
|
|
2419
|
+
str = str.slice(1, -1);
|
|
2420
|
+
str += "\n,";
|
|
2421
|
+
var result = [];
|
|
2422
|
+
var toks = str.match(bindingToken);
|
|
2423
|
+
var key;
|
|
2424
|
+
var values = [];
|
|
2425
|
+
var depth = 0;
|
|
2426
|
+
if (toks.length <= 1) {
|
|
2427
|
+
return [];
|
|
2428
|
+
}
|
|
2429
|
+
for (var i = 0, tok; tok = toks[i]; ++i) {
|
|
2430
|
+
var c = tok.charCodeAt(0);
|
|
2431
|
+
if (c === 44) {
|
|
2432
|
+
if (depth <= 0) {
|
|
2433
|
+
result.push(key && values.length ? {
|
|
2434
|
+
key,
|
|
2435
|
+
value: values.join("")
|
|
2436
|
+
} : {
|
|
2437
|
+
"unknown": key || values.join("")
|
|
2438
|
+
});
|
|
2439
|
+
key = depth = 0;
|
|
2440
|
+
values = [];
|
|
2441
|
+
continue;
|
|
2442
|
+
}
|
|
2443
|
+
} else if (c === 58) {
|
|
2444
|
+
if (!depth && !key && values.length === 1) {
|
|
2445
|
+
key = values.pop();
|
|
2446
|
+
continue;
|
|
2447
|
+
}
|
|
2448
|
+
} else if (c === 47 && tok.length > 1 && (tok.charCodeAt(1) === 47 || tok.charCodeAt(1) === 42)) {
|
|
2449
|
+
continue;
|
|
2450
|
+
} else if (c === 47 && i && tok.length > 1) {
|
|
2451
|
+
var match = toks[i - 1].match(divisionLookBehind);
|
|
2452
|
+
if (match && !keywordRegexLookBehind[match[0]]) {
|
|
2453
|
+
str = str.substr(str.indexOf(tok) + 1);
|
|
2454
|
+
toks = str.match(bindingToken);
|
|
2455
|
+
i = -1;
|
|
2456
|
+
tok = "/";
|
|
2457
|
+
}
|
|
2458
|
+
} else if (c === 40 || c === 123 || c === 91) {
|
|
2459
|
+
++depth;
|
|
2460
|
+
} else if (c === 41 || c === 125 || c === 93) {
|
|
2461
|
+
--depth;
|
|
2462
|
+
} else if (!key && !values.length && (c === 34 || c === 39)) {
|
|
2463
|
+
tok = tok.slice(1, -1);
|
|
2464
|
+
}
|
|
2465
|
+
values.push(tok);
|
|
2466
|
+
}
|
|
2467
|
+
return result;
|
|
2468
|
+
}
|
|
2469
|
+
|
|
2470
|
+
// ../computed/dist/computed.js
|
|
2471
|
+
var computedState = createSymbolOrString("_state");
|
|
2472
|
+
var DISPOSED_STATE = {
|
|
2473
|
+
dependencyTracking: null,
|
|
2474
|
+
dependenciesCount: 0,
|
|
2475
|
+
isDisposed: true,
|
|
2476
|
+
isStale: false,
|
|
2477
|
+
isDirty: false,
|
|
2478
|
+
isSleeping: false,
|
|
2479
|
+
disposeWhenNodeIsRemoved: null,
|
|
2480
|
+
readFunction: null,
|
|
2481
|
+
_options: null
|
|
2482
|
+
};
|
|
2483
|
+
function computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, options2) {
|
|
2484
|
+
if (typeof evaluatorFunctionOrOptions === "object") {
|
|
2485
|
+
options2 = evaluatorFunctionOrOptions;
|
|
2486
|
+
} else {
|
|
2487
|
+
options2 = options2 || {};
|
|
2488
|
+
if (evaluatorFunctionOrOptions) {
|
|
2489
|
+
options2.read = evaluatorFunctionOrOptions;
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
if (typeof options2.read !== "function") {
|
|
2493
|
+
throw Error("Pass a function that returns the value of the computed");
|
|
2494
|
+
}
|
|
2495
|
+
var writeFunction = options2.write;
|
|
2496
|
+
var state = {
|
|
2497
|
+
latestValue: void 0,
|
|
2498
|
+
isStale: true,
|
|
2499
|
+
isDirty: true,
|
|
2500
|
+
isBeingEvaluated: false,
|
|
2501
|
+
suppressDisposalUntilDisposeWhenReturnsFalse: false,
|
|
2502
|
+
isDisposed: false,
|
|
2503
|
+
pure: false,
|
|
2504
|
+
isSleeping: false,
|
|
2505
|
+
readFunction: options2.read,
|
|
2506
|
+
evaluatorFunctionTarget: evaluatorFunctionTarget || options2.owner,
|
|
2507
|
+
disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || options2.disposeWhenNodeIsRemoved || null,
|
|
2508
|
+
disposeWhen: options2.disposeWhen || options2.disposeWhen,
|
|
2509
|
+
domNodeDisposalCallback: null,
|
|
2510
|
+
dependencyTracking: {},
|
|
2511
|
+
dependenciesCount: 0,
|
|
2512
|
+
evaluationTimeoutInstance: null
|
|
2513
|
+
};
|
|
2514
|
+
function computedObservable() {
|
|
2515
|
+
if (arguments.length > 0) {
|
|
2516
|
+
if (typeof writeFunction === "function") {
|
|
2517
|
+
writeFunction.apply(state.evaluatorFunctionTarget, arguments);
|
|
2518
|
+
} else {
|
|
2519
|
+
throw new Error("Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
|
|
2520
|
+
}
|
|
2521
|
+
return this;
|
|
2522
|
+
} else {
|
|
2523
|
+
if (!state.isDisposed) {
|
|
2524
|
+
dependencyDetection_exports.registerDependency(computedObservable);
|
|
2525
|
+
}
|
|
2526
|
+
if (state.isDirty || state.isSleeping && computedObservable.haveDependenciesChanged()) {
|
|
2527
|
+
computedObservable.evaluateImmediate();
|
|
2528
|
+
}
|
|
2529
|
+
return state.latestValue;
|
|
2530
|
+
}
|
|
2531
|
+
}
|
|
2532
|
+
computedObservable[computedState] = state;
|
|
2533
|
+
computedObservable.isWriteable = typeof writeFunction === "function";
|
|
2534
|
+
subscribable.fn.init(computedObservable);
|
|
2535
|
+
Object.setPrototypeOf(computedObservable, computed.fn);
|
|
2536
|
+
if (options2.pure) {
|
|
2537
|
+
state.pure = true;
|
|
2538
|
+
state.isSleeping = true;
|
|
2539
|
+
extend(computedObservable, pureComputedOverrides);
|
|
2540
|
+
} else if (options2.deferEvaluation) {
|
|
2541
|
+
extend(computedObservable, deferEvaluationOverrides);
|
|
2542
|
+
}
|
|
2543
|
+
if (options_default.deferUpdates) {
|
|
2544
|
+
extenders.deferred(computedObservable, true);
|
|
2545
|
+
}
|
|
2546
|
+
if (options_default.debug) {
|
|
2547
|
+
computedObservable._options = options2;
|
|
2548
|
+
}
|
|
2549
|
+
if (state.disposeWhenNodeIsRemoved) {
|
|
2550
|
+
state.suppressDisposalUntilDisposeWhenReturnsFalse = true;
|
|
2551
|
+
if (!state.disposeWhenNodeIsRemoved.nodeType) {
|
|
2552
|
+
state.disposeWhenNodeIsRemoved = null;
|
|
2553
|
+
}
|
|
2554
|
+
}
|
|
2555
|
+
if (!state.isSleeping && !options2.deferEvaluation) {
|
|
2556
|
+
computedObservable.evaluateImmediate();
|
|
2557
|
+
}
|
|
2558
|
+
if (state.disposeWhenNodeIsRemoved && computedObservable.isActive()) {
|
|
2559
|
+
addDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback = function() {
|
|
2560
|
+
computedObservable.dispose();
|
|
2561
|
+
});
|
|
2562
|
+
}
|
|
2563
|
+
return computedObservable;
|
|
2564
|
+
}
|
|
2565
|
+
function computedDisposeDependencyCallback(id, entryToDispose) {
|
|
2566
|
+
if (entryToDispose !== null && entryToDispose.dispose) {
|
|
2567
|
+
entryToDispose.dispose();
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
function computedBeginDependencyDetectionCallback(subscribable2, id) {
|
|
2571
|
+
var computedObservable = this.computedObservable, state = computedObservable[computedState];
|
|
2572
|
+
if (!state.isDisposed) {
|
|
2573
|
+
if (this.disposalCount && this.disposalCandidates[id]) {
|
|
2574
|
+
computedObservable.addDependencyTracking(id, subscribable2, this.disposalCandidates[id]);
|
|
2575
|
+
this.disposalCandidates[id] = null;
|
|
2576
|
+
--this.disposalCount;
|
|
2577
|
+
} else if (!state.dependencyTracking[id]) {
|
|
2578
|
+
computedObservable.addDependencyTracking(id, subscribable2, state.isSleeping ? { _target: subscribable2 } : computedObservable.subscribeToDependency(subscribable2));
|
|
2579
|
+
}
|
|
2580
|
+
if (subscribable2._notificationIsPending) {
|
|
2581
|
+
subscribable2._notifyNextChangeIfValueIsDifferent();
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
}
|
|
2585
|
+
computed.fn = {
|
|
2586
|
+
equalityComparer: valuesArePrimitiveAndEqual,
|
|
2587
|
+
getDependenciesCount() {
|
|
2588
|
+
return this[computedState].dependenciesCount;
|
|
2589
|
+
},
|
|
2590
|
+
getDependencies() {
|
|
2591
|
+
const dependencyTracking = this[computedState].dependencyTracking;
|
|
2592
|
+
const dependentObservables = [];
|
|
2593
|
+
objectForEach(dependencyTracking, function(id, dependency) {
|
|
2594
|
+
dependentObservables[dependency._order] = dependency._target;
|
|
2595
|
+
});
|
|
2596
|
+
return dependentObservables;
|
|
2597
|
+
},
|
|
2598
|
+
addDependencyTracking(id, target, trackingObj) {
|
|
2599
|
+
if (this[computedState].pure && target === this) {
|
|
2600
|
+
throw Error("A 'pure' computed must not be called recursively");
|
|
2601
|
+
}
|
|
2602
|
+
this[computedState].dependencyTracking[id] = trackingObj;
|
|
2603
|
+
trackingObj._order = this[computedState].dependenciesCount++;
|
|
2604
|
+
trackingObj._version = target.getVersion();
|
|
2605
|
+
},
|
|
2606
|
+
haveDependenciesChanged() {
|
|
2607
|
+
var id, dependency, dependencyTracking = this[computedState].dependencyTracking;
|
|
2608
|
+
for (id in dependencyTracking) {
|
|
2609
|
+
if (hasOwnProperty(dependencyTracking, id)) {
|
|
2610
|
+
dependency = dependencyTracking[id];
|
|
2611
|
+
if (this._evalDelayed && dependency._target._notificationIsPending || dependency._target.hasChanged(dependency._version)) {
|
|
2612
|
+
return true;
|
|
2613
|
+
}
|
|
2614
|
+
}
|
|
2615
|
+
}
|
|
2616
|
+
},
|
|
2617
|
+
markDirty() {
|
|
2618
|
+
if (this._evalDelayed && !this[computedState].isBeingEvaluated) {
|
|
2619
|
+
this._evalDelayed(false);
|
|
2620
|
+
}
|
|
2621
|
+
},
|
|
2622
|
+
isActive() {
|
|
2623
|
+
const state = this[computedState];
|
|
2624
|
+
return state.isDirty || state.dependenciesCount > 0;
|
|
2625
|
+
},
|
|
2626
|
+
respondToChange() {
|
|
2627
|
+
if (!this._notificationIsPending) {
|
|
2628
|
+
this.evaluatePossiblyAsync();
|
|
2629
|
+
} else if (this[computedState].isDirty) {
|
|
2630
|
+
this[computedState].isStale = true;
|
|
2631
|
+
}
|
|
2632
|
+
},
|
|
2633
|
+
subscribeToDependency(target) {
|
|
2634
|
+
if (target._deferUpdates) {
|
|
2635
|
+
var dirtySub = target.subscribe(this.markDirty, this, "dirty"), changeSub = target.subscribe(this.respondToChange, this);
|
|
2636
|
+
return {
|
|
2637
|
+
_target: target,
|
|
2638
|
+
dispose() {
|
|
2639
|
+
dirtySub.dispose();
|
|
2640
|
+
changeSub.dispose();
|
|
2641
|
+
}
|
|
2642
|
+
};
|
|
2643
|
+
} else {
|
|
2644
|
+
return target.subscribe(this.evaluatePossiblyAsync, this);
|
|
2645
|
+
}
|
|
2646
|
+
},
|
|
2647
|
+
evaluatePossiblyAsync() {
|
|
2648
|
+
var computedObservable = this, throttleEvaluationTimeout = computedObservable.throttleEvaluation;
|
|
2649
|
+
if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {
|
|
2650
|
+
clearTimeout(this[computedState].evaluationTimeoutInstance);
|
|
2651
|
+
this[computedState].evaluationTimeoutInstance = safeSetTimeout(function() {
|
|
2652
|
+
computedObservable.evaluateImmediate(true);
|
|
2653
|
+
}, throttleEvaluationTimeout);
|
|
2654
|
+
} else if (computedObservable._evalDelayed) {
|
|
2655
|
+
computedObservable._evalDelayed(true);
|
|
2656
|
+
} else {
|
|
2657
|
+
computedObservable.evaluateImmediate(true);
|
|
2658
|
+
}
|
|
2659
|
+
},
|
|
2660
|
+
evaluateImmediate(notifyChange) {
|
|
2661
|
+
var computedObservable = this, state = computedObservable[computedState], disposeWhen = state.disposeWhen, changed = false;
|
|
2662
|
+
if (state.isBeingEvaluated) {
|
|
2663
|
+
return;
|
|
2664
|
+
}
|
|
2665
|
+
if (state.isDisposed) {
|
|
2666
|
+
return;
|
|
2667
|
+
}
|
|
2668
|
+
if (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved) || disposeWhen && disposeWhen()) {
|
|
2669
|
+
if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {
|
|
2670
|
+
computedObservable.dispose();
|
|
2671
|
+
return;
|
|
2672
|
+
}
|
|
2673
|
+
} else {
|
|
2674
|
+
state.suppressDisposalUntilDisposeWhenReturnsFalse = false;
|
|
2675
|
+
}
|
|
2676
|
+
state.isBeingEvaluated = true;
|
|
2677
|
+
try {
|
|
2678
|
+
changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange);
|
|
2679
|
+
} finally {
|
|
2680
|
+
state.isBeingEvaluated = false;
|
|
2681
|
+
}
|
|
2682
|
+
return changed;
|
|
2683
|
+
},
|
|
2684
|
+
evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {
|
|
2685
|
+
var computedObservable = this, state = computedObservable[computedState], changed = false;
|
|
2686
|
+
var isInitial2 = state.pure ? void 0 : !state.dependenciesCount, dependencyDetectionContext = {
|
|
2687
|
+
computedObservable,
|
|
2688
|
+
disposalCandidates: state.dependencyTracking,
|
|
2689
|
+
disposalCount: state.dependenciesCount
|
|
2690
|
+
};
|
|
2691
|
+
dependencyDetection_exports.begin({
|
|
2692
|
+
callbackTarget: dependencyDetectionContext,
|
|
2693
|
+
callback: computedBeginDependencyDetectionCallback,
|
|
2694
|
+
computed: computedObservable,
|
|
2695
|
+
isInitial: isInitial2
|
|
2696
|
+
});
|
|
2697
|
+
state.dependencyTracking = {};
|
|
2698
|
+
state.dependenciesCount = 0;
|
|
2699
|
+
var newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext);
|
|
2700
|
+
if (!state.dependenciesCount) {
|
|
2701
|
+
computedObservable.dispose();
|
|
2702
|
+
changed = true;
|
|
2703
|
+
} else {
|
|
2704
|
+
changed = computedObservable.isDifferent(state.latestValue, newValue);
|
|
2705
|
+
}
|
|
2706
|
+
if (changed) {
|
|
2707
|
+
if (!state.isSleeping) {
|
|
2708
|
+
computedObservable.notifySubscribers(state.latestValue, "beforeChange");
|
|
2709
|
+
} else {
|
|
2710
|
+
computedObservable.updateVersion();
|
|
2711
|
+
}
|
|
2712
|
+
state.latestValue = newValue;
|
|
2713
|
+
if (options_default.debug) {
|
|
2714
|
+
computedObservable._latestValue = newValue;
|
|
2715
|
+
}
|
|
2716
|
+
computedObservable.notifySubscribers(state.latestValue, "spectate");
|
|
2717
|
+
if (!state.isSleeping && notifyChange) {
|
|
2718
|
+
computedObservable.notifySubscribers(state.latestValue);
|
|
2719
|
+
}
|
|
2720
|
+
if (computedObservable._recordUpdate) {
|
|
2721
|
+
computedObservable._recordUpdate();
|
|
2722
|
+
}
|
|
2723
|
+
}
|
|
2724
|
+
if (isInitial2) {
|
|
2725
|
+
computedObservable.notifySubscribers(state.latestValue, "awake");
|
|
2726
|
+
}
|
|
2727
|
+
return changed;
|
|
2728
|
+
},
|
|
2729
|
+
evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {
|
|
2730
|
+
try {
|
|
2731
|
+
var readFunction = state.readFunction;
|
|
2732
|
+
return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction();
|
|
2733
|
+
} finally {
|
|
2734
|
+
dependencyDetection_exports.end();
|
|
2735
|
+
if (dependencyDetectionContext.disposalCount && !state.isSleeping) {
|
|
2736
|
+
objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback);
|
|
2737
|
+
}
|
|
2738
|
+
state.isStale = state.isDirty = false;
|
|
2739
|
+
}
|
|
2740
|
+
},
|
|
2741
|
+
peek(forceEvaluate) {
|
|
2742
|
+
const state = this[computedState];
|
|
2743
|
+
if (state.isDirty && (forceEvaluate || !state.dependenciesCount) || state.isSleeping && this.haveDependenciesChanged()) {
|
|
2744
|
+
this.evaluateImmediate();
|
|
2745
|
+
}
|
|
2746
|
+
return state.latestValue;
|
|
2747
|
+
},
|
|
2748
|
+
get [LATEST_VALUE]() {
|
|
2749
|
+
return this.peek();
|
|
2750
|
+
},
|
|
2751
|
+
limit(limitFunction) {
|
|
2752
|
+
const state = this[computedState];
|
|
2753
|
+
subscribable.fn.limit.call(this, limitFunction);
|
|
2754
|
+
Object.assign(this, {
|
|
2755
|
+
_evalIfChanged() {
|
|
2756
|
+
if (!this[computedState].isSleeping) {
|
|
2757
|
+
if (this[computedState].isStale) {
|
|
2758
|
+
this.evaluateImmediate();
|
|
2759
|
+
} else {
|
|
2760
|
+
this[computedState].isDirty = false;
|
|
2761
|
+
}
|
|
2762
|
+
}
|
|
2763
|
+
return state.latestValue;
|
|
2764
|
+
},
|
|
2765
|
+
_evalDelayed(isChange) {
|
|
2766
|
+
this._limitBeforeChange(state.latestValue);
|
|
2767
|
+
state.isDirty = true;
|
|
2768
|
+
if (isChange) {
|
|
2769
|
+
state.isStale = true;
|
|
2770
|
+
}
|
|
2771
|
+
this._limitChange(this, !isChange);
|
|
2772
|
+
}
|
|
2773
|
+
});
|
|
2774
|
+
},
|
|
2775
|
+
dispose() {
|
|
2776
|
+
var state = this[computedState];
|
|
2777
|
+
if (!state.isSleeping && state.dependencyTracking) {
|
|
2778
|
+
objectForEach(state.dependencyTracking, function(id, dependency) {
|
|
2779
|
+
if (dependency.dispose) {
|
|
2780
|
+
dependency.dispose();
|
|
2781
|
+
}
|
|
2782
|
+
});
|
|
2783
|
+
}
|
|
2784
|
+
if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {
|
|
2785
|
+
removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback);
|
|
2786
|
+
}
|
|
2787
|
+
Object.assign(state, DISPOSED_STATE);
|
|
2788
|
+
}
|
|
2789
|
+
};
|
|
2790
|
+
var pureComputedOverrides = {
|
|
2791
|
+
beforeSubscriptionAdd(event) {
|
|
2792
|
+
var computedObservable = this, state = computedObservable[computedState];
|
|
2793
|
+
if (!state.isDisposed && state.isSleeping && event === "change") {
|
|
2794
|
+
state.isSleeping = false;
|
|
2795
|
+
if (state.isStale || computedObservable.haveDependenciesChanged()) {
|
|
2796
|
+
state.dependencyTracking = null;
|
|
2797
|
+
state.dependenciesCount = 0;
|
|
2798
|
+
if (computedObservable.evaluateImmediate()) {
|
|
2799
|
+
computedObservable.updateVersion();
|
|
2800
|
+
}
|
|
2801
|
+
} else {
|
|
2802
|
+
var dependenciesOrder = [];
|
|
2803
|
+
objectForEach(state.dependencyTracking, function(id, dependency) {
|
|
2804
|
+
dependenciesOrder[dependency._order] = id;
|
|
2805
|
+
});
|
|
2806
|
+
arrayForEach(dependenciesOrder, function(id, order) {
|
|
2807
|
+
var dependency = state.dependencyTracking[id], subscription = computedObservable.subscribeToDependency(dependency._target);
|
|
2808
|
+
subscription._order = order;
|
|
2809
|
+
subscription._version = dependency._version;
|
|
2810
|
+
state.dependencyTracking[id] = subscription;
|
|
2811
|
+
});
|
|
2812
|
+
if (computedObservable.haveDependenciesChanged()) {
|
|
2813
|
+
if (computedObservable.evaluateImmediate()) {
|
|
2814
|
+
computedObservable.updateVersion();
|
|
2815
|
+
}
|
|
2816
|
+
}
|
|
2817
|
+
}
|
|
2818
|
+
if (!state.isDisposed) {
|
|
2819
|
+
computedObservable.notifySubscribers(state.latestValue, "awake");
|
|
2820
|
+
}
|
|
2821
|
+
}
|
|
2822
|
+
},
|
|
2823
|
+
afterSubscriptionRemove(event) {
|
|
2824
|
+
var state = this[computedState];
|
|
2825
|
+
if (!state.isDisposed && event === "change" && !this.hasSubscriptionsForEvent("change")) {
|
|
2826
|
+
objectForEach(state.dependencyTracking, function(id, dependency) {
|
|
2827
|
+
if (dependency.dispose) {
|
|
2828
|
+
state.dependencyTracking[id] = {
|
|
2829
|
+
_target: dependency._target,
|
|
2830
|
+
_order: dependency._order,
|
|
2831
|
+
_version: dependency._version
|
|
2832
|
+
};
|
|
2833
|
+
dependency.dispose();
|
|
2834
|
+
}
|
|
2835
|
+
});
|
|
2836
|
+
state.isSleeping = true;
|
|
2837
|
+
this.notifySubscribers(void 0, "asleep");
|
|
2838
|
+
}
|
|
2839
|
+
},
|
|
2840
|
+
getVersion() {
|
|
2841
|
+
var state = this[computedState];
|
|
2842
|
+
if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {
|
|
2843
|
+
this.evaluateImmediate();
|
|
2844
|
+
}
|
|
2845
|
+
return subscribable.fn.getVersion.call(this);
|
|
2846
|
+
}
|
|
2847
|
+
};
|
|
2848
|
+
var deferEvaluationOverrides = {
|
|
2849
|
+
beforeSubscriptionAdd(event) {
|
|
2850
|
+
if (event === "change" || event === "beforeChange") {
|
|
2851
|
+
this.peek();
|
|
2852
|
+
}
|
|
2853
|
+
}
|
|
2854
|
+
};
|
|
2855
|
+
Object.setPrototypeOf(computed.fn, subscribable.fn);
|
|
2856
|
+
var protoProp = observable.protoProperty;
|
|
2857
|
+
computed.fn[protoProp] = computed;
|
|
2858
|
+
observable.observablePrototypes.add(computed);
|
|
2859
|
+
function isComputed(instance) {
|
|
2860
|
+
return typeof instance === "function" && instance[protoProp] === computed;
|
|
2861
|
+
}
|
|
2862
|
+
function isPureComputed(instance) {
|
|
2863
|
+
return isComputed(instance) && instance[computedState] && instance[computedState].pure;
|
|
2864
|
+
}
|
|
2865
|
+
function pureComputed(evaluatorFunctionOrOptions, evaluatorFunctionTarget) {
|
|
2866
|
+
if (typeof evaluatorFunctionOrOptions === "function") {
|
|
2867
|
+
return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, { "pure": true });
|
|
2868
|
+
} else {
|
|
2869
|
+
evaluatorFunctionOrOptions = extend({}, evaluatorFunctionOrOptions);
|
|
2870
|
+
evaluatorFunctionOrOptions.pure = true;
|
|
2871
|
+
return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget);
|
|
2872
|
+
}
|
|
2873
|
+
}
|
|
2874
|
+
|
|
2875
|
+
// ../computed/dist/throttleExtender.js
|
|
2876
|
+
function throttleExtender(target, timeout) {
|
|
2877
|
+
target.throttleEvaluation = timeout;
|
|
2878
|
+
var writeTimeoutInstance = null;
|
|
2879
|
+
return computed({
|
|
2880
|
+
read: target,
|
|
2881
|
+
write: function(value) {
|
|
2882
|
+
clearTimeout(writeTimeoutInstance);
|
|
2883
|
+
writeTimeoutInstance = setTimeout(function() {
|
|
2884
|
+
target(value);
|
|
2885
|
+
}, timeout);
|
|
2886
|
+
}
|
|
2887
|
+
});
|
|
2888
|
+
}
|
|
2889
|
+
extenders.throttle = throttleExtender;
|
|
2890
|
+
|
|
2891
|
+
// ../computed/dist/proxy.js
|
|
2892
|
+
var PROXY_SYM = Symbol("Knockout Proxied Object");
|
|
2893
|
+
var MIRROR_SYM = Symbol("Knockout Proxied Observables");
|
|
2894
|
+
function makeComputed(proxy2, fn) {
|
|
2895
|
+
return computed({
|
|
2896
|
+
owner: proxy2,
|
|
2897
|
+
read: fn,
|
|
2898
|
+
write: fn,
|
|
2899
|
+
pure: "pure" in fn ? fn.pure : true,
|
|
2900
|
+
deferEvaluation: "deferEvaluation" in fn ? fn.deferEvaluation : true
|
|
2901
|
+
}).extend({ deferred: true });
|
|
2902
|
+
}
|
|
2903
|
+
function setOrCreate(mirror, prop, value, proxy2) {
|
|
2904
|
+
if (!mirror[prop]) {
|
|
2905
|
+
const ctr = Array.isArray(value) ? observableArray : typeof value === "function" ? makeComputed.bind(null, proxy2) : observable;
|
|
2906
|
+
mirror[prop] = ctr(value);
|
|
2907
|
+
} else {
|
|
2908
|
+
mirror[prop](value);
|
|
2909
|
+
}
|
|
2910
|
+
}
|
|
2911
|
+
function assignOrUpdate(mirror, object2, proxy2) {
|
|
2912
|
+
for (const key of Object.keys(object2)) {
|
|
2913
|
+
setOrCreate(mirror, key, object2[key], proxy2);
|
|
2914
|
+
}
|
|
2915
|
+
return object2;
|
|
2916
|
+
}
|
|
2917
|
+
function proxy(object2) {
|
|
2918
|
+
const mirror = { [PROXY_SYM]: object2 };
|
|
2919
|
+
mirror[MIRROR_SYM] = mirror;
|
|
2920
|
+
const proxy2 = new Proxy(function() {
|
|
2921
|
+
}, {
|
|
2922
|
+
has(target, prop) {
|
|
2923
|
+
return prop in mirror;
|
|
2924
|
+
},
|
|
2925
|
+
get(target, prop) {
|
|
2926
|
+
return unwrap(mirror[prop]);
|
|
2927
|
+
},
|
|
2928
|
+
set(target, prop, value, receiver) {
|
|
2929
|
+
setOrCreate(mirror, prop, value, proxy2);
|
|
2930
|
+
object2[prop] = value;
|
|
2931
|
+
return true;
|
|
2932
|
+
},
|
|
2933
|
+
deleteProperty(property) {
|
|
2934
|
+
delete mirror[property];
|
|
2935
|
+
return delete object2[property];
|
|
2936
|
+
},
|
|
2937
|
+
apply(target, thisArg, [props]) {
|
|
2938
|
+
if (props) {
|
|
2939
|
+
assignOrUpdate(mirror, props, proxy2);
|
|
2940
|
+
return Object.assign(object2, props);
|
|
2941
|
+
}
|
|
2942
|
+
return object2;
|
|
2943
|
+
},
|
|
2944
|
+
getPrototypeOf() {
|
|
2945
|
+
return Object.getPrototypeOf(object2);
|
|
2946
|
+
},
|
|
2947
|
+
setPrototypeOf(target, proto) {
|
|
2948
|
+
return Object.setPrototypeOf(object2, proto);
|
|
2949
|
+
},
|
|
2950
|
+
defineProperty(target, prop, desc) {
|
|
2951
|
+
return Object.defineProperty(object2, prop, desc);
|
|
2952
|
+
},
|
|
2953
|
+
preventExtensions() {
|
|
2954
|
+
return Object.preventExtensions(object2);
|
|
2955
|
+
},
|
|
2956
|
+
isExtensible() {
|
|
2957
|
+
return Object.isExtensible(object2);
|
|
2958
|
+
},
|
|
2959
|
+
ownKeys() {
|
|
2960
|
+
return [
|
|
2961
|
+
...Object.getOwnPropertyNames(object2),
|
|
2962
|
+
...Object.getOwnPropertySymbols(object2)
|
|
2963
|
+
];
|
|
2964
|
+
}
|
|
2965
|
+
});
|
|
2966
|
+
assignOrUpdate(mirror, object2, proxy2);
|
|
2967
|
+
return proxy2;
|
|
2968
|
+
}
|
|
2969
|
+
function getObservable(proxied, prop) {
|
|
2970
|
+
return proxied[MIRROR_SYM][prop];
|
|
2971
|
+
}
|
|
2972
|
+
function peek2(proxied, prop) {
|
|
2973
|
+
return getObservable(proxied, prop).peek();
|
|
2974
|
+
}
|
|
2975
|
+
function isProxied(proxied) {
|
|
2976
|
+
return PROXY_SYM in proxied;
|
|
2977
|
+
}
|
|
2978
|
+
Object.assign(proxy, { getObservable, peek: peek2, isProxied });
|
|
2979
|
+
|
|
2980
|
+
// ../computed/dist/when.js
|
|
2981
|
+
function kowhen(predicate, context, resolve) {
|
|
2982
|
+
const observable2 = pureComputed(predicate, context).extend({ notify: "always" });
|
|
2983
|
+
const subscription = observable2.subscribe((value) => {
|
|
2984
|
+
if (value) {
|
|
2985
|
+
subscription.dispose();
|
|
2986
|
+
resolve(value);
|
|
2987
|
+
}
|
|
2988
|
+
});
|
|
2989
|
+
observable2.notifySubscribers(observable2.peek());
|
|
2990
|
+
return subscription;
|
|
2991
|
+
}
|
|
2992
|
+
function when(predicate, callback, context) {
|
|
2993
|
+
const whenFn = kowhen.bind(null, predicate, context);
|
|
2994
|
+
return callback ? whenFn(callback.bind(context)) : new Promise(whenFn);
|
|
2995
|
+
}
|
|
2996
|
+
|
|
2997
|
+
// ../lifecycle/dist/LifeCycle.js
|
|
2998
|
+
var SUBSCRIPTIONS = createSymbolOrString("LifeCycle Subscriptions List");
|
|
2999
|
+
var ANCHOR_NODE = createSymbolOrString("LifeCycle Anchor Node");
|
|
3000
|
+
var LifeCycle = class {
|
|
3001
|
+
static mixInto(Constructor) {
|
|
3002
|
+
const target = Constructor.prototype || Constructor;
|
|
3003
|
+
const mixin = LifeCycle.prototype;
|
|
3004
|
+
for (let prop of Object.getOwnPropertyNames(mixin)) {
|
|
3005
|
+
target[prop] = mixin[prop];
|
|
3006
|
+
}
|
|
3007
|
+
}
|
|
3008
|
+
subscribe(observable2, action, subscriptionType) {
|
|
3009
|
+
if (typeof action === "string") {
|
|
3010
|
+
action = this[action];
|
|
3011
|
+
}
|
|
3012
|
+
this.addDisposable(observable2.subscribe(action, this, subscriptionType));
|
|
3013
|
+
}
|
|
3014
|
+
computed(params) {
|
|
3015
|
+
if (typeof params === "string") {
|
|
3016
|
+
params = { read: this[params], write: this[params] };
|
|
3017
|
+
}
|
|
3018
|
+
if (typeof params === "object") {
|
|
3019
|
+
params = Object.assign({ owner: this }, params);
|
|
3020
|
+
} else if (typeof params === "function") {
|
|
3021
|
+
const proto = Object.getPrototypeOf(this);
|
|
3022
|
+
if (proto && proto[params.name] === params) {
|
|
3023
|
+
params = params.bind(this);
|
|
3024
|
+
}
|
|
3025
|
+
params = { read: params, write: params };
|
|
3026
|
+
} else {
|
|
3027
|
+
throw new Error("LifeCycle::computed not given a valid type.");
|
|
3028
|
+
}
|
|
3029
|
+
params.disposeWhenNodeIsRemoved = this[ANCHOR_NODE];
|
|
3030
|
+
return this.addDisposable(computed(params));
|
|
3031
|
+
}
|
|
3032
|
+
addEventListener(...args) {
|
|
3033
|
+
const node = args[0].nodeType ? args.shift() : this[ANCHOR_NODE];
|
|
3034
|
+
const [type, act, options2] = args;
|
|
3035
|
+
const handler = typeof act === "string" ? this[act].bind(this) : act;
|
|
3036
|
+
this.__addEventListener(node, type, handler, options2);
|
|
3037
|
+
}
|
|
3038
|
+
__addEventListener(node, eventType, handler, options2) {
|
|
3039
|
+
node.addEventListener(eventType, handler, options2);
|
|
3040
|
+
function dispose() {
|
|
3041
|
+
node.removeEventListener(eventType, handler);
|
|
3042
|
+
}
|
|
3043
|
+
addDisposeCallback(node, dispose);
|
|
3044
|
+
this.addDisposable({ dispose });
|
|
3045
|
+
}
|
|
3046
|
+
anchorTo(nodeOrLifeCycle) {
|
|
3047
|
+
if ("addDisposable" in nodeOrLifeCycle) {
|
|
3048
|
+
nodeOrLifeCycle.addDisposable(this);
|
|
3049
|
+
this[ANCHOR_NODE] = null;
|
|
3050
|
+
} else {
|
|
3051
|
+
this[ANCHOR_NODE] = nodeOrLifeCycle;
|
|
3052
|
+
addDisposeCallback(nodeOrLifeCycle, () => this[ANCHOR_NODE] === nodeOrLifeCycle && this.dispose());
|
|
3053
|
+
}
|
|
3054
|
+
}
|
|
3055
|
+
dispose() {
|
|
3056
|
+
const subscriptions = this[SUBSCRIPTIONS] || [];
|
|
3057
|
+
subscriptions.forEach((s) => s.dispose());
|
|
3058
|
+
this[SUBSCRIPTIONS] = [];
|
|
3059
|
+
this[ANCHOR_NODE] = null;
|
|
3060
|
+
}
|
|
3061
|
+
addDisposable(subscription) {
|
|
3062
|
+
const subscriptions = this[SUBSCRIPTIONS] || [];
|
|
3063
|
+
if (!this[SUBSCRIPTIONS]) {
|
|
3064
|
+
this[SUBSCRIPTIONS] = subscriptions;
|
|
3065
|
+
}
|
|
3066
|
+
if (typeof subscription.dispose !== "function") {
|
|
3067
|
+
throw new Error("Lifecycle::addDisposable argument missing `dispose`.");
|
|
3068
|
+
}
|
|
3069
|
+
subscriptions.push(subscription);
|
|
3070
|
+
return subscription;
|
|
3071
|
+
}
|
|
3072
|
+
};
|
|
3073
|
+
|
|
3074
|
+
// ../bind/dist/bindingEvent.js
|
|
3075
|
+
var contextAncestorBindingInfo = Symbol("_ancestorBindingInfo");
|
|
3076
|
+
var boundElementDomDataKey = data_exports.nextKey();
|
|
3077
|
+
var bindingEvent = {
|
|
3078
|
+
childrenComplete: "childrenComplete",
|
|
3079
|
+
descendantsComplete: "descendantsComplete",
|
|
3080
|
+
subscribe(node, event, callback, context) {
|
|
3081
|
+
const bindingInfo = data_exports.getOrSet(node, boundElementDomDataKey, {});
|
|
3082
|
+
if (!bindingInfo.eventSubscribable) {
|
|
3083
|
+
bindingInfo.eventSubscribable = new subscribable();
|
|
3084
|
+
}
|
|
3085
|
+
return bindingInfo.eventSubscribable.subscribe(callback, context, event);
|
|
3086
|
+
},
|
|
3087
|
+
notify(node, event) {
|
|
3088
|
+
const bindingInfo = data_exports.get(node, boundElementDomDataKey);
|
|
3089
|
+
if (bindingInfo) {
|
|
3090
|
+
if (bindingInfo.eventSubscribable) {
|
|
3091
|
+
bindingInfo.eventSubscribable.notifySubscribers(node, event);
|
|
3092
|
+
}
|
|
3093
|
+
}
|
|
3094
|
+
}
|
|
3095
|
+
};
|
|
3096
|
+
|
|
3097
|
+
// ../bind/dist/bindingContext.js
|
|
3098
|
+
var boundElementDomDataKey2 = data_exports.nextKey();
|
|
3099
|
+
var contextSubscribeSymbol = Symbol("Knockout Context Subscription");
|
|
3100
|
+
var inheritParentIndicator = Symbol("Knockout Parent Indicator");
|
|
3101
|
+
function bindingContext(dataItemOrAccessor, parentContext, dataItemAlias, extendCallback, settings) {
|
|
3102
|
+
const self = this;
|
|
3103
|
+
const shouldInheritData = dataItemOrAccessor === inheritParentIndicator;
|
|
3104
|
+
const realDataItemOrAccessor = shouldInheritData ? void 0 : dataItemOrAccessor;
|
|
3105
|
+
const isFunc = typeof realDataItemOrAccessor === "function" && !isObservable(realDataItemOrAccessor);
|
|
3106
|
+
self.ko = options_default.knockoutInstance;
|
|
3107
|
+
let nodes;
|
|
3108
|
+
let subscribable2;
|
|
3109
|
+
function updateContext() {
|
|
3110
|
+
const dataItemOrObservable = isFunc ? realDataItemOrAccessor() : realDataItemOrAccessor;
|
|
3111
|
+
let dataItem = unwrap(dataItemOrObservable);
|
|
3112
|
+
if (parentContext) {
|
|
3113
|
+
if (parentContext[contextSubscribeSymbol]) {
|
|
3114
|
+
parentContext[contextSubscribeSymbol]();
|
|
3115
|
+
}
|
|
3116
|
+
extend(self, parentContext);
|
|
3117
|
+
if (contextAncestorBindingInfo in parentContext) {
|
|
3118
|
+
self[contextAncestorBindingInfo] = parentContext[contextAncestorBindingInfo];
|
|
3119
|
+
}
|
|
3120
|
+
} else {
|
|
3121
|
+
self.$parents = [];
|
|
3122
|
+
self.$root = dataItem;
|
|
3123
|
+
}
|
|
3124
|
+
self[contextSubscribeSymbol] = subscribable2;
|
|
3125
|
+
if (shouldInheritData) {
|
|
3126
|
+
dataItem = self.$data;
|
|
3127
|
+
} else {
|
|
3128
|
+
self.$rawData = dataItemOrObservable;
|
|
3129
|
+
self.$data = dataItem;
|
|
3130
|
+
}
|
|
3131
|
+
if (dataItemAlias) {
|
|
3132
|
+
self[dataItemAlias] = dataItem;
|
|
3133
|
+
}
|
|
3134
|
+
if (extendCallback) {
|
|
3135
|
+
extendCallback(self, parentContext, dataItem);
|
|
3136
|
+
}
|
|
3137
|
+
return self.$data;
|
|
3138
|
+
}
|
|
3139
|
+
if (settings && settings.exportDependencies) {
|
|
3140
|
+
updateContext();
|
|
3141
|
+
} else {
|
|
3142
|
+
subscribable2 = pureComputed(updateContext);
|
|
3143
|
+
subscribable2.peek();
|
|
3144
|
+
if (subscribable2.isActive()) {
|
|
3145
|
+
self[contextSubscribeSymbol] = subscribable2;
|
|
3146
|
+
subscribable2["equalityComparer"] = null;
|
|
3147
|
+
} else {
|
|
3148
|
+
self[contextSubscribeSymbol] = void 0;
|
|
3149
|
+
}
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
Object.assign(bindingContext.prototype, {
|
|
3153
|
+
lookup(token, globals, node) {
|
|
3154
|
+
switch (token) {
|
|
3155
|
+
case "$element":
|
|
3156
|
+
return node;
|
|
3157
|
+
case "$context":
|
|
3158
|
+
return this;
|
|
3159
|
+
case "this":
|
|
3160
|
+
case "$data":
|
|
3161
|
+
return this.$data;
|
|
3162
|
+
}
|
|
3163
|
+
const $data = this.$data;
|
|
3164
|
+
if (isObjectLike($data) && token in $data) {
|
|
3165
|
+
return $data[token];
|
|
3166
|
+
}
|
|
3167
|
+
if (token in this) {
|
|
3168
|
+
return this[token];
|
|
3169
|
+
}
|
|
3170
|
+
if (token in globals) {
|
|
3171
|
+
return globals[token];
|
|
3172
|
+
}
|
|
3173
|
+
throw new Error(`The variable "${token}" was not found on $data, $context, or globals.`);
|
|
3174
|
+
},
|
|
3175
|
+
createChildContext(dataItemOrAccessor, dataItemAlias, extendCallback, settings) {
|
|
3176
|
+
return new bindingContext(dataItemOrAccessor, this, dataItemAlias, function(self, parentContext) {
|
|
3177
|
+
self.$parentContext = parentContext;
|
|
3178
|
+
self.$parent = parentContext.$data;
|
|
3179
|
+
self.$parents = (parentContext.$parents || []).slice(0);
|
|
3180
|
+
self.$parents.unshift(self.$parent);
|
|
3181
|
+
if (extendCallback) {
|
|
3182
|
+
extendCallback(self);
|
|
3183
|
+
}
|
|
3184
|
+
}, settings);
|
|
3185
|
+
},
|
|
3186
|
+
extend(properties) {
|
|
3187
|
+
return new bindingContext(inheritParentIndicator, this, null, function(self, parentContext) {
|
|
3188
|
+
extend(self, typeof properties === "function" ? properties.call(self) : properties);
|
|
3189
|
+
});
|
|
3190
|
+
},
|
|
3191
|
+
createStaticChildContext(dataItemOrAccessor, dataItemAlias) {
|
|
3192
|
+
return this.createChildContext(dataItemOrAccessor, dataItemAlias, null, { "exportDependencies": true });
|
|
3193
|
+
}
|
|
3194
|
+
});
|
|
3195
|
+
function storedBindingContextForNode(node) {
|
|
3196
|
+
const bindingInfo = data_exports.get(node, boundElementDomDataKey2);
|
|
3197
|
+
return bindingInfo && bindingInfo.context;
|
|
3198
|
+
}
|
|
3199
|
+
function contextFor(node) {
|
|
3200
|
+
if (node && (node.nodeType === 1 || node.nodeType === 8)) {
|
|
3201
|
+
return storedBindingContextForNode(node);
|
|
3202
|
+
}
|
|
3203
|
+
}
|
|
3204
|
+
function dataFor(node) {
|
|
3205
|
+
var context = contextFor(node);
|
|
3206
|
+
return context ? context.$data : void 0;
|
|
3207
|
+
}
|
|
3208
|
+
|
|
3209
|
+
// ../bind/dist/BindingResult.js
|
|
3210
|
+
var __async = (__this, __arguments, generator) => {
|
|
3211
|
+
return new Promise((resolve, reject) => {
|
|
3212
|
+
var fulfilled = (value) => {
|
|
3213
|
+
try {
|
|
3214
|
+
step(generator.next(value));
|
|
3215
|
+
} catch (e) {
|
|
3216
|
+
reject(e);
|
|
3217
|
+
}
|
|
3218
|
+
};
|
|
3219
|
+
var rejected = (value) => {
|
|
3220
|
+
try {
|
|
3221
|
+
step(generator.throw(value));
|
|
3222
|
+
} catch (e) {
|
|
3223
|
+
reject(e);
|
|
3224
|
+
}
|
|
3225
|
+
};
|
|
3226
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
3227
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
3228
|
+
});
|
|
3229
|
+
};
|
|
3230
|
+
var BindingResult = class {
|
|
3231
|
+
constructor({ asyncBindingsApplied, rootNode, bindingContext: bindingContext2 }) {
|
|
3232
|
+
Object.assign(this, {
|
|
3233
|
+
rootNode,
|
|
3234
|
+
bindingContext: bindingContext2,
|
|
3235
|
+
isSync: asyncBindingsApplied.size === 0,
|
|
3236
|
+
isComplete: this.isSync
|
|
3237
|
+
});
|
|
3238
|
+
if (!this.isSync) {
|
|
3239
|
+
this.completionPromise = this.completeWhenBindingsFinish(asyncBindingsApplied);
|
|
3240
|
+
}
|
|
3241
|
+
}
|
|
3242
|
+
completeWhenBindingsFinish(asyncBindingsApplied) {
|
|
3243
|
+
return __async(this, null, function* () {
|
|
3244
|
+
yield Promise.all(asyncBindingsApplied);
|
|
3245
|
+
this.isComplete = true;
|
|
3246
|
+
return this;
|
|
3247
|
+
});
|
|
3248
|
+
}
|
|
3249
|
+
};
|
|
3250
|
+
|
|
3251
|
+
// ../bind/dist/BindingHandler.js
|
|
3252
|
+
var BindingHandler = class extends LifeCycle {
|
|
3253
|
+
constructor(params) {
|
|
3254
|
+
super();
|
|
3255
|
+
const { $element, valueAccessor, allBindings, $context } = params;
|
|
3256
|
+
Object.assign(this, {
|
|
3257
|
+
valueAccessor,
|
|
3258
|
+
allBindings,
|
|
3259
|
+
$element,
|
|
3260
|
+
$context,
|
|
3261
|
+
$data: $context.$data
|
|
3262
|
+
});
|
|
3263
|
+
this.anchorTo($element);
|
|
3264
|
+
}
|
|
3265
|
+
get value() {
|
|
3266
|
+
return this.valueAccessor();
|
|
3267
|
+
}
|
|
3268
|
+
set value(v) {
|
|
3269
|
+
const va = this.valueAccessor();
|
|
3270
|
+
if (isWriteableObservable(va)) {
|
|
3271
|
+
va(v);
|
|
3272
|
+
} else {
|
|
3273
|
+
this.valueAccessor(v);
|
|
3274
|
+
}
|
|
3275
|
+
}
|
|
3276
|
+
get controlsDescendants() {
|
|
3277
|
+
return false;
|
|
3278
|
+
}
|
|
3279
|
+
static get allowVirtualElements() {
|
|
3280
|
+
return false;
|
|
3281
|
+
}
|
|
3282
|
+
static get isBindingHandlerClass() {
|
|
3283
|
+
return true;
|
|
3284
|
+
}
|
|
3285
|
+
get bindingCompleted() {
|
|
3286
|
+
return true;
|
|
3287
|
+
}
|
|
3288
|
+
static registerAs(name, provider = options_default.bindingProviderInstance) {
|
|
3289
|
+
provider.bindingHandlers.set(name, this);
|
|
3290
|
+
}
|
|
3291
|
+
};
|
|
3292
|
+
var ResolveSymbol = Symbol("Async Binding Resolved");
|
|
3293
|
+
var AsyncBindingHandler = class extends BindingHandler {
|
|
3294
|
+
constructor(params) {
|
|
3295
|
+
super(params);
|
|
3296
|
+
this.bindingCompletion = new Promise((resolve) => {
|
|
3297
|
+
this[ResolveSymbol] = resolve;
|
|
3298
|
+
});
|
|
3299
|
+
this.completeBinding = (bindingResult) => this[ResolveSymbol](bindingResult);
|
|
3300
|
+
}
|
|
3301
|
+
get bindingCompleted() {
|
|
3302
|
+
return this.bindingCompletion;
|
|
3303
|
+
}
|
|
3304
|
+
};
|
|
3305
|
+
|
|
3306
|
+
// ../bind/dist/LegacyBindingHandler.js
|
|
3307
|
+
var PossibleWeakMap = options_default.global.WeakMap || Map;
|
|
3308
|
+
var legacyBindingMap = new PossibleWeakMap();
|
|
3309
|
+
var LegacyBindingHandler = class extends BindingHandler {
|
|
3310
|
+
constructor(params) {
|
|
3311
|
+
super(params);
|
|
3312
|
+
const handler = this.handler;
|
|
3313
|
+
this.onError = params.onError;
|
|
3314
|
+
if (typeof handler.dispose === "function") {
|
|
3315
|
+
this.addDisposable(handler);
|
|
3316
|
+
}
|
|
3317
|
+
try {
|
|
3318
|
+
this.initReturn = handler.init && handler.init(...this.legacyArgs);
|
|
3319
|
+
} catch (e) {
|
|
3320
|
+
params.onError("init", e);
|
|
3321
|
+
}
|
|
3322
|
+
}
|
|
3323
|
+
onValueChange() {
|
|
3324
|
+
const handler = this.handler;
|
|
3325
|
+
if (typeof handler.update !== "function") {
|
|
3326
|
+
return;
|
|
3327
|
+
}
|
|
3328
|
+
try {
|
|
3329
|
+
handler.update(...this.legacyArgs);
|
|
3330
|
+
} catch (e) {
|
|
3331
|
+
this.onError("update", e);
|
|
3332
|
+
}
|
|
3333
|
+
}
|
|
3334
|
+
get legacyArgs() {
|
|
3335
|
+
return [
|
|
3336
|
+
this.$element,
|
|
3337
|
+
this.valueAccessor,
|
|
3338
|
+
this.allBindings,
|
|
3339
|
+
this.$data,
|
|
3340
|
+
this.$context
|
|
3341
|
+
];
|
|
3342
|
+
}
|
|
3343
|
+
get controlsDescendants() {
|
|
3344
|
+
const objectToTest = this.initReturn || this.handler || {};
|
|
3345
|
+
return objectToTest.controlsDescendantBindings;
|
|
3346
|
+
}
|
|
3347
|
+
static getOrCreateFor(key, handler) {
|
|
3348
|
+
if (legacyBindingMap.has(handler)) {
|
|
3349
|
+
return legacyBindingMap.get(handler);
|
|
3350
|
+
}
|
|
3351
|
+
const newLegacyHandler = this.createFor(key, handler);
|
|
3352
|
+
legacyBindingMap.set(handler, newLegacyHandler);
|
|
3353
|
+
return newLegacyHandler;
|
|
3354
|
+
}
|
|
3355
|
+
static createFor(key, handler) {
|
|
3356
|
+
if (typeof handler === "function") {
|
|
3357
|
+
const [initFn, disposeFn] = [handler, handler.dispose];
|
|
3358
|
+
return class extends LegacyBindingHandler {
|
|
3359
|
+
get handler() {
|
|
3360
|
+
const init = initFn.bind(this);
|
|
3361
|
+
const dispose = disposeFn ? disposeFn.bind(this) : null;
|
|
3362
|
+
return { init, dispose };
|
|
3363
|
+
}
|
|
3364
|
+
static get after() {
|
|
3365
|
+
return handler.after;
|
|
3366
|
+
}
|
|
3367
|
+
static get allowVirtualElements() {
|
|
3368
|
+
return handler.allowVirtualElements || virtualElements_exports.allowedBindings[key];
|
|
3369
|
+
}
|
|
3370
|
+
};
|
|
3371
|
+
}
|
|
3372
|
+
if (typeof handler === "object") {
|
|
3373
|
+
return class extends LegacyBindingHandler {
|
|
3374
|
+
get handler() {
|
|
3375
|
+
return handler;
|
|
3376
|
+
}
|
|
3377
|
+
static get after() {
|
|
3378
|
+
return handler.after;
|
|
3379
|
+
}
|
|
3380
|
+
static get allowVirtualElements() {
|
|
3381
|
+
return handler.allowVirtualElements || virtualElements_exports.allowedBindings[key];
|
|
3382
|
+
}
|
|
3383
|
+
};
|
|
3384
|
+
}
|
|
3385
|
+
throw new Error("The given handler is not an appropriate type.");
|
|
3386
|
+
}
|
|
3387
|
+
};
|
|
3388
|
+
|
|
3389
|
+
// ../bind/dist/applyBindings.js
|
|
3390
|
+
var bindingDoesNotRecurseIntoElementTypes = {
|
|
3391
|
+
"script": true,
|
|
3392
|
+
"textarea": true,
|
|
3393
|
+
"template": true
|
|
3394
|
+
};
|
|
3395
|
+
function getBindingProvider() {
|
|
3396
|
+
return options_default.bindingProviderInstance.instance || options_default.bindingProviderInstance;
|
|
3397
|
+
}
|
|
3398
|
+
function isProviderForNode(provider, node) {
|
|
3399
|
+
const nodeTypes = provider.FOR_NODE_TYPES || [1, 3, 8];
|
|
3400
|
+
return nodeTypes.includes(node.nodeType);
|
|
3401
|
+
}
|
|
3402
|
+
function asProperHandlerClass(handler, bindingKey) {
|
|
3403
|
+
if (!handler) {
|
|
3404
|
+
return;
|
|
3405
|
+
}
|
|
3406
|
+
return handler.isBindingHandlerClass ? handler : LegacyBindingHandler.getOrCreateFor(bindingKey, handler);
|
|
3407
|
+
}
|
|
3408
|
+
function getBindingHandlerFromComponent(bindingKey, $component) {
|
|
3409
|
+
if (!$component || typeof $component.getBindingHandler !== "function") {
|
|
3410
|
+
return;
|
|
3411
|
+
}
|
|
3412
|
+
return asProperHandlerClass($component.getBindingHandler(bindingKey));
|
|
3413
|
+
}
|
|
3414
|
+
function getBindingHandler(bindingKey) {
|
|
3415
|
+
const bindingDefinition = options_default.getBindingHandler(bindingKey) || getBindingProvider().bindingHandlers.get(bindingKey);
|
|
3416
|
+
return asProperHandlerClass(bindingDefinition, bindingKey);
|
|
3417
|
+
}
|
|
3418
|
+
function evaluateValueAccessor(valueAccessor) {
|
|
3419
|
+
return valueAccessor();
|
|
3420
|
+
}
|
|
3421
|
+
function applyBindingsToDescendantsInternal(bindingContext2, elementOrVirtualElement, asyncBindingsApplied) {
|
|
3422
|
+
let nextInQueue = virtualElements_exports.firstChild(elementOrVirtualElement);
|
|
3423
|
+
if (!nextInQueue) {
|
|
3424
|
+
return;
|
|
3425
|
+
}
|
|
3426
|
+
let currentChild;
|
|
3427
|
+
const provider = getBindingProvider();
|
|
3428
|
+
const preprocessNode = provider.preprocessNode;
|
|
3429
|
+
if (preprocessNode) {
|
|
3430
|
+
while (currentChild = nextInQueue) {
|
|
3431
|
+
nextInQueue = virtualElements_exports.nextSibling(currentChild);
|
|
3432
|
+
preprocessNode.call(provider, currentChild);
|
|
3433
|
+
}
|
|
3434
|
+
nextInQueue = virtualElements_exports.firstChild(elementOrVirtualElement);
|
|
3435
|
+
}
|
|
3436
|
+
while (currentChild = nextInQueue) {
|
|
3437
|
+
nextInQueue = virtualElements_exports.nextSibling(currentChild);
|
|
3438
|
+
applyBindingsToNodeAndDescendantsInternal(bindingContext2, currentChild, asyncBindingsApplied);
|
|
3439
|
+
}
|
|
3440
|
+
bindingEvent.notify(elementOrVirtualElement, bindingEvent.childrenComplete);
|
|
3441
|
+
}
|
|
3442
|
+
function hasBindings(node) {
|
|
3443
|
+
const provider = getBindingProvider();
|
|
3444
|
+
return isProviderForNode(provider, node) && provider.nodeHasBindings(node);
|
|
3445
|
+
}
|
|
3446
|
+
function nodeOrChildHasBindings(node) {
|
|
3447
|
+
return hasBindings(node) || [...node.childNodes].some((c) => nodeOrChildHasBindings(c));
|
|
3448
|
+
}
|
|
3449
|
+
function applyBindingsToNodeAndDescendantsInternal(bindingContext2, nodeVerified, asyncBindingsApplied) {
|
|
3450
|
+
var isElement = nodeVerified.nodeType === 1;
|
|
3451
|
+
if (isElement) {
|
|
3452
|
+
virtualElements_exports.normaliseVirtualElementDomStructure(nodeVerified);
|
|
3453
|
+
}
|
|
3454
|
+
let shouldApplyBindings = isElement || hasBindings(nodeVerified);
|
|
3455
|
+
const { shouldBindDescendants } = shouldApplyBindings ? applyBindingsToNodeInternal(nodeVerified, null, bindingContext2, asyncBindingsApplied) : { shouldBindDescendants: true };
|
|
3456
|
+
if (shouldBindDescendants && !bindingDoesNotRecurseIntoElementTypes[tagNameLower(nodeVerified)]) {
|
|
3457
|
+
applyBindingsToDescendantsInternal(bindingContext2, nodeVerified, asyncBindingsApplied);
|
|
3458
|
+
}
|
|
3459
|
+
}
|
|
3460
|
+
function* topologicalSortBindings(bindings, $component) {
|
|
3461
|
+
const results = [];
|
|
3462
|
+
const bindingsConsidered = {};
|
|
3463
|
+
const cyclicDependencyStack = [];
|
|
3464
|
+
objectForEach(bindings, function pushBinding(bindingKey) {
|
|
3465
|
+
if (!bindingsConsidered[bindingKey]) {
|
|
3466
|
+
const binding = getBindingHandlerFromComponent(bindingKey, $component) || getBindingHandler(bindingKey);
|
|
3467
|
+
if (!binding) {
|
|
3468
|
+
return;
|
|
3469
|
+
}
|
|
3470
|
+
if (binding.after) {
|
|
3471
|
+
cyclicDependencyStack.push(bindingKey);
|
|
3472
|
+
arrayForEach(binding.after, function(bindingDependencyKey) {
|
|
3473
|
+
if (!bindings[bindingDependencyKey]) {
|
|
3474
|
+
return;
|
|
3475
|
+
}
|
|
3476
|
+
if (arrayIndexOf(cyclicDependencyStack, bindingDependencyKey) !== -1) {
|
|
3477
|
+
throw Error("Cannot combine the following bindings, because they have a cyclic dependency: " + cyclicDependencyStack.join(", "));
|
|
3478
|
+
} else {
|
|
3479
|
+
pushBinding(bindingDependencyKey);
|
|
3480
|
+
}
|
|
3481
|
+
});
|
|
3482
|
+
cyclicDependencyStack.length--;
|
|
3483
|
+
}
|
|
3484
|
+
results.push([bindingKey, binding]);
|
|
3485
|
+
}
|
|
3486
|
+
bindingsConsidered[bindingKey] = true;
|
|
3487
|
+
});
|
|
3488
|
+
for (const result of results) {
|
|
3489
|
+
yield result;
|
|
3490
|
+
}
|
|
3491
|
+
}
|
|
3492
|
+
function applyBindingsToNodeInternal(node, sourceBindings, bindingContext2, asyncBindingsApplied) {
|
|
3493
|
+
const bindingInfo = data_exports.getOrSet(node, boundElementDomDataKey2, {});
|
|
3494
|
+
const alreadyBound = bindingInfo.alreadyBound;
|
|
3495
|
+
if (!sourceBindings) {
|
|
3496
|
+
if (alreadyBound) {
|
|
3497
|
+
if (!nodeOrChildHasBindings(node)) {
|
|
3498
|
+
return false;
|
|
3499
|
+
}
|
|
3500
|
+
onBindingError({
|
|
3501
|
+
during: "apply",
|
|
3502
|
+
errorCaptured: new Error("You cannot apply bindings multiple times to the same element."),
|
|
3503
|
+
element: node,
|
|
3504
|
+
bindingContext: bindingContext2
|
|
3505
|
+
});
|
|
3506
|
+
return false;
|
|
3507
|
+
}
|
|
3508
|
+
bindingInfo.alreadyBound = true;
|
|
3509
|
+
}
|
|
3510
|
+
if (!alreadyBound) {
|
|
3511
|
+
bindingInfo.context = bindingContext2;
|
|
3512
|
+
}
|
|
3513
|
+
var bindings;
|
|
3514
|
+
if (sourceBindings && typeof sourceBindings !== "function") {
|
|
3515
|
+
bindings = sourceBindings;
|
|
3516
|
+
} else {
|
|
3517
|
+
const provider = getBindingProvider();
|
|
3518
|
+
const getBindings = provider.getBindingAccessors;
|
|
3519
|
+
if (isProviderForNode(provider, node)) {
|
|
3520
|
+
var bindingsUpdater = computed(function() {
|
|
3521
|
+
bindings = sourceBindings ? sourceBindings(bindingContext2, node) : getBindings.call(provider, node, bindingContext2);
|
|
3522
|
+
if (bindings && bindingContext2[contextSubscribeSymbol]) {
|
|
3523
|
+
bindingContext2[contextSubscribeSymbol]();
|
|
3524
|
+
}
|
|
3525
|
+
return bindings;
|
|
3526
|
+
}, null, { disposeWhenNodeIsRemoved: node });
|
|
3527
|
+
if (!bindings || !bindingsUpdater.isActive()) {
|
|
3528
|
+
bindingsUpdater = null;
|
|
3529
|
+
}
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3532
|
+
var bindingHandlerThatControlsDescendantBindings;
|
|
3533
|
+
if (bindings) {
|
|
3534
|
+
let allBindings = function() {
|
|
3535
|
+
return objectMap(bindingsUpdater ? bindingsUpdater() : bindings, evaluateValueAccessor);
|
|
3536
|
+
};
|
|
3537
|
+
const $component = bindingContext2.$component || {};
|
|
3538
|
+
const allBindingHandlers = {};
|
|
3539
|
+
data_exports.set(node, "bindingHandlers", allBindingHandlers);
|
|
3540
|
+
const getValueAccessor = bindingsUpdater ? (bindingKey) => function(optionalValue) {
|
|
3541
|
+
const valueAccessor = bindingsUpdater()[bindingKey];
|
|
3542
|
+
if (arguments.length === 0) {
|
|
3543
|
+
return evaluateValueAccessor(valueAccessor);
|
|
3544
|
+
} else {
|
|
3545
|
+
return valueAccessor(optionalValue);
|
|
3546
|
+
}
|
|
3547
|
+
} : (bindingKey) => bindings[bindingKey];
|
|
3548
|
+
allBindings.has = (key) => key in bindings;
|
|
3549
|
+
allBindings.get = (key) => bindings[key] && evaluateValueAccessor(getValueAccessor(key));
|
|
3550
|
+
if (bindingEvent.childrenComplete in bindings) {
|
|
3551
|
+
bindingEvent.subscribe(node, bindingEvent.childrenComplete, () => {
|
|
3552
|
+
const callback = evaluateValueAccessor(bindings[bindingEvent.childrenComplete]);
|
|
3553
|
+
if (!callback) {
|
|
3554
|
+
return;
|
|
3555
|
+
}
|
|
3556
|
+
const nodes = virtualElements_exports.childNodes(node);
|
|
3557
|
+
if (nodes.length) {
|
|
3558
|
+
callback(nodes, dataFor(nodes[0]));
|
|
3559
|
+
}
|
|
3560
|
+
});
|
|
3561
|
+
}
|
|
3562
|
+
const bindingsGenerated = topologicalSortBindings(bindings, $component);
|
|
3563
|
+
const nodeAsyncBindingPromises = /* @__PURE__ */ new Set();
|
|
3564
|
+
for (const [key, BindingHandlerClass] of bindingsGenerated) {
|
|
3565
|
+
let reportBindingError = function(during, errorCaptured) {
|
|
3566
|
+
onBindingError({
|
|
3567
|
+
during,
|
|
3568
|
+
errorCaptured,
|
|
3569
|
+
bindings,
|
|
3570
|
+
allBindings,
|
|
3571
|
+
bindingKey: key,
|
|
3572
|
+
bindingContext: bindingContext2,
|
|
3573
|
+
element: node,
|
|
3574
|
+
valueAccessor: getValueAccessor(key)
|
|
3575
|
+
});
|
|
3576
|
+
};
|
|
3577
|
+
if (node.nodeType === 8 && !BindingHandlerClass.allowVirtualElements) {
|
|
3578
|
+
throw new Error(`The binding '${key}' cannot be used with virtual elements`);
|
|
3579
|
+
}
|
|
3580
|
+
try {
|
|
3581
|
+
const bindingHandler = dependencyDetection_exports.ignore(() => new BindingHandlerClass({
|
|
3582
|
+
allBindings,
|
|
3583
|
+
$element: node,
|
|
3584
|
+
$context: bindingContext2,
|
|
3585
|
+
onError: reportBindingError,
|
|
3586
|
+
valueAccessor(...v) {
|
|
3587
|
+
return getValueAccessor(key)(...v);
|
|
3588
|
+
}
|
|
3589
|
+
}));
|
|
3590
|
+
if (bindingHandler.onValueChange) {
|
|
3591
|
+
dependencyDetection_exports.ignore(() => bindingHandler.computed("onValueChange"));
|
|
3592
|
+
}
|
|
3593
|
+
allBindingHandlers[key] = bindingHandler;
|
|
3594
|
+
if (bindingHandler.controlsDescendants) {
|
|
3595
|
+
if (bindingHandlerThatControlsDescendantBindings !== void 0) {
|
|
3596
|
+
throw new Error("Multiple bindings (" + bindingHandlerThatControlsDescendantBindings + " and " + key + ") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");
|
|
3597
|
+
}
|
|
3598
|
+
bindingHandlerThatControlsDescendantBindings = key;
|
|
3599
|
+
}
|
|
3600
|
+
if (bindingHandler.bindingCompleted instanceof Promise) {
|
|
3601
|
+
asyncBindingsApplied.add(bindingHandler.bindingCompleted);
|
|
3602
|
+
nodeAsyncBindingPromises.add(bindingHandler.bindingCompleted);
|
|
3603
|
+
}
|
|
3604
|
+
} catch (err) {
|
|
3605
|
+
reportBindingError("creation", err);
|
|
3606
|
+
}
|
|
3607
|
+
}
|
|
3608
|
+
triggerDescendantsComplete(node, bindings, nodeAsyncBindingPromises);
|
|
3609
|
+
}
|
|
3610
|
+
const shouldBindDescendants = bindingHandlerThatControlsDescendantBindings === void 0;
|
|
3611
|
+
return { shouldBindDescendants };
|
|
3612
|
+
}
|
|
3613
|
+
function triggerDescendantsComplete(node, bindings, nodeAsyncBindingPromises) {
|
|
3614
|
+
const hasBindingHandler = bindingEvent.descendantsComplete in bindings;
|
|
3615
|
+
const hasFirstChild = virtualElements_exports.firstChild(node);
|
|
3616
|
+
const accessor = hasBindingHandler && evaluateValueAccessor(bindings[bindingEvent.descendantsComplete]);
|
|
3617
|
+
const callback = () => {
|
|
3618
|
+
bindingEvent.notify(node, bindingEvent.descendantsComplete);
|
|
3619
|
+
if (accessor && hasFirstChild) {
|
|
3620
|
+
accessor(node);
|
|
3621
|
+
}
|
|
3622
|
+
};
|
|
3623
|
+
if (nodeAsyncBindingPromises.size) {
|
|
3624
|
+
Promise.all(nodeAsyncBindingPromises).then(callback);
|
|
3625
|
+
} else {
|
|
3626
|
+
callback();
|
|
3627
|
+
}
|
|
3628
|
+
}
|
|
3629
|
+
function getBindingContext(viewModelOrBindingContext, extendContextCallback) {
|
|
3630
|
+
return viewModelOrBindingContext && viewModelOrBindingContext instanceof bindingContext ? viewModelOrBindingContext : new bindingContext(viewModelOrBindingContext, void 0, void 0, extendContextCallback);
|
|
3631
|
+
}
|
|
3632
|
+
function applyBindingAccessorsToNode(node, bindings, viewModelOrBindingContext, asyncBindingsApplied) {
|
|
3633
|
+
if (node.nodeType === 1) {
|
|
3634
|
+
virtualElements_exports.normaliseVirtualElementDomStructure(node);
|
|
3635
|
+
}
|
|
3636
|
+
return applyBindingsToNodeInternal(node, bindings, getBindingContext(viewModelOrBindingContext), asyncBindingsApplied);
|
|
3637
|
+
}
|
|
3638
|
+
function applyBindingsToNode(node, bindings, viewModelOrBindingContext) {
|
|
3639
|
+
const asyncBindingsApplied = /* @__PURE__ */ new Set();
|
|
3640
|
+
const bindingContext2 = getBindingContext(viewModelOrBindingContext);
|
|
3641
|
+
const bindingAccessors = getBindingProvider().makeBindingAccessors(bindings, bindingContext2, node);
|
|
3642
|
+
applyBindingAccessorsToNode(node, bindingAccessors, bindingContext2, asyncBindingsApplied);
|
|
3643
|
+
return new BindingResult({ asyncBindingsApplied, rootNode: node, bindingContext: bindingContext2 });
|
|
3644
|
+
}
|
|
3645
|
+
function applyBindingsToDescendants(viewModelOrBindingContext, rootNode) {
|
|
3646
|
+
const asyncBindingsApplied = /* @__PURE__ */ new Set();
|
|
3647
|
+
if (rootNode.nodeType === 1 || rootNode.nodeType === 8) {
|
|
3648
|
+
const bindingContext2 = getBindingContext(viewModelOrBindingContext);
|
|
3649
|
+
applyBindingsToDescendantsInternal(bindingContext2, rootNode, asyncBindingsApplied);
|
|
3650
|
+
return new BindingResult({ asyncBindingsApplied, rootNode, bindingContext: bindingContext2 });
|
|
3651
|
+
}
|
|
3652
|
+
return new BindingResult({ asyncBindingsApplied, rootNode });
|
|
3653
|
+
}
|
|
3654
|
+
function applyBindings(viewModelOrBindingContext, rootNode, extendContextCallback) {
|
|
3655
|
+
const asyncBindingsApplied = /* @__PURE__ */ new Set();
|
|
3656
|
+
if (!options_default.jQuery === void 0 && options_default.jQuery) {
|
|
3657
|
+
options_default.jQuery = options_default.jQuery;
|
|
3658
|
+
}
|
|
3659
|
+
if (!rootNode) {
|
|
3660
|
+
rootNode = window.document.body;
|
|
3661
|
+
if (!rootNode) {
|
|
3662
|
+
throw Error("ko.applyBindings: could not find window.document.body; has the document been loaded?");
|
|
3663
|
+
}
|
|
3664
|
+
} else if (rootNode.nodeType !== 1 && rootNode.nodeType !== 8) {
|
|
3665
|
+
throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");
|
|
3666
|
+
}
|
|
3667
|
+
const rootContext = getBindingContext(viewModelOrBindingContext, extendContextCallback);
|
|
3668
|
+
applyBindingsToNodeAndDescendantsInternal(rootContext, rootNode, asyncBindingsApplied);
|
|
3669
|
+
return Promise.all(asyncBindingsApplied);
|
|
3670
|
+
}
|
|
3671
|
+
function onBindingError(spec) {
|
|
3672
|
+
var error, bindingText;
|
|
3673
|
+
if (spec.bindingKey) {
|
|
3674
|
+
error = spec.errorCaptured;
|
|
3675
|
+
spec.message = 'Unable to process binding "' + spec.bindingKey + '" in binding "' + spec.bindingKey + '"\nMessage: ' + (error.message ? error.message : error);
|
|
3676
|
+
} else {
|
|
3677
|
+
error = spec.errorCaptured;
|
|
3678
|
+
}
|
|
3679
|
+
try {
|
|
3680
|
+
extend(error, spec);
|
|
3681
|
+
} catch (e) {
|
|
3682
|
+
spec.stack = error.stack;
|
|
3683
|
+
error = new Error(error.message ? error.message : error);
|
|
3684
|
+
extend(error, spec);
|
|
3685
|
+
}
|
|
3686
|
+
options_default.onError(error);
|
|
3687
|
+
}
|
|
3688
|
+
|
|
3689
|
+
// ../bind/dist/arrayToDomNodeChildren.js
|
|
3690
|
+
function mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes, index) {
|
|
3691
|
+
var mappedNodes = [];
|
|
3692
|
+
var dependentObservable = computed(function() {
|
|
3693
|
+
var newMappedNodes = mapping(valueToMap, index, fixUpContinuousNodeArray(mappedNodes, containerNode)) || [];
|
|
3694
|
+
if (mappedNodes.length > 0) {
|
|
3695
|
+
replaceDomNodes(mappedNodes, newMappedNodes);
|
|
3696
|
+
if (callbackAfterAddingNodes) {
|
|
3697
|
+
dependencyDetection_exports.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]);
|
|
3698
|
+
}
|
|
3699
|
+
}
|
|
3700
|
+
mappedNodes.length = 0;
|
|
3701
|
+
arrayPushAll(mappedNodes, newMappedNodes);
|
|
3702
|
+
}, null, { disposeWhenNodeIsRemoved: containerNode, disposeWhen: function() {
|
|
3703
|
+
return !anyDomNodeIsAttachedToDocument(mappedNodes);
|
|
3704
|
+
} });
|
|
3705
|
+
return { mappedNodes, dependentObservable: dependentObservable.isActive() ? dependentObservable : void 0 };
|
|
3706
|
+
}
|
|
3707
|
+
var lastMappingResultDomDataKey = data_exports.nextKey();
|
|
3708
|
+
var deletedItemDummyValue = data_exports.nextKey();
|
|
3709
|
+
function setDomNodeChildrenFromArrayMapping(domNode, array, mapping, options2, callbackAfterAddingNodes, editScript) {
|
|
3710
|
+
array = array || [];
|
|
3711
|
+
if (typeof array.length === "undefined") {
|
|
3712
|
+
array = [array];
|
|
3713
|
+
}
|
|
3714
|
+
options2 = options2 || {};
|
|
3715
|
+
let lastMappingResult = data_exports.get(domNode, lastMappingResultDomDataKey);
|
|
3716
|
+
let isFirstExecution = !lastMappingResult;
|
|
3717
|
+
var newMappingResult = [];
|
|
3718
|
+
var lastMappingResultIndex = 0;
|
|
3719
|
+
var newMappingResultIndex = 0;
|
|
3720
|
+
var nodesToDelete = [];
|
|
3721
|
+
var itemsToProcess = [];
|
|
3722
|
+
var itemsForBeforeRemoveCallbacks = [];
|
|
3723
|
+
var itemsForMoveCallbacks = [];
|
|
3724
|
+
var itemsForAfterAddCallbacks = [];
|
|
3725
|
+
var mapData;
|
|
3726
|
+
let countWaitingForRemove = 0;
|
|
3727
|
+
function itemAdded(value) {
|
|
3728
|
+
mapData = { arrayEntry: value, indexObservable: observable(newMappingResultIndex++) };
|
|
3729
|
+
newMappingResult.push(mapData);
|
|
3730
|
+
itemsToProcess.push(mapData);
|
|
3731
|
+
if (!isFirstExecution) {
|
|
3732
|
+
itemsForAfterAddCallbacks.push(mapData);
|
|
3733
|
+
}
|
|
3734
|
+
}
|
|
3735
|
+
function itemMovedOrRetained(oldPosition) {
|
|
3736
|
+
mapData = lastMappingResult[oldPosition];
|
|
3737
|
+
if (newMappingResultIndex !== oldPosition) {
|
|
3738
|
+
itemsForMoveCallbacks.push(mapData);
|
|
3739
|
+
}
|
|
3740
|
+
mapData.indexObservable(newMappingResultIndex++);
|
|
3741
|
+
fixUpContinuousNodeArray(mapData.mappedNodes, domNode);
|
|
3742
|
+
newMappingResult.push(mapData);
|
|
3743
|
+
itemsToProcess.push(mapData);
|
|
3744
|
+
}
|
|
3745
|
+
function callCallback(callback, items) {
|
|
3746
|
+
if (callback) {
|
|
3747
|
+
for (var i2 = 0, n = items.length; i2 < n; i2++) {
|
|
3748
|
+
arrayForEach(items[i2].mappedNodes, function(node2) {
|
|
3749
|
+
callback(node2, i2, items[i2].arrayEntry);
|
|
3750
|
+
});
|
|
3751
|
+
}
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
if (isFirstExecution) {
|
|
3755
|
+
arrayForEach(array, itemAdded);
|
|
3756
|
+
} else {
|
|
3757
|
+
if (!editScript || lastMappingResult && lastMappingResult["_countWaitingForRemove"]) {
|
|
3758
|
+
var lastArray = isFirstExecution ? [] : arrayMap(lastMappingResult, function(x) {
|
|
3759
|
+
return x.arrayEntry;
|
|
3760
|
+
});
|
|
3761
|
+
var compareOptions = {
|
|
3762
|
+
"dontLimitMoves": options2["dontLimitMoves"],
|
|
3763
|
+
"sparse": true
|
|
3764
|
+
};
|
|
3765
|
+
editScript = compareArrays(lastArray, array, compareOptions);
|
|
3766
|
+
}
|
|
3767
|
+
for (var i = 0, editScriptItem, movedIndex, itemIndex; editScriptItem = editScript[i]; i++) {
|
|
3768
|
+
movedIndex = editScriptItem["moved"];
|
|
3769
|
+
itemIndex = editScriptItem["index"];
|
|
3770
|
+
switch (editScriptItem["status"]) {
|
|
3771
|
+
case "deleted":
|
|
3772
|
+
while (lastMappingResultIndex < itemIndex) {
|
|
3773
|
+
itemMovedOrRetained(lastMappingResultIndex++);
|
|
3774
|
+
}
|
|
3775
|
+
if (movedIndex === void 0) {
|
|
3776
|
+
mapData = lastMappingResult[lastMappingResultIndex];
|
|
3777
|
+
if (mapData.dependentObservable) {
|
|
3778
|
+
mapData.dependentObservable.dispose();
|
|
3779
|
+
mapData.dependentObservable = void 0;
|
|
3780
|
+
}
|
|
3781
|
+
if (fixUpContinuousNodeArray(mapData.mappedNodes, domNode).length) {
|
|
3782
|
+
if (options2["beforeRemove"]) {
|
|
3783
|
+
newMappingResult.push(mapData);
|
|
3784
|
+
itemsToProcess.push(mapData);
|
|
3785
|
+
countWaitingForRemove++;
|
|
3786
|
+
if (mapData.arrayEntry === deletedItemDummyValue) {
|
|
3787
|
+
mapData = null;
|
|
3788
|
+
} else {
|
|
3789
|
+
itemsForBeforeRemoveCallbacks.push(mapData);
|
|
3790
|
+
}
|
|
3791
|
+
}
|
|
3792
|
+
if (mapData) {
|
|
3793
|
+
nodesToDelete.push.apply(nodesToDelete, mapData.mappedNodes);
|
|
3794
|
+
}
|
|
3795
|
+
}
|
|
3796
|
+
}
|
|
3797
|
+
lastMappingResultIndex++;
|
|
3798
|
+
break;
|
|
3799
|
+
case "added":
|
|
3800
|
+
while (newMappingResultIndex < itemIndex) {
|
|
3801
|
+
itemMovedOrRetained(lastMappingResultIndex++);
|
|
3802
|
+
}
|
|
3803
|
+
if (movedIndex !== void 0) {
|
|
3804
|
+
itemMovedOrRetained(movedIndex);
|
|
3805
|
+
} else {
|
|
3806
|
+
itemAdded(editScriptItem["value"]);
|
|
3807
|
+
}
|
|
3808
|
+
break;
|
|
3809
|
+
}
|
|
3810
|
+
}
|
|
3811
|
+
while (newMappingResultIndex < array.length) {
|
|
3812
|
+
itemMovedOrRetained(lastMappingResultIndex++);
|
|
3813
|
+
}
|
|
3814
|
+
newMappingResult["_countWaitingForRemove"] = countWaitingForRemove;
|
|
3815
|
+
}
|
|
3816
|
+
data_exports.set(domNode, lastMappingResultDomDataKey, newMappingResult);
|
|
3817
|
+
callCallback(options2["beforeMove"], itemsForMoveCallbacks);
|
|
3818
|
+
arrayForEach(nodesToDelete, options2["beforeRemove"] ? cleanNode : removeNode);
|
|
3819
|
+
i = 0;
|
|
3820
|
+
for (var nextNode = virtualElements_exports.firstChild(domNode), lastNode, node; mapData = itemsToProcess[i]; i++) {
|
|
3821
|
+
if (!mapData.mappedNodes) {
|
|
3822
|
+
extend(mapData, mapNodeAndRefreshWhenChanged(domNode, mapping, mapData.arrayEntry, callbackAfterAddingNodes, mapData.indexObservable));
|
|
3823
|
+
}
|
|
3824
|
+
for (var j = 0; node = mapData.mappedNodes[j]; nextNode = node.nextSibling, lastNode = node, j++) {
|
|
3825
|
+
if (node !== nextNode) {
|
|
3826
|
+
virtualElements_exports.insertAfter(domNode, node, lastNode);
|
|
3827
|
+
}
|
|
3828
|
+
}
|
|
3829
|
+
if (!mapData.initialized && callbackAfterAddingNodes) {
|
|
3830
|
+
callbackAfterAddingNodes(mapData.arrayEntry, mapData.mappedNodes, mapData.indexObservable);
|
|
3831
|
+
mapData.initialized = true;
|
|
3832
|
+
}
|
|
3833
|
+
}
|
|
3834
|
+
callCallback(options2["beforeRemove"], itemsForBeforeRemoveCallbacks);
|
|
3835
|
+
for (i = 0; i < itemsForBeforeRemoveCallbacks.length; ++i) {
|
|
3836
|
+
itemsForBeforeRemoveCallbacks[i].arrayEntry = deletedItemDummyValue;
|
|
3837
|
+
}
|
|
3838
|
+
callCallback(options2["afterMove"], itemsForMoveCallbacks);
|
|
3839
|
+
callCallback(options2["afterAdd"], itemsForAfterAddCallbacks);
|
|
3840
|
+
}
|
|
3841
|
+
|
|
3842
|
+
// ../binding.template/dist/templateSources.js
|
|
3843
|
+
var templateScript = 1;
|
|
3844
|
+
var templateTextArea = 2;
|
|
3845
|
+
var templateTemplate = 3;
|
|
3846
|
+
var templateElement = 4;
|
|
3847
|
+
function domElement(element) {
|
|
3848
|
+
this.domElement = element;
|
|
3849
|
+
if (!element) {
|
|
3850
|
+
return;
|
|
3851
|
+
}
|
|
3852
|
+
var tagNameLower2 = tagNameLower(element);
|
|
3853
|
+
this.templateType = tagNameLower2 === "script" ? templateScript : tagNameLower2 === "textarea" ? templateTextArea : tagNameLower2 == "template" && element.content && element.content.nodeType === 11 ? templateTemplate : templateElement;
|
|
3854
|
+
}
|
|
3855
|
+
domElement.prototype.text = function() {
|
|
3856
|
+
var elemContentsProperty = this.templateType === templateScript ? "text" : this.templateType === templateTextArea ? "value" : "innerHTML";
|
|
3857
|
+
if (arguments.length == 0) {
|
|
3858
|
+
return this.domElement[elemContentsProperty];
|
|
3859
|
+
} else {
|
|
3860
|
+
var valueToWrite = arguments[0];
|
|
3861
|
+
if (elemContentsProperty === "innerHTML") {
|
|
3862
|
+
setHtml(this.domElement, valueToWrite);
|
|
3863
|
+
} else {
|
|
3864
|
+
this.domElement[elemContentsProperty] = valueToWrite;
|
|
3865
|
+
}
|
|
3866
|
+
}
|
|
3867
|
+
};
|
|
3868
|
+
var dataDomDataPrefix = data_exports.nextKey() + "_";
|
|
3869
|
+
domElement.prototype.data = function(key) {
|
|
3870
|
+
if (arguments.length === 1) {
|
|
3871
|
+
return data_exports.get(this.domElement, dataDomDataPrefix + key);
|
|
3872
|
+
} else {
|
|
3873
|
+
data_exports.set(this.domElement, dataDomDataPrefix + key, arguments[1]);
|
|
3874
|
+
}
|
|
3875
|
+
};
|
|
3876
|
+
var templatesDomDataKey = data_exports.nextKey();
|
|
3877
|
+
function getTemplateDomData(element) {
|
|
3878
|
+
return data_exports.get(element, templatesDomDataKey) || {};
|
|
3879
|
+
}
|
|
3880
|
+
function setTemplateDomData(element, data) {
|
|
3881
|
+
data_exports.set(element, templatesDomDataKey, data);
|
|
3882
|
+
}
|
|
3883
|
+
domElement.prototype.nodes = function() {
|
|
3884
|
+
var element = this.domElement;
|
|
3885
|
+
if (arguments.length == 0) {
|
|
3886
|
+
const templateData = getTemplateDomData(element);
|
|
3887
|
+
let nodes = templateData.containerData || (this.templateType === templateTemplate ? element.content : this.templateType === templateElement ? element : void 0);
|
|
3888
|
+
if (!nodes || templateData.alwaysCheckText) {
|
|
3889
|
+
const text = this["text"]();
|
|
3890
|
+
if (text) {
|
|
3891
|
+
nodes = parseHtmlForTemplateNodes(text, element.ownerDocument);
|
|
3892
|
+
this["text"]("");
|
|
3893
|
+
setTemplateDomData(element, { containerData: nodes, alwaysCheckText: true });
|
|
3894
|
+
}
|
|
3895
|
+
}
|
|
3896
|
+
return nodes;
|
|
3897
|
+
} else {
|
|
3898
|
+
var valueToWrite = arguments[0];
|
|
3899
|
+
setTemplateDomData(element, { containerData: valueToWrite });
|
|
3900
|
+
}
|
|
3901
|
+
};
|
|
3902
|
+
function anonymousTemplate(element) {
|
|
3903
|
+
this.domElement = element;
|
|
3904
|
+
}
|
|
3905
|
+
anonymousTemplate.prototype = new domElement();
|
|
3906
|
+
anonymousTemplate.prototype.constructor = anonymousTemplate;
|
|
3907
|
+
anonymousTemplate.prototype.text = function() {
|
|
3908
|
+
if (arguments.length == 0) {
|
|
3909
|
+
var templateData = getTemplateDomData(this.domElement);
|
|
3910
|
+
if (templateData.textData === void 0 && templateData.containerData) {
|
|
3911
|
+
templateData.textData = templateData.containerData.innerHTML;
|
|
3912
|
+
}
|
|
3913
|
+
return templateData.textData;
|
|
3914
|
+
} else {
|
|
3915
|
+
var valueToWrite = arguments[0];
|
|
3916
|
+
setTemplateDomData(this.domElement, { textData: valueToWrite });
|
|
3917
|
+
}
|
|
3918
|
+
};
|
|
3919
|
+
|
|
3920
|
+
// ../binding.template/dist/templateEngine.js
|
|
3921
|
+
function templateEngine() {
|
|
3922
|
+
}
|
|
3923
|
+
extend(templateEngine.prototype, {
|
|
3924
|
+
renderTemplateSource: function(templateSource, bindingContext2, options2, templateDocument) {
|
|
3925
|
+
options2.onError("Override renderTemplateSource");
|
|
3926
|
+
},
|
|
3927
|
+
createJavaScriptEvaluatorBlock: function(script) {
|
|
3928
|
+
options_default.onError("Override createJavaScriptEvaluatorBlock");
|
|
3929
|
+
},
|
|
3930
|
+
makeTemplateSource: function(template, templateDocument) {
|
|
3931
|
+
if (typeof template === "string") {
|
|
3932
|
+
templateDocument = templateDocument || document;
|
|
3933
|
+
var elem = templateDocument.getElementById(template);
|
|
3934
|
+
if (!elem) {
|
|
3935
|
+
options_default.onError("Cannot find template with ID " + template);
|
|
3936
|
+
}
|
|
3937
|
+
return new domElement(elem);
|
|
3938
|
+
} else if (template.nodeType == 1 || template.nodeType == 8) {
|
|
3939
|
+
return new anonymousTemplate(template);
|
|
3940
|
+
} else {
|
|
3941
|
+
options_default.onError("Unknown template type: " + template);
|
|
3942
|
+
}
|
|
3943
|
+
},
|
|
3944
|
+
renderTemplate: function(template, bindingContext2, options2, templateDocument) {
|
|
3945
|
+
var templateSource = this["makeTemplateSource"](template, templateDocument);
|
|
3946
|
+
return this.renderTemplateSource(templateSource, bindingContext2, options2, templateDocument);
|
|
3947
|
+
}
|
|
3948
|
+
});
|
|
3949
|
+
|
|
3950
|
+
// ../binding.template/dist/templating.js
|
|
3951
|
+
var _templateEngine;
|
|
3952
|
+
var cleanContainerDomDataKey = data_exports.nextKey();
|
|
3953
|
+
function setTemplateEngine(tEngine) {
|
|
3954
|
+
if (tEngine !== void 0 && !(tEngine instanceof templateEngine)) {
|
|
3955
|
+
throw new Error("templateEngine must inherit from ko.templateEngine");
|
|
3956
|
+
}
|
|
3957
|
+
_templateEngine = tEngine;
|
|
3958
|
+
}
|
|
3959
|
+
function invokeForEachNodeInContinuousRange(firstNode, lastNode, action) {
|
|
3960
|
+
let node;
|
|
3961
|
+
let nextInQueue = firstNode;
|
|
3962
|
+
let firstOutOfRangeNode = virtualElements_exports.nextSibling(lastNode);
|
|
3963
|
+
while (nextInQueue && (node = nextInQueue) !== firstOutOfRangeNode) {
|
|
3964
|
+
nextInQueue = virtualElements_exports.nextSibling(node);
|
|
3965
|
+
action(node, nextInQueue);
|
|
3966
|
+
}
|
|
3967
|
+
}
|
|
3968
|
+
function activateBindingsOnContinuousNodeArray(continuousNodeArray, bindingContext2, afterBindingCallback) {
|
|
3969
|
+
if (continuousNodeArray.length) {
|
|
3970
|
+
var firstNode = continuousNodeArray[0];
|
|
3971
|
+
var lastNode = continuousNodeArray[continuousNodeArray.length - 1];
|
|
3972
|
+
var parentNode = firstNode.parentNode;
|
|
3973
|
+
var provider = options_default.bindingProviderInstance;
|
|
3974
|
+
var preprocessNode = provider.preprocessNode;
|
|
3975
|
+
if (preprocessNode) {
|
|
3976
|
+
invokeForEachNodeInContinuousRange(firstNode, lastNode, function(node, nextNodeInRange) {
|
|
3977
|
+
var nodePreviousSibling = node.previousSibling;
|
|
3978
|
+
var newNodes = preprocessNode.call(provider, node);
|
|
3979
|
+
if (newNodes) {
|
|
3980
|
+
if (node === firstNode) {
|
|
3981
|
+
firstNode = newNodes[0] || nextNodeInRange;
|
|
3982
|
+
}
|
|
3983
|
+
if (node === lastNode) {
|
|
3984
|
+
lastNode = newNodes[newNodes.length - 1] || nodePreviousSibling;
|
|
3985
|
+
}
|
|
3986
|
+
}
|
|
3987
|
+
});
|
|
3988
|
+
continuousNodeArray.length = 0;
|
|
3989
|
+
if (!firstNode) {
|
|
3990
|
+
return;
|
|
3991
|
+
}
|
|
3992
|
+
if (firstNode === lastNode) {
|
|
3993
|
+
continuousNodeArray.push(firstNode);
|
|
3994
|
+
} else {
|
|
3995
|
+
continuousNodeArray.push(firstNode, lastNode);
|
|
3996
|
+
fixUpContinuousNodeArray(continuousNodeArray, parentNode);
|
|
3997
|
+
}
|
|
3998
|
+
}
|
|
3999
|
+
invokeForEachNodeInContinuousRange(firstNode, lastNode, function(node) {
|
|
4000
|
+
if (node.nodeType === 1 || node.nodeType === 8) {
|
|
4001
|
+
applyBindings(bindingContext2, node).then(afterBindingCallback);
|
|
4002
|
+
}
|
|
4003
|
+
});
|
|
4004
|
+
invokeForEachNodeInContinuousRange(firstNode, lastNode, function(node) {
|
|
4005
|
+
if (node.nodeType === 1 || node.nodeType === 8) {
|
|
4006
|
+
memoization_exports.unmemoizeDomNodeAndDescendants(node, [bindingContext2]);
|
|
4007
|
+
}
|
|
4008
|
+
});
|
|
4009
|
+
fixUpContinuousNodeArray(continuousNodeArray, parentNode);
|
|
4010
|
+
}
|
|
4011
|
+
}
|
|
4012
|
+
function getFirstNodeFromPossibleArray(nodeOrNodeArray) {
|
|
4013
|
+
return nodeOrNodeArray.nodeType ? nodeOrNodeArray : nodeOrNodeArray.length > 0 ? nodeOrNodeArray[0] : null;
|
|
4014
|
+
}
|
|
4015
|
+
function executeTemplate(targetNodeOrNodeArray, renderMode, template, bindingContext2, options2, afterBindingCallback) {
|
|
4016
|
+
options2 = options2 || {};
|
|
4017
|
+
var firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
|
4018
|
+
var templateDocument = (firstTargetNode || template || {}).ownerDocument;
|
|
4019
|
+
var templateEngineToUse = options2.templateEngine || _templateEngine;
|
|
4020
|
+
var renderedNodesArray = templateEngineToUse.renderTemplate(template, bindingContext2, options2, templateDocument);
|
|
4021
|
+
if (typeof renderedNodesArray.length !== "number" || renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType !== "number") {
|
|
4022
|
+
throw new Error("Template engine must return an array of DOM nodes");
|
|
4023
|
+
}
|
|
4024
|
+
var haveAddedNodesToParent = false;
|
|
4025
|
+
switch (renderMode) {
|
|
4026
|
+
case "replaceChildren":
|
|
4027
|
+
virtualElements_exports.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);
|
|
4028
|
+
haveAddedNodesToParent = true;
|
|
4029
|
+
break;
|
|
4030
|
+
case "replaceNode":
|
|
4031
|
+
replaceDomNodes(targetNodeOrNodeArray, renderedNodesArray);
|
|
4032
|
+
haveAddedNodesToParent = true;
|
|
4033
|
+
break;
|
|
4034
|
+
case "ignoreTargetNode":
|
|
4035
|
+
break;
|
|
4036
|
+
default:
|
|
4037
|
+
throw new Error("Unknown renderMode: " + renderMode);
|
|
4038
|
+
}
|
|
4039
|
+
if (haveAddedNodesToParent) {
|
|
4040
|
+
activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext2, afterBindingCallback);
|
|
4041
|
+
if (options2.afterRender) {
|
|
4042
|
+
dependencyDetection_exports.ignore(options2.afterRender, null, [renderedNodesArray, bindingContext2["$data"]]);
|
|
4043
|
+
}
|
|
4044
|
+
if (renderMode === "replaceChildren") {
|
|
4045
|
+
bindingEvent.notify(targetNodeOrNodeArray, bindingEvent.childrenComplete);
|
|
4046
|
+
}
|
|
4047
|
+
}
|
|
4048
|
+
return renderedNodesArray;
|
|
4049
|
+
}
|
|
4050
|
+
function resolveTemplateName(template, data, context) {
|
|
4051
|
+
if (isObservable(template)) {
|
|
4052
|
+
return template();
|
|
4053
|
+
} else if (typeof template === "function") {
|
|
4054
|
+
return template(data, context);
|
|
4055
|
+
} else {
|
|
4056
|
+
return template;
|
|
4057
|
+
}
|
|
4058
|
+
}
|
|
4059
|
+
function renderTemplate(template, dataOrBindingContext, options2, targetNodeOrNodeArray, renderMode, afterBindingCallback) {
|
|
4060
|
+
options2 = options2 || {};
|
|
4061
|
+
if ((options2.templateEngine || _templateEngine) === void 0) {
|
|
4062
|
+
throw new Error("Set a template engine before calling renderTemplate");
|
|
4063
|
+
}
|
|
4064
|
+
renderMode = renderMode || "replaceChildren";
|
|
4065
|
+
if (targetNodeOrNodeArray) {
|
|
4066
|
+
var firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
|
4067
|
+
var whenToDispose = function() {
|
|
4068
|
+
return !firstTargetNode || !domNodeIsAttachedToDocument(firstTargetNode);
|
|
4069
|
+
};
|
|
4070
|
+
var activelyDisposeWhenNodeIsRemoved = firstTargetNode && renderMode === "replaceNode" ? firstTargetNode.parentNode : firstTargetNode;
|
|
4071
|
+
return computed(function() {
|
|
4072
|
+
var bindingContext2 = dataOrBindingContext && dataOrBindingContext instanceof bindingContext ? dataOrBindingContext : new bindingContext(dataOrBindingContext, null, null, null, { "exportDependencies": true });
|
|
4073
|
+
var templateName = resolveTemplateName(template, bindingContext2.$data, bindingContext2);
|
|
4074
|
+
const renderedNodesArray = executeTemplate(targetNodeOrNodeArray, renderMode, templateName, bindingContext2, options2, afterBindingCallback);
|
|
4075
|
+
if (renderMode === "replaceNode") {
|
|
4076
|
+
targetNodeOrNodeArray = renderedNodesArray;
|
|
4077
|
+
firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
|
4078
|
+
}
|
|
4079
|
+
}, null, { disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: activelyDisposeWhenNodeIsRemoved });
|
|
4080
|
+
} else {
|
|
4081
|
+
return memoization_exports.memoize(function(domNode) {
|
|
4082
|
+
renderTemplate(template, dataOrBindingContext, options2, domNode, "replaceNode");
|
|
4083
|
+
});
|
|
4084
|
+
}
|
|
4085
|
+
}
|
|
4086
|
+
var templateComputedDomDataKey = data_exports.nextKey();
|
|
4087
|
+
|
|
4088
|
+
// ../binding.template/dist/nativeTemplateEngine.js
|
|
4089
|
+
function nativeTemplateEngine() {
|
|
4090
|
+
}
|
|
4091
|
+
nativeTemplateEngine.prototype = new templateEngine();
|
|
4092
|
+
nativeTemplateEngine.prototype.constructor = nativeTemplateEngine;
|
|
4093
|
+
nativeTemplateEngine.prototype.renderTemplateSource = function(templateSource, bindingContext2, options2, templateDocument) {
|
|
4094
|
+
var useNodesIfAvailable = !(ieVersion < 9), templateNodesFunc = useNodesIfAvailable ? templateSource.nodes : null, templateNodes = templateNodesFunc ? templateSource.nodes() : null;
|
|
4095
|
+
if (templateNodes) {
|
|
4096
|
+
return makeArray(templateNodes.cloneNode(true).childNodes);
|
|
4097
|
+
} else {
|
|
4098
|
+
var templateText = templateSource.text();
|
|
4099
|
+
return parseHtmlFragment(templateText, templateDocument);
|
|
4100
|
+
}
|
|
4101
|
+
};
|
|
4102
|
+
nativeTemplateEngine.instance = new nativeTemplateEngine();
|
|
4103
|
+
setTemplateEngine(nativeTemplateEngine.instance);
|
|
4104
|
+
|
|
4105
|
+
// src/Builder.ts
|
|
4106
|
+
var domNodeDisposal = {
|
|
4107
|
+
addDisposeCallback,
|
|
4108
|
+
removeDisposeCallback,
|
|
4109
|
+
removeNode,
|
|
4110
|
+
addCleaner,
|
|
4111
|
+
removeCleaner,
|
|
4112
|
+
get cleanExternalData() {
|
|
4113
|
+
return options_default.cleanExternalData;
|
|
4114
|
+
},
|
|
4115
|
+
set cleanExternalData(cleanerFn) {
|
|
4116
|
+
options_default.set("cleanExternalData", cleanerFn);
|
|
4117
|
+
}
|
|
4118
|
+
};
|
|
4119
|
+
var utils = Object.assign({
|
|
4120
|
+
addOrRemoveItem,
|
|
4121
|
+
arrayFilter,
|
|
4122
|
+
arrayFirst,
|
|
4123
|
+
arrayForEach,
|
|
4124
|
+
arrayGetDistinctValues,
|
|
4125
|
+
arrayIndexOf,
|
|
4126
|
+
arrayMap,
|
|
4127
|
+
arrayPushAll,
|
|
4128
|
+
arrayRemoveItem,
|
|
4129
|
+
cloneNodes,
|
|
4130
|
+
compareArrays,
|
|
4131
|
+
createSymbolOrString,
|
|
4132
|
+
domData: data_exports,
|
|
4133
|
+
domNodeDisposal,
|
|
4134
|
+
extend,
|
|
4135
|
+
filters: options_default.filters,
|
|
4136
|
+
objectForEach,
|
|
4137
|
+
objectMap,
|
|
4138
|
+
parseHtmlFragment,
|
|
4139
|
+
parseJson,
|
|
4140
|
+
parseObjectLiteral,
|
|
4141
|
+
peekObservable: peek,
|
|
4142
|
+
range,
|
|
4143
|
+
registerEventHandler,
|
|
4144
|
+
setDomNodeChildrenFromArrayMapping,
|
|
4145
|
+
setHtml,
|
|
4146
|
+
setTextContent,
|
|
4147
|
+
toggleDomNodeCssClass,
|
|
4148
|
+
triggerEvent,
|
|
4149
|
+
unwrapObservable: unwrap
|
|
4150
|
+
});
|
|
4151
|
+
var knockout = {
|
|
4152
|
+
cleanNode,
|
|
4153
|
+
dependencyDetection: dependencyDetection_exports,
|
|
4154
|
+
computedContext: dependencyDetection_exports,
|
|
4155
|
+
filters: options_default.filters,
|
|
4156
|
+
ignoreDependencies: dependencyDetection_exports.ignore,
|
|
4157
|
+
memoization: memoization_exports,
|
|
4158
|
+
options: options_default,
|
|
4159
|
+
removeNode,
|
|
4160
|
+
selectExtensions,
|
|
4161
|
+
tasks: tasks_exports,
|
|
4162
|
+
utils,
|
|
4163
|
+
LifeCycle,
|
|
4164
|
+
isObservable,
|
|
4165
|
+
isSubscribable,
|
|
4166
|
+
isWriteableObservable,
|
|
4167
|
+
isWritableObservable: isWriteableObservable,
|
|
4168
|
+
observable,
|
|
4169
|
+
observableArray,
|
|
4170
|
+
isObservableArray,
|
|
4171
|
+
peek,
|
|
4172
|
+
subscribable,
|
|
4173
|
+
unwrap,
|
|
4174
|
+
toJS,
|
|
4175
|
+
toJSON,
|
|
4176
|
+
proxy,
|
|
4177
|
+
computed,
|
|
4178
|
+
dependentObservable: computed,
|
|
4179
|
+
isComputed,
|
|
4180
|
+
isPureComputed,
|
|
4181
|
+
pureComputed,
|
|
4182
|
+
when,
|
|
4183
|
+
nativeTemplateEngine,
|
|
4184
|
+
renderTemplate,
|
|
4185
|
+
setTemplateEngine,
|
|
4186
|
+
templateEngine,
|
|
4187
|
+
templateSources: { domElement, anonymousTemplate },
|
|
4188
|
+
applyBindingAccessorsToNode,
|
|
4189
|
+
applyBindings,
|
|
4190
|
+
applyBindingsToDescendants,
|
|
4191
|
+
applyBindingsToNode,
|
|
4192
|
+
contextFor,
|
|
4193
|
+
dataFor,
|
|
4194
|
+
BindingHandler,
|
|
4195
|
+
AsyncBindingHandler,
|
|
4196
|
+
virtualElements: virtualElements_exports,
|
|
4197
|
+
domNodeDisposal,
|
|
4198
|
+
bindingEvent
|
|
4199
|
+
};
|
|
4200
|
+
var Builder = class {
|
|
4201
|
+
constructor({ provider, bindings, extenders: extenders2, filters, options: options2 }) {
|
|
4202
|
+
Object.assign(knockout.options, options2, {
|
|
4203
|
+
filters,
|
|
4204
|
+
bindingProviderInstance: provider
|
|
4205
|
+
});
|
|
4206
|
+
provider.setGlobals(knockout.options.bindingGlobals);
|
|
4207
|
+
if (Array.isArray(bindings)) {
|
|
4208
|
+
for (const bindingsObject of bindings) {
|
|
4209
|
+
provider.bindingHandlers.set(bindingsObject);
|
|
4210
|
+
}
|
|
4211
|
+
} else {
|
|
4212
|
+
provider.bindingHandlers.set(bindings);
|
|
4213
|
+
}
|
|
4214
|
+
this.providedProperties = {
|
|
4215
|
+
extenders: Object.assign(extenders, extenders2),
|
|
4216
|
+
bindingHandlers: provider.bindingHandlers,
|
|
4217
|
+
bindingProvider: provider
|
|
4218
|
+
};
|
|
4219
|
+
}
|
|
4220
|
+
create(...additionalProperties) {
|
|
4221
|
+
const instance = Object.assign({
|
|
4222
|
+
get getBindingHandler() {
|
|
4223
|
+
return options_default.getBindingHandler;
|
|
4224
|
+
},
|
|
4225
|
+
set getBindingHandler(fn) {
|
|
4226
|
+
options_default.set("getBindingHandler", fn);
|
|
4227
|
+
}
|
|
4228
|
+
}, knockout, this.providedProperties, ...additionalProperties);
|
|
4229
|
+
instance.options.knockoutInstance = instance;
|
|
4230
|
+
return instance;
|
|
4231
|
+
}
|
|
4232
|
+
};
|