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.
- package/apps/ServiceWorker.mjs +2 -2
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +2 -2
- package/src/DefaultConfig.mjs +2 -2
- package/src/component/Helix.mjs +11 -3
- package/src/list/Base.mjs +0 -1
- package/src/main/DomEvents.mjs +8 -2
- package/src/main/mixin/TouchDomEvents.mjs +32 -4
- package/src/manager/DomEvent.mjs +1 -0
- package/src/tree/List.mjs +72 -41
package/apps/ServiceWorker.mjs
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "6.
|
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.
|
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",
|
package/src/DefaultConfig.mjs
CHANGED
@@ -260,12 +260,12 @@ const DefaultConfig = {
|
|
260
260
|
useVdomWorker: true,
|
261
261
|
/**
|
262
262
|
* buildScripts/injectPackageVersion.mjs will update this value
|
263
|
-
* @default '6.
|
263
|
+
* @default '6.20.1'
|
264
264
|
* @memberOf! module:Neo
|
265
265
|
* @name config.version
|
266
266
|
* @type String
|
267
267
|
*/
|
268
|
-
version: '6.
|
268
|
+
version: '6.20.1'
|
269
269
|
};
|
270
270
|
|
271
271
|
Object.assign(DefaultConfig, {
|
package/src/component/Helix.mjs
CHANGED
@@ -258,9 +258,10 @@ class Helix extends Component {
|
|
258
258
|
me[lockWheel] = true;
|
259
259
|
|
260
260
|
me.addDomListeners({
|
261
|
-
click: me.onClick,
|
262
|
-
|
263
|
-
|
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
package/src/main/DomEvents.mjs
CHANGED
@@ -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
|
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
|
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
|
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
|
81
|
+
let me = this;
|
82
|
+
|
83
|
+
me.lastTouch = event.touches[0];
|
84
|
+
|
85
|
+
me.sendMessageToApp(me.getEventData(event))
|
58
86
|
}
|
59
87
|
}
|
60
88
|
|
package/src/manager/DomEvent.mjs
CHANGED
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
|
185
|
-
items
|
186
|
-
|
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(
|
211
|
-
|
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
|
-
|
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
|
-
|
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);
|