neo.mjs 5.7.0 → 5.7.2

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.7.0'
23
+ * @member {String} version='5.7.2'
24
24
  */
25
- version: '5.7.0'
25
+ version: '5.7.2'
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.7.0'
23
+ * @member {String} version='5.7.2'
24
24
  */
25
- version: '5.7.0'
25
+ version: '5.7.2'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.7.0",
3
+ "version": "5.7.2",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -236,12 +236,12 @@ const DefaultConfig = {
236
236
  useVdomWorker: true,
237
237
  /**
238
238
  * buildScripts/injectPackageVersion.mjs will update this value
239
- * @default '5.7.0'
239
+ * @default '5.7.2'
240
240
  * @memberOf! module:Neo
241
241
  * @name config.version
242
242
  * @type String
243
243
  */
244
- version: '5.7.0'
244
+ version: '5.7.2'
245
245
  };
246
246
 
247
247
  Object.assign(DefaultConfig, {
@@ -46,6 +46,10 @@ class DateField extends Picker {
46
46
  * @member {Number} pickerHeight=225
47
47
  */
48
48
  pickerHeight: 225,
49
+ /**
50
+ * @member {Number|null} pickerMaxHeight=225
51
+ */
52
+ pickerMaxHeight: 225,
49
53
  /**
50
54
  * @member {Number} pickerWidth=200
51
55
  */
@@ -32,6 +32,11 @@ class Number extends Text {
32
32
  * @member {String[]} baseCls=['neo-numberfield','neo-textfield']
33
33
  */
34
34
  baseCls: ['neo-numberfield', 'neo-textfield'],
35
+ /**
36
+ * Prevent users from typing specific characters.
37
+ * @member {String[]|null} disabledChars=['e','E']
38
+ */
39
+ disabledChars: ['e', 'E'],
35
40
  /**
36
41
  * data passes maxLength, minLength & valueLength properties
37
42
  * @member {Function} errorTextMaxValue=data=>`Max value violation: ${data.value} / ${data.maxValue}`
@@ -69,6 +69,12 @@ class Text extends Base {
69
69
  * @member {Boolean} clearToOriginalValue_=false
70
70
  */
71
71
  clearToOriginalValue_: false,
72
+ /**
73
+ * Prevent users from typing specific characters.
74
+ * E.g. disabling +-e for NumberFields
75
+ * @member {String[]|null} disabledChars_=null
76
+ */
77
+ disabledChars_: null,
72
78
  /**
73
79
  * @member {String|null} error_=null
74
80
  */
@@ -299,6 +305,24 @@ class Text extends Base {
299
305
  })
300
306
  }
301
307
 
308
+ /**
309
+ * Triggered after the disabledChars config got changed
310
+ * @param {String[]|null} value
311
+ * @param {String[]|null} oldValue
312
+ * @protected
313
+ */
314
+ afterSetDisabledChars(value, oldValue) {
315
+ if (value) {
316
+ let me = this;
317
+
318
+ Neo.main.DomEvents.registerDisabledInputChars({
319
+ appName: me.appName,
320
+ chars : value,
321
+ id : me.getInputEl().id
322
+ })
323
+ }
324
+ }
325
+
302
326
  /**
303
327
  * Triggered after the error config got changed
304
328
  * @param {String|null} value
@@ -936,6 +960,23 @@ class Text extends Base {
936
960
  me.fire('clear')
937
961
  }
938
962
 
963
+ /**
964
+ *
965
+ * @param args
966
+ */
967
+ destroy(...args) {
968
+ let me = this;
969
+
970
+ if (me.disabledChars) {
971
+ Neo.main.DomEvents.unregisterDisabledInputChars({
972
+ appName: me.appName,
973
+ id : me.getInputEl().id
974
+ })
975
+ }
976
+
977
+ super.destroy(...args);
978
+ }
979
+
939
980
  /**
940
981
  * Calls focus() on the inputEl node instead
941
982
  * @param {String} id=this.id
@@ -60,7 +60,8 @@ const lastWheelEvent = {
60
60
  target: null
61
61
  };
62
62
 
63
- const preventClickTargets = [],
63
+ const disabledInputKeys = {},
64
+ preventClickTargets = [],
64
65
  preventContextmenuTargets = [];
65
66
 
66
67
  /**
@@ -100,7 +101,9 @@ class DomEvents extends Base {
100
101
  remote: {
101
102
  app: [
102
103
  'addDomListener',
103
- 'registerPreventDefaultTargets'
104
+ 'registerDisabledInputChars',
105
+ 'registerPreventDefaultTargets',
106
+ 'unregisterDisabledInputChars'
104
107
  ]
105
108
  }
106
109
  }
@@ -507,11 +510,18 @@ class DomEvents extends Base {
507
510
  * @param {Object} event
508
511
  */
509
512
  onKeyDown(event) {
510
- this.sendMessageToApp(this.getKeyboardEventData(event));
513
+ let target = event.target,
514
+ isInput = target.nodeName === 'INPUT';
511
515
 
512
- if (event.target.nodeName !== 'INPUT') { // see: https://github.com/neomjs/neo/issues/1729
513
- if (['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(event.key)) {
514
- event.preventDefault();
516
+ if (isInput && disabledInputKeys[target.id]?.includes(event.key)) {
517
+ event.preventDefault();
518
+ } else {
519
+ this.sendMessageToApp(this.getKeyboardEventData(event));
520
+
521
+ if (!isInput) { // see: https://github.com/neomjs/neo/issues/1729
522
+ if (['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'].includes(event.key)) {
523
+ event.preventDefault();
524
+ }
515
525
  }
516
526
  }
517
527
  }
@@ -659,7 +669,16 @@ class DomEvents extends Base {
659
669
  value = true;
660
670
  }
661
671
 
662
- return value;
672
+ return value
673
+ }
674
+
675
+ /**
676
+ * @param {Object} data
677
+ * @param {String[]} data.chars
678
+ * @param {String} data.id
679
+ */
680
+ registerDisabledInputChars(data) {
681
+ disabledInputKeys[data.id] = data.chars
663
682
  }
664
683
 
665
684
  /**
@@ -726,7 +745,15 @@ class DomEvents extends Base {
726
745
  }
727
746
  }
728
747
 
729
- return false;
748
+ return false
749
+ }
750
+
751
+ /**
752
+ * @param {Object} data
753
+ * @param {String} data.id
754
+ */
755
+ unregisterDisabledInputChars(data) {
756
+ delete disabledInputKeys[data.id]
730
757
  }
731
758
  }
732
759