neo.mjs 5.13.10 → 5.14.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 +1 -1
- package/src/DefaultConfig.mjs +2 -2
- package/src/button/Base.mjs +6 -1
- package/src/controller/Application.mjs +16 -9
- package/src/main/DomEvents.mjs +46 -48
- package/src/model/Component.mjs +160 -86
- package/src/util/Logger.mjs +142 -153
- package/src/worker/App.mjs +128 -39
package/apps/ServiceWorker.mjs
CHANGED
package/package.json
CHANGED
package/src/DefaultConfig.mjs
CHANGED
@@ -245,12 +245,12 @@ const DefaultConfig = {
|
|
245
245
|
useVdomWorker: true,
|
246
246
|
/**
|
247
247
|
* buildScripts/injectPackageVersion.mjs will update this value
|
248
|
-
* @default '5.
|
248
|
+
* @default '5.14.1'
|
249
249
|
* @memberOf! module:Neo
|
250
250
|
* @name config.version
|
251
251
|
* @type String
|
252
252
|
*/
|
253
|
-
version: '5.
|
253
|
+
version: '5.14.1'
|
254
254
|
};
|
255
255
|
|
256
256
|
Object.assign(DefaultConfig, {
|
package/src/button/Base.mjs
CHANGED
@@ -82,6 +82,10 @@ class Base extends Component {
|
|
82
82
|
* @member {Object[]|null} menu_=null
|
83
83
|
*/
|
84
84
|
menu_: null,
|
85
|
+
/**
|
86
|
+
* @member {Object} menuListConfig=null
|
87
|
+
*/
|
88
|
+
menuListConfig: null,
|
85
89
|
/**
|
86
90
|
* The pressed state of the Button
|
87
91
|
* @member {Boolean} pressed_=false
|
@@ -258,7 +262,8 @@ class Base extends Component {
|
|
258
262
|
hidden : true,
|
259
263
|
items : value,
|
260
264
|
parentComponent: me,
|
261
|
-
style : {left: '-5000px', top: '-5000px'}
|
265
|
+
style : {left: '-5000px', top: '-5000px'},
|
266
|
+
...me.menuListConfig
|
262
267
|
})
|
263
268
|
})
|
264
269
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import Base from './Base.mjs';
|
2
2
|
import ClassSystemUtil from '../util/ClassSystem.mjs';
|
3
|
+
import Logger from '../util/Logger.mjs';
|
3
4
|
|
4
5
|
/**
|
5
6
|
* @class Neo.controller.Application
|
@@ -72,7 +73,7 @@ class Application extends Base {
|
|
72
73
|
Neo.currentWorker.registerApp(me.name);
|
73
74
|
|
74
75
|
if (mainView) {
|
75
|
-
me.mainView = mainView
|
76
|
+
me.mainView = mainView
|
76
77
|
}
|
77
78
|
}
|
78
79
|
|
@@ -82,11 +83,17 @@ class Application extends Base {
|
|
82
83
|
* @param {Neo.component.Base|null} oldValue
|
83
84
|
* @protected
|
84
85
|
*/
|
85
|
-
afterSetMainView(value, oldValue) {
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
86
|
+
async afterSetMainView(value, oldValue) {
|
87
|
+
if (value) {
|
88
|
+
let me = this;
|
89
|
+
|
90
|
+
// short delay to ensure changes from onHashChange() got applied
|
91
|
+
await Neo.timeout(Neo.config.hash ? 200 : 10);
|
92
|
+
|
93
|
+
Logger.addContextMenuListener(me.mainView);
|
94
|
+
|
95
|
+
value.render(true)
|
96
|
+
}
|
90
97
|
}
|
91
98
|
|
92
99
|
/**
|
@@ -101,10 +108,10 @@ class Application extends Base {
|
|
101
108
|
return ClassSystemUtil.beforeSetInstance(value, null, {
|
102
109
|
appName : this.name,
|
103
110
|
parentId: this.parentId
|
104
|
-
})
|
111
|
+
})
|
105
112
|
}
|
106
113
|
|
107
|
-
return null
|
114
|
+
return null
|
108
115
|
}
|
109
116
|
|
110
117
|
/**
|
@@ -113,7 +120,7 @@ class Application extends Base {
|
|
113
120
|
*/
|
114
121
|
destroy(...args) {
|
115
122
|
Neo.currentWorker.removeAppFromThemeMap(this.name);
|
116
|
-
super.destroy(...args)
|
123
|
+
super.destroy(...args)
|
117
124
|
}
|
118
125
|
}
|
119
126
|
|
package/src/main/DomEvents.mjs
CHANGED
@@ -121,7 +121,7 @@ class DomEvents extends Base {
|
|
121
121
|
window .addEventListener('hashchange', me.onHashChange .bind(me));
|
122
122
|
|
123
123
|
if (Neo.config.useSharedWorkers) {
|
124
|
-
window.addEventListener('beforeunload', me.onBeforeUnload.bind(me))
|
124
|
+
window.addEventListener('beforeunload', me.onBeforeUnload.bind(me))
|
125
125
|
}
|
126
126
|
}
|
127
127
|
|
@@ -138,17 +138,17 @@ class DomEvents extends Base {
|
|
138
138
|
event = data.events[i];
|
139
139
|
|
140
140
|
if (!me[event.handler]) {
|
141
|
-
me[event.handler] = Neo.emptyFn
|
141
|
+
me[event.handler] = Neo.emptyFn
|
142
142
|
}
|
143
143
|
|
144
144
|
id = event.vnodeId || data.vnodeId;
|
145
145
|
|
146
146
|
if (id === 'document.body') {
|
147
|
-
targetNode = document.body
|
147
|
+
targetNode = document.body
|
148
148
|
} else if (Neo.config.useDomIds) {
|
149
|
-
targetNode = document.getElementById(id)
|
149
|
+
targetNode = document.getElementById(id)
|
150
150
|
} else {
|
151
|
-
targetNode = document.querySelector(`[data-neo-id='${id}']`)
|
151
|
+
targetNode = document.querySelector(`[data-neo-id='${id}']`)
|
152
152
|
}
|
153
153
|
|
154
154
|
targetNode.addEventListener(event.name, me[event.handler].bind(me));
|
@@ -159,7 +159,7 @@ class DomEvents extends Base {
|
|
159
159
|
data,
|
160
160
|
replyId: data.id,
|
161
161
|
success: true
|
162
|
-
})
|
162
|
+
})
|
163
163
|
}
|
164
164
|
|
165
165
|
/**
|
@@ -169,7 +169,7 @@ class DomEvents extends Base {
|
|
169
169
|
let me = this;
|
170
170
|
|
171
171
|
[...globalDomEvents].concat(Neo.config.useTouchEvents ? touchEvents : []).forEach(event => {
|
172
|
-
document.body.addEventListener(event.name, me[event.handler].bind(me), event.options)
|
172
|
+
document.body.addEventListener(event.name, me[event.handler].bind(me), event.options)
|
173
173
|
});
|
174
174
|
}
|
175
175
|
|
@@ -233,7 +233,7 @@ class DomEvents extends Base {
|
|
233
233
|
break;
|
234
234
|
}
|
235
235
|
|
236
|
-
Neo.worker.Manager.sendMessage('app', config)
|
236
|
+
Neo.worker.Manager.sendMessage('app', config)
|
237
237
|
}
|
238
238
|
|
239
239
|
/**
|
@@ -323,11 +323,11 @@ class DomEvents extends Base {
|
|
323
323
|
|
324
324
|
while (element.parentNode) {
|
325
325
|
path.push(element.parentNode);
|
326
|
-
element = element.parentNode
|
326
|
+
element = element.parentNode
|
327
327
|
}
|
328
328
|
}
|
329
329
|
|
330
|
-
return path
|
330
|
+
return path
|
331
331
|
}
|
332
332
|
|
333
333
|
/**
|
@@ -388,8 +388,8 @@ class DomEvents extends Base {
|
|
388
388
|
* @returns {Touch}
|
389
389
|
*/
|
390
390
|
getTouchCoords(event) {
|
391
|
-
|
392
|
-
return touches?.[0] || changedTouches?.[0]
|
391
|
+
let {touches, changedTouches} = event;
|
392
|
+
return touches?.[0] || changedTouches?.[0]
|
393
393
|
}
|
394
394
|
|
395
395
|
/**
|
@@ -400,10 +400,7 @@ class DomEvents extends Base {
|
|
400
400
|
let manager = Neo.worker.Manager;
|
401
401
|
|
402
402
|
manager.appNames.forEach(appName => {
|
403
|
-
manager.broadcast({
|
404
|
-
action : 'disconnect',
|
405
|
-
appName
|
406
|
-
});
|
403
|
+
manager.broadcast({action : 'disconnect', appName})
|
407
404
|
})
|
408
405
|
}
|
409
406
|
|
@@ -424,10 +421,10 @@ class DomEvents extends Base {
|
|
424
421
|
|
425
422
|
// input and change events can pass a FileList for input type file
|
426
423
|
if (target.files) {
|
427
|
-
data.files = target.files
|
424
|
+
data.files = target.files
|
428
425
|
}
|
429
426
|
|
430
|
-
me.sendMessageToApp(data)
|
427
|
+
me.sendMessageToApp(data)
|
431
428
|
}
|
432
429
|
|
433
430
|
/**
|
@@ -438,7 +435,7 @@ class DomEvents extends Base {
|
|
438
435
|
|
439
436
|
me.sendMessageToApp(me.getMouseEventData(event));
|
440
437
|
|
441
|
-
me.testPathInclusion(event, preventClickTargets) && event.preventDefault()
|
438
|
+
me.testPathInclusion(event, preventClickTargets) && event.preventDefault()
|
442
439
|
}
|
443
440
|
|
444
441
|
/**
|
@@ -449,7 +446,9 @@ class DomEvents extends Base {
|
|
449
446
|
|
450
447
|
me.sendMessageToApp(me.getMouseEventData(event));
|
451
448
|
|
452
|
-
me.testPathInclusion(event, preventContextmenuTargets)
|
449
|
+
if (event.ctrlKey || me.testPathInclusion(event, preventContextmenuTargets)) {
|
450
|
+
event.preventDefault()
|
451
|
+
}
|
453
452
|
}
|
454
453
|
|
455
454
|
/**
|
@@ -457,7 +456,7 @@ class DomEvents extends Base {
|
|
457
456
|
*/
|
458
457
|
onDomContentLoaded() {
|
459
458
|
this.addGlobalDomListeners();
|
460
|
-
this.fire('domContentLoaded')
|
459
|
+
this.fire('domContentLoaded')
|
461
460
|
}
|
462
461
|
|
463
462
|
/**
|
@@ -468,29 +467,28 @@ class DomEvents extends Base {
|
|
468
467
|
|
469
468
|
me.sendMessageToApp(me.getMouseEventData(event));
|
470
469
|
|
471
|
-
me.testPathInclusion(event, preventClickTargets) && event.preventDefault()
|
470
|
+
me.testPathInclusion(event, preventClickTargets) && event.preventDefault()
|
472
471
|
}
|
473
472
|
|
474
473
|
/**
|
475
474
|
* @param {Object} event
|
476
475
|
*/
|
477
476
|
onDragOver(event) {
|
478
|
-
event.dataTransfer.dropEffect = 'move'
|
479
|
-
//console.log('onDragOver', event);
|
477
|
+
event.dataTransfer.dropEffect = 'move'
|
480
478
|
}
|
481
479
|
|
482
480
|
/**
|
483
481
|
* @param {Object} event
|
484
482
|
*/
|
485
483
|
onFocusIn(event) {
|
486
|
-
this.sendMessageToApp(this.getEventData(event))
|
484
|
+
this.sendMessageToApp(this.getEventData(event))
|
487
485
|
}
|
488
486
|
|
489
487
|
/**
|
490
488
|
* @param {Object} event
|
491
489
|
*/
|
492
490
|
onFocusOut(event) {
|
493
|
-
this.sendMessageToApp(this.getEventData(event))
|
491
|
+
this.sendMessageToApp(this.getEventData(event))
|
494
492
|
}
|
495
493
|
|
496
494
|
/**
|
@@ -507,7 +505,7 @@ class DomEvents extends Base {
|
|
507
505
|
hash : this.parseHash(hashString),
|
508
506
|
hashString
|
509
507
|
}
|
510
|
-
})
|
508
|
+
})
|
511
509
|
}
|
512
510
|
|
513
511
|
/**
|
@@ -519,13 +517,13 @@ class DomEvents extends Base {
|
|
519
517
|
isInput = tagName === 'INPUT' || tagName === 'TEXTAREA';
|
520
518
|
|
521
519
|
if (isInput && disabledInputKeys[target.id]?.includes(event.key)) {
|
522
|
-
event.preventDefault()
|
520
|
+
event.preventDefault()
|
523
521
|
} else {
|
524
522
|
this.sendMessageToApp(this.getKeyboardEventData(event));
|
525
523
|
|
526
524
|
if (!isInput) { // see: https://github.com/neomjs/neo/issues/1729
|
527
525
|
if (['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(event.key)) {
|
528
|
-
event.preventDefault()
|
526
|
+
event.preventDefault()
|
529
527
|
}
|
530
528
|
}
|
531
529
|
}
|
@@ -535,14 +533,14 @@ class DomEvents extends Base {
|
|
535
533
|
* @param {Object} event
|
536
534
|
*/
|
537
535
|
onKeyUp(event) {
|
538
|
-
this.sendMessageToApp(this.getKeyboardEventData(event))
|
536
|
+
this.sendMessageToApp(this.getKeyboardEventData(event))
|
539
537
|
}
|
540
538
|
|
541
539
|
/**
|
542
540
|
* @param {Object} event
|
543
541
|
*/
|
544
542
|
onMouseDown(event) {
|
545
|
-
this.sendMessageToApp(this.getMouseEventData(event))
|
543
|
+
this.sendMessageToApp(this.getMouseEventData(event))
|
546
544
|
}
|
547
545
|
|
548
546
|
/**
|
@@ -553,7 +551,7 @@ class DomEvents extends Base {
|
|
553
551
|
appEvent = {...me.getMouseEventData(event), fromElementId: event.fromElement?.id || null};
|
554
552
|
|
555
553
|
me.sendMessageToApp(appEvent);
|
556
|
-
me.fire('mouseEnter', appEvent)
|
554
|
+
me.fire('mouseEnter', appEvent)
|
557
555
|
}
|
558
556
|
|
559
557
|
/**
|
@@ -564,14 +562,14 @@ class DomEvents extends Base {
|
|
564
562
|
appEvent = {...me.getMouseEventData(event), toElementId: event.toElement?.id || null};
|
565
563
|
|
566
564
|
me.sendMessageToApp(appEvent);
|
567
|
-
me.fire('mouseLeave', appEvent)
|
565
|
+
me.fire('mouseLeave', appEvent)
|
568
566
|
}
|
569
567
|
|
570
568
|
/**
|
571
569
|
* @param {Object} event
|
572
570
|
*/
|
573
571
|
onMouseUp(event) {
|
574
|
-
this.sendMessageToApp(this.getMouseEventData(event))
|
572
|
+
this.sendMessageToApp(this.getMouseEventData(event))
|
575
573
|
}
|
576
574
|
|
577
575
|
/**
|
@@ -589,12 +587,12 @@ class DomEvents extends Base {
|
|
589
587
|
let date = new Date();
|
590
588
|
|
591
589
|
if (lastWheelEvent.date && lastWheelEvent.target === targetCls && date - lastWheelEvent.date < globalWheelTargetsBuffer[targetCls]) {
|
592
|
-
preventUpdate = true
|
590
|
+
preventUpdate = true
|
593
591
|
} else {
|
594
592
|
Object.assign(lastWheelEvent, {
|
595
593
|
date,
|
596
594
|
target: targetCls
|
597
|
-
})
|
595
|
+
})
|
598
596
|
}
|
599
597
|
}
|
600
598
|
|
@@ -610,11 +608,11 @@ class DomEvents extends Base {
|
|
610
608
|
deltaZ,
|
611
609
|
scrollLeft : target.node.scrollLeft,
|
612
610
|
scrollTop : target.node.scrollTop
|
613
|
-
})
|
611
|
+
})
|
614
612
|
}
|
615
613
|
|
616
614
|
if (!globalWheelTargetsKeepEvent.includes(targetCls)) {
|
617
|
-
event.preventDefault()
|
615
|
+
event.preventDefault()
|
618
616
|
}
|
619
617
|
}
|
620
618
|
}
|
@@ -626,7 +624,7 @@ class DomEvents extends Base {
|
|
626
624
|
*/
|
627
625
|
parseHash(str) {
|
628
626
|
if (str === '') {
|
629
|
-
return {}
|
627
|
+
return {}
|
630
628
|
}
|
631
629
|
|
632
630
|
let pieces = str.split('&'),
|
@@ -637,7 +635,7 @@ class DomEvents extends Base {
|
|
637
635
|
parts = pieces[i].split('=');
|
638
636
|
|
639
637
|
if (parts.length < 2) {
|
640
|
-
parts.push('')
|
638
|
+
parts.push('')
|
641
639
|
}
|
642
640
|
|
643
641
|
key = decodeURIComponent(parts[0]);
|
@@ -650,13 +648,13 @@ class DomEvents extends Base {
|
|
650
648
|
data[key] = [];
|
651
649
|
}
|
652
650
|
|
653
|
-
data[key].push(this.parseValue(value))
|
651
|
+
data[key].push(this.parseValue(value))
|
654
652
|
} else {
|
655
|
-
data[key] = this.parseValue(value)
|
653
|
+
data[key] = this.parseValue(value)
|
656
654
|
}
|
657
655
|
}
|
658
656
|
|
659
|
-
return data
|
657
|
+
return data
|
660
658
|
}
|
661
659
|
|
662
660
|
/**
|
@@ -667,11 +665,11 @@ class DomEvents extends Base {
|
|
667
665
|
*/
|
668
666
|
parseValue(value) {
|
669
667
|
if (value == parseInt(value)) {
|
670
|
-
value = parseInt(value)
|
668
|
+
value = parseInt(value)
|
671
669
|
} else if (value === 'false') {
|
672
|
-
value = false
|
670
|
+
value = false
|
673
671
|
} else if (value === 'true') {
|
674
|
-
value = true
|
672
|
+
value = true
|
675
673
|
}
|
676
674
|
|
677
675
|
return value
|
@@ -708,7 +706,7 @@ class DomEvents extends Base {
|
|
708
706
|
}
|
709
707
|
|
710
708
|
data.cls.forEach(cls => {
|
711
|
-
!preventArray.includes(cls) && preventArray.push(cls)
|
709
|
+
!preventArray.includes(cls) && preventArray.push(cls)
|
712
710
|
});
|
713
711
|
}
|
714
712
|
|
@@ -733,7 +731,7 @@ class DomEvents extends Base {
|
|
733
731
|
stripHtml(value) {
|
734
732
|
let doc = new DOMParser().parseFromString(value, 'text/html');
|
735
733
|
|
736
|
-
return doc.body.textContent || ''
|
734
|
+
return doc.body.textContent || ''
|
737
735
|
}
|
738
736
|
|
739
737
|
/**
|