neo.mjs 5.15.3 → 5.15.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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.15.3'
23
+ * @member {String} version='5.15.5'
24
24
  */
25
- version: '5.15.3'
25
+ version: '5.15.5'
26
26
  }
27
27
 
28
28
  /**
@@ -121,18 +121,21 @@ class Table extends Container {
121
121
  if (oldValue !== undefined) {
122
122
  let me = this,
123
123
  selectionModel = me.selectionModel,
124
+ view = me.getView(),
124
125
  id;
125
126
 
126
- if (value) {
127
- id = `${me.getView().id}__tr__${value}`; // the store can not be loaded on the first selection
127
+ if (view) {
128
+ if (value) {
129
+ id = `${view.id}__tr__${value}`; // the store can not be loaded on the first selection
128
130
 
129
- if (!selectionModel.isSelected(id)) {
130
- selectionModel.select(id);
131
+ if (!selectionModel.isSelected(id)) {
132
+ selectionModel.select(id);
131
133
 
132
- me.mounted && Neo.main.DomAccess.scrollToTableRow({id: id});
134
+ me.mounted && Neo.main.DomAccess.scrollToTableRow({id: id});
135
+ }
136
+ } else {
137
+ selectionModel.deselectAll();
133
138
  }
134
- } else {
135
- selectionModel.deselectAll();
136
139
  }
137
140
  }
138
141
  }
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.15.3'
23
+ * @member {String} version='5.15.5'
24
24
  */
25
- version: '5.15.3'
25
+ version: '5.15.5'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.15.3",
3
+ "version": "5.15.5",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -44,7 +44,7 @@
44
44
  "@fortawesome/fontawesome-free": "^6.4.2",
45
45
  "@material/mwc-button": "^0.27.0",
46
46
  "@material/mwc-textfield": "^0.27.0",
47
- "autoprefixer": "^10.4.14",
47
+ "autoprefixer": "^10.4.15",
48
48
  "chalk": "^5.3.0",
49
49
  "clean-webpack-plugin": "^4.0.0",
50
50
  "commander": "^11.0.0",
@@ -52,11 +52,11 @@
52
52
  "envinfo": "^7.10.0",
53
53
  "fs-extra": "^11.1.1",
54
54
  "highlightjs-line-numbers.js": "^2.8.0",
55
- "inquirer": "^9.2.9",
56
- "neo-jsdoc": "^1.0.1",
57
- "neo-jsdoc-x": "^1.0.5",
55
+ "inquirer": "^9.2.10",
56
+ "neo-jsdoc": "1.0.1",
57
+ "neo-jsdoc-x": "1.0.5",
58
58
  "postcss": "^8.4.27",
59
- "sass": "^1.64.2",
59
+ "sass": "^1.65.1",
60
60
  "webpack": "^5.88.2",
61
61
  "webpack-cli": "^5.1.4",
62
62
  "webpack-dev-server": "4.15.1",
@@ -245,12 +245,12 @@ const DefaultConfig = {
245
245
  useVdomWorker: true,
246
246
  /**
247
247
  * buildScripts/injectPackageVersion.mjs will update this value
248
- * @default '5.15.3'
248
+ * @default '5.15.5'
249
249
  * @memberOf! module:Neo
250
250
  * @name config.version
251
251
  * @type String
252
252
  */
253
- version: '5.15.3'
253
+ version: '5.15.5'
254
254
  };
255
255
 
256
256
  Object.assign(DefaultConfig, {
@@ -17,6 +17,7 @@ const globalDomEvents = [
17
17
  {name: 'mouseenter', handler: 'onMouseEnter', options: {capture: true}},
18
18
  {name: 'mouseleave', handler: 'onMouseLeave', options: {capture: true}},
19
19
  {name: 'mouseup', handler: 'onMouseUp'},
20
+ {name: 'scroll', handler: 'onScroll', options: {capture: true}},
20
21
  {name: 'wheel', handler: 'onWheel', options: {passive: false}}
21
22
  ];
22
23
 
@@ -572,6 +573,21 @@ class DomEvents extends Base {
572
573
  this.sendMessageToApp(this.getMouseEventData(event))
573
574
  }
574
575
 
576
+ /**
577
+ * @param {Event} event
578
+ */
579
+ onScroll(event) {
580
+ let target = event.target;
581
+
582
+ this.sendMessageToApp({
583
+ ...this.getEventData(event),
584
+ clientHeight: target.clientHeight,
585
+ clientWidth : target.clientWidth,
586
+ scrollLeft : target.scrollLeft,
587
+ scrollTop : target.scrollTop
588
+ })
589
+ }
590
+
575
591
  /**
576
592
  * @param {Object} event
577
593
  */
@@ -15,12 +15,33 @@ class DeltaUpdates extends Base {
15
15
  className: 'Neo.main.mixin.DeltaUpdates'
16
16
  }
17
17
 
18
+ /**
19
+ * @param {HTMLElement} node
20
+ * @param {String} nodeName
21
+ */
22
+ du_changeNodeName(node, nodeName) {
23
+ let attributes = node.attributes,
24
+ clone = document.createElement(nodeName),
25
+ i = 0,
26
+ len = attributes.length,
27
+ attribute;
28
+
29
+ for (; i < len; i++) {
30
+ attribute = attributes.item(i);
31
+ clone.setAttribute(attribute.nodeName, attribute.nodeValue)
32
+ }
33
+
34
+ clone.innerHTML= node.innerHTML;
35
+
36
+ node.parentNode.replaceChild(clone, node)
37
+ }
38
+
18
39
  /**
19
40
  * @param {Object} delta
20
41
  * @param {String} delta.id
21
42
  */
22
43
  du_focusNode(delta) {
23
- this.getElement(delta.id).focus();
44
+ this.getElement(delta.id).focus()
24
45
  }
25
46
 
26
47
  /**
@@ -55,10 +76,10 @@ class DeltaUpdates extends Base {
55
76
  for (; i < countChildren; i++) {
56
77
  if (parentNode.childNodes[i].nodeType === 8) { // ignore comments
57
78
  if (i < realIndex) {
58
- realIndex++;
79
+ realIndex++
59
80
  }
60
81
 
61
- hasComments = true;
82
+ hasComments = true
62
83
  }
63
84
  }
64
85
  }
@@ -68,23 +89,23 @@ class DeltaUpdates extends Base {
68
89
 
69
90
  if (index > 0 && index >= countChildren) {
70
91
  parentNode.insertAdjacentHTML('beforeend', delta.outerHTML);
71
- return;
92
+ return
72
93
  }
73
94
 
74
95
  if (countChildren > 0 && countChildren > index) {
75
- parentNode.children[index].insertAdjacentHTML('beforebegin', delta.outerHTML);
96
+ parentNode.children[index].insertAdjacentHTML('beforebegin', delta.outerHTML)
76
97
  } else if (countChildren > 0) {
77
- parentNode.children[countChildren - 1].insertAdjacentHTML('afterend', delta.outerHTML);
98
+ parentNode.children[countChildren - 1].insertAdjacentHTML('afterend', delta.outerHTML)
78
99
  } else {
79
- parentNode.insertAdjacentHTML('beforeend', delta.outerHTML);
100
+ parentNode.insertAdjacentHTML('beforeend', delta.outerHTML)
80
101
  }
81
102
  } else {
82
103
  node = this.htmlStringToElement(delta.outerHTML);
83
104
 
84
105
  if (countChildren > 0 && countChildren > realIndex) {
85
- parentNode.insertBefore(node, parentNode.childNodes[realIndex]);
106
+ parentNode.insertBefore(node, parentNode.childNodes[realIndex])
86
107
  } else {
87
- parentNode.appendChild(node);
108
+ parentNode.appendChild(node)
88
109
  }
89
110
  }
90
111
  }
@@ -102,11 +123,11 @@ class DeltaUpdates extends Base {
102
123
  parentNode = this.getElement(delta.parentId);
103
124
 
104
125
  if (index >= parentNode.children.length) {
105
- parentNode.appendChild(node);
126
+ parentNode.appendChild(node)
106
127
  } else {
107
128
  //index++; // todo?: increase the index in case same parent, oldIndex < newIndex, direct swap
108
129
  if (node && parentNode.children[index].id !== delta.id) {
109
- parentNode.insertBefore(node, parentNode.children[index]);
130
+ parentNode.insertBefore(node, parentNode.children[index])
110
131
  }
111
132
  }
112
133
  }
@@ -124,12 +145,10 @@ class DeltaUpdates extends Base {
124
145
  node = this.getElementOrBody(delta.parentId);
125
146
 
126
147
  if (node) {
127
- startTag = `<!-- ${delta.id} -->`;
128
- reg = new RegExp(startTag + '[\\s\\S]*?<!-- \/neo-vtext -->');
148
+ startTag = `<!-- ${delta.id} -->`;
149
+ reg = new RegExp(startTag + '[\\s\\S]*?<!-- \/neo-vtext -->');
129
150
 
130
151
  node.innerHTML = node.innerHTML.replace(reg, '')
131
- } else {
132
- // console.warn('du_removeNode: dom node not found for id', delta.id);
133
152
  }
134
153
  } else {
135
154
  node.remove()
@@ -146,7 +165,7 @@ class DeltaUpdates extends Base {
146
165
  let me = this,
147
166
  node = me.getElement(delta.parentId);
148
167
 
149
- node.replaceChild(me.getElement(delta.toId), me.getElement(delta.fromId));
168
+ node.replaceChild(me.getElement(delta.toId), me.getElement(delta.fromId))
150
169
  }
151
170
 
152
171
  /**
@@ -158,7 +177,7 @@ class DeltaUpdates extends Base {
158
177
  let me = this,
159
178
  node = me.getElement(delta.id);
160
179
 
161
- node.textContent = delta.value;
180
+ node.textContent = delta.value
162
181
  }
163
182
 
164
183
  /**
@@ -171,47 +190,51 @@ class DeltaUpdates extends Base {
171
190
  * @param {Object} [delta.style]
172
191
  */
173
192
  du_updateNode(delta) {
174
- let node = this.getElementOrBody(delta.id);
193
+ let me = this,
194
+ node = me.getElementOrBody(delta.id);
175
195
 
176
196
  if (!node) {
177
- console.warn('du_updateNode: node not found for id', delta.id);
197
+ console.warn('du_updateNode: node not found for id', delta.id)
178
198
  } else {
179
199
  Object.entries(delta).forEach(([prop, value]) => {
180
200
  switch(prop) {
181
201
  case 'attributes':
182
202
  Object.entries(value).forEach(([key, val]) => {
183
- if (this.voidAttributes.includes(key)) {
184
- node[key] = val === 'true'; // vnode attribute values get converted into strings
203
+ if (me.voidAttributes.includes(key)) {
204
+ node[key] = val === 'true' // vnode attribute values get converted into strings
185
205
  } else if (val === null || val === '') {
186
206
  if (key === 'value') {
187
- node[key] = ''; // input fields => pseudo attribute can not be removed
207
+ node[key] = '' // input fields => pseudo attribute can not be removed
188
208
  } else {
189
- node.removeAttribute(key);
209
+ node.removeAttribute(key)
190
210
  }
191
211
  } else if (key === 'id') {
192
- node[Neo.config.useDomIds ? 'id' : 'data-neo-id'] = val;
212
+ node[Neo.config.useDomIds ? 'id' : 'data-neo-id'] = val
193
213
  } else if (key === 'spellcheck' && val === 'false') {
194
214
  // see https://github.com/neomjs/neo/issues/1922
195
- node[key] = false;
215
+ node[key] = false
196
216
  } else {
197
217
  if (key === 'value') {
198
- node[key] = val;
218
+ node[key] = val
199
219
  } else {
200
- node.setAttribute(key, val);
220
+ node.setAttribute(key, val)
201
221
  }
202
222
  }
203
223
  });
204
- break;
224
+ break
205
225
  case 'cls':
206
226
  node.classList.add(...value.add || []);
207
227
  node.classList.remove(...value.remove || []);
208
- break;
228
+ break
209
229
  case 'innerHTML':
210
230
  node.innerHTML = value || '';
211
- break;
231
+ break
232
+ case 'nodeName':
233
+ me.du_changeNodeName(node, value);
234
+ break
212
235
  case 'outerHTML':
213
236
  node.outerHTML = value || '';
214
- break;
237
+ break
215
238
  case 'style':
216
239
  if (Neo.isObject(value)) {
217
240
  Object.entries(value).forEach(([key, val]) => {
@@ -219,15 +242,15 @@ class DeltaUpdates extends Base {
219
242
 
220
243
  if (Neo.isString(val) && val.includes('!important')) {
221
244
  val = val.replace('!important', '').trim();
222
- important = 'important';
245
+ important = 'important'
223
246
  }
224
247
 
225
- node.style.setProperty(Neo.decamel(key), val, important);
226
- });
248
+ node.style.setProperty(Neo.decamel(key), val, important)
249
+ })
227
250
  }
228
- break;
251
+ break
229
252
  }
230
- });
253
+ })
231
254
  }
232
255
  }
233
256
 
@@ -244,7 +267,7 @@ class DeltaUpdates extends Base {
244
267
  startTag = `<!-- ${delta.id} -->`,
245
268
  reg = new RegExp(startTag + '[\\s\\S]*?<!-- \/neo-vtext -->');
246
269
 
247
- node.innerHTML = innerHTML.replace(reg, delta.value);
270
+ node.innerHTML = innerHTML.replace(reg, delta.value)
248
271
  }
249
272
 
250
273
  /**
@@ -254,7 +277,7 @@ class DeltaUpdates extends Base {
254
277
  htmlStringToElement(html) {
255
278
  const template = document.createElement('template');
256
279
  template.innerHTML = html;
257
- return template.content;
280
+ return template.content
258
281
  }
259
282
 
260
283
  /**
@@ -267,7 +290,7 @@ class DeltaUpdates extends Base {
267
290
  let me = this,
268
291
  deltas = data.deltas,
269
292
  i = 0,
270
- len;
293
+ len, map;
271
294
 
272
295
  deltas = Array.isArray(deltas) ? deltas : [deltas];
273
296
  len = deltas.length;
@@ -275,14 +298,14 @@ class DeltaUpdates extends Base {
275
298
  if (Neo.config.logDeltaUpdates && len > 0) {
276
299
  me.countDeltas += len;
277
300
  me.countUpdates++;
278
- console.log('update ' + me.countUpdates, 'total deltas ', me.countDeltas, Neo.clone(data, true));
301
+ console.log('update ' + me.countUpdates, 'total deltas ', me.countDeltas, Neo.clone(data, true))
279
302
  }
280
303
 
281
304
  if (Neo.config.renderCountDeltas && len > 0) {
282
- me.countDeltasPer250ms += len;
305
+ me.countDeltasPer250ms += len
283
306
  }
284
307
 
285
- const map = {
308
+ map = {
286
309
  focusNode : me.du_focusNode,
287
310
  insertNode : me.du_insertNode,
288
311
  moveNode : me.du_moveNode,
@@ -294,14 +317,14 @@ class DeltaUpdates extends Base {
294
317
  };
295
318
 
296
319
  for (; i < len; i++) {
297
- (map[deltas[i].action] || map['default']).call(me, deltas[i]);
320
+ (map[deltas[i].action] || map['default']).call(me, deltas[i])
298
321
  }
299
322
 
300
323
  Neo.worker.Manager.sendMessage(data.origin || 'app', {
301
324
  action : 'reply',
302
325
  replyId: data.id,
303
326
  success: true
304
- });
327
+ })
305
328
  }
306
329
  }
307
330
 
@@ -30,6 +30,7 @@ const globalDomEvents = [
30
30
  'mouseenter',
31
31
  'mouseleave',
32
32
  'mouseup',
33
+ 'scroll',
33
34
  'wheel'
34
35
  ];
35
36