j-templates 7.0.78 → 7.0.80
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/Node/vNode.js +63 -77
- package/Node/vNode.types.d.ts +5 -1
- package/package.json +1 -1
package/Node/vNode.js
CHANGED
|
@@ -182,22 +182,28 @@ function CreateChildrenScope(vnode, children, data = DefaultData) {
|
|
|
182
182
|
return Store_1.ObservableScope.Create(WrapChildren(vnode.injector, children, data));
|
|
183
183
|
}
|
|
184
184
|
function WrapChildren(injector, children, data) {
|
|
185
|
-
let nodeArray
|
|
185
|
+
let nodeArray;
|
|
186
186
|
return function () {
|
|
187
|
-
const nextData = ToArray(data());
|
|
187
|
+
const nextData = data === DefaultData ? data() : ToArray(data());
|
|
188
188
|
switch (nextData.length) {
|
|
189
189
|
case 0: {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
if (nodeArray !== undefined) {
|
|
191
|
+
for (let x = 0; x < nodeArray.length; x++) {
|
|
192
|
+
vNode.DestroyAll(nodeArray[x][1]);
|
|
193
|
+
Store_1.ObservableScope.Destroy(nodeArray[x][2]);
|
|
194
|
+
}
|
|
195
|
+
nodeArray = [];
|
|
193
196
|
}
|
|
194
|
-
|
|
197
|
+
break;
|
|
195
198
|
}
|
|
196
199
|
default: {
|
|
197
|
-
if (nodeArray
|
|
200
|
+
if (nodeArray === undefined)
|
|
201
|
+
nodeArray = InitializeNextNodes(injector, children, nextData);
|
|
202
|
+
else if (nodeArray.length < 11)
|
|
198
203
|
nodeArray = EvaluateNextNodesSmall(injector, children, nextData, nodeArray);
|
|
199
204
|
else
|
|
200
205
|
nodeArray = EvaluateNextNodesLarge(injector, children, nextData, nodeArray);
|
|
206
|
+
break;
|
|
201
207
|
}
|
|
202
208
|
}
|
|
203
209
|
return nodeArray;
|
|
@@ -210,54 +216,61 @@ function ToArray(result) {
|
|
|
210
216
|
return result;
|
|
211
217
|
return [result];
|
|
212
218
|
}
|
|
213
|
-
function
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
219
|
+
function GetNextNodeRow(data, injector, getNextChildren, scope) {
|
|
220
|
+
scope ??=
|
|
221
|
+
data === undefined
|
|
222
|
+
? null
|
|
223
|
+
: Store_1.ObservableScope.Create(function () {
|
|
224
|
+
const children = injector_1.Injector.Scope(injector, getNextChildren, data);
|
|
225
|
+
return CreateNodeArray(children);
|
|
226
|
+
});
|
|
227
|
+
const children = scope === null
|
|
228
|
+
? CreateNodeArray(injector_1.Injector.Scope(injector, getNextChildren, undefined))
|
|
229
|
+
: Store_1.ObservableScope.Value(scope);
|
|
230
|
+
return [data, children, scope];
|
|
231
|
+
}
|
|
232
|
+
function InitializeNextNodes(injector, getNextChildren, nextData) {
|
|
225
233
|
const nextNodes = new Array(nextData.length);
|
|
226
234
|
for (let x = 0; x < nextData.length; x++) {
|
|
227
235
|
const data = nextData[x];
|
|
228
|
-
|
|
229
|
-
for (; i < nodeArray.length &&
|
|
230
|
-
(nodeArray[i] === null || nodeArray[i][0] !== data); i++) { }
|
|
231
|
-
if (i !== nodeArray.length) {
|
|
232
|
-
if (nodeArray[i][2]) {
|
|
233
|
-
const scope = nodeArray[i][2];
|
|
234
|
-
const value = scope.value;
|
|
235
|
-
const updatedValue = Store_1.ObservableScope.Value(scope);
|
|
236
|
-
if (value !== updatedValue)
|
|
237
|
-
nodeArray[i][1] = CreateNodeArray(updatedValue);
|
|
238
|
-
}
|
|
239
|
-
nextNodes[x] = nodeArray[i];
|
|
240
|
-
nodeArray[i] = null;
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
const scope = Store_1.ObservableScope.Create(function () {
|
|
244
|
-
return injector_1.Injector.Scope(injector, getNextChildren, data);
|
|
245
|
-
});
|
|
246
|
-
nextNodes[x] = [
|
|
247
|
-
data,
|
|
248
|
-
CreateNodeArray(Store_1.ObservableScope.Value(scope)),
|
|
249
|
-
scope,
|
|
250
|
-
];
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
for (let x = 0; x < nodeArray.length; x++) {
|
|
254
|
-
if (nodeArray[x] !== null) {
|
|
255
|
-
vNode.DestroyAll(nodeArray[x][1]);
|
|
256
|
-
Store_1.ObservableScope.Destroy(nodeArray[x][2]);
|
|
257
|
-
}
|
|
236
|
+
nextNodes[x] = GetNextNodeRow(data, injector, getNextChildren);
|
|
258
237
|
}
|
|
259
238
|
return nextNodes;
|
|
260
239
|
}
|
|
240
|
+
function GetNextNodeRowSmall(injector, getNextChildren, nodeArray, data) {
|
|
241
|
+
let i = 0;
|
|
242
|
+
for (; i < nodeArray.length && (nodeArray[i] === null || nodeArray[i][0] !== data); i++) { }
|
|
243
|
+
if (i === nodeArray.length)
|
|
244
|
+
return GetNextNodeRow(data, injector, getNextChildren);
|
|
245
|
+
const nextNodeRow = GetNextNodeRow(data, injector, getNextChildren, nodeArray[i][2]);
|
|
246
|
+
if (nodeArray[i][1] !== nextNodeRow[1])
|
|
247
|
+
vNode.DestroyAll(nodeArray[i][1]);
|
|
248
|
+
nodeArray[i] = null;
|
|
249
|
+
return nextNodeRow;
|
|
250
|
+
}
|
|
251
|
+
function EvaluateNextNodesSmall(injector, getNextChildren, nextData, nodeArray) {
|
|
252
|
+
const nextNodes = new Array(nextData.length);
|
|
253
|
+
for (let x = 0; x < nextData.length; x++)
|
|
254
|
+
nextNodes[x] = GetNextNodeRowSmall(injector, getNextChildren, nodeArray, nextData[x]);
|
|
255
|
+
return nextNodes;
|
|
256
|
+
}
|
|
257
|
+
function GetNextNodeRowLarge(injector, getNextChildren, nodeRowMap, data) {
|
|
258
|
+
const currentChildren = nodeRowMap.get(data);
|
|
259
|
+
let currentChildIndex = currentChildren ? currentChildren.length - 1 : -1;
|
|
260
|
+
for (; currentChildIndex >= 0 && currentChildren[currentChildIndex] === null; currentChildIndex--) { }
|
|
261
|
+
if (currentChildIndex >= 0) {
|
|
262
|
+
const nodeRow = currentChildren[currentChildIndex];
|
|
263
|
+
if (currentChildIndex === 0)
|
|
264
|
+
nodeRowMap.delete(data);
|
|
265
|
+
else
|
|
266
|
+
currentChildren[currentChildIndex] = null;
|
|
267
|
+
const nextNodeRow = GetNextNodeRow(data, injector, getNextChildren, nodeRow[2]);
|
|
268
|
+
if (nodeRow[1] !== nextNodeRow[1])
|
|
269
|
+
vNode.DestroyAll(nodeRow[1]);
|
|
270
|
+
return nextNodeRow;
|
|
271
|
+
}
|
|
272
|
+
return GetNextNodeRow(data, injector, getNextChildren);
|
|
273
|
+
}
|
|
261
274
|
function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray) {
|
|
262
275
|
const nextNodes = new Array(nextData.length);
|
|
263
276
|
const dataMap = new Map();
|
|
@@ -267,34 +280,7 @@ function EvaluateNextNodesLarge(injector, getNextChildren, nextData, nodeArray)
|
|
|
267
280
|
dataMap.set(nodeArray[x][0], arr);
|
|
268
281
|
}
|
|
269
282
|
for (let x = 0; x < nextData.length; x++) {
|
|
270
|
-
|
|
271
|
-
const currentChildren = dataMap.get(data);
|
|
272
|
-
let currentChildIndex = currentChildren ? currentChildren.length - 1 : -1;
|
|
273
|
-
for (; currentChildIndex >= 0 && currentChildren[currentChildIndex] === null; currentChildIndex--) { }
|
|
274
|
-
if (currentChildIndex !== -1) {
|
|
275
|
-
const currentChild = currentChildren[currentChildIndex];
|
|
276
|
-
currentChildren[currentChildIndex] = null;
|
|
277
|
-
const scope = currentChild[2];
|
|
278
|
-
const value = scope.value;
|
|
279
|
-
const updatedValue = Store_1.ObservableScope.Value(scope);
|
|
280
|
-
if (value !== updatedValue) {
|
|
281
|
-
vNode.DestroyAll(currentChild[1]);
|
|
282
|
-
currentChild[1] = CreateNodeArray(updatedValue);
|
|
283
|
-
}
|
|
284
|
-
nextNodes[x] = currentChild;
|
|
285
|
-
if (currentChildIndex === 0)
|
|
286
|
-
dataMap.delete(data);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
const scope = Store_1.ObservableScope.Create(function () {
|
|
290
|
-
return injector_1.Injector.Scope(injector, getNextChildren, data);
|
|
291
|
-
});
|
|
292
|
-
nextNodes[x] = [
|
|
293
|
-
data,
|
|
294
|
-
CreateNodeArray(Store_1.ObservableScope.Value(scope)),
|
|
295
|
-
scope,
|
|
296
|
-
];
|
|
297
|
-
}
|
|
283
|
+
nextNodes[x] = GetNextNodeRowLarge(injector, getNextChildren, dataMap, nextData[x]);
|
|
298
284
|
}
|
|
299
285
|
for (const value of dataMap.values()) {
|
|
300
286
|
for (let x = 0; x < value.length; x++) {
|
package/Node/vNode.types.d.ts
CHANGED
|
@@ -23,7 +23,11 @@ export type vElementNode = {
|
|
|
23
23
|
definition: vNodeDefinition<any, any, any>;
|
|
24
24
|
injector: Injector;
|
|
25
25
|
node: Node | null;
|
|
26
|
-
children:
|
|
26
|
+
children: (readonly [
|
|
27
|
+
any,
|
|
28
|
+
vNode[],
|
|
29
|
+
IObservableScope<string | vNode | vNode[]> | null
|
|
30
|
+
])[] | null;
|
|
27
31
|
destroyed: boolean;
|
|
28
32
|
onDestroyed: Emitter | null;
|
|
29
33
|
scopes: IObservableScope<unknown>[];
|