neo.mjs 6.19.4 → 6.20.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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='6.19.4'
23
+ * @member {String} version='6.20.1'
24
24
  */
25
- version: '6.19.4'
25
+ version: '6.20.1'
26
26
  }
27
27
 
28
28
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='6.19.4'
23
+ * @member {String} version='6.20.1'
24
24
  */
25
- version: '6.19.4'
25
+ version: '6.20.1'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "6.19.4",
3
+ "version": "6.20.1",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -52,7 +52,7 @@
52
52
  "envinfo": "^7.13.0",
53
53
  "fs-extra": "^11.2.0",
54
54
  "highlightjs-line-numbers.js": "^2.8.0",
55
- "inquirer": "^10.1.0",
55
+ "inquirer": "^10.1.2",
56
56
  "marked": "^13.0.2",
57
57
  "monaco-editor": "^0.50.0",
58
58
  "neo-jsdoc": "1.0.1",
@@ -260,12 +260,12 @@ const DefaultConfig = {
260
260
  useVdomWorker: true,
261
261
  /**
262
262
  * buildScripts/injectPackageVersion.mjs will update this value
263
- * @default '6.19.4'
263
+ * @default '6.20.1'
264
264
  * @memberOf! module:Neo
265
265
  * @name config.version
266
266
  * @type String
267
267
  */
268
- version: '6.19.4'
268
+ version: '6.20.1'
269
269
  };
270
270
 
271
271
  Object.assign(DefaultConfig, {
@@ -258,9 +258,10 @@ class Helix extends Component {
258
258
  me[lockWheel] = true;
259
259
 
260
260
  me.addDomListeners({
261
- click: me.onClick,
262
- wheel: me.onMouseWheel,
263
- scope: me
261
+ click : me.onClick,
262
+ touchmove: me.onTouchMove,
263
+ wheel : me.onMouseWheel,
264
+ scope : me
264
265
  })
265
266
  }
266
267
 
@@ -871,6 +872,13 @@ class Helix extends Component {
871
872
  this.createItems()
872
873
  }
873
874
 
875
+ /**
876
+ * @param {Object} data
877
+ */
878
+ onTouchMove(data) {
879
+ this.onMouseWheel(data)
880
+ }
881
+
874
882
  /**
875
883
  * @protected
876
884
  */
package/src/list/Base.mjs CHANGED
@@ -769,7 +769,6 @@ class Base extends Component {
769
769
  * @param {Number} data.index
770
770
  * @param {Neo.data.Model} data.model
771
771
  * @param {Object} data.record
772
- *
773
772
  */
774
773
  onStoreRecordChange(data) {
775
774
  let me = this,
@@ -27,7 +27,7 @@ const touchEvents = [
27
27
  {name: 'touchend', handler: 'onTouchEnd'},
28
28
  {name: 'touchenter', handler: 'onTouchEnter'},
29
29
  {name: 'touchleave', handler: 'onTouchLeave'},
30
- {name: 'touchmove', handler: 'onTouchMove'},
30
+ {name: 'touchmove', handler: 'onTouchMove', options: {passive: false}},
31
31
  {name: 'touchstart', handler: 'onTouchStart'}
32
32
  ];
33
33
 
@@ -111,6 +111,12 @@ class DomEvents extends Base {
111
111
  }
112
112
  }
113
113
 
114
+ /**
115
+ *
116
+ * @member {Object} touch
117
+ */
118
+ lastTouch = null
119
+
114
120
  /**
115
121
  * @param {Object} config
116
122
  */
@@ -606,7 +612,7 @@ class DomEvents extends Base {
606
612
  */
607
613
  onScroll(event) {
608
614
  let {clientHeight, clientWidth, scrollLeft, scrollTop} = event.target;
609
-
615
+ event.preventDefault();
610
616
  this.sendMessageToApp({
611
617
  ...this.getEventData(event),
612
618
  clientHeight,
@@ -19,14 +19,20 @@ class TouchDomEvents extends Base {
19
19
  * @param {Object} event
20
20
  */
21
21
  onTouchCancel(event) {
22
- this.sendMessageToApp(this.getEventData(event))
22
+ let me = this;
23
+
24
+ me.sendMessageToApp(me.getEventData(event));
25
+ me.lastTouch = null
23
26
  }
24
27
 
25
28
  /**
26
29
  * @param {Object} event
27
30
  */
28
31
  onTouchEnd(event) {
29
- this.sendMessageToApp(this.getEventData(event))
32
+ let me = this;
33
+
34
+ me.sendMessageToApp(me.getEventData(event));
35
+ me.lastTouch = null
30
36
  }
31
37
 
32
38
  /**
@@ -47,14 +53,36 @@ class TouchDomEvents extends Base {
47
53
  * @param {Object} event
48
54
  */
49
55
  onTouchMove(event) {
50
- this.sendMessageToApp(this.getEventData(event))
56
+ let me = this,
57
+ data = me.getEventData(event),
58
+ touch = event.touches[0],
59
+ {lastTouch} = me;
60
+
61
+ if (lastTouch) {
62
+ Object.assign(data, {
63
+ deltaX: touch.clientX - lastTouch.clientX,
64
+ deltaY: touch.clientY - lastTouch.clientY
65
+ })
66
+ }
67
+
68
+ me.sendMessageToApp(data);
69
+
70
+ me.lastTouch = touch;
71
+
72
+ if (me.testPathInclusion(event, ['neo-helix'])) {
73
+ event.preventDefault()
74
+ }
51
75
  }
52
76
 
53
77
  /**
54
78
  * @param {Object} event
55
79
  */
56
80
  onTouchStart(event) {
57
- this.sendMessageToApp(this.getEventData(event))
81
+ let me = this;
82
+
83
+ me.lastTouch = event.touches[0];
84
+
85
+ me.sendMessageToApp(me.getEventData(event))
58
86
  }
59
87
  }
60
88
 
@@ -34,6 +34,7 @@ const globalDomEvents = [
34
34
  'neonavigate',
35
35
  'scroll',
36
36
  'selectionchange',
37
+ 'touchmove',
37
38
  'wheel'
38
39
  ];
39
40
 
package/src/tree/List.mjs CHANGED
@@ -3,6 +3,7 @@ import ClassSystemUtil from '../util/ClassSystem.mjs';
3
3
  import Collection from '../collection/Base.mjs';
4
4
  import NeoArray from '../util/Array.mjs';
5
5
  import TreeModel from '../selection/TreeModel.mjs';
6
+ import VDomUtil from "../util/VDom.mjs";
6
7
 
7
8
  /**
8
9
  * @class Neo.tree.List
@@ -172,6 +173,53 @@ class Tree extends Base {
172
173
  }
173
174
  }
174
175
 
176
+ /**
177
+ *
178
+ * @param {Object} record
179
+ * @returns {Object}
180
+ */
181
+ createItem(record) {
182
+ let me = this,
183
+ {folderCls, itemCls} = me,
184
+ cls = [itemCls],
185
+ itemVdom;
186
+
187
+ if (record.isLeaf) {
188
+ cls.push(itemCls + (record.singleton ? '-leaf-singleton' : '-leaf'))
189
+ } else {
190
+ cls.push(folderCls);
191
+
192
+ if (!record.collapsed) {
193
+ cls.push('neo-folder-open')
194
+ }
195
+ }
196
+
197
+ itemVdom = {
198
+ tag: 'li',
199
+ cls,
200
+ id : me.getItemId(record.id),
201
+ cn : [{
202
+ tag : 'span',
203
+ cls : [itemCls + '-content', record.iconCls],
204
+ innerHTML: record.name,
205
+ style : {pointerEvents: 'none'}
206
+ }],
207
+ style: {
208
+ display : record.hidden ? 'none' : 'flex',
209
+ padding : '10px',
210
+ position: record.isLeaf ? null : 'sticky',
211
+ top : record.isLeaf ? null : (record.level * 38) + 'px',
212
+ zIndex : record.isLeaf ? null : (20 / (record.level + 1))
213
+ }
214
+ };
215
+
216
+ if (me.itemsFocusable) {
217
+ itemVdom.tabIndex = -1
218
+ }
219
+
220
+ return itemVdom
221
+ }
222
+
175
223
  /**
176
224
  * @param {String} [parentId] The parent node
177
225
  * @param {Object} [vdomRoot] The vdom template root for the current sub tree
@@ -181,10 +229,9 @@ class Tree extends Base {
181
229
  * @protected
182
230
  */
183
231
  createItems(parentId, vdomRoot, level, hidden=false) {
184
- let me = this,
185
- items = me.store.find('parentId', parentId),
186
- {folderCls, itemCls} = me,
187
- cls, itemVdom, tmpRoot;
232
+ let me = this,
233
+ items = me.store.find('parentId', parentId),
234
+ tmpRoot;
188
235
 
189
236
  if (items.length > 0) {
190
237
  if (!vdomRoot.cn) {
@@ -207,45 +254,12 @@ class Tree extends Base {
207
254
  tmpRoot = vdomRoot
208
255
  }
209
256
 
210
- items.forEach(item => {
211
- cls = [itemCls];
212
-
213
- if (item.isLeaf) {
214
- cls.push(itemCls + (item.singleton ? '-leaf-singleton' : '-leaf'))
215
- } else {
216
- cls.push(folderCls);
217
-
218
- if (!item.collapsed) {
219
- cls.push('neo-folder-open')
220
- }
221
- }
257
+ items.forEach(record => {
258
+ record.level = level;
222
259
 
223
- itemVdom = {
224
- tag: 'li',
225
- cls,
226
- id : me.getItemId(item.id),
227
- cn : [{
228
- tag : 'span',
229
- cls : [itemCls + '-content', item.iconCls],
230
- innerHTML: item.name,
231
- style : {pointerEvents: 'none'}
232
- }],
233
- style: {
234
- display : item.hidden ? 'none' : 'flex',
235
- padding : '10px',
236
- position: item.isLeaf ? null : 'sticky',
237
- top : item.isLeaf ? null : (level * 38) + 'px',
238
- zIndex : item.isLeaf ? null : (20 / (level + 1))
239
- }
240
- };
260
+ tmpRoot.cn.push(me.createItem(record));
241
261
 
242
- if (me.itemsFocusable) {
243
- itemVdom.tabIndex = -1
244
- }
245
-
246
- tmpRoot.cn.push(itemVdom);
247
-
248
- me.createItems(item.id, tmpRoot, level + 1, item.hidden || hidden)
262
+ me.createItems(record.id, tmpRoot, level + 1, record.hidden || hidden)
249
263
  })
250
264
  }
251
265
 
@@ -435,6 +449,23 @@ class Tree extends Base {
435
449
  this.expandAll()
436
450
  }
437
451
  }
452
+
453
+ /**
454
+ * @param {Object} data
455
+ * @param {Object[]} data.fields Each field object contains the keys: name, oldValue, value
456
+ * @param {Number} data.index
457
+ * @param {Neo.data.Model} data.model
458
+ * @param {Object} data.record
459
+ */
460
+ onStoreRecordChange(data) {
461
+ let me = this,
462
+ {record} = data,
463
+ {index, parentNode} = VDomUtil.findVdomChild(me.vdom, me.getItemId(record.id));
464
+
465
+ parentNode.cn[index] = me.createItem(record);
466
+
467
+ me.update()
468
+ }
438
469
  }
439
470
 
440
471
  Neo.setupClass(Tree);