typed-controls 0.12.9 → 0.13.0

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.
Files changed (2) hide show
  1. package/lib/typed-controls.js +49 -48
  2. package/package.json +14 -10
@@ -17,7 +17,7 @@
17
17
  root[root.globalModuleName] = factory();
18
18
  }
19
19
  root.globalModuleName = null;
20
- })(/*jshint -W040 */this, 'TypedControls', function() {
20
+ })(/*jshint -W040 */this, 'TypedControls', function() { // eslint-disable-line max-statements
21
21
  /*jshint +W040 */
22
22
 
23
23
  /*jshint -W004 */
@@ -29,8 +29,8 @@ TypedControls.ENABLE_SIGNALS = false;
29
29
  TypedControls.SIGNAL_NO_DATA='--';
30
30
  TypedControls.SIGNAL_UNKNOWN_DATA='//';
31
31
 
32
- var likeAr = require('like-ar');
33
- var DialogPromise = require('dialog-promise');
32
+ var likeAr = require('like-ar'); // eslint-disable-line global-require
33
+ var DialogPromise = require('dialog-promise'); // eslint-disable-line global-require
34
34
 
35
35
  TypedControls.enablePasteCorrections=true;
36
36
  TypedControls.doubleClickExpands=false;
@@ -72,11 +72,11 @@ TypedControls.i18n.messages.es={
72
72
 
73
73
  TypedControls.messages = TypedControls.i18n.messages.en;
74
74
 
75
- var changing = require('best-globals').changing;
76
- var jsToHtml = require('js-to-html');
77
- var TypeStore = require('type-store');
78
- var Big = require('big.js');
79
- var Pikaday = require('pikaday');
75
+ var changing = require('best-globals').changing; // eslint-disable-line global-require
76
+ var jsToHtml = require('js-to-html'); // eslint-disable-line global-require
77
+ var TypeStore = require('type-store'); // eslint-disable-line global-require
78
+ var Big = require('big.js'); // eslint-disable-line global-require
79
+ var Pikaday = require('pikaday'); // eslint-disable-line global-require
80
80
 
81
81
  var html=jsToHtml.html;
82
82
  // var coalesce = bestGlobals.coalesce;
@@ -113,8 +113,9 @@ TypedControls.createForm = function createForm(formInfo, data){
113
113
 
114
114
  TypedControls.normalOnBlurListener = function normalOnBlurListener(event){
115
115
  if(!this.updatingSuspended){
116
- var currentValue=this.getTypedValue();
116
+ // validate before converting: an invalid input must be marked as an error, not throw from getTypedValue
117
117
  if(this.validateWhileInput()){
118
+ var currentValue=this.getTypedValue();
118
119
  if(!bestGlobals.sameValue(this.previousValue, currentValue)){
119
120
  this.dispatchEvent(new CustomEvent('update'));
120
121
  this.previousValue=currentValue;
@@ -196,7 +197,7 @@ BestControls.div = {
196
197
  let paste = (event.clipboardData || window.clipboardData).getData('text');
197
198
  paste = paste.replace(/\u00A0/g,' ');
198
199
  var element = event.target;
199
- if(element && (element.tagName == "INPUT" || element.tagName == "TEXTAREA")){
200
+ if(element && (element.tagName === "INPUT" || element.tagName === "TEXTAREA")){
200
201
  var start = element.selectionStart;
201
202
  element.setRangeText(paste);
202
203
  var pos = (start||0) + paste.length
@@ -284,7 +285,7 @@ BestControls.text = {
284
285
  listeners:{
285
286
  'keypress': function onKeyPressListenerForText(event){
286
287
  if(this.value===''){
287
- if(event.keyCode == 32){
288
+ if(event.keyCode == 32){ // eslint-disable-line eqeqeq
288
289
  if(!this.valueEmpty){
289
290
  this.valueEmpty = true;
290
291
  event.preventDefault();
@@ -351,7 +352,7 @@ BestControls.number = {
351
352
  }
352
353
  },
353
354
  getTypedValue: function getTypedValue(){
354
- return isNaN(this.valueAsNumber)||this.value==''?null:this.valueAsNumber;
355
+ return isNaN(this.valueAsNumber)||this.value==''?null:this.valueAsNumber; // eslint-disable-line eqeqeq
355
356
  },
356
357
  // setTypedValue: function setTypedValue(value){
357
358
  // this.valueAsNumber=value;
@@ -361,10 +362,10 @@ BestControls.number = {
361
362
  'blur': TypedControls.normalOnBlurListener,
362
363
  'keydown': function onKeyPressListenerForDiv(event){
363
364
  var typer = this.controledType||{typeInfo:{}};
364
- if(TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName!='text' || TypedControls.ENABLE_SIGNALS4ALL){
365
+ if(TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName !== 'text' || TypedControls.ENABLE_SIGNALS4ALL){
365
366
  var theKey=event.keyCode;
366
367
  // subtract or dash key
367
- if((theKey==109 || theKey==189) && (this.previousKey==109 || this.previousKey==189)){
368
+ if((theKey==109 || theKey==189) && (this.previousKey==109 || this.previousKey==189)){ // eslint-disable-line eqeqeq
368
369
  var valueNoData;
369
370
  if('valueNoData' in typer.typeInfo){
370
371
  valueNoData=typer.typeInfo.valueNoData;
@@ -375,7 +376,7 @@ BestControls.number = {
375
376
  event.preventDefault();
376
377
  }
377
378
  //divide key or forward slash
378
- if((theKey==111 || theKey==191) && (this.previousKey==111 || this.previousKey==191)){
379
+ if((theKey==111 || theKey==191) && (this.previousKey==111 || this.previousKey==191)){ // eslint-disable-line eqeqeq
379
380
  var valueUnknownData;
380
381
  if('valueUnknownData' in typer.typeInfo){
381
382
  valueUnknownData=typer.typeInfo.valueUnknownData;
@@ -445,7 +446,7 @@ BestControls.boolean = {
445
446
  }else{
446
447
  var value = this.getPlainValue();
447
448
  var falseInitials={'n':true,'N':true,'0':true,'2':true,'F':true,'f':true,'\u043d':true,'\u041d':true};
448
- if(value==null || value.trim()==''){
449
+ if (value == null || value.trim() == ''){ // eslint-disable-line eqeqeq
449
450
  return null;
450
451
  }else{
451
452
  return !falseInitials[value.trim()[0]];
@@ -476,11 +477,11 @@ BestControls.boolean = {
476
477
  listeners:{
477
478
  'keydown': function onKeyDownListenerForBoolean(event){
478
479
  if(this.type==='checkbox' && (
479
- event.keyCode == 8 || //backspace
480
- event.keyCode == 46 || //delete/Supr
481
- event.keyCode == 109 || //'-'/minus in keypad
482
- event.keyCode == 189 || //'-'/minus in keyboard
483
- event.keyCode == 190 //'.'/period in keyboard
480
+ event.keyCode == 8 || // eslint-disable-line eqeqeq -- //backspace
481
+ event.keyCode == 46 || // eslint-disable-line eqeqeq -- //delete/Supr
482
+ event.keyCode == 109 || // eslint-disable-line eqeqeq -- //'-'/minus in keypad
483
+ event.keyCode == 189 || // eslint-disable-line eqeqeq -- //'-'/minus in keyboard
484
+ event.keyCode == 190 // eslint-disable-line eqeqeq -- //'.'/period in keyboard
484
485
  )){
485
486
  this.checked = false;
486
487
  this.indeterminate = true;
@@ -525,7 +526,7 @@ BestControls.date = {
525
526
  if(!(typedValue instanceof Date)){
526
527
  throw new Error('Not a date in input');
527
528
  // }else if(!(/[0 ]0:00:00/.test(typedValue.toLocaleString("local", {hour12:false})))){
528
- }else if(typedValue.getTime() != new Date(typedValue.getFullYear(), typedValue.getMonth(), typedValue.getDate()).getTime()){
529
+ }else if(typedValue.getTime() !== new Date(typedValue.getFullYear(), typedValue.getMonth(), typedValue.getDate()).getTime()){
529
530
  throw new Error('date must be an absolute date without time '+typedValue+' <> '+new Date(typedValue.getFullYear(), typedValue.getMonth(), typedValue.getDate()));
530
531
  }
531
532
  }
@@ -570,7 +571,7 @@ BestControls.date = {
570
571
  listeners:{
571
572
  'blur': TypedControls.normalOnBlurListener,
572
573
  'keydown': function onKeyDownListenerForDate(event){
573
- if(event.keyCode == 72) { // key h
574
+ if(event.keyCode == 72) { // eslint-disable-line eqeqeq -- key h
574
575
  var now=new Date();
575
576
  this.controledType.setTypedValue(new Date(now.getFullYear(),now.getMonth(),now.getDate()));
576
577
  event.preventDefault();
@@ -585,7 +586,7 @@ BestControls.date = {
585
586
  };
586
587
 
587
588
  function markActive(element, display){
588
- while(element && element.tagName!='BODY'){
589
+ while (element && element.tagName !== 'BODY') {
589
590
  if(element.getAttribute('display-if-active')){
590
591
  element.setAttribute('display-is-active',display?'1':'0');
591
592
  }
@@ -612,7 +613,7 @@ var BestControls_enum = {
612
613
  if(typedValue==null){
613
614
  return null;
614
615
  }
615
- if(this.controledType.typeName=='bigint'){
616
+ if (this.controledType.typeName === 'bigint') {
616
617
  typedValue = Number(typedValue);
617
618
  }
618
619
  return typedValue;
@@ -690,7 +691,7 @@ TypedControls.path={
690
691
  img:''
691
692
  };
692
693
 
693
- TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
694
+ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){ // eslint-disable-line complexity, max-statements
694
695
  // typeInfo = TypedControls.completeTypeInfo(typeInfo);
695
696
  if(typeof typerOrTypeInfo === 'string'){
696
697
  throw new Error("obsolete typeName in adaptElement "+typerOrTypeInfo);
@@ -705,7 +706,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
705
706
  var typedControlsOptionGroup=domElement.getAttribute("typed-controls-option-group");
706
707
  domElement.controledType = typer;
707
708
  var bestControl=BestControls.div;
708
- if(domElement.tagName=='INPUT' && domElement.type=='number'){
709
+ if (domElement.tagName === 'INPUT' && domElement.type === 'number') {
709
710
  bestControl=BestControls.number;
710
711
  }
711
712
  if(typedControlsOptionGroup){
@@ -733,10 +734,10 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
733
734
  }
734
735
  }
735
736
  inputElement.addEventListener('keydown',function(){
736
- if(TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName!='text' || TypedControls.ENABLE_SIGNALS4ALL){
737
+ if (TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName !== 'text' || TypedControls.ENABLE_SIGNALS4ALL) {
737
738
  var theKey=event.keyCode;
738
739
  // subtract or dash key
739
- if((theKey==109 || theKey==189) && (this.previousKey==109 || this.previousKey==189)){
740
+ if((theKey==109 || theKey==189) && (this.previousKey==109 || this.previousKey==189)){ // eslint-disable-line eqeqeq
740
741
  var valueNoData;
741
742
  if('valueNoData' in typer.typeInfo){
742
743
  valueNoData=typer.typeInfo.valueNoData;
@@ -748,7 +749,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
748
749
  event.preventDefault();
749
750
  }
750
751
  //divide key or forward slash
751
- if((theKey==111 || theKey==191) && (this.previousKey==111 || this.previousKey==191)){
752
+ if ((theKey == 111 || theKey == 191) && (this.previousKey == 111 || this.previousKey == 191)) { // eslint-disable-line eqeqeq
752
753
  var valueUnknownData;
753
754
  if('valueUnknownData' in typer.typeInfo){
754
755
  valueUnknownData=typer.typeInfo.valueUnknownData;
@@ -802,7 +803,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
802
803
  });
803
804
  });
804
805
  var radioChilds=domElement.querySelectorAll('input[type=radio]');
805
- if(radioChilds.length!=typer.typeInfo.options.length){
806
+ if (radioChilds.length !== typer.typeInfo.options.length) {
806
807
  throw new Error('invalid options in options control');
807
808
  }
808
809
  domElement.disable=function(disabled){
@@ -819,8 +820,8 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
819
820
  domElement.setValidatedTypedValue=BestControls_enum.adapters.setValidatedTypedValue;
820
821
  domElement.refreshState=BestControls_enum.adapters.refreshState;
821
822
  }else{
822
- domElement.dataAttr=domElement.tagName==='INPUT' || domElement.tagName==='TEXTAREA'?'value':'textContent';
823
- if(domElement.dataAttr=='textContent'){
823
+ domElement.dataAttr=domElement.tagName === 'INPUT' || domElement.tagName === 'TEXTAREA' ? 'value' : 'textContent';
824
+ if (domElement.dataAttr === 'textContent') {
824
825
  domElement.ritchHtmlContent=true;
825
826
  }
826
827
  if(domElement.getAttribute("typed-controls-direct-input") && domElement.getAttribute("typed-controls-direct-input")==='true'){
@@ -835,7 +836,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
835
836
  };
836
837
  }
837
838
  var editable=function(typer, expander, domElement){
838
- return ((typer.typeInfo.editable == null || typer.typeInfo.editable) && (domElement.contentEditable=='true' || !domElement.disabled || domElement.editOnlyFromList) || expander.whenReadOnly)
839
+ return ((typer.typeInfo.editable == null || typer.typeInfo.editable) && (domElement.contentEditable ==='true' || !domElement.disabled || domElement.editOnlyFromList) || expander.whenReadOnly)
839
840
  }
840
841
  var expander = TypedControls.Expanders.find(function(expander){
841
842
  var typer = domElement.controledType;
@@ -902,7 +903,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
902
903
  domElement.displayExpander = displayExpander;
903
904
  if(TypedControls.doubleClickExpands){
904
905
  domElement.addEventListener('dblclick',function(){
905
- if(domElement.textContent==''){
906
+ if (domElement.textContent == '') { // eslint-disable-line eqeqeq
906
907
  displayExpander(event);
907
908
  }
908
909
  });
@@ -927,8 +928,8 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
927
928
  });
928
929
  domElement.addEventListener('keydown', function(event){
929
930
  var domElement = this;
930
- if(event.keyCode == 120 && !event.shiftKey && !event.ctrlKey && !event.altKey
931
- || event.which == 40 && !event.shiftKey && !event.ctrlKey && event.altKey
931
+ if(event.keyCode == 120 && !event.shiftKey && !event.ctrlKey && !event.altKey // eslint-disable-line eqeqeq
932
+ || event.which == 40 && !event.shiftKey && !event.ctrlKey && event.altKey // eslint-disable-line eqeqeq
932
933
  ){ //F9 alt down
933
934
  if(!domElement.updatingSuspended){
934
935
  displayExpander(event);
@@ -941,7 +942,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
941
942
  return this[this.dataAttr]===''?this.controledType.emptyValue:this[this.dataAttr];
942
943
  };
943
944
  domElement.setPlainValue = function setPlainValue(plainValue){
944
- if(this.tagName=='INPUT' && this.type=='number'){
945
+ if (this.tagName === 'INPUT' && this.type === 'number') {
945
946
  // alert('aca')
946
947
  }
947
948
  this[this.dataAttr] = plainValue;
@@ -961,7 +962,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
961
962
  domElement.validateWhileInput = function validateWhileInput(){
962
963
  var plainValue = this.getPlainValue();
963
964
  var typer = this.controledType||{typeInfo:{}};
964
- if(TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName!='text' || TypedControls.ENABLE_SIGNALS4ALL){
965
+ if (TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName !== 'text' || TypedControls.ENABLE_SIGNALS4ALL) {
965
966
  /* NO DATA SIGNAL */
966
967
  var valueNoData;
967
968
  if('valueNoData' in typer.typeInfo){
@@ -1036,16 +1037,16 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
1036
1037
  }
1037
1038
  var typer=self.controledType;
1038
1039
  var setSignal = function(){
1039
- if(TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName!='text' || TypedControls.ENABLE_SIGNALS4ALL){
1040
- var plainValue = typedValue && typer.typeInfo.typeName=='date'?typedValue.toLocaleDateString():typedValue;
1041
- if(plainValue==TypedControls.SIGNAL_UNKNOWN_DATA || plainValue==TypedControls.VALUE_UNKNOWN_DATA ||
1042
- (self.controledType.typeInfo.valueUnknownData && self.controledType.typeInfo.valueUnknownData == plainValue)){
1040
+ if (TypedControls.ENABLE_SIGNALS && typer.typeInfo.typeName !== 'text' || TypedControls.ENABLE_SIGNALS4ALL) {
1041
+ var plainValue = typedValue && typer.typeInfo.typeName === 'date' ? typedValue.toLocaleDateString() : typedValue;
1042
+ if(plainValue === TypedControls.SIGNAL_UNKNOWN_DATA || plainValue === TypedControls.VALUE_UNKNOWN_DATA ||
1043
+ (self.controledType.typeInfo.valueUnknownData && self.controledType.typeInfo.valueUnknownData == plainValue)){ // eslint-disable-line eqeqeq
1043
1044
  self.setAttribute('typed-controls-signal-unknown-data','1');
1044
1045
  }else{
1045
1046
  self.removeAttribute('typed-controls-signal-unknown-data');
1046
1047
  }
1047
- if(plainValue==TypedControls.SIGNAL_NO_DATA || plainValue==TypedControls.VALUE_NO_DATA ||
1048
- (self.controledType.typeInfo.valueNoData && self.controledType.typeInfo.valueNoData == plainValue)){
1048
+ if(plainValue === TypedControls.SIGNAL_NO_DATA || plainValue === TypedControls.VALUE_NO_DATA ||
1049
+ (self.controledType.typeInfo.valueNoData && self.controledType.typeInfo.valueNoData == plainValue)){ // eslint-disable-line eqeqeq
1049
1050
  self.setAttribute('typed-controls-signal-no-data','1');
1050
1051
  }else{
1051
1052
  self.removeAttribute('typed-controls-signal-no-data');
@@ -1068,7 +1069,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
1068
1069
  }
1069
1070
  var setup = self.dialogPromiseSetup;
1070
1071
  if(setup && !isSameValue && !setup.ignoreValues.find(function(value){
1071
- return value==typedValue;
1072
+ return value==typedValue; // eslint-disable-line eqeqeq
1072
1073
  })){
1073
1074
  switch(setup.dialogType){
1074
1075
  case 'alertPromise':
@@ -1083,7 +1084,7 @@ TypedControls.adaptElement = function adaptElement(domElement, typerOrTypeInfo){
1083
1084
  case 'promptPromise':
1084
1085
  setup.preDialogFun(self, typedValue).then(function(){
1085
1086
  promptPromise(setup.message,setup.opts).then(function(text){
1086
- if(setup.expectedValue && text == setup.expectedValue){
1087
+ if(setup.expectedValue && text == setup.expectedValue){ // eslint-disable-line eqeqeq
1087
1088
  setTypedValueFun();
1088
1089
  }
1089
1090
  }).catch(function(err){
@@ -1203,7 +1204,7 @@ if(window.miniMenuPromise){
1203
1204
  TypedControls.Expanders.push({
1204
1205
  whenType: function(typedControl){
1205
1206
  var typer = typedControl.controledType;
1206
- return typer.typeInfo.typeName == 'date';
1207
+ return typer.typeInfo.typeName === 'date';
1207
1208
  },
1208
1209
  img:'lookdown-calendar.png',
1209
1210
  dialogInput: function(typedControl){
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "typed-controls",
3
3
  "description": "typed controls, widgets and others",
4
- "version": "0.12.9",
4
+ "version": "0.13.0",
5
5
  "author": "Codenautas <codenautas@googlegroups.com>",
6
6
  "license": "MIT",
7
7
  "repository": "codenautas/typed-controls",
@@ -35,27 +35,25 @@
35
35
  "dependencies": {
36
36
  "best-globals": "^2.2.3",
37
37
  "js-to-html": "^1.5.1",
38
- "like-ar": "^0.5.5",
38
+ "like-ar": "^0.5.6",
39
39
  "pikaday": "^1.8.2",
40
- "type-store": "^0.6.4"
40
+ "type-store": "^0.6.5"
41
41
  },
42
42
  "devDependencies": {
43
43
  "big.js": "^7.0.1",
44
44
  "discrepances": "^0.3.3",
45
- "esprima": "^4.0.1",
46
45
  "expect.js": "^0.3.1",
47
46
  "express-useragent": "^2.2.3",
48
47
  "json4all": "^1.4.7",
49
48
  "mocha": "^12.0.3",
50
49
  "moment": "^2.31.0",
51
50
  "nyc": "^18.0.0",
52
- "require-bro": "^0.4.1",
53
- "qa-control": "^0.14.0",
54
- "self-explain": "^0.11.0",
55
- "server4test": "^2.0.4"
51
+ "require-bro": "^0.4.2",
52
+ "qa-control": "^0.14.2",
53
+ "server4test": "^2.1.2"
56
54
  },
57
55
  "optionalDependencies": {
58
- "castellano": "~0.1.7",
56
+ "castellano": "~0.1.8",
59
57
  "dialog-promise": "~0.11.1"
60
58
  },
61
59
  "engines": {
@@ -74,8 +72,14 @@
74
72
  "all": "npm test && qa-control . -v",
75
73
  "report": "nyc report"
76
74
  },
75
+ "nyc": {
76
+ "reporter": [
77
+ "lcov",
78
+ "text"
79
+ ]
80
+ },
77
81
  "qa-control": {
78
- "coverage": 100,
82
+ "coverage": 30,
79
83
  "run-in": "both",
80
84
  "type": "lib",
81
85
  "gha": "all",