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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.13.10'
23
+ * @member {String} version='5.14.1'
24
24
  */
25
- version: '5.13.10'
25
+ version: '5.14.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='5.13.10'
23
+ * @member {String} version='5.14.1'
24
24
  */
25
- version: '5.13.10'
25
+ version: '5.14.1'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.13.10",
3
+ "version": "5.14.1",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -245,12 +245,12 @@ const DefaultConfig = {
245
245
  useVdomWorker: true,
246
246
  /**
247
247
  * buildScripts/injectPackageVersion.mjs will update this value
248
- * @default '5.13.10'
248
+ * @default '5.14.1'
249
249
  * @memberOf! module:Neo
250
250
  * @name config.version
251
251
  * @type String
252
252
  */
253
- version: '5.13.10'
253
+ version: '5.14.1'
254
254
  };
255
255
 
256
256
  Object.assign(DefaultConfig, {
@@ -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
- // short delay to ensure changes from onHashChange() got applied
87
- value && setTimeout(() => {
88
- value.render(true);
89
- }, Neo.config.hash ? 200 : 10);
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
 
@@ -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
- const {touches, changedTouches} = event;
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) && event.preventDefault();
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
  /**