neo.mjs 6.18.3 → 6.19.1
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/README.md +28 -214
- package/apps/ServiceWorker.mjs +2 -2
- package/apps/colors/view/ViewportController.mjs +7 -3
- package/apps/portal/data/blog.json +13 -0
- package/apps/portal/view/HeaderToolbar.mjs +2 -2
- package/apps/portal/view/Viewport.mjs +4 -2
- package/apps/portal/view/ViewportController.mjs +88 -7
- package/apps/portal/view/blog/Container.mjs +8 -8
- package/apps/portal/view/blog/List.mjs +6 -6
- package/apps/portal/view/home/FooterContainer.mjs +123 -0
- package/apps/portal/view/home/MainContainer.mjs +3 -2
- package/apps/portal/view/home/parts/AfterMath.mjs +17 -24
- package/apps/portal/view/home/parts/Colors.mjs +2 -2
- package/apps/portal/view/home/parts/How.mjs +3 -3
- package/apps/portal/view/home/parts/MainNeo.mjs +6 -7
- package/apps/portal/view/home/parts/References.mjs +88 -0
- package/apps/portal/view/learn/MainContainer.mjs +3 -2
- package/apps/portal/view/learn/MainContainerController.mjs +11 -0
- package/apps/portal/view/learn/PageContainer.mjs +5 -3
- package/apps/portal/view/services/Component.mjs +73 -0
- package/apps/website/data/blog.json +13 -0
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/component/carousel/MainContainer.mjs +42 -33
- package/examples/layout/cube/MainContainer.mjs +217 -0
- package/examples/layout/cube/app.mjs +6 -0
- package/examples/layout/cube/index.html +11 -0
- package/examples/layout/cube/neo-config.json +6 -0
- package/examples/model/twoWay/MainContainer.mjs +76 -0
- package/examples/model/twoWay/app.mjs +6 -0
- package/examples/model/twoWay/index.html +11 -0
- package/examples/model/twoWay/neo-config.json +6 -0
- package/package.json +7 -7
- package/resources/data/deck/learnneo/pages/Earthquakes-01-goals.md +32 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-01-generate-a-workspace.md +47 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-02-generate-the-starter-app.md +150 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-03-debugging.md +136 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-04-fetch-data.md +146 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-05-refactor-the-table.md +146 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-06-use-a-view-model.md +301 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-07-use-the-google-maps-addon.md +175 -0
- package/resources/data/deck/learnneo/pages/Earthquakes-Lab-08-events.md +38 -0
- package/resources/data/deck/learnneo/pages/Earthquakes.md +8 -8
- package/resources/data/deck/learnneo/pages/Glossary.md +0 -0
- package/resources/data/deck/learnneo/pages/GuideEvents.md +80 -1
- package/resources/data/deck/learnneo/tree.json +2 -1
- package/resources/images/apps/portal/neo-references.png +0 -0
- package/resources/scss/src/apps/portal/Viewport.scss +18 -0
- package/resources/scss/src/apps/portal/blog/Container.scss +7 -7
- package/resources/scss/src/apps/portal/blog/List.scss +20 -16
- package/resources/scss/src/apps/portal/home/FooterContainer.scss +31 -0
- package/resources/scss/src/apps/portal/home/parts/AfterMath.scss +5 -0
- package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +4 -5
- package/resources/scss/src/apps/portal/home/parts/References.scss +46 -0
- package/resources/scss/src/apps/portal/learn/ContentTreeList.scss +20 -0
- package/resources/scss/src/apps/portal/learn/ContentView.scss +4 -0
- package/resources/scss/src/apps/portal/learn/MainContainer.scss +1 -1
- package/resources/scss/src/apps/portal/learn/PageContainer.scss +22 -16
- package/resources/scss/src/apps/portal/services/Component.scss +20 -0
- package/resources/scss/src/component/Carousel.scss +21 -0
- package/resources/scss/src/examples/layout/cube/MainContainer.scss +7 -0
- package/resources/scss/src/layout/Cube.scss +80 -0
- package/resources/scss/src/tab/Container.scss +10 -10
- package/resources/scss/theme-neo-light/apps/portal/blog/Container.scss +3 -0
- package/resources/scss/theme-neo-light/form/field/Search.scss +1 -1
- package/resources/scss/theme-neo-light/tooltip/Base.scss +1 -1
- package/src/DefaultConfig.mjs +2 -2
- package/src/Main.mjs +15 -1
- package/src/Neo.mjs +14 -3
- package/src/calendar/view/MainContainer.mjs +8 -7
- package/src/component/Base.mjs +28 -8
- package/src/component/DateSelector.mjs +2 -2
- package/src/container/Base.mjs +3 -1
- package/src/dialog/Base.mjs +1 -2
- package/src/form/field/Time.mjs +18 -16
- package/src/layout/Base.mjs +43 -6
- package/src/layout/Card.mjs +21 -59
- package/src/layout/Cube.mjs +432 -0
- package/src/layout/Fit.mjs +9 -38
- package/src/layout/Flexbox.mjs +16 -17
- package/src/layout/Form.mjs +13 -70
- package/src/layout/Grid.mjs +6 -18
- package/src/list/Base.mjs +3 -3
- package/src/main/mixin/DeltaUpdates.mjs +16 -3
- package/src/model/Component.mjs +25 -6
- package/src/util/Array.mjs +36 -0
- package/src/vdom/Helper.mjs +338 -442
- package/src/vdom/VNode.mjs +12 -1
- package/test/siesta/siesta.js +16 -1
- package/test/siesta/tests/VdomCalendar.mjs +2193 -37
- package/test/siesta/tests/VdomHelper.mjs +287 -48
- package/test/siesta/tests/vdom/Advanced.mjs +368 -0
- package/test/siesta/tests/vdom/layout/Cube.mjs +189 -0
- package/test/siesta/tests/vdom/table/Container.mjs +133 -0
- package/resources/scss/theme-neo-light/apps/portal/learn/ContentTreeList.scss +0 -23
@@ -41,7 +41,7 @@ StartTest(t => {
|
|
41
41
|
vdom.cls = ['neo-component'];
|
42
42
|
t.diag("vdom.cls = ['neo-component'];");
|
43
43
|
|
44
|
-
output = VdomHelper.update({vdom
|
44
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
45
45
|
|
46
46
|
t.isDeeplyStrict(vnode, {
|
47
47
|
attributes: {},
|
@@ -54,18 +54,14 @@ StartTest(t => {
|
|
54
54
|
vtype : 'vnode'
|
55
55
|
}, 'vnode got updated successfully');
|
56
56
|
|
57
|
-
t.isDeeplyStrict(deltas, [
|
58
|
-
id
|
59
|
-
cls: {
|
60
|
-
add : ['neo-component'],
|
61
|
-
remove: []
|
62
|
-
}
|
57
|
+
t.isDeeplyStrict(deltas, [
|
58
|
+
{id: 'neo-vnode-1', cls: {add: ['neo-component']}
|
63
59
|
}], 'deltas got created successfully');
|
64
60
|
|
65
61
|
vdom.cls = ['neo-panel', 'neo-container', 'neo-component'];
|
66
62
|
t.diag("vdom.cls = ['neo-panel', 'neo-container', 'neo-component'];");
|
67
63
|
|
68
|
-
output = VdomHelper.update({vdom
|
64
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
69
65
|
|
70
66
|
t.isDeeplyStrict(vnode, {
|
71
67
|
attributes: {},
|
@@ -78,18 +74,14 @@ StartTest(t => {
|
|
78
74
|
vtype : 'vnode'
|
79
75
|
}, 'vnode got updated successfully');
|
80
76
|
|
81
|
-
t.isDeeplyStrict(deltas, [
|
82
|
-
id
|
83
|
-
cls: {
|
84
|
-
add : ['neo-panel', 'neo-container'],
|
85
|
-
remove: []
|
86
|
-
}
|
77
|
+
t.isDeeplyStrict(deltas, [
|
78
|
+
{id: 'neo-vnode-1', cls: {add: ['neo-panel', 'neo-container']}
|
87
79
|
}], 'deltas got created successfully');
|
88
80
|
|
89
81
|
vdom.cls = ['neo-container'];
|
90
82
|
t.diag("vdom.cls = ['neo-container'];");
|
91
83
|
|
92
|
-
output = VdomHelper.update({vdom
|
84
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
93
85
|
|
94
86
|
t.isDeeplyStrict(vnode, {
|
95
87
|
attributes: {},
|
@@ -102,12 +94,8 @@ StartTest(t => {
|
|
102
94
|
vtype : 'vnode'
|
103
95
|
}, 'vnode got updated successfully');
|
104
96
|
|
105
|
-
t.isDeeplyStrict(deltas, [
|
106
|
-
id
|
107
|
-
cls: {
|
108
|
-
add : [],
|
109
|
-
remove: ['neo-panel', 'neo-component']
|
110
|
-
}
|
97
|
+
t.isDeeplyStrict(deltas, [
|
98
|
+
{id: 'neo-vnode-1', cls: {remove: ['neo-panel', 'neo-component']}
|
111
99
|
}], 'deltas got created successfully');
|
112
100
|
});
|
113
101
|
|
@@ -115,7 +103,7 @@ StartTest(t => {
|
|
115
103
|
vdom.style = {backgroundColor: 'red'};
|
116
104
|
t.diag("vdom.style = {backgroundColor: 'red'};");
|
117
105
|
|
118
|
-
output = VdomHelper.update({vdom
|
106
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
119
107
|
|
120
108
|
t.isDeeplyStrict(vnode, {
|
121
109
|
attributes: {},
|
@@ -138,7 +126,7 @@ StartTest(t => {
|
|
138
126
|
vdom.style = {backgroundColor: 'red', color: 'green', height: '100px'};
|
139
127
|
t.diag("vdom.style = {backgroundColor: 'red', color: 'green', height: '100px'};");
|
140
128
|
|
141
|
-
output = VdomHelper.update({vdom
|
129
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
142
130
|
|
143
131
|
t.isDeeplyStrict(vnode, {
|
144
132
|
attributes: {},
|
@@ -162,7 +150,7 @@ StartTest(t => {
|
|
162
150
|
vdom.style = {color: 'green'};
|
163
151
|
t.diag("vdom.style = {color: 'green'};");
|
164
152
|
|
165
|
-
output = VdomHelper.update({vdom
|
153
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
166
154
|
|
167
155
|
t.isDeeplyStrict(vnode, {
|
168
156
|
attributes: {},
|
@@ -188,7 +176,7 @@ StartTest(t => {
|
|
188
176
|
vdom.tabIndex = -1;
|
189
177
|
t.diag("vdom.tabIndex = -1;");
|
190
178
|
|
191
|
-
output = VdomHelper.update({vdom
|
179
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
192
180
|
|
193
181
|
t.isDeeplyStrict(vnode, {
|
194
182
|
attributes: {tabIndex: '-1'},
|
@@ -211,7 +199,7 @@ StartTest(t => {
|
|
211
199
|
vdom.tabIndex = 0;
|
212
200
|
t.diag("vdom.tabIndex = 0;");
|
213
201
|
|
214
|
-
output = VdomHelper.update({vdom
|
202
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
215
203
|
|
216
204
|
t.isDeeplyStrict(vnode, {
|
217
205
|
attributes: {tabIndex: '0'},
|
@@ -234,7 +222,7 @@ StartTest(t => {
|
|
234
222
|
delete vdom.tabIndex;
|
235
223
|
t.diag("delete vdom.tabIndex;");
|
236
224
|
|
237
|
-
output = VdomHelper.update({vdom
|
225
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
238
226
|
|
239
227
|
t.isDeeplyStrict(vnode, {
|
240
228
|
attributes: {},
|
@@ -259,7 +247,7 @@ StartTest(t => {
|
|
259
247
|
vdom.cn = [{tag: 'div'}, {tag: 'div', id: 'neo-button-1'}, {tag: 'div'}];
|
260
248
|
t.diag("vdom.cn = [{tag: 'div'}, {tag: 'div', id: 'neo-button-1'}, {tag: 'div'}];");
|
261
249
|
|
262
|
-
output = VdomHelper.update({vdom
|
250
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
263
251
|
VDomUtil.syncVdomIds(vnode, vdom);
|
264
252
|
|
265
253
|
t.isDeeplyStrict(vnode, {
|
@@ -279,15 +267,15 @@ StartTest(t => {
|
|
279
267
|
}, 'vnode got updated successfully');
|
280
268
|
|
281
269
|
t.isDeeplyStrict(deltas, [
|
282
|
-
{action: 'insertNode',
|
283
|
-
{action: 'insertNode',
|
284
|
-
{action: 'insertNode',
|
270
|
+
{action: 'insertNode', index: 0, outerHTML: '<div id="neo-vnode-2"></div>', parentId: 'neo-vnode-1'},
|
271
|
+
{action: 'insertNode', index: 1, outerHTML: '<div id="neo-button-1"></div>', parentId: 'neo-vnode-1'},
|
272
|
+
{action: 'insertNode', index: 2, outerHTML: '<div id="neo-vnode-3"></div>', parentId: 'neo-vnode-1'}
|
285
273
|
], 'deltas got created successfully');
|
286
274
|
|
287
275
|
tmp = vdom.cn[0]; vdom.cn[0] = vdom.cn[2]; vdom.cn[2] = tmp;
|
288
276
|
t.diag("tmp = vdom.cn[0]; vdom.cn[0] = vdom.cn[2]; vdom.cn[2] = tmp;");
|
289
277
|
|
290
|
-
output = VdomHelper.update({vdom
|
278
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
291
279
|
|
292
280
|
t.isDeeplyStrict(vnode, {
|
293
281
|
attributes: {},
|
@@ -313,7 +301,7 @@ StartTest(t => {
|
|
313
301
|
vdom.cn.push(vdom.cn.shift()); // left shift
|
314
302
|
t.diag("vdom.cn.push(vdom.cn.shift());");
|
315
303
|
|
316
|
-
output = VdomHelper.update({vdom
|
304
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
317
305
|
|
318
306
|
t.isDeeplyStrict(vnode, {
|
319
307
|
attributes: {},
|
@@ -339,7 +327,7 @@ StartTest(t => {
|
|
339
327
|
vdom.cn.unshift(vdom.cn.pop()); // right shift
|
340
328
|
t.diag("vdom.cn.unshift(vdom.cn.pop());");
|
341
329
|
|
342
|
-
output = VdomHelper.update({vdom
|
330
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
343
331
|
|
344
332
|
t.isDeeplyStrict(vnode, {
|
345
333
|
attributes: {},
|
@@ -412,7 +400,7 @@ StartTest(t => {
|
|
412
400
|
{tag: 'li', cls: ['neo-list-item'], html: 'Tobias', id: 'neo-list-1__tobiu', tabIndex: -1}
|
413
401
|
];
|
414
402
|
|
415
|
-
output = VdomHelper.update({vdom
|
403
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
416
404
|
|
417
405
|
t.isDeeplyStrict(vnode, {
|
418
406
|
attributes: {},
|
@@ -430,8 +418,10 @@ StartTest(t => {
|
|
430
418
|
]
|
431
419
|
}, 'vnode got updated successfully');
|
432
420
|
|
421
|
+
t.is(deltas.length, 3, 'Count deltas equals 3');
|
422
|
+
|
433
423
|
t.isDeeplyStrict(deltas, [
|
434
|
-
{action: 'removeNode', id: 'neo-list-1__jsakalos'
|
424
|
+
{action: 'removeNode', id: 'neo-list-1__jsakalos'},
|
435
425
|
{action: 'removeNode', id: 'neo-list-1__mrsunshine'},
|
436
426
|
{action: 'removeNode', id: 'neo-list-1__rwaters'}
|
437
427
|
], 'deltas got created successfully');
|
@@ -447,7 +437,7 @@ StartTest(t => {
|
|
447
437
|
{tag: 'li', cls: ['neo-list-item'], html: 'Tobias', id: 'neo-list-1__tobiu', tabIndex: -1}
|
448
438
|
];
|
449
439
|
|
450
|
-
output = VdomHelper.update({vdom
|
440
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
451
441
|
|
452
442
|
t.isDeeplyStrict(vnode, {
|
453
443
|
attributes: {},
|
@@ -468,10 +458,12 @@ StartTest(t => {
|
|
468
458
|
]
|
469
459
|
}, 'vnode got updated successfully');
|
470
460
|
|
461
|
+
t.is(deltas.length, 3, 'Count deltas equals 3');
|
462
|
+
|
471
463
|
t.isDeeplyStrict(deltas, [
|
472
|
-
{action: 'insertNode',
|
473
|
-
{action: 'insertNode',
|
474
|
-
{action: 'insertNode',
|
464
|
+
{action: 'insertNode', index: 2, outerHTML: '<li class="neo-list-item" id="neo-list-1__jsakalos" tabIndex="-1">Jozef</li>', parentId: 'neo-list-1'},
|
465
|
+
{action: 'insertNode', index: 3, outerHTML: '<li class="neo-list-item" id="neo-list-1__mrsunshine" tabIndex="-1">Nils</li>', parentId: 'neo-list-1'},
|
466
|
+
{action: 'insertNode', index: 4, outerHTML: '<li class="neo-list-item" id="neo-list-1__rwaters" tabIndex="-1">Rich</li>', parentId: 'neo-list-1'}
|
475
467
|
], 'deltas got created successfully');
|
476
468
|
|
477
469
|
t.diag("remove items at index: 2, 4, switch nils & tobi");
|
@@ -483,7 +475,7 @@ StartTest(t => {
|
|
483
475
|
{tag: 'li', cls: ['neo-list-item'], html: 'Nils', id: 'neo-list-1__mrsunshine', tabIndex: -1}
|
484
476
|
];
|
485
477
|
|
486
|
-
output = VdomHelper.update({vdom
|
478
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
487
479
|
|
488
480
|
t.isDeeplyStrict(vnode, {
|
489
481
|
attributes: {},
|
@@ -502,9 +494,11 @@ StartTest(t => {
|
|
502
494
|
]
|
503
495
|
}, 'vnode got updated successfully');
|
504
496
|
|
497
|
+
t.is(deltas.length, 3, 'Count deltas equals 3');
|
498
|
+
|
505
499
|
t.isDeeplyStrict(deltas, [
|
506
|
-
{action: 'moveNode', id: 'neo-list-1__tobiu', index:
|
507
|
-
{action: 'removeNode', id: 'neo-list-1__jsakalos'
|
500
|
+
{action: 'moveNode', id: 'neo-list-1__tobiu', index: 3, parentId: 'neo-list-1'},
|
501
|
+
{action: 'removeNode', id: 'neo-list-1__jsakalos'},
|
508
502
|
{action: 'removeNode', id: 'neo-list-1__rwaters'}
|
509
503
|
], 'deltas got created successfully');
|
510
504
|
|
@@ -512,7 +506,7 @@ StartTest(t => {
|
|
512
506
|
|
513
507
|
vdom.cn.splice(0, 1);
|
514
508
|
|
515
|
-
output = VdomHelper.update({vdom
|
509
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
516
510
|
|
517
511
|
t.isDeeplyStrict(vnode.childNodes, [
|
518
512
|
{attributes: {tabIndex: '-1'}, childNodes: [], className: ['neo-list-item'], id: 'neo-list-1__camtnbikerrwc', innerHTML: 'Gerard', nodeName: 'li', style: {}, vtype: 'vnode'},
|
@@ -521,7 +515,7 @@ StartTest(t => {
|
|
521
515
|
], 'vnode got updated successfully');
|
522
516
|
|
523
517
|
t.isDeeplyStrict(deltas, [
|
524
|
-
{action: 'removeNode', id: 'neo-list-1__bhaustein'
|
518
|
+
{action: 'removeNode', id: 'neo-list-1__bhaustein'}
|
525
519
|
], 'deltas got created successfully');
|
526
520
|
|
527
521
|
t.diag("restore the initial list state");
|
@@ -535,7 +529,7 @@ StartTest(t => {
|
|
535
529
|
{tag: 'li', cls: ['neo-list-item'], html: 'Tobias', id: 'neo-list-1__tobiu', tabIndex: -1}
|
536
530
|
];
|
537
531
|
|
538
|
-
output = VdomHelper.update({vdom
|
532
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
539
533
|
|
540
534
|
t.isDeeplyStrict(vnode.childNodes, [
|
541
535
|
{attributes: {tabIndex: '-1'}, childNodes: [], className: ['neo-list-item'], id: 'neo-list-1__bhaustein', innerHTML: 'Bastian', nodeName: 'li', style: {}, vtype: 'vnode'},
|
@@ -603,7 +597,7 @@ StartTest(t => {
|
|
603
597
|
{id: '0', html: 'g'}
|
604
598
|
];
|
605
599
|
|
606
|
-
output = VdomHelper.update({vdom
|
600
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
607
601
|
|
608
602
|
t.isDeeplyStrict(vnode, {
|
609
603
|
attributes: {},
|
@@ -628,6 +622,251 @@ StartTest(t => {
|
|
628
622
|
]
|
629
623
|
}, 'vnode got updated successfully');
|
630
624
|
|
631
|
-
console.log(deltas);
|
625
|
+
//console.log(deltas);
|
626
|
+
});
|
627
|
+
|
628
|
+
t.it('Replacing a parent node with one child', t => {
|
629
|
+
t.diag("Creating the tree");
|
630
|
+
|
631
|
+
vdom =
|
632
|
+
{id: 'level-1', cn: [
|
633
|
+
{id: 'level-2', cn: [
|
634
|
+
{id: 'level-3'}
|
635
|
+
]}
|
636
|
+
]};
|
637
|
+
|
638
|
+
vnode = VdomHelper.create(vdom);
|
639
|
+
|
640
|
+
t.isDeeplyStrict(vnode, {
|
641
|
+
attributes: {},
|
642
|
+
className : [],
|
643
|
+
id : 'level-1',
|
644
|
+
innerHTML : undefined,
|
645
|
+
nodeName : 'div',
|
646
|
+
outerHTML : t.any(String),
|
647
|
+
style : {},
|
648
|
+
vtype : 'vnode',
|
649
|
+
|
650
|
+
childNodes: [{
|
651
|
+
id : 'level-2',
|
652
|
+
attributes: {},
|
653
|
+
className : [],
|
654
|
+
innerHTML : undefined,
|
655
|
+
nodeName : 'div',
|
656
|
+
style : {},
|
657
|
+
vtype : 'vnode',
|
658
|
+
|
659
|
+
childNodes: [{
|
660
|
+
id : 'level-3',
|
661
|
+
attributes: {},
|
662
|
+
childNodes: [],
|
663
|
+
className : [],
|
664
|
+
innerHTML : undefined,
|
665
|
+
nodeName : 'div',
|
666
|
+
style : {},
|
667
|
+
vtype : 'vnode'
|
668
|
+
}]
|
669
|
+
}]
|
670
|
+
}, 'vnode got created successfully');
|
671
|
+
|
672
|
+
// replace level 2 with level 3
|
673
|
+
vdom.cn = vdom.cn[0].cn;
|
674
|
+
|
675
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
676
|
+
|
677
|
+
t.isDeeplyStrict(vnode, {
|
678
|
+
attributes: {},
|
679
|
+
className : [],
|
680
|
+
id : 'level-1',
|
681
|
+
innerHTML : undefined,
|
682
|
+
nodeName : 'div',
|
683
|
+
style : {},
|
684
|
+
vtype : 'vnode',
|
685
|
+
|
686
|
+
childNodes:[{
|
687
|
+
id : 'level-3',
|
688
|
+
attributes: {},
|
689
|
+
childNodes: [],
|
690
|
+
className : [],
|
691
|
+
innerHTML : undefined,
|
692
|
+
nodeName : 'div',
|
693
|
+
style : {},
|
694
|
+
vtype : 'vnode'
|
695
|
+
}]
|
696
|
+
}, 'vnode got updated successfully');
|
697
|
+
|
698
|
+
t.is(deltas.length, 2, 'Count deltas equals 2');
|
699
|
+
|
700
|
+
t.isDeeplyStrict(deltas, [
|
701
|
+
{action: 'moveNode', id: 'level-3', index: 1, parentId: 'level-1'},
|
702
|
+
{action: 'removeNode', id: 'level-2'}
|
703
|
+
], 'deltas got created successfully');
|
704
|
+
});
|
705
|
+
|
706
|
+
t.it('Replacing a parent node with multiple children', t => {
|
707
|
+
t.diag("Creating the tree");
|
708
|
+
|
709
|
+
vdom =
|
710
|
+
{id: 'level-1', cn: [
|
711
|
+
{id: 'level-2', cn: [
|
712
|
+
{id: 'level-3-1'},
|
713
|
+
{id: 'level-3-2'}
|
714
|
+
]}
|
715
|
+
]};
|
716
|
+
|
717
|
+
vnode = VdomHelper.create(vdom);
|
718
|
+
|
719
|
+
t.isDeeplyStrict(vnode, {
|
720
|
+
attributes: {},
|
721
|
+
className : [],
|
722
|
+
id : 'level-1',
|
723
|
+
innerHTML : undefined,
|
724
|
+
nodeName : 'div',
|
725
|
+
outerHTML : t.any(String),
|
726
|
+
style : {},
|
727
|
+
vtype : 'vnode',
|
728
|
+
|
729
|
+
childNodes: [{
|
730
|
+
id : 'level-2',
|
731
|
+
attributes: {},
|
732
|
+
className : [],
|
733
|
+
innerHTML : undefined,
|
734
|
+
nodeName : 'div',
|
735
|
+
style : {},
|
736
|
+
vtype : 'vnode',
|
737
|
+
|
738
|
+
childNodes: [{
|
739
|
+
id : 'level-3-1',
|
740
|
+
attributes: {},
|
741
|
+
childNodes: [],
|
742
|
+
className : [],
|
743
|
+
innerHTML : undefined,
|
744
|
+
nodeName : 'div',
|
745
|
+
style : {},
|
746
|
+
vtype : 'vnode'
|
747
|
+
}, {
|
748
|
+
id : 'level-3-2',
|
749
|
+
attributes: {},
|
750
|
+
childNodes: [],
|
751
|
+
className : [],
|
752
|
+
innerHTML : undefined,
|
753
|
+
nodeName : 'div',
|
754
|
+
style : {},
|
755
|
+
vtype : 'vnode'
|
756
|
+
}]
|
757
|
+
}]
|
758
|
+
}, 'vnode got created successfully');
|
759
|
+
|
760
|
+
// replace level 2 with level 3
|
761
|
+
vdom.cn = vdom.cn[0].cn;
|
762
|
+
|
763
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
764
|
+
|
765
|
+
t.isDeeplyStrict(vnode, {
|
766
|
+
attributes: {},
|
767
|
+
className : [],
|
768
|
+
id : 'level-1',
|
769
|
+
innerHTML : undefined,
|
770
|
+
nodeName : 'div',
|
771
|
+
style : {},
|
772
|
+
vtype : 'vnode',
|
773
|
+
|
774
|
+
childNodes:[{
|
775
|
+
id : 'level-3-1',
|
776
|
+
attributes: {},
|
777
|
+
childNodes: [],
|
778
|
+
className : [],
|
779
|
+
innerHTML : undefined,
|
780
|
+
nodeName : 'div',
|
781
|
+
style : {},
|
782
|
+
vtype : 'vnode'
|
783
|
+
}, {
|
784
|
+
id : 'level-3-2',
|
785
|
+
attributes: {},
|
786
|
+
childNodes: [],
|
787
|
+
className : [],
|
788
|
+
innerHTML : undefined,
|
789
|
+
nodeName : 'div',
|
790
|
+
style : {},
|
791
|
+
vtype : 'vnode'
|
792
|
+
}]
|
793
|
+
}, 'vnode got updated successfully');
|
794
|
+
|
795
|
+
t.isDeeplyStrict(deltas, [
|
796
|
+
{action: 'moveNode', id: 'level-3-1', index: 1, parentId: 'level-1'},
|
797
|
+
{action: 'moveNode', id: 'level-3-2', index: 2, parentId: 'level-1'},
|
798
|
+
{action: 'removeNode', id: 'level-2'}
|
799
|
+
], 'deltas got created successfully');
|
800
|
+
});
|
801
|
+
|
802
|
+
t.it('Replacing a parent node with multiple children & adding a new node', t => {
|
803
|
+
t.diag("Creating the tree");
|
804
|
+
|
805
|
+
vdom =
|
806
|
+
{id: 'level-1', cn: [
|
807
|
+
{id: 'level-2', cn: [
|
808
|
+
{id: 'level-3-1'},
|
809
|
+
{id: 'level-3-2'}
|
810
|
+
]}
|
811
|
+
]};
|
812
|
+
|
813
|
+
vnode = VdomHelper.create(vdom);
|
814
|
+
|
815
|
+
vdom =
|
816
|
+
{id: 'level-1', cn: [
|
817
|
+
{id: 'level-3-1'},
|
818
|
+
{id: 'new-node'},
|
819
|
+
{id: 'level-3-2'}
|
820
|
+
]};
|
821
|
+
|
822
|
+
output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
|
823
|
+
|
824
|
+
t.isDeeplyStrict(vnode, {
|
825
|
+
attributes: {},
|
826
|
+
className : [],
|
827
|
+
id : 'level-1',
|
828
|
+
innerHTML : undefined,
|
829
|
+
nodeName : 'div',
|
830
|
+
style : {},
|
831
|
+
vtype : 'vnode',
|
832
|
+
|
833
|
+
childNodes:[{
|
834
|
+
id : 'level-3-1',
|
835
|
+
attributes: {},
|
836
|
+
childNodes: [],
|
837
|
+
className : [],
|
838
|
+
innerHTML : undefined,
|
839
|
+
nodeName : 'div',
|
840
|
+
style : {},
|
841
|
+
vtype : 'vnode'
|
842
|
+
}, {
|
843
|
+
id : 'new-node',
|
844
|
+
attributes: {},
|
845
|
+
childNodes: [],
|
846
|
+
className : [],
|
847
|
+
innerHTML : undefined,
|
848
|
+
nodeName : 'div',
|
849
|
+
style : {},
|
850
|
+
vtype : 'vnode'
|
851
|
+
}, {
|
852
|
+
id : 'level-3-2',
|
853
|
+
attributes: {},
|
854
|
+
childNodes: [],
|
855
|
+
className : [],
|
856
|
+
innerHTML : undefined,
|
857
|
+
nodeName : 'div',
|
858
|
+
style : {},
|
859
|
+
vtype : 'vnode'
|
860
|
+
}]
|
861
|
+
}, 'vnode got updated successfully');
|
862
|
+
|
863
|
+
t.is(deltas.length, 4, 'Count deltas equals 4');
|
864
|
+
|
865
|
+
t.isDeeplyStrict(deltas, [
|
866
|
+
{action: 'moveNode', id: 'level-3-1', index: 1, parentId: 'level-1'},
|
867
|
+
{action: 'insertNode', index: 2, parentId: 'level-1', outerHTML: t.any(String)},
|
868
|
+
{action: 'moveNode', id: 'level-3-2', index: 3, parentId: 'level-1'},
|
869
|
+
{action: 'removeNode', id: 'level-2'}
|
870
|
+
], 'deltas got created successfully');
|
632
871
|
});
|
633
872
|
});
|