@slickgrid-universal/binding 1.1.0 → 1.2.3

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/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2020-2021, Ghislain B. - Slickgrid-Universal
1
+ Copyright (c) 2020-2022, Ghislain B. - Slickgrid-Universal
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
2
2
  [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)
3
- [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)
3
+ [![lerna--lite](https://img.shields.io/badge/maintained%20with-lerna--lite-blueviolet)](https://github.com/ghiscoding/lerna-lite)
4
4
  [![npm](https://img.shields.io/npm/v/@slickgrid-universal/binding.svg?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/binding)
5
5
  [![npm](https://img.shields.io/npm/dy/@slickgrid-universal/binding?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/binding)
6
6
 
@@ -7,12 +7,12 @@ export declare class BindingHelper {
7
7
  get observers(): BindingService[];
8
8
  constructor();
9
9
  dispose(): void;
10
- addElementBinding(variable: any, property: string, selector: string, attribute: string, events?: string | string[], callback?: (val: any) => void): void;
10
+ addElementBinding<T extends Element = Element>(variable: any, property: string, selector: string, attribute: string, events?: string | string[], callback?: (val: any) => void): void;
11
11
  /** From a DOM element selector, which could be zero or multiple elements, add an event listener */
12
- bindEventHandler(selector: string, eventName: string, callback: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
12
+ bindEventHandler<T extends Element = Element>(selector: string, eventName: string, callback: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
13
13
  /**
14
14
  * From a DOM element selector, which could be zero or multiple elements, set the value on a given attribute name
15
15
  * For example ('div.hello', 'textContent', 'world') => would set the textContent equal to 'world' on a div element having the class 'hello'
16
16
  */
17
- setElementAttributeValue(selector: string, attribute: string, value: any): void;
17
+ setElementAttributeValue<T extends Element = Element>(selector: string, attribute: string, value: any): void;
18
18
  }
@@ -17,8 +17,10 @@ class BindingHelper {
17
17
  return this._observers;
18
18
  }
19
19
  dispose() {
20
- for (const observer of this._observers) {
20
+ let observer = this._observers.pop();
21
+ while (observer) {
21
22
  observer.dispose();
23
+ observer = this._observers.pop();
22
24
  }
23
25
  this._observers = [];
24
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binding.helper.js","sourceRoot":"","sources":["../../src/binding.helper.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAEnD,MAAa,aAAa;IAexB;QAdQ,eAAU,GAAqB,EAAE,CAAC;QAClC,yBAAoB,GAAG,EAAE,CAAC;IAalB,CAAC;IAXjB,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,mBAAmB,CAAC,MAAc;QACpC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACrC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAID,OAAO;QACL,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACtC,QAAQ,CAAC,OAAO,EAAE,CAAC;SACpB;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,QAAa,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAiB,EAAE,MAA0B,EAAE,QAA6B;QAC/I,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElG,iGAAiG;QACjG,kEAAkE;QAClE,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,IAAI,gCAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;SACvD;QAED,uBAAuB;QACvB,0FAA0F;QAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;SACvF;aAAM;YACL,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,qGAAqG;IACrG,gBAAgB,CAAC,QAAgB,EAAE,SAAiB,EAAE,QAA4C,EAAE,OAA2C;QAC7I,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,EAAE;gBACzB,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,QAAgB,EAAE,SAAiB,EAAE,KAAU;QACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,EAAE;gBAC1B,GAAW,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtED,sCAsEC"}
1
+ {"version":3,"file":"binding.helper.js","sourceRoot":"","sources":["../../src/binding.helper.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,4 @@
1
- interface Binding {
2
- variable: any;
3
- property: string;
4
- }
5
- export interface ElementBinding {
6
- element: Element | null;
7
- attribute: string;
8
- }
9
- export interface ElementBindingWithListener extends ElementBinding {
10
- event: string;
11
- listener: (val: any) => any;
12
- }
13
- export interface BoundedEventWithListener {
14
- element: Element;
15
- eventName: string;
16
- listener: EventListenerOrEventListenerObject;
17
- uid: string;
18
- }
1
+ import { Binding, BoundedEventWithListener, ElementBinding, ElementBindingWithListener } from './interfaces';
19
2
  /**
20
3
  * Create 2 way Bindings for any variable that are primitive or object types, when it's an object type it will watch for property changes
21
4
  * The following 2 articles helped in building this service:
@@ -34,27 +17,27 @@ export declare class BindingService {
34
17
  get property(): string;
35
18
  dispose(): void;
36
19
  valueGetter(): any;
37
- valueSetter(val: any): void;
20
+ valueSetter<T extends Element = Element>(val: any): void;
38
21
  /**
39
22
  * Add binding to 1 or more DOM Element by an object attribute and optionally on an event, we can do it in couple ways
40
23
  * 1- if there's no event provided, it will simply replace the DOM elemnt (by an attribute), for example an innerHTML
41
24
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
42
25
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
43
26
  */
44
- bind(elements: Element | NodeListOf<HTMLElement> | null, attribute: string, eventName?: string, callback?: (val: any) => any): this;
27
+ bind<T extends Element = Element>(elements: T | NodeListOf<T> | null, attribute: string, eventName?: string, eventCallback?: (val: any) => any): this;
45
28
  /** Unbind (remove) an element event listener */
46
29
  unbind(element: Element | null, eventName: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions, eventUid?: string): void;
47
30
  /** Unbind All (remove) bounded elements with listeners */
48
31
  unbindAll(): void;
49
32
  /**
50
33
  * Add binding to a single element by an object attribute and optionally on an event, we can do it in couple ways
51
- * 1- if there's no event provided, it will simply replace the DOM elemnt (by an attribute), for example an innerHTML
34
+ * 1- if there's no event provided, it will simply replace the DOM element (by an attribute), for example an innerHTML
52
35
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
53
36
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
54
37
  */
55
- protected bindSingleElement(element: Element | null, attribute: string, eventName?: string, callback?: (val: any) => any): void;
38
+ protected bindSingleElement<T extends Element = Element>(element: T | null, attribute: string, eventName?: string, eventCallback?: (val: any) => any): void;
56
39
  /** Generate a UUID version 4 RFC compliant */
57
40
  protected generateUuidV4(): string;
41
+ protected hasData(value: any): boolean;
58
42
  protected sanitizeText(dirtyText: string): string;
59
43
  }
60
- export {};
@@ -63,14 +63,14 @@ class BindingService {
63
63
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
64
64
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
65
65
  */
66
- bind(elements, attribute, eventName, callback) {
66
+ bind(elements, attribute, eventName, eventCallback) {
67
67
  if (elements && elements.forEach) {
68
68
  // multiple DOM elements coming from a querySelectorAll() call
69
- elements.forEach(elm => this.bindSingleElement(elm, attribute, eventName, callback));
69
+ elements.forEach(elm => this.bindSingleElement(elm, attribute, eventName, eventCallback));
70
70
  }
71
71
  else if (elements) {
72
72
  // single DOM element coming from a querySelector() call
73
- this.bindSingleElement(elements, attribute, eventName, callback);
73
+ this.bindSingleElement(elements, attribute, eventName, eventCallback);
74
74
  }
75
75
  return this;
76
76
  }
@@ -96,22 +96,26 @@ class BindingService {
96
96
  }
97
97
  /**
98
98
  * Add binding to a single element by an object attribute and optionally on an event, we can do it in couple ways
99
- * 1- if there's no event provided, it will simply replace the DOM elemnt (by an attribute), for example an innerHTML
99
+ * 1- if there's no event provided, it will simply replace the DOM element (by an attribute), for example an innerHTML
100
100
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
101
101
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
102
102
  */
103
- bindSingleElement(element, attribute, eventName, callback) {
103
+ bindSingleElement(element, attribute, eventName, eventCallback) {
104
104
  const binding = { element, attribute };
105
105
  if (element) {
106
106
  if (eventName) {
107
107
  const listener = () => {
108
- const elmValue = element[attribute];
108
+ var _a;
109
+ let elmValue = element[attribute];
110
+ if (this.hasData(elmValue) && ((_a = element) === null || _a === void 0 ? void 0 : _a.type) === 'number') {
111
+ elmValue = +elmValue; // input is always string but we can parse to number when its type is number
112
+ }
109
113
  this.valueSetter(elmValue);
110
114
  if (this._binding.variable.hasOwnProperty(this._binding.property) || this._binding.property in this._binding.variable) {
111
115
  this._binding.variable[this._binding.property] = this.valueGetter();
112
116
  }
113
- if (typeof callback === 'function') {
114
- return callback(this.valueGetter());
117
+ if (typeof eventCallback === 'function') {
118
+ return eventCallback(this.valueGetter());
115
119
  }
116
120
  };
117
121
  binding.event = eventName;
@@ -131,6 +135,9 @@ class BindingService {
131
135
  return v.toString(16);
132
136
  });
133
137
  }
138
+ hasData(value) {
139
+ return value !== undefined && value !== null && value !== '';
140
+ }
134
141
  sanitizeText(dirtyText) {
135
142
  return (DOMPurify === null || DOMPurify === void 0 ? void 0 : DOMPurify.sanitize) ? DOMPurify.sanitize(dirtyText, {}) : dirtyText;
136
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binding.service.js","sourceRoot":"","sources":["../../src/binding.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binding.service.js","sourceRoot":"","sources":["../../src/binding.service.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export * from './binding.helper';
2
2
  export * from './binding.service';
3
+ export * from './interfaces';
@@ -12,4 +12,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./binding.helper"), exports);
14
14
  __exportStar(require("./binding.service"), exports);
15
+ __exportStar(require("./interfaces"), exports);
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,oDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,oDAAkC;AAClC,+CAA6B"}
@@ -0,0 +1,18 @@
1
+ export interface Binding {
2
+ variable: any;
3
+ property: string;
4
+ }
5
+ export interface ElementBinding<T extends Element = Element> {
6
+ element: T | null;
7
+ attribute: string;
8
+ }
9
+ export interface ElementBindingWithListener<T extends Element = Element> extends ElementBinding<T> {
10
+ event: string;
11
+ listener: (val: any) => any;
12
+ }
13
+ export interface BoundedEventWithListener<T extends Element = Element> {
14
+ element: T;
15
+ eventName: string;
16
+ listener: EventListenerOrEventListenerObject;
17
+ uid: string;
18
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":""}
@@ -7,12 +7,12 @@ export declare class BindingHelper {
7
7
  get observers(): BindingService[];
8
8
  constructor();
9
9
  dispose(): void;
10
- addElementBinding(variable: any, property: string, selector: string, attribute: string, events?: string | string[], callback?: (val: any) => void): void;
10
+ addElementBinding<T extends Element = Element>(variable: any, property: string, selector: string, attribute: string, events?: string | string[], callback?: (val: any) => void): void;
11
11
  /** From a DOM element selector, which could be zero or multiple elements, add an event listener */
12
- bindEventHandler(selector: string, eventName: string, callback: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
12
+ bindEventHandler<T extends Element = Element>(selector: string, eventName: string, callback: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
13
13
  /**
14
14
  * From a DOM element selector, which could be zero or multiple elements, set the value on a given attribute name
15
15
  * For example ('div.hello', 'textContent', 'world') => would set the textContent equal to 'world' on a div element having the class 'hello'
16
16
  */
17
- setElementAttributeValue(selector: string, attribute: string, value: any): void;
17
+ setElementAttributeValue<T extends Element = Element>(selector: string, attribute: string, value: any): void;
18
18
  }
@@ -14,8 +14,10 @@ export class BindingHelper {
14
14
  return this._observers;
15
15
  }
16
16
  dispose() {
17
- for (const observer of this._observers) {
17
+ let observer = this._observers.pop();
18
+ while (observer) {
18
19
  observer.dispose();
20
+ observer = this._observers.pop();
19
21
  }
20
22
  this._observers = [];
21
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binding.helper.js","sourceRoot":"","sources":["../../src/binding.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,OAAO,aAAa;IAexB;QAdQ,eAAU,GAAqB,EAAE,CAAC;QAClC,yBAAoB,GAAG,EAAE,CAAC;IAalB,CAAC;IAXjB,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,mBAAmB,CAAC,MAAc;QACpC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACrC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAID,OAAO;QACL,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACtC,QAAQ,CAAC,OAAO,EAAE,CAAC;SACpB;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,QAAa,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAiB,EAAE,MAA0B,EAAE,QAA6B;QAC/I,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElG,iGAAiG;QACjG,kEAAkE;QAClE,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;SACvD;QAED,uBAAuB;QACvB,0FAA0F;QAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;SACvF;aAAM;YACL,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,qGAAqG;IACrG,gBAAgB,CAAC,QAAgB,EAAE,SAAiB,EAAE,QAA4C,EAAE,OAA2C;QAC7I,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,EAAE;gBACzB,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,QAAgB,EAAE,SAAiB,EAAE,KAAU;QACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAc,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,EAAE;gBAC1B,GAAW,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"binding.helper.js","sourceRoot":"","sources":["../../src/binding.helper.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,4 @@
1
- interface Binding {
2
- variable: any;
3
- property: string;
4
- }
5
- export interface ElementBinding {
6
- element: Element | null;
7
- attribute: string;
8
- }
9
- export interface ElementBindingWithListener extends ElementBinding {
10
- event: string;
11
- listener: (val: any) => any;
12
- }
13
- export interface BoundedEventWithListener {
14
- element: Element;
15
- eventName: string;
16
- listener: EventListenerOrEventListenerObject;
17
- uid: string;
18
- }
1
+ import { Binding, BoundedEventWithListener, ElementBinding, ElementBindingWithListener } from './interfaces';
19
2
  /**
20
3
  * Create 2 way Bindings for any variable that are primitive or object types, when it's an object type it will watch for property changes
21
4
  * The following 2 articles helped in building this service:
@@ -34,27 +17,27 @@ export declare class BindingService {
34
17
  get property(): string;
35
18
  dispose(): void;
36
19
  valueGetter(): any;
37
- valueSetter(val: any): void;
20
+ valueSetter<T extends Element = Element>(val: any): void;
38
21
  /**
39
22
  * Add binding to 1 or more DOM Element by an object attribute and optionally on an event, we can do it in couple ways
40
23
  * 1- if there's no event provided, it will simply replace the DOM elemnt (by an attribute), for example an innerHTML
41
24
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
42
25
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
43
26
  */
44
- bind(elements: Element | NodeListOf<HTMLElement> | null, attribute: string, eventName?: string, callback?: (val: any) => any): this;
27
+ bind<T extends Element = Element>(elements: T | NodeListOf<T> | null, attribute: string, eventName?: string, eventCallback?: (val: any) => any): this;
45
28
  /** Unbind (remove) an element event listener */
46
29
  unbind(element: Element | null, eventName: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions, eventUid?: string): void;
47
30
  /** Unbind All (remove) bounded elements with listeners */
48
31
  unbindAll(): void;
49
32
  /**
50
33
  * Add binding to a single element by an object attribute and optionally on an event, we can do it in couple ways
51
- * 1- if there's no event provided, it will simply replace the DOM elemnt (by an attribute), for example an innerHTML
34
+ * 1- if there's no event provided, it will simply replace the DOM element (by an attribute), for example an innerHTML
52
35
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
53
36
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
54
37
  */
55
- protected bindSingleElement(element: Element | null, attribute: string, eventName?: string, callback?: (val: any) => any): void;
38
+ protected bindSingleElement<T extends Element = Element>(element: T | null, attribute: string, eventName?: string, eventCallback?: (val: any) => any): void;
56
39
  /** Generate a UUID version 4 RFC compliant */
57
40
  protected generateUuidV4(): string;
41
+ protected hasData(value: any): boolean;
58
42
  protected sanitizeText(dirtyText: string): string;
59
43
  }
60
- export {};
@@ -60,14 +60,14 @@ export class BindingService {
60
60
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
61
61
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
62
62
  */
63
- bind(elements, attribute, eventName, callback) {
63
+ bind(elements, attribute, eventName, eventCallback) {
64
64
  if (elements && elements.forEach) {
65
65
  // multiple DOM elements coming from a querySelectorAll() call
66
- elements.forEach(elm => this.bindSingleElement(elm, attribute, eventName, callback));
66
+ elements.forEach(elm => this.bindSingleElement(elm, attribute, eventName, eventCallback));
67
67
  }
68
68
  else if (elements) {
69
69
  // single DOM element coming from a querySelector() call
70
- this.bindSingleElement(elements, attribute, eventName, callback);
70
+ this.bindSingleElement(elements, attribute, eventName, eventCallback);
71
71
  }
72
72
  return this;
73
73
  }
@@ -93,22 +93,26 @@ export class BindingService {
93
93
  }
94
94
  /**
95
95
  * Add binding to a single element by an object attribute and optionally on an event, we can do it in couple ways
96
- * 1- if there's no event provided, it will simply replace the DOM elemnt (by an attribute), for example an innerHTML
96
+ * 1- if there's no event provided, it will simply replace the DOM element (by an attribute), for example an innerHTML
97
97
  * 2- when an event is provided, we will replace the DOM element (by an attribute) every time an event is triggered
98
98
  * 2.1- we could also provide an extra callback method to execute when the event gets triggered
99
99
  */
100
- bindSingleElement(element, attribute, eventName, callback) {
100
+ bindSingleElement(element, attribute, eventName, eventCallback) {
101
101
  const binding = { element, attribute };
102
102
  if (element) {
103
103
  if (eventName) {
104
104
  const listener = () => {
105
- const elmValue = element[attribute];
105
+ var _a;
106
+ let elmValue = element[attribute];
107
+ if (this.hasData(elmValue) && ((_a = element) === null || _a === void 0 ? void 0 : _a.type) === 'number') {
108
+ elmValue = +elmValue; // input is always string but we can parse to number when its type is number
109
+ }
106
110
  this.valueSetter(elmValue);
107
111
  if (this._binding.variable.hasOwnProperty(this._binding.property) || this._binding.property in this._binding.variable) {
108
112
  this._binding.variable[this._binding.property] = this.valueGetter();
109
113
  }
110
- if (typeof callback === 'function') {
111
- return callback(this.valueGetter());
114
+ if (typeof eventCallback === 'function') {
115
+ return eventCallback(this.valueGetter());
112
116
  }
113
117
  };
114
118
  binding.event = eventName;
@@ -128,6 +132,9 @@ export class BindingService {
128
132
  return v.toString(16);
129
133
  });
130
134
  }
135
+ hasData(value) {
136
+ return value !== undefined && value !== null && value !== '';
137
+ }
131
138
  sanitizeText(dirtyText) {
132
139
  return (DOMPurify === null || DOMPurify === void 0 ? void 0 : DOMPurify.sanitize) ? DOMPurify.sanitize(dirtyText, {}) : dirtyText;
133
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binding.service.js","sourceRoot":"","sources":["../../src/binding.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binding.service.js","sourceRoot":"","sources":["../../src/binding.service.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export * from './binding.helper';
2
2
  export * from './binding.service';
3
+ export * from './interfaces';
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './binding.helper';
2
2
  export * from './binding.service';
3
+ export * from './interfaces';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface Binding {
2
+ variable: any;
3
+ property: string;
4
+ }
5
+ export interface ElementBinding<T extends Element = Element> {
6
+ element: T | null;
7
+ attribute: string;
8
+ }
9
+ export interface ElementBindingWithListener<T extends Element = Element> extends ElementBinding<T> {
10
+ event: string;
11
+ listener: (val: any) => any;
12
+ }
13
+ export interface BoundedEventWithListener<T extends Element = Element> {
14
+ element: T;
15
+ eventName: string;
16
+ listener: EventListenerOrEventListenerObject;
17
+ uid: string;
18
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slickgrid-universal/binding",
3
- "version": "1.1.0",
3
+ "version": "1.2.3",
4
4
  "description": "Simple Vanilla Implementation of a Binding Engine & Helper to add properties/events 2 way bindings",
5
5
  "main": "dist/commonjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -14,14 +14,14 @@
14
14
  ],
15
15
  "scripts": {
16
16
  "build": "cross-env tsc --build",
17
- "postbuild": "npm-run-all bundle:commonjs",
17
+ "postbuild": "npm-run-all bundle:commonjs --npm-path npm",
18
18
  "build:watch": "cross-env tsc --incremental --watch",
19
- "dev": "run-s build",
20
- "dev:watch": "run-p build:watch",
21
- "bundle": "run-p bundle:commonjs bundle:esm",
19
+ "dev": "npm run build",
20
+ "dev:watch": "run-p build:watch --npm-path npm",
21
+ "bundle": "run-p bundle:commonjs bundle:esm --npm-path npm",
22
22
  "bundle:commonjs": "tsc --project tsconfig.bundle.json --outDir dist/commonjs --module commonjs",
23
23
  "bundle:esm": "cross-env tsc --project tsconfig.bundle.json --outDir dist/esm --module esnext --target es2018",
24
- "prebundle": "npm-run-all delete:dist",
24
+ "prebundle": "npm-run-all delete:dist --npm-path npm",
25
25
  "delete:dist": "cross-env rimraf --maxBusyTries=10 dist",
26
26
  "package:add-browser-prop": "cross-env node ../change-package-browser.js --add-browser=true --folder-name=binding",
27
27
  "package:remove-browser-prop": "cross-env node ../change-package-browser.js --remove-browser=true --folder-name=binding"
@@ -38,8 +38,8 @@
38
38
  "url": "https://github.com/ghiscoding/slickgrid-universal/issues"
39
39
  },
40
40
  "engines": {
41
- "node": ">=14.17.0",
42
- "npm": ">=6.14.8"
41
+ "node": ">=16.11.0",
42
+ "npm": ">=8.0.0"
43
43
  },
44
44
  "browserslist": [
45
45
  "last 2 version",
@@ -47,12 +47,12 @@
47
47
  "not dead"
48
48
  ],
49
49
  "dependencies": {
50
- "dompurify": "^2.3.4"
50
+ "dompurify": "^2.3.5"
51
51
  },
52
52
  "devDependencies": {
53
53
  "cross-env": "^7.0.3",
54
54
  "npm-run-all": "^4.1.5",
55
55
  "rimraf": "^3.0.2"
56
56
  },
57
- "gitHead": "fd29e770b19fc58a0b7fdd08769a03a2e3f5456d"
57
+ "gitHead": "8f9a87cfe68f6e1d6e196114cdf798065b823d01"
58
58
  }
package/CHANGELOG.md DELETED
@@ -1,80 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- # [1.1.0](https://github.com/ghiscoding/slickgrid-universal/compare/v0.19.2...v1.1.0) (2021-12-11)
7
-
8
-
9
- ### Bug Fixes
10
-
11
- * **build:** DOMPurify import fix for all framework ([c551d0c](https://github.com/ghiscoding/slickgrid-universal/commit/c551d0c64d4c7325578acf4feb5d22132c7d7f91))
12
-
13
-
14
-
15
-
16
-
17
-
18
- ## [0.19.2](https://github.com/ghiscoding/slickgrid-universal/compare/v0.19.1...v0.19.2) (2021-11-19)
19
-
20
-
21
- ### Bug Fixes
22
-
23
- * **build:** add DOM purify optional default import to fix rollup builds ([3bd335d](https://github.com/ghiscoding/slickgrid-universal/commit/3bd335dd62d0829c1581ca0fde560c93dcd84458))
24
-
25
-
26
-
27
-
28
-
29
-
30
- # [0.19.0](https://github.com/ghiscoding/slickgrid-universal/compare/v0.18.0...v0.19.0) (2021-10-28)
31
-
32
- **Note:** Version bump only for package @slickgrid-universal/binding
33
-
34
-
35
-
36
-
37
-
38
-
39
- # [0.18.0](https://github.com/ghiscoding/slickgrid-universal/compare/v0.17.0...v0.18.0) (2021-09-29)
40
-
41
- **Note:** Version bump only for package @slickgrid-universal/binding
42
-
43
-
44
-
45
-
46
-
47
-
48
- # [0.17.0](https://github.com/ghiscoding/slickgrid-universal/compare/v0.16.2...v0.17.0) (2021-09-09)
49
-
50
-
51
- ### Bug Fixes
52
-
53
- * **core:** potential event binding leaks not all removed when disposing ([3e61712](https://github.com/ghiscoding/slickgrid-universal/commit/3e61712156f3b76b48b04d66bb05f2533f041831))
54
-
55
-
56
-
57
-
58
-
59
- # [0.16.0](https://github.com/ghiscoding/slickgrid-universal/compare/v0.15.0...v0.16.0) (2021-07-16)
60
-
61
-
62
- ### Features
63
-
64
- * **services:** make everything extendable by using `protected` ([ecbb93a](https://github.com/ghiscoding/slickgrid-universal/commit/ecbb93a56abba39dd050bbd6019b86694495edd1))
65
-
66
-
67
-
68
-
69
-
70
- # [0.15.0](https://github.com/ghiscoding/slickgrid-universal/compare/v0.14.1...v0.15.0) (2021-07-06)
71
-
72
-
73
- ### Bug Fixes
74
-
75
- * **build:** the "files" property should be included in pkg.json ([3d8f12e](https://github.com/ghiscoding/slickgrid-universal/commit/3d8f12e5f55079445c6fb5cde767f8e0b4511ebb))
76
-
77
-
78
- ### Features
79
-
80
- * **components:** extract Custom Footer to be an external component ([1794c27](https://github.com/ghiscoding/slickgrid-universal/commit/1794c27d7669c172f606d709d3360bc5d2f77798))