neo.mjs 10.0.0-alpha.3 → 10.0.0-alpha.5

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 (109) hide show
  1. package/.github/CODING_GUIDELINES.md +1 -1
  2. package/README.md +52 -11
  3. package/ServiceWorker.mjs +2 -2
  4. package/apps/portal/index.html +1 -1
  5. package/apps/portal/view/blog/List.mjs +1 -1
  6. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  7. package/apps/portal/view/learn/ContentComponent.mjs +2 -1
  8. package/apps/portal/view/learn/MainContainerStateProvider.mjs +3 -6
  9. package/apps/realworld/view/HomeComponent.mjs +1 -1
  10. package/apps/realworld/view/user/ProfileComponent.mjs +1 -1
  11. package/apps/sharedcovid/view/MainContainerController.mjs +1 -1
  12. package/apps/shareddialog/view/MainContainerController.mjs +2 -2
  13. package/buildScripts/buildThemes.mjs +1 -1
  14. package/examples/grid/animatedRowSorting/Viewport.mjs +4 -4
  15. package/examples/grid/bigData/ControlsContainer.mjs +3 -3
  16. package/examples/grid/bigData/GridContainer.mjs +8 -8
  17. package/examples/grid/cellEditing/MainContainer.mjs +5 -5
  18. package/examples/grid/container/MainContainer.mjs +4 -4
  19. package/examples/grid/nestedRecordFields/Viewport.mjs +5 -5
  20. package/learn/README.md +83 -0
  21. package/learn/guides/ApplicationBootstrap.md +352 -0
  22. package/learn/guides/DeclarativeComponentTreesVsImperativeVdom.md +500 -0
  23. package/learn/guides/WorkingWithVDom.md +748 -0
  24. package/learn/tree.json +53 -0
  25. package/package.json +2 -2
  26. package/resources/scss/src/grid/{View.scss → Body.scss} +2 -2
  27. package/resources/scss/src/grid/VerticalScrollbar.scss +1 -1
  28. package/resources/scss/src/grid/plugin/AnimateRows.scss +1 -1
  29. package/resources/scss/src/grid/plugin/CellEditing.scss +1 -1
  30. package/resources/scss/theme-dark/grid/{View.scss → Body.scss} +1 -1
  31. package/resources/scss/theme-light/grid/{View.scss → Body.scss} +1 -1
  32. package/resources/scss/theme-neo-light/grid/{View.scss → Body.scss} +1 -1
  33. package/src/DefaultConfig.mjs +27 -14
  34. package/src/Main.mjs +1 -1
  35. package/src/Neo.mjs +16 -0
  36. package/src/button/Base.mjs +2 -2
  37. package/src/calendar/view/MainContainerStateProvider.mjs +1 -1
  38. package/src/grid/{View.mjs → Body.mjs} +17 -17
  39. package/src/grid/Container.mjs +58 -58
  40. package/src/grid/ScrollManager.mjs +56 -56
  41. package/src/grid/VerticalScrollbar.mjs +2 -2
  42. package/src/grid/_export.mjs +2 -2
  43. package/src/grid/column/AnimatedChange.mjs +5 -5
  44. package/src/grid/column/Base.mjs +1 -1
  45. package/src/grid/column/Component.mjs +6 -6
  46. package/src/grid/header/Button.mjs +1 -1
  47. package/src/grid/header/Toolbar.mjs +9 -9
  48. package/src/grid/plugin/AnimateRows.mjs +1 -2
  49. package/src/layout/Cube.mjs +2 -2
  50. package/src/main/DeltaUpdates.mjs +11 -10
  51. package/src/main/addon/Navigator.mjs +1 -1
  52. package/src/main/addon/WindowPosition.mjs +1 -1
  53. package/src/main/render/StringBasedRenderer.mjs +1 -1
  54. package/src/tab/header/Toolbar.mjs +1 -1
  55. package/src/table/header/Button.mjs +1 -1
  56. package/src/toolbar/Base.mjs +1 -1
  57. package/src/util/Style.mjs +2 -6
  58. package/src/util/VDom.mjs +1 -1
  59. package/src/util/VNode.mjs +1 -1
  60. package/src/vdom/Helper.mjs +96 -49
  61. package/src/vdom/VNode.mjs +38 -2
  62. package/src/worker/App.mjs +8 -19
  63. package/src/worker/Base.mjs +87 -5
  64. package/src/worker/Manager.mjs +90 -36
  65. package/resources/data/deck/learnneo/tree.json +0 -50
  66. package/resources/data/deck/whyneo.md +0 -80
  67. /package/{resources/data/deck/learnneo/pages → learn}/Glossary.md +0 -0
  68. /package/{resources/data/deck/learnneo/pages → learn}/UsingTheseTopics.md +0 -0
  69. /package/{resources/data/deck/learnneo/pages → learn}/benefits/ConfigSystem.md +0 -0
  70. /package/{resources/data/deck/learnneo/pages → learn}/benefits/Effort.md +0 -0
  71. /package/{resources/data/deck/learnneo/pages → learn}/benefits/Features.md +0 -0
  72. /package/{resources/data/deck/learnneo/pages → learn}/benefits/FormsEngine.md +0 -0
  73. /package/{resources/data/deck/learnneo/pages → learn}/benefits/FourEnvironments.md +0 -0
  74. /package/{resources/data/deck/learnneo/pages → learn}/benefits/Introduction.md +0 -0
  75. /package/{resources/data/deck/learnneo/pages → learn}/benefits/MultiWindow.md +0 -0
  76. /package/{resources/data/deck/learnneo/pages → learn}/benefits/OffTheMainThread.md +0 -0
  77. /package/{resources/data/deck/learnneo/pages → learn}/benefits/Quick.md +0 -0
  78. /package/{resources/data/deck/learnneo/pages → learn}/benefits/Speed.md +0 -0
  79. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/ComponentModels.md +0 -0
  80. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/Config.md +0 -0
  81. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/DescribingTheUI.md +0 -0
  82. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/Events.md +0 -0
  83. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/Extending.md +0 -0
  84. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/References.md +0 -0
  85. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/Setup.md +0 -0
  86. /package/{resources/data/deck/learnneo/pages → learn}/gettingstarted/Workspaces.md +0 -0
  87. /package/{resources/data/deck/learnneo/pages → learn}/guides/ComponentsAndContainers.md +0 -0
  88. /package/{resources/data/deck/learnneo/pages → learn}/guides/CustomComponents.md +0 -0
  89. /package/{resources/data/deck/learnneo/pages → learn}/guides/Forms.md +0 -0
  90. /package/{resources/data/deck/learnneo/pages → learn}/guides/InstanceLifecycle.md +0 -0
  91. /package/{resources/data/deck/learnneo/pages → learn}/guides/Layouts.md +0 -0
  92. /package/{resources/data/deck/learnneo/pages → learn}/guides/MainThreadAddonExample.md +0 -0
  93. /package/{resources/data/deck/learnneo/pages → learn}/guides/MainThreadAddonIntro.md +0 -0
  94. /package/{resources/data/deck/learnneo/pages → learn}/guides/Mixins.md +0 -0
  95. /package/{resources/data/deck/learnneo/pages → learn}/guides/MultiWindow.md +0 -0
  96. /package/{resources/data/deck/learnneo/pages → learn}/guides/PortalApp.md +0 -0
  97. /package/{resources/data/deck/learnneo/pages → learn}/guides/StateProviders.md +0 -0
  98. /package/{resources/data/deck/learnneo/pages → learn}/guides/Tables.md +0 -0
  99. /package/{resources/data/deck/learnneo/pages → learn}/guides/events/CustomEvents.md +0 -0
  100. /package/{resources/data/deck/learnneo/pages → learn}/guides/events/DomEvents.md +0 -0
  101. /package/{resources/data/deck/learnneo/pages → learn}/javascript/ClassFeatures.md +0 -0
  102. /package/{resources/data/deck/learnneo/pages → learn}/javascript/Classes.md +0 -0
  103. /package/{resources/data/deck/learnneo/pages → learn}/javascript/NewNode.md +0 -0
  104. /package/{resources/data/deck/learnneo/pages → learn}/javascript/Overrides.md +0 -0
  105. /package/{resources/data/deck/learnneo/pages → learn}/javascript/Super.md +0 -0
  106. /package/{resources/data/deck/learnneo/pages → learn}/tutorials/Earthquakes.md +0 -0
  107. /package/{resources/data/deck/learnneo/pages → learn}/tutorials/RSP.md +0 -0
  108. /package/{resources/data/deck/learnneo/pages → learn}/tutorials/TodoList.md +0 -0
  109. /package/resources/data/{deck/learnneo/data/theBeatles.json → theBeatles.json} +0 -0
@@ -24,15 +24,15 @@ class ScrollManager extends Base {
24
24
  }
25
25
 
26
26
  /**
27
- * @member {Neo.grid.Container|null} gridContainer=null
27
+ * @member {Neo.grid.Body|null} gridBody=null
28
28
  * @protected
29
29
  */
30
- gridContainer = null
30
+ gridBody = null
31
31
  /**
32
- * @member {Neo.grid.View|null} gridView=null
32
+ * @member {Neo.grid.Container|null} gridContainer=null
33
33
  * @protected
34
34
  */
35
- gridView = null
35
+ gridContainer = null
36
36
  /**
37
37
  * Storing touchmove position for mobile envs
38
38
  * @member {Number} lastTouchX=0
@@ -52,7 +52,7 @@ class ScrollManager extends Base {
52
52
  scrollTimeoutId = null
53
53
  /**
54
54
  * Flag for identifying the ownership of a touchmove operation
55
- * @member {'container'|'view'|null} touchMoveOwner=null
55
+ * @member {'body'|'container'|null} touchMoveOwner=null
56
56
  * @protected
57
57
  */
58
58
  touchMoveOwner = null
@@ -65,19 +65,59 @@ class ScrollManager extends Base {
65
65
 
66
66
  let me = this;
67
67
 
68
- me.gridContainer.addDomListeners({
69
- scroll: me.onContainerScroll,
70
- scope : me
71
- });
72
-
73
- me.gridView.addDomListeners({
74
- scroll : me.onViewScroll,
68
+ me.gridBody.addDomListeners({
69
+ scroll : me.onBodyScroll,
75
70
  touchcancel: me.onTouchCancel,
76
71
  touchend : me.onTouchEnd,
77
72
  scope : me
73
+ });
74
+
75
+ me.gridContainer.addDomListeners({
76
+ scroll: me.onContainerScroll,
77
+ scope : me
78
78
  })
79
79
  }
80
80
 
81
+ /**
82
+ * Only triggers for vertical scrolling
83
+ * @param {Object} data
84
+ * @protected
85
+ */
86
+ onBodyScroll({scrollTop, touches}) {
87
+ let me = this,
88
+ body = me.gridBody,
89
+ deltaX, lastTouchX;
90
+
91
+ me.scrollTop = scrollTop;
92
+
93
+ me.scrollTimeoutId && clearTimeout(me.scrollTimeoutId);
94
+
95
+ me.scrollTimeoutId = setTimeout(() => {
96
+ body.isScrolling = false
97
+ }, 100);
98
+
99
+ body.set({isScrolling: true, scrollTop});
100
+
101
+ if (touches) {
102
+ if (me.touchMoveOwner !== 'container') {
103
+ me.touchMoveOwner = 'body'
104
+ }
105
+
106
+ if (me.touchMoveOwner === 'body') {
107
+ lastTouchX = touches.lastTouch.clientX - touches.firstTouch.clientX;
108
+ deltaX = me.lastTouchX - lastTouchX;
109
+
110
+ deltaX !== 0 && Neo.main.DomAccess.scrollTo({
111
+ direction: 'left',
112
+ id : me.gridContainer.id,
113
+ value : me.scrollLeft + deltaX
114
+ })
115
+
116
+ me.lastTouchX = lastTouchX
117
+ }
118
+ }
119
+ }
120
+
81
121
  /**
82
122
  * @param {Object} data
83
123
  * @param {Number} data.scrollLeft
@@ -86,18 +126,18 @@ class ScrollManager extends Base {
86
126
  */
87
127
  onContainerScroll({scrollLeft, target, touches}) {
88
128
  let me = this,
89
- view = me.gridView,
129
+ body = me.gridBody,
90
130
  deltaY, lastTouchY;
91
131
 
92
132
  // We must ignore events for grid-scrollbar
93
133
  if (target.id.includes('grid-container')) {
94
134
  me .scrollLeft = scrollLeft;
95
- view.scrollLeft = scrollLeft;
135
+ body.scrollLeft = scrollLeft;
96
136
 
97
137
  me.gridContainer.headerToolbar.scrollLeft = scrollLeft;
98
138
 
99
139
  if (touches && !me.gridContainer.headerToolbar.cls.includes('neo-is-dragging')) {
100
- if (me.touchMoveOwner !== 'view') {
140
+ if (me.touchMoveOwner !== 'body') {
101
141
  me.touchMoveOwner = 'container'
102
142
  }
103
143
 
@@ -107,7 +147,7 @@ class ScrollManager extends Base {
107
147
 
108
148
  deltaY !== 0 && Neo.main.DomAccess.scrollTo({
109
149
  direction: 'top',
110
- id : view.vdom.id,
150
+ id : body.vdom.id,
111
151
  value : me.scrollTop + deltaY
112
152
  })
113
153
 
@@ -134,46 +174,6 @@ class ScrollManager extends Base {
134
174
  me.lastTouchX = 0;
135
175
  me.lastTouchY = 0
136
176
  }
137
-
138
- /**
139
- * Only triggers for vertical scrolling
140
- * @param {Object} data
141
- * @protected
142
- */
143
- onViewScroll({scrollTop, touches}) {
144
- let me = this,
145
- view = me.gridView,
146
- deltaX, lastTouchX;
147
-
148
- me.scrollTop = scrollTop;
149
-
150
- me.scrollTimeoutId && clearTimeout(me.scrollTimeoutId);
151
-
152
- me.scrollTimeoutId = setTimeout(() => {
153
- view.isScrolling = false
154
- }, 100);
155
-
156
- view.set({isScrolling: true, scrollTop});
157
-
158
- if (touches) {
159
- if (me.touchMoveOwner !== 'container') {
160
- me.touchMoveOwner = 'view'
161
- }
162
-
163
- if (me.touchMoveOwner === 'view') {
164
- lastTouchX = touches.lastTouch.clientX - touches.firstTouch.clientX;
165
- deltaX = me.lastTouchX - lastTouchX;
166
-
167
- deltaX !== 0 && Neo.main.DomAccess.scrollTo({
168
- direction: 'left',
169
- id : me.gridContainer.id,
170
- value : me.scrollLeft + deltaX
171
- })
172
-
173
- me.lastTouchX = lastTouchX
174
- }
175
- }
176
- }
177
177
  }
178
178
 
179
179
  export default Neo.setupClass(ScrollManager);
@@ -53,9 +53,9 @@ class VerticalScrollbar extends Component {
53
53
 
54
54
  if (mounted) {
55
55
  ScrollSync.register({
56
- fromId: me.parent.view.vdom.id,
56
+ fromId: me.parent.body.vdom.id,
57
57
  toId : me.id,
58
- twoWay: !Neo.config.hasTouchEvents, // Syncing the scroller back to the view affects mobile scrolling
58
+ twoWay: !Neo.config.hasTouchEvents, // Syncing the scroller back to the body affects mobile scrolling
59
59
  ...params
60
60
  })
61
61
  } else {
@@ -1,5 +1,5 @@
1
1
  import * as header from './header/_export.mjs';
2
+ import Body from './Body.mjs';
2
3
  import Container from './Container.mjs';
3
- import View from './View.mjs';
4
4
 
5
- export {header, Container, View};
5
+ export {Body, header, Container};
@@ -55,7 +55,7 @@ class AnimatedChange extends Column {
55
55
  */
56
56
  async onRecordChange({fields, record}) {
57
57
  let me = this,
58
- {view} = me.parent,
58
+ {body} = me.parent,
59
59
  cellId, field, node;
60
60
 
61
61
  for (field of fields) {
@@ -63,16 +63,16 @@ class AnimatedChange extends Column {
63
63
  // Wait for the next animation frame
64
64
  await me.timeout(20);
65
65
 
66
- cellId = view.getCellId(me.parent.store.indexOf(record), me.dataField);
67
- node = VdomUtil.find(view.vdom, cellId)?.vdom;
66
+ cellId = body.getCellId(me.parent.store.indexOf(record), me.dataField);
67
+ node = VdomUtil.find(body.vdom, cellId)?.vdom;
68
68
 
69
69
  if (node) {
70
70
  NeoArray.add(node.cls, me.getAnimationCls(record));
71
71
 
72
- // This will trigger a 2nd view update, after grid.View: onStoreRecordChange()
72
+ // This will trigger a 2nd body update, after grid.Body: onStoreRecordChange()
73
73
  // It is crucial to restart the keyframe based animation
74
74
  // => The previous update call will remove the last animationCls
75
- view.update()
75
+ body.update()
76
76
  }
77
77
 
78
78
  break
@@ -26,7 +26,7 @@ class Column extends Base {
26
26
  renderer_: 'cellRenderer',
27
27
  /**
28
28
  * Scope to execute the column renderer.
29
- * Defaults to the grid.View.
29
+ * Defaults to the grid.Body.
30
30
  * You can pass the strings 'this' or 'me'
31
31
  * @member {Neo.core.Base|String|null} rendererScope=null
32
32
  */
@@ -76,7 +76,7 @@ class Component extends Column {
76
76
  */
77
77
  cellRenderer(data) {
78
78
  let {gridContainer, record, rowIndex} = data,
79
- {appName, view, windowId} = gridContainer,
79
+ {appName, body, windowId} = gridContainer,
80
80
  me = this,
81
81
  {recordProperty} = me,
82
82
  id = me.getComponentId(rowIndex),
@@ -104,7 +104,7 @@ class Component extends Column {
104
104
  ...componentConfig,
105
105
  appName,
106
106
  id,
107
- parentComponent : view,
107
+ parentComponent : body,
108
108
  [recordProperty]: record,
109
109
  windowId
110
110
  });
@@ -118,10 +118,10 @@ class Component extends Column {
118
118
  }
119
119
 
120
120
  if (me.useBindings) {
121
- view.getStateProvider()?.parseConfig(component)
121
+ body.getStateProvider()?.parseConfig(component)
122
122
  }
123
123
 
124
- view.updateDepth = -1;
124
+ body.updateDepth = -1;
125
125
 
126
126
  return component.createVdomReference()
127
127
  }
@@ -132,9 +132,9 @@ class Component extends Column {
132
132
  */
133
133
  getComponentId(rowIndex) {
134
134
  let me = this,
135
- {view} = me.parent;
135
+ {body} = me.parent;
136
136
 
137
- return `${me.id}-component-${rowIndex % (view.availableRows + 2 * view.bufferRowRange)}`
137
+ return `${me.id}-component-${rowIndex % (body.availableRows + 2 * body.bufferRowRange)}`
138
138
  }
139
139
  }
140
140
 
@@ -96,7 +96,7 @@ class Button extends BaseButton {
96
96
  {cls} = me,
97
97
  container = me.up('grid-container');
98
98
 
99
- switch(value) {
99
+ switch (value) {
100
100
  case null:
101
101
  NeoArray.add(cls, 'neo-sort-hidden');
102
102
  break
@@ -89,7 +89,7 @@ class Toolbar extends BaseToolbar {
89
89
  */
90
90
  afterSetMounted(value, oldValue) {
91
91
  super.afterSetMounted(value, oldValue);
92
- value && this.passSizeToView()
92
+ value && this.passSizeToBody()
93
93
  }
94
94
 
95
95
  /**
@@ -181,7 +181,7 @@ class Toolbar extends BaseToolbar {
181
181
 
182
182
  me.promiseUpdate().then(() => {
183
183
  // To prevent duplicate calls, we need to check the mounted state before the update call
184
- mounted && me.passSizeToView()
184
+ mounted && me.passSizeToBody()
185
185
  })
186
186
  }
187
187
 
@@ -203,10 +203,10 @@ class Toolbar extends BaseToolbar {
203
203
  * @param {Boolean} silent=false
204
204
  * @returns {Promise<void>}
205
205
  */
206
- async passSizeToView(silent=false) {
206
+ async passSizeToBody(silent=false) {
207
207
  let me = this,
208
208
  {items} = me,
209
- {view} = me.parent,
209
+ {body} = me.parent,
210
210
  rects = await me.getDomRect(items.map(item => item.id)),
211
211
  lastItem = rects[rects.length - 1],
212
212
  columnPositions = rects.map((item, index) => ({dataField: items[index].dataField, width: item.width, x: item.x - rects[0].x})),
@@ -225,16 +225,16 @@ class Toolbar extends BaseToolbar {
225
225
  // Delay for slow connections, where the container-sizing is not done yet
226
226
  if (!layoutFinished) {
227
227
  await me.timeout(100);
228
- await me.passSizeToView(silent)
228
+ await me.passSizeToBody(silent)
229
229
  } else {
230
- view.columnPositions.clear();
231
- view.columnPositions.add(columnPositions);
230
+ body.columnPositions.clear();
231
+ body.columnPositions.add(columnPositions);
232
232
 
233
- view[silent ? 'setSilent' : 'set']({
233
+ body[silent ? 'setSilent' : 'set']({
234
234
  availableWidth: lastItem.x + lastItem.width - rects[0].x
235
235
  });
236
236
 
237
- !silent && view.updateMountedAndVisibleColumns()
237
+ !silent && body.updateMountedAndVisibleColumns()
238
238
  }
239
239
  }
240
240
 
@@ -1,5 +1,4 @@
1
1
  import Base from '../../plugin/Base.mjs';
2
- import CssUtil from '../../util/Css.mjs';
3
2
  import NeoArray from '../../util/Array.mjs';
4
3
 
5
4
  /**
@@ -151,7 +150,7 @@ class AnimateRows extends Base {
151
150
 
152
151
  for (rowIndex=mountedRows[0]; rowIndex < mountedRows[1]; rowIndex++) {
153
152
  record = owner.store.getAt(rowIndex);
154
- id = owner.getRowId(record, rowIndex)
153
+ id = owner.getRowId(rowIndex)
155
154
  mapItem = map[id];
156
155
 
157
156
  if (mapItem) {
@@ -258,7 +258,7 @@ class Cube extends Card {
258
258
  if (index < 6) {
259
259
  wrapperCls = NeoArray.union(wrapperCls, 'neo-face', Object.keys(Cube.faces)[index]);
260
260
 
261
- switch(index) {
261
+ switch (index) {
262
262
  case 0:
263
263
  case 1:
264
264
  wrapperCls = NeoArray.union(wrapperCls, 'neo-face-z');
@@ -341,7 +341,7 @@ class Cube extends Card {
341
341
  if (index < 6) {
342
342
  NeoArray.remove(wrapperCls, ['neo-face', Object.keys(Cube.faces)[index]]);
343
343
 
344
- switch(index) {
344
+ switch (index) {
345
345
  case 0:
346
346
  case 1:
347
347
  NeoArray.remove(wrapperCls, 'neo-face-z');
@@ -54,7 +54,6 @@ class DeltaUpdates extends Base {
54
54
  * @private
55
55
  */
56
56
  #renderer = null
57
-
58
57
  /**
59
58
  * Private property to signal that the renderer module has been loaded.
60
59
  * This will be a Promise that resolves when the module is ready.
@@ -87,10 +86,10 @@ class DeltaUpdates extends Base {
87
86
  try {
88
87
  let module;
89
88
 
90
- if (NeoConfig.useStringBasedMounting) {
91
- module = await import('./render/StringBasedRenderer.mjs')
92
- } else {
89
+ if (NeoConfig.useDomApiRenderer) {
93
90
  module = await import('./render/DomApiRenderer.mjs')
91
+ } else {
92
+ module = await import('./render/StringBasedRenderer.mjs')
94
93
  }
95
94
 
96
95
  me.#renderer = module.default
@@ -175,7 +174,7 @@ class DeltaUpdates extends Base {
175
174
  * - `insertAdjacentHTML()` is generally faster than creating a node via template,
176
175
  * but it's only available for manipulating children (elements), not `childNodes` (all nodes).
177
176
  * - For performance, in cases where there are no comment nodes (i.e., no wrapped text nodes),
178
- * the method prioritizes `insertAdjacentHTML()` when `useStringBasedMounting` is true.
177
+ * the method prioritizes `insertAdjacentHTML()` when `useDomApiRenderer` is false.
179
178
  *
180
179
  * @param {Object} delta
181
180
  * @param {Boolean} delta.hasLeadingTextChildren Flag to honor leading comments, which require special treatment.
@@ -185,8 +184,10 @@ class DeltaUpdates extends Base {
185
184
  * @param {Neo.vdom.VNode} [delta.vnode] The VNode representation of the new node (for direct DOM API mounting).
186
185
  */
187
186
  insertNode({hasLeadingTextChildren, index, outerHTML, parentId, vnode}) {
187
+ let me = this;
188
+
188
189
  // This method is synchronous and *expects* the renderer to be loaded
189
- if (!this.#renderer) {
190
+ if (!me.#renderer) {
190
191
  console.error('DeltaUpdates renderer not ready during insertNode!');
191
192
  return
192
193
  }
@@ -194,10 +195,10 @@ class DeltaUpdates extends Base {
194
195
  const parentNode = DomAccess.getElementOrBody(parentId);
195
196
 
196
197
  if (parentNode) {
197
- if (!NeoConfig.useStringBasedMounting) {
198
- this.#renderer.createDomTree({index, isRoot: true, parentNode, vnode})
198
+ if (NeoConfig.useDomApiRenderer) {
199
+ me.#renderer.createDomTree({index, isRoot: true, parentNode, vnode})
199
200
  } else {
200
- this.#renderer.insertNodeAsString({hasLeadingTextChildren, index, outerHTML, parentNode})
201
+ me.#renderer.insertNodeAsString({hasLeadingTextChildren, index, outerHTML, parentNode})
201
202
  }
202
203
  }
203
204
  }
@@ -331,7 +332,7 @@ class DeltaUpdates extends Base {
331
332
 
332
333
  if (node) {
333
334
  Object.entries(delta).forEach(([prop, value]) => {
334
- switch(prop) {
335
+ switch (prop) {
335
336
  case 'attributes':
336
337
  Object.entries(value).forEach(([key, val]) => {
337
338
  if (voidAttributes.has(key)) {
@@ -212,7 +212,7 @@ class Navigator extends Base {
212
212
  let {key, target} = keyEvent,
213
213
  newActiveElement;
214
214
 
215
- switch(key) {
215
+ switch (key) {
216
216
  // Move to the previous navigable item
217
217
  case data.previousKey:
218
218
  newActiveElement = me.navigateGetAdjacent(-1, data);
@@ -156,7 +156,7 @@ class WindowPosition extends Base {
156
156
  {screenLeft, screenTop} = win,
157
157
  left, top;
158
158
 
159
- switch(data.dock) {
159
+ switch (data.dock) {
160
160
  case 'bottom':
161
161
  left = screenLeft;
162
162
  top = win.outerHeight + screenTop - 62;
@@ -11,7 +11,7 @@ const StringBasedRenderer = {
11
11
 
12
12
  /**
13
13
  * Handles string-based insertion of a new node into the DOM.
14
- * This method is called by `insertNode()` when `NeoConfig.useStringBasedMounting` is true.
14
+ * This method is called by `insertNode()` when `NeoConfig.useDomApiRenderer` is false.
15
15
  *
16
16
  * @param {Object} data
17
17
  * @param {Boolean} data.hasLeadingTextChildren Flag to honor leading comments.
@@ -92,7 +92,7 @@ class Toolbar extends BaseToolbar {
92
92
  getLayoutConfig() {
93
93
  let layoutConfig;
94
94
 
95
- switch(this.dock) {
95
+ switch (this.dock) {
96
96
  case 'bottom':
97
97
  case 'top':
98
98
  layoutConfig = {
@@ -121,7 +121,7 @@ class Button extends BaseButton {
121
121
  {cls} = me,
122
122
  container = me.up('table-container');
123
123
 
124
- switch(value) {
124
+ switch (value) {
125
125
  case null:
126
126
  NeoArray.add(cls, 'neo-sort-hidden');
127
127
  break
@@ -177,7 +177,7 @@ class Toolbar extends Container {
177
177
  layoutConfig;
178
178
 
179
179
  if (me.dock) {
180
- switch(me.dock) {
180
+ switch (me.dock) {
181
181
  case 'bottom':
182
182
  case 'top':
183
183
  layoutConfig = {
@@ -36,19 +36,15 @@ class Style extends Base {
36
36
  return null
37
37
  } else if (!oldStyle) {
38
38
  return Neo.clone(newStyle)
39
- } else if (!newStyle) {
40
- Object.keys(oldStyle).forEach(function(style) {
41
- styles[style] = null
42
- });
43
39
  } else {
44
- Object.keys(newStyle).forEach(style => {
40
+ newStyle && Object.keys(newStyle).forEach(style => {
45
41
  if (!oldStyle.hasOwnProperty(style) || oldStyle[style] !== newStyle[style]) {
46
42
  styles[style] = newStyle[style]
47
43
  }
48
44
  });
49
45
 
50
46
  Object.keys(oldStyle).forEach(style => {
51
- if (!newStyle.hasOwnProperty(style)) {
47
+ if (!newStyle || !newStyle.hasOwnProperty(style)) {
52
48
  styles[style] = null
53
49
  }
54
50
  });
package/src/util/VDom.mjs CHANGED
@@ -66,7 +66,7 @@ class VDom extends Base {
66
66
 
67
67
  optsArray.forEach(([key, value]) => {
68
68
  if (vdom.hasOwnProperty(key)) {
69
- switch(key) {
69
+ switch (key) {
70
70
  case 'cls':
71
71
  if (typeof value === 'string' && Neo.isArray(vdom[key])) {
72
72
  if (vdom[key].includes(value)) {
@@ -43,7 +43,7 @@ class VNode extends Base {
43
43
 
44
44
  optsArray.forEach(([key, value]) => {
45
45
  if (vnode.hasOwnProperty(key)) {
46
- switch(key) {
46
+ switch (key) {
47
47
  case 'attributes':
48
48
  if (Neo.isObject(value) && Neo.isObject(vnode[key])) {
49
49
  Object.entries(value).forEach(([attrKey, attrValue]) => {