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.
Files changed (94) hide show
  1. package/README.md +28 -214
  2. package/apps/ServiceWorker.mjs +2 -2
  3. package/apps/colors/view/ViewportController.mjs +7 -3
  4. package/apps/portal/data/blog.json +13 -0
  5. package/apps/portal/view/HeaderToolbar.mjs +2 -2
  6. package/apps/portal/view/Viewport.mjs +4 -2
  7. package/apps/portal/view/ViewportController.mjs +88 -7
  8. package/apps/portal/view/blog/Container.mjs +8 -8
  9. package/apps/portal/view/blog/List.mjs +6 -6
  10. package/apps/portal/view/home/FooterContainer.mjs +123 -0
  11. package/apps/portal/view/home/MainContainer.mjs +3 -2
  12. package/apps/portal/view/home/parts/AfterMath.mjs +17 -24
  13. package/apps/portal/view/home/parts/Colors.mjs +2 -2
  14. package/apps/portal/view/home/parts/How.mjs +3 -3
  15. package/apps/portal/view/home/parts/MainNeo.mjs +6 -7
  16. package/apps/portal/view/home/parts/References.mjs +88 -0
  17. package/apps/portal/view/learn/MainContainer.mjs +3 -2
  18. package/apps/portal/view/learn/MainContainerController.mjs +11 -0
  19. package/apps/portal/view/learn/PageContainer.mjs +5 -3
  20. package/apps/portal/view/services/Component.mjs +73 -0
  21. package/apps/website/data/blog.json +13 -0
  22. package/examples/ServiceWorker.mjs +2 -2
  23. package/examples/component/carousel/MainContainer.mjs +42 -33
  24. package/examples/layout/cube/MainContainer.mjs +217 -0
  25. package/examples/layout/cube/app.mjs +6 -0
  26. package/examples/layout/cube/index.html +11 -0
  27. package/examples/layout/cube/neo-config.json +6 -0
  28. package/examples/model/twoWay/MainContainer.mjs +76 -0
  29. package/examples/model/twoWay/app.mjs +6 -0
  30. package/examples/model/twoWay/index.html +11 -0
  31. package/examples/model/twoWay/neo-config.json +6 -0
  32. package/package.json +7 -7
  33. package/resources/data/deck/learnneo/pages/Earthquakes-01-goals.md +32 -0
  34. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-01-generate-a-workspace.md +47 -0
  35. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-02-generate-the-starter-app.md +150 -0
  36. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-03-debugging.md +136 -0
  37. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-04-fetch-data.md +146 -0
  38. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-05-refactor-the-table.md +146 -0
  39. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-06-use-a-view-model.md +301 -0
  40. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-07-use-the-google-maps-addon.md +175 -0
  41. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-08-events.md +38 -0
  42. package/resources/data/deck/learnneo/pages/Earthquakes.md +8 -8
  43. package/resources/data/deck/learnneo/pages/Glossary.md +0 -0
  44. package/resources/data/deck/learnneo/pages/GuideEvents.md +80 -1
  45. package/resources/data/deck/learnneo/tree.json +2 -1
  46. package/resources/images/apps/portal/neo-references.png +0 -0
  47. package/resources/scss/src/apps/portal/Viewport.scss +18 -0
  48. package/resources/scss/src/apps/portal/blog/Container.scss +7 -7
  49. package/resources/scss/src/apps/portal/blog/List.scss +20 -16
  50. package/resources/scss/src/apps/portal/home/FooterContainer.scss +31 -0
  51. package/resources/scss/src/apps/portal/home/parts/AfterMath.scss +5 -0
  52. package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +4 -5
  53. package/resources/scss/src/apps/portal/home/parts/References.scss +46 -0
  54. package/resources/scss/src/apps/portal/learn/ContentTreeList.scss +20 -0
  55. package/resources/scss/src/apps/portal/learn/ContentView.scss +4 -0
  56. package/resources/scss/src/apps/portal/learn/MainContainer.scss +1 -1
  57. package/resources/scss/src/apps/portal/learn/PageContainer.scss +22 -16
  58. package/resources/scss/src/apps/portal/services/Component.scss +20 -0
  59. package/resources/scss/src/component/Carousel.scss +21 -0
  60. package/resources/scss/src/examples/layout/cube/MainContainer.scss +7 -0
  61. package/resources/scss/src/layout/Cube.scss +80 -0
  62. package/resources/scss/src/tab/Container.scss +10 -10
  63. package/resources/scss/theme-neo-light/apps/portal/blog/Container.scss +3 -0
  64. package/resources/scss/theme-neo-light/form/field/Search.scss +1 -1
  65. package/resources/scss/theme-neo-light/tooltip/Base.scss +1 -1
  66. package/src/DefaultConfig.mjs +2 -2
  67. package/src/Main.mjs +15 -1
  68. package/src/Neo.mjs +14 -3
  69. package/src/calendar/view/MainContainer.mjs +8 -7
  70. package/src/component/Base.mjs +28 -8
  71. package/src/component/DateSelector.mjs +2 -2
  72. package/src/container/Base.mjs +3 -1
  73. package/src/dialog/Base.mjs +1 -2
  74. package/src/form/field/Time.mjs +18 -16
  75. package/src/layout/Base.mjs +43 -6
  76. package/src/layout/Card.mjs +21 -59
  77. package/src/layout/Cube.mjs +432 -0
  78. package/src/layout/Fit.mjs +9 -38
  79. package/src/layout/Flexbox.mjs +16 -17
  80. package/src/layout/Form.mjs +13 -70
  81. package/src/layout/Grid.mjs +6 -18
  82. package/src/list/Base.mjs +3 -3
  83. package/src/main/mixin/DeltaUpdates.mjs +16 -3
  84. package/src/model/Component.mjs +25 -6
  85. package/src/util/Array.mjs +36 -0
  86. package/src/vdom/Helper.mjs +338 -442
  87. package/src/vdom/VNode.mjs +12 -1
  88. package/test/siesta/siesta.js +16 -1
  89. package/test/siesta/tests/VdomCalendar.mjs +2193 -37
  90. package/test/siesta/tests/VdomHelper.mjs +287 -48
  91. package/test/siesta/tests/vdom/Advanced.mjs +368 -0
  92. package/test/siesta/tests/vdom/layout/Cube.mjs +189 -0
  93. package/test/siesta/tests/vdom/table/Container.mjs +133 -0
  94. 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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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 : 'neo-vnode-1',
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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 : 'neo-vnode-1',
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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 : 'neo-vnode-1',
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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', id: 'neo-vnode-2', index: 0, outerHTML: '<div id="neo-vnode-2"></div>', parentId: 'neo-vnode-1'},
283
- {action: 'insertNode', id: 'neo-button-1', index: 1, outerHTML: '<div id="neo-button-1"></div>', parentId: 'neo-vnode-1'},
284
- {action: 'insertNode', id: 'neo-vnode-3', index: 2, outerHTML: '<div id="neo-vnode-3"></div>', parentId: 'neo-vnode-1'}
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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', parentId: 'neo-list-1'},
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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', id: 'neo-list-1__jsakalos', index: 2, outerHTML: '<li class="neo-list-item" id="neo-list-1__jsakalos" tabIndex="-1">Jozef</li>', parentId: 'neo-list-1'},
473
- {action: 'insertNode', id: 'neo-list-1__mrsunshine', index: 3, outerHTML: '<li class="neo-list-item" id="neo-list-1__mrsunshine" tabIndex="-1">Nils</li>', parentId: 'neo-list-1'},
474
- {action: 'insertNode', id: 'neo-list-1__rwaters', index: 4, outerHTML: '<li class="neo-list-item" id="neo-list-1__rwaters" tabIndex="-1">Rich</li>', parentId: 'neo-list-1'}
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: 2, parentId: 'neo-list-1'},
507
- {action: 'removeNode', id: 'neo-list-1__jsakalos', parentId: 'neo-list-1'},
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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', parentId: 'neo-list-1'}
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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: vdom, vnode: vnode}); deltas = output.deltas; vnode = output.vnode;
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
  });