neo.mjs 7.16.0 → 8.0.0-alpha.2
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/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/view/ViewportController.mjs +1 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/realworld/view/HomeComponent.mjs +13 -14
- package/apps/realworld/view/user/ProfileComponent.mjs +1 -1
- package/apps/realworld/view/user/SignUpComponent.mjs +1 -2
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/table/container/MainContainer.mjs +17 -12
- package/examples/table/nestedRecordFields/MainContainer.mjs +3 -1
- package/examples/todoList/version1/MainComponent.mjs +1 -1
- package/package.json +6 -6
- package/resources/data/deck/learnneo/pages/benefits/Speed.md +5 -4
- package/resources/scss/src/calendar/view/week/Component.scss +6 -0
- package/resources/scss/src/component/DateSelector.scss +1 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/button/Base.mjs +8 -8
- package/src/calendar/view/MainContainer.mjs +4 -1
- package/src/calendar/view/SettingsContainer.mjs +4 -0
- package/src/calendar/view/YearComponent.mjs +0 -3
- package/src/calendar/view/calendars/ColorsList.mjs +6 -6
- package/src/calendar/view/calendars/Container.mjs +1 -1
- package/src/calendar/view/calendars/List.mjs +14 -2
- package/src/calendar/view/month/Component.mjs +1 -1
- package/src/calendar/view/week/Component.mjs +7 -7
- package/src/calendar/view/week/EventDragZone.mjs +1 -1
- package/src/calendar/view/week/TimeAxisComponent.mjs +2 -2
- package/src/calendar/view/week/plugin/DragDrop.mjs +3 -3
- package/src/collection/Base.mjs +4 -3
- package/src/component/Base.mjs +125 -49
- package/src/component/Circle.mjs +1 -3
- package/src/component/DateSelector.mjs +1 -1
- package/src/container/Accordion.mjs +1 -1
- package/src/container/Base.mjs +19 -7
- package/src/core/Base.mjs +10 -9
- package/src/draggable/list/DragZone.mjs +1 -1
- package/src/draggable/toolbar/DragZone.mjs +1 -1
- package/src/draggable/toolbar/SortZone.mjs +1 -1
- package/src/draggable/tree/DragZone.mjs +1 -1
- package/src/form/Fieldset.mjs +2 -0
- package/src/form/field/Color.mjs +4 -4
- package/src/form/field/ComboBox.mjs +2 -2
- package/src/form/field/Date.mjs +2 -1
- package/src/form/field/Picker.mjs +2 -1
- package/src/form/field/Text.mjs +8 -8
- package/src/layout/Card.mjs +11 -6
- package/src/layout/Cube.mjs +15 -4
- package/src/list/Chip.mjs +3 -2
- package/src/list/Circle.mjs +2 -1
- package/src/list/Component.mjs +5 -0
- package/src/manager/Component.mjs +158 -4
- package/src/manager/DomEvent.mjs +2 -2
- package/src/menu/List.mjs +3 -4
- package/src/menu/Panel.mjs +1 -1
- package/src/selection/Model.mjs +1 -1
- package/src/selection/grid/BaseModel.mjs +61 -0
- package/src/selection/grid/CellColumnModel.mjs +2 -2
- package/src/selection/grid/CellColumnRowModel.mjs +2 -2
- package/src/selection/grid/CellModel.mjs +4 -4
- package/src/selection/grid/CellRowModel.mjs +9 -3
- package/src/selection/grid/ColumnModel.mjs +15 -26
- package/src/selection/grid/RowModel.mjs +15 -25
- package/src/selection/table/BaseModel.mjs +61 -0
- package/src/selection/table/CellColumnModel.mjs +2 -2
- package/src/selection/table/CellColumnRowModel.mjs +2 -2
- package/src/selection/table/CellModel.mjs +4 -4
- package/src/selection/table/CellRowModel.mjs +9 -3
- package/src/selection/table/ColumnModel.mjs +7 -8
- package/src/selection/table/RowModel.mjs +7 -7
- package/src/table/Container.mjs +1 -0
- package/src/table/View.mjs +102 -80
- package/src/table/header/Button.mjs +3 -5
- package/src/table/header/Toolbar.mjs +1 -0
- package/src/tree/List.mjs +1 -1
- package/src/util/VDom.mjs +42 -11
- package/src/util/VNode.mjs +33 -11
- package/src/vdom/Helper.mjs +55 -22
- package/src/vdom/VNode.mjs +1 -1
package/src/util/VDom.mjs
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import Base
|
1
|
+
import Base from '../core/Base.mjs';
|
2
|
+
import ComponentManager from '../manager/Component.mjs';
|
2
3
|
|
3
4
|
/**
|
4
5
|
* @class Neo.util.VDom
|
@@ -38,6 +39,7 @@ class VDom extends Base {
|
|
38
39
|
* Search vdom child nodes by id or opts object for a given vdom tree
|
39
40
|
* @param {Object} vdom
|
40
41
|
* @param {Object|String} opts Either an object containing vdom node attributes or a string based id
|
42
|
+
* @param {Boolean} replaceComponentRefs=true
|
41
43
|
* @param {Number} [index] Internal flag, do not use it
|
42
44
|
* @param {Object} [parentNode] Internal flag, do not use it
|
43
45
|
* @returns {Object}
|
@@ -45,10 +47,14 @@ class VDom extends Base {
|
|
45
47
|
* {String} parentId
|
46
48
|
* {Object} vdom
|
47
49
|
*/
|
48
|
-
static
|
50
|
+
static find(vdom, opts, replaceComponentRefs=true, index, parentNode) {
|
49
51
|
index = index || 0;
|
50
52
|
opts = !Neo.isString(opts) ? opts : {id: opts};
|
51
53
|
|
54
|
+
if (replaceComponentRefs) {
|
55
|
+
vdom = VDom.getVdom(vdom)
|
56
|
+
}
|
57
|
+
|
52
58
|
let child = null,
|
53
59
|
matchArray = [],
|
54
60
|
styleMatch = true,
|
@@ -72,7 +78,7 @@ class VDom extends Base {
|
|
72
78
|
}
|
73
79
|
} else if (Neo.isArray(value) && Neo.isArray(vdom[key])) {
|
74
80
|
// todo: either search the vdom array for all keys or compare if the arrays are equal.
|
75
|
-
throw new Error('
|
81
|
+
throw new Error('find: cls matching not supported for target & source types of Arrays')
|
76
82
|
}
|
77
83
|
break
|
78
84
|
case 'style':
|
@@ -91,7 +97,7 @@ class VDom extends Base {
|
|
91
97
|
matchArray.push(true)
|
92
98
|
}
|
93
99
|
} else {
|
94
|
-
throw new Error('
|
100
|
+
throw new Error('find: style matching not supported for mixed target & source types (Object VS String)')
|
95
101
|
}
|
96
102
|
break
|
97
103
|
default:
|
@@ -110,7 +116,7 @@ class VDom extends Base {
|
|
110
116
|
if (vdom.cn) {
|
111
117
|
for (; i < len; i++) {
|
112
118
|
if (vdom.cn[i]) {
|
113
|
-
subChild = VDom.
|
119
|
+
subChild = VDom.find(vdom.cn[i], opts, replaceComponentRefs, i, vdom);
|
114
120
|
|
115
121
|
if (subChild) {
|
116
122
|
child = {
|
@@ -128,14 +134,13 @@ class VDom extends Base {
|
|
128
134
|
}
|
129
135
|
|
130
136
|
/**
|
131
|
-
* Convenience shortcut for
|
137
|
+
* Convenience shortcut for find(vdom, {flag: flag});
|
132
138
|
* @param {Object} vdom
|
133
139
|
* @param {String} flag The flag reference specified on the target vdom child node
|
134
140
|
* @returns {Object} vdom
|
135
141
|
*/
|
136
142
|
static getByFlag(vdom, flag) {
|
137
|
-
|
138
|
-
return node?.vdom
|
143
|
+
return VDom.find(vdom, {flag})?.vdom
|
139
144
|
}
|
140
145
|
|
141
146
|
/**
|
@@ -145,6 +150,8 @@ class VDom extends Base {
|
|
145
150
|
* @returns {Array} childIds
|
146
151
|
*/
|
147
152
|
static getChildIds(vdom, childIds=[]) {
|
153
|
+
vdom = VDom.getVdom(vdom);
|
154
|
+
|
148
155
|
let childNodes = vdom?.cn || [];
|
149
156
|
|
150
157
|
childNodes.forEach(childNode => {
|
@@ -164,6 +171,8 @@ class VDom extends Base {
|
|
164
171
|
* @returns {Array}
|
165
172
|
*/
|
166
173
|
static getColumnNodes(vdom, index) {
|
174
|
+
vdom = VDom.getVdom(vdom);
|
175
|
+
|
167
176
|
let columnNodes = [];
|
168
177
|
|
169
178
|
vdom.cn?.forEach(row => {
|
@@ -191,6 +200,8 @@ class VDom extends Base {
|
|
191
200
|
* @returns {Array} an array of vdom nodes which match the flag
|
192
201
|
*/
|
193
202
|
static getFlags(vdom, flag, matchArray) {
|
203
|
+
vdom = VDom.getVdom(vdom);
|
204
|
+
|
194
205
|
if (!matchArray) {
|
195
206
|
matchArray = [];
|
196
207
|
|
@@ -217,6 +228,8 @@ class VDom extends Base {
|
|
217
228
|
* @returns {Array}
|
218
229
|
*/
|
219
230
|
static getParentNodes(vdom, id, topLevel=true) {
|
231
|
+
vdom = VDom.getVdom(vdom);
|
232
|
+
|
220
233
|
let parents = null,
|
221
234
|
i = 0,
|
222
235
|
len = vdom.cn?.length || 0;
|
@@ -241,6 +254,19 @@ class VDom extends Base {
|
|
241
254
|
return parents
|
242
255
|
}
|
243
256
|
|
257
|
+
/**
|
258
|
+
* Convenience shortcut using manager.Component to replace vdom references if needed
|
259
|
+
* @param {Object} vdom
|
260
|
+
* @returns {Object}
|
261
|
+
*/
|
262
|
+
static getVdom(vdom) {
|
263
|
+
if (vdom.componentId) {
|
264
|
+
vdom = ComponentManager.get(vdom.componentId).vdom
|
265
|
+
}
|
266
|
+
|
267
|
+
return vdom
|
268
|
+
}
|
269
|
+
|
244
270
|
/**
|
245
271
|
* Insert a given nodeToInsert after a targetNode inside a given vdom tree
|
246
272
|
* @param {Object} vdom The vdom tree containing the targetNode
|
@@ -276,7 +302,7 @@ class VDom extends Base {
|
|
276
302
|
targetNodeId = targetNodeId.id
|
277
303
|
}
|
278
304
|
|
279
|
-
let targetNode = VDom.
|
305
|
+
let targetNode = VDom.find(vdom, targetNodeId),
|
280
306
|
index;
|
281
307
|
|
282
308
|
if (targetNode) {
|
@@ -295,7 +321,7 @@ class VDom extends Base {
|
|
295
321
|
* @returns {Boolean} true in case the node was found & removed
|
296
322
|
*/
|
297
323
|
static removeVdomChild(vdom, opts) {
|
298
|
-
let child = VDom.
|
324
|
+
let child = VDom.find(vdom, opts);
|
299
325
|
|
300
326
|
if (child) {
|
301
327
|
child.parentNode.cn.splice(child.index, 1);
|
@@ -313,6 +339,8 @@ class VDom extends Base {
|
|
313
339
|
* @returns {Boolean} true in case the node was found and replaced
|
314
340
|
*/
|
315
341
|
static replaceVdomChild(vdom, id, newChildNode) {
|
342
|
+
vdom = VDom.getVdom(vdom);
|
343
|
+
|
316
344
|
let cn = vdom.cn || [],
|
317
345
|
i = 0,
|
318
346
|
len = cn.length,
|
@@ -347,6 +375,8 @@ class VDom extends Base {
|
|
347
375
|
*/
|
348
376
|
static syncVdomIds(vnode, vdom, force=false) {
|
349
377
|
if (vnode && vdom) {
|
378
|
+
vdom = VDom.getVdom(vdom);
|
379
|
+
|
350
380
|
let childNodes = vdom.cn,
|
351
381
|
cn, i, len;
|
352
382
|
|
@@ -363,7 +393,8 @@ class VDom extends Base {
|
|
363
393
|
}
|
364
394
|
|
365
395
|
if (childNodes) {
|
366
|
-
cn = childNodes.
|
396
|
+
cn = childNodes.map(item => VDom.getVdom(item));
|
397
|
+
cn = cn.filter(item => item.removeDom !== true);
|
367
398
|
i = 0;
|
368
399
|
len = cn?.length || 0;
|
369
400
|
|
package/src/util/VNode.mjs
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import Base
|
1
|
+
import Base from '../core/Base.mjs';
|
2
|
+
import ComponentManager from '../manager/Component.mjs';
|
2
3
|
|
3
4
|
/**
|
4
5
|
* @class Neo.util.VNode
|
@@ -25,6 +26,8 @@ class VNode extends Base {
|
|
25
26
|
* {Object} vnode
|
26
27
|
*/
|
27
28
|
static findChildVnode(vnode, opts, index, parentNode) {
|
29
|
+
vnode = VNode.getVnode(vnode);
|
30
|
+
|
28
31
|
index = index || 0;
|
29
32
|
opts = typeof opts !== 'string' ? opts : {id: opts};
|
30
33
|
|
@@ -112,6 +115,8 @@ class VNode extends Base {
|
|
112
115
|
* @returns {Object|null} child vnode or null
|
113
116
|
*/
|
114
117
|
static findChildVnodeById(vnode, id) {
|
118
|
+
vnode = VNode.getVnode(vnode);
|
119
|
+
|
115
120
|
let childNodes = vnode.childNodes || [],
|
116
121
|
i = 0,
|
117
122
|
len = childNodes.length,
|
@@ -122,7 +127,7 @@ class VNode extends Base {
|
|
122
127
|
}
|
123
128
|
|
124
129
|
for (; i < len; i++) {
|
125
|
-
childNode = childNodes[i];
|
130
|
+
childNode = VNode.getVnode(childNodes[i]);
|
126
131
|
|
127
132
|
if (childNode.id === id) {
|
128
133
|
return childNode
|
@@ -139,25 +144,38 @@ class VNode extends Base {
|
|
139
144
|
}
|
140
145
|
|
141
146
|
/**
|
142
|
-
* Get the ids of all child nodes of the given vnode
|
143
|
-
* @param vnode
|
144
|
-
* @param [childIds=[]
|
145
|
-
* @returns {
|
147
|
+
* Get the ids of all child nodes of the given vnode, excluding component references
|
148
|
+
* @param {Object} vnode
|
149
|
+
* @param {String[]} childIds=[]
|
150
|
+
* @returns {String[]} childIds
|
146
151
|
*/
|
147
152
|
static getChildIds(vnode, childIds=[]) {
|
148
|
-
let childNodes = vnode
|
153
|
+
let childNodes = vnode?.childNodes || [];
|
149
154
|
|
150
155
|
childNodes.forEach(childNode => {
|
151
|
-
if (childNode.id) {
|
156
|
+
if (childNode.id && !childNode.componentId) {
|
152
157
|
childIds.push(childNode.id)
|
153
158
|
}
|
154
159
|
|
155
|
-
|
160
|
+
VNode.getChildIds(childNode, childIds)
|
156
161
|
});
|
157
162
|
|
158
163
|
return childIds
|
159
164
|
}
|
160
165
|
|
166
|
+
/**
|
167
|
+
* Convenience shortcut using manager.Component to replace vnode references if needed
|
168
|
+
* @param {Object} vnode
|
169
|
+
* @returns {Object}
|
170
|
+
*/
|
171
|
+
static getVnode(vnode) {
|
172
|
+
if (vnode.componentId) {
|
173
|
+
vnode = ComponentManager.get(vnode.componentId).vnode
|
174
|
+
}
|
175
|
+
|
176
|
+
return vnode
|
177
|
+
}
|
178
|
+
|
161
179
|
/**
|
162
180
|
* Removes a child vnode inside a vnode tree by a given id
|
163
181
|
* @param {Object} vnode
|
@@ -165,6 +183,8 @@ class VNode extends Base {
|
|
165
183
|
* @returns {Boolean} true in case the node was found and removed
|
166
184
|
*/
|
167
185
|
static removeChildVnode(vnode, id) {
|
186
|
+
vnode = VNode.getVnode(vnode);
|
187
|
+
|
168
188
|
let childNodes = vnode.childNodes || [],
|
169
189
|
i = 0,
|
170
190
|
len = childNodes.length,
|
@@ -175,7 +195,7 @@ class VNode extends Base {
|
|
175
195
|
}
|
176
196
|
|
177
197
|
for (; i < len; i++) {
|
178
|
-
childNode = childNodes[i];
|
198
|
+
childNode = VNode.getVnode(childNodes[i]);
|
179
199
|
|
180
200
|
if (childNode.id === id) {
|
181
201
|
childNodes.splice(i, 1);
|
@@ -198,6 +218,8 @@ class VNode extends Base {
|
|
198
218
|
* @returns {Boolean} true in case the node was found and replaced
|
199
219
|
*/
|
200
220
|
static replaceChildVnode(vnode, id, newChildVnode) {
|
221
|
+
vnode = VNode.getVnode(vnode);
|
222
|
+
|
201
223
|
let childNodes = vnode.childNodes || [],
|
202
224
|
i = 0,
|
203
225
|
len = childNodes.length,
|
@@ -208,7 +230,7 @@ class VNode extends Base {
|
|
208
230
|
}
|
209
231
|
|
210
232
|
for (; i < len; i++) {
|
211
|
-
childNode = childNodes[i];
|
233
|
+
childNode = VNode.getVnode(childNodes[i]);
|
212
234
|
|
213
235
|
if (childNode.id === id) {
|
214
236
|
childNodes[i] = newChildVnode;
|
package/src/vdom/Helper.mjs
CHANGED
@@ -132,6 +132,10 @@ class Helper extends Base {
|
|
132
132
|
let {deltas, oldVnode, vnode, vnodeMap} = config,
|
133
133
|
attributes, delta, value, keys, styles, add, remove;
|
134
134
|
|
135
|
+
if (oldVnode.componentId && (oldVnode.id === vnode.id || oldVnode.componentId === vnode.id)) {
|
136
|
+
return deltas
|
137
|
+
}
|
138
|
+
|
135
139
|
if (vnode.vtype === 'text' && vnode.innerHTML !== oldVnode.innerHTML) {
|
136
140
|
deltas.default.push({
|
137
141
|
action : 'updateVtext',
|
@@ -233,7 +237,7 @@ class Helper extends Base {
|
|
233
237
|
*/
|
234
238
|
createDeltas(config) {
|
235
239
|
let {deltas={default: [], remove: []}, oldVnode, vnode} = config,
|
236
|
-
oldVnodeId = oldVnode?.id,
|
240
|
+
oldVnodeId = oldVnode?.id || oldVnode?.componentId,
|
237
241
|
vnodeId = vnode?.id;
|
238
242
|
|
239
243
|
// Edge case: setting `removeDom: true` on a top-level vdom node
|
@@ -259,7 +263,7 @@ class Helper extends Base {
|
|
259
263
|
indexDelta = 0,
|
260
264
|
insertDelta = 0,
|
261
265
|
len = Math.max(childNodes.length, oldChildNodes.length),
|
262
|
-
childNode, nodeInNewTree, oldChildNode;
|
266
|
+
childNode, nodeInNewTree, oldChildNode, oldChildNodeId;
|
263
267
|
|
264
268
|
me.compareAttributes({deltas, oldVnode, vnode, vnodeMap});
|
265
269
|
|
@@ -285,7 +289,8 @@ class Helper extends Base {
|
|
285
289
|
}
|
286
290
|
|
287
291
|
if (oldChildNode) {
|
288
|
-
|
292
|
+
oldChildNodeId = oldChildNode.id || oldChildNode.componentId;
|
293
|
+
nodeInNewTree = vnodeMap.get(oldChildNodeId);
|
289
294
|
|
290
295
|
// Remove node, if no longer inside the new tree
|
291
296
|
if (!nodeInNewTree) {
|
@@ -304,14 +309,14 @@ class Helper extends Base {
|
|
304
309
|
}
|
305
310
|
|
306
311
|
if (childNode) {
|
307
|
-
if (
|
308
|
-
me.moveNode({deltas, insertDelta, oldVnodeMap, vnode: childNode, vnodeMap})
|
312
|
+
if (me.isMovedNode(childNode, oldVnodeMap)) {
|
313
|
+
me.moveNode({deltas, insertDelta, oldVnodeMap, vnode: childNode, vnodeMap})
|
309
314
|
} else {
|
310
315
|
me.insertNode({deltas, index: i + insertDelta, oldVnodeMap, vnode: childNode, vnodeMap});
|
311
316
|
}
|
312
317
|
|
313
|
-
if (oldChildNode && vnodeId === vnodeMap.get(
|
314
|
-
len
|
318
|
+
if (oldChildNode && vnodeId === vnodeMap.get(oldChildNodeId)?.parentNode.id) {
|
319
|
+
len++
|
315
320
|
}
|
316
321
|
}
|
317
322
|
}
|
@@ -432,6 +437,15 @@ class Helper extends Base {
|
|
432
437
|
* @returns {Object|Neo.vdom.VNode|null}
|
433
438
|
*/
|
434
439
|
createVnode(opts) {
|
440
|
+
// do not create vnode instances for component reference objects
|
441
|
+
if (opts.componentId) {
|
442
|
+
if (!opts.id) {
|
443
|
+
opts.id = opts.componentId
|
444
|
+
}
|
445
|
+
|
446
|
+
return opts
|
447
|
+
}
|
448
|
+
|
435
449
|
if (opts.removeDom === true) {
|
436
450
|
return null
|
437
451
|
}
|
@@ -516,11 +530,10 @@ class Helper extends Base {
|
|
516
530
|
hasUnit = value != parseInt(value);
|
517
531
|
node.style[key] = value + (hasUnit ? '' : 'px');
|
518
532
|
break
|
533
|
+
case 'componentId':
|
519
534
|
case 'id':
|
520
|
-
node.id = value;
|
521
|
-
break
|
522
535
|
case 'static':
|
523
|
-
node
|
536
|
+
node[key] = value;
|
524
537
|
break
|
525
538
|
case 'style':
|
526
539
|
style = node.style;
|
@@ -557,13 +570,17 @@ class Helper extends Base {
|
|
557
570
|
*/
|
558
571
|
createVnodeMap(config) {
|
559
572
|
let {vnode, parentNode=null, index=0, map=new Map()} = config,
|
560
|
-
id
|
573
|
+
id;
|
561
574
|
|
562
|
-
|
575
|
+
if (vnode) {
|
576
|
+
id = vnode.id || vnode.componentId;
|
563
577
|
|
564
|
-
|
565
|
-
|
566
|
-
|
578
|
+
map.set(id, {id, index, parentNode, vnode});
|
579
|
+
|
580
|
+
vnode.childNodes?.forEach((childNode, index) => {
|
581
|
+
this.createVnodeMap({vnode: childNode, parentNode: vnode, index, map})
|
582
|
+
});
|
583
|
+
}
|
567
584
|
|
568
585
|
return map
|
569
586
|
}
|
@@ -583,12 +600,10 @@ class Helper extends Base {
|
|
583
600
|
id = vnode?.id;
|
584
601
|
|
585
602
|
if (id) {
|
586
|
-
|
587
|
-
|
588
|
-
if (currentNode) {
|
603
|
+
if (this.isMovedNode(vnode, oldVnodeMap)) {
|
589
604
|
movedNodes.set(id, vnodeMap.get(id))
|
590
605
|
} else {
|
591
|
-
vnode.childNodes
|
606
|
+
vnode.childNodes?.forEach(childNode => {
|
592
607
|
if (childNode.vtype !== 'text') {
|
593
608
|
this.findMovedNodes({movedNodes, oldVnodeMap, vnode: childNode, vnodeMap})
|
594
609
|
}
|
@@ -630,6 +645,21 @@ class Helper extends Base {
|
|
630
645
|
})
|
631
646
|
}
|
632
647
|
|
648
|
+
/**
|
649
|
+
*
|
650
|
+
* @param {Neo.vdom.VNode} vnode
|
651
|
+
* @param {Map} oldVnodeMap
|
652
|
+
* @returns {Boolean}
|
653
|
+
*/
|
654
|
+
isMovedNode(vnode, oldVnodeMap) {
|
655
|
+
let oldVnode = oldVnodeMap.get(vnode.id);
|
656
|
+
|
657
|
+
return oldVnode && (
|
658
|
+
!oldVnode.vnode.componentId || // the old vnode is not a reference
|
659
|
+
vnode.componentId === oldVnode.vnode.componentId // old & new nodes are the same references
|
660
|
+
)
|
661
|
+
}
|
662
|
+
|
633
663
|
/**
|
634
664
|
* @param {Object} config
|
635
665
|
* @param {Object} config.deltas
|
@@ -677,9 +707,12 @@ class Helper extends Base {
|
|
677
707
|
* @param {Neo.vdom.VNode} config.oldVnode
|
678
708
|
* @param {Map} config.oldVnodeMap
|
679
709
|
*/
|
680
|
-
removeNode(
|
681
|
-
|
682
|
-
|
710
|
+
removeNode({deltas, oldVnode, oldVnodeMap}) {
|
711
|
+
if (oldVnode.componentId && !oldVnode.id) {
|
712
|
+
oldVnode.id = oldVnode.componentId
|
713
|
+
}
|
714
|
+
|
715
|
+
let delta = {action: 'removeNode', id: oldVnode.id},
|
683
716
|
{parentNode} = oldVnodeMap.get(oldVnode.id);
|
684
717
|
|
685
718
|
if (oldVnode.vtype === 'text') {
|