@reidelsaltres/pureper 0.2.11 → 0.2.13
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/out/foundation/api/Observer.d.ts +3 -4
- package/out/foundation/api/Observer.d.ts.map +1 -1
- package/out/foundation/api/Observer.js +17 -16
- package/out/foundation/api/Observer.js.map +1 -1
- package/out/foundation/component_api/Attribute.d.ts +2 -1
- package/out/foundation/component_api/Attribute.d.ts.map +1 -1
- package/out/foundation/component_api/Attribute.js +30 -13
- package/out/foundation/component_api/Attribute.js.map +1 -1
- package/package.json +1 -1
- package/src/foundation/api/Observer.ts +18 -18
- package/src/foundation/component_api/Attribute.ts +31 -13
|
@@ -43,8 +43,8 @@ export declare function isObservable<T = any>(value: any): value is Observable<T
|
|
|
43
43
|
*/
|
|
44
44
|
export default class Observable<T> {
|
|
45
45
|
protected object?: T;
|
|
46
|
-
protected
|
|
47
|
-
protected
|
|
46
|
+
protected _mutationObserver: MutationObserver<T>;
|
|
47
|
+
protected _wraps: Map<Function, (oldValue: T, newValue: T) => void>;
|
|
48
48
|
readonly [OBSERVABLE_SYMBOL] = true;
|
|
49
49
|
constructor(object?: T);
|
|
50
50
|
createDependent<U>(mapper: () => U): Observable<U>;
|
|
@@ -52,12 +52,11 @@ export default class Observable<T> {
|
|
|
52
52
|
static createDependent<U>(mapper: () => U, source: Observable<any>): Observable<U>;
|
|
53
53
|
static createDependent<T, U>(mapper: (obj: T) => U, source: Observable<T>): Observable<U>;
|
|
54
54
|
getObject(): T | null;
|
|
55
|
-
getObserver(): Observer<T>;
|
|
56
|
-
getMutationObserver(): MutationObserver<T>;
|
|
57
55
|
subscribe(listener: (data: T) => void): void;
|
|
58
56
|
unsubscribe(listener: (data: T) => void): void;
|
|
59
57
|
subscribeMutation(listener: (oldValue: T, newValue: T) => void): void;
|
|
60
58
|
unsubscribeMutation(listener: (oldValue: T, newValue: T) => void): void;
|
|
59
|
+
protected notifyAll(oldValue: T, newValue: T): void;
|
|
61
60
|
setObject(object: T, silent?: boolean): void;
|
|
62
61
|
updateObject(updater: (obj: T) => T, silent?: boolean): void;
|
|
63
62
|
transaction(): Transaction<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS,CAAC,CAAC;IACxB,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CACzB;AACD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAChC,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9D,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;CAC1C;AACD,MAAM,WAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC;IACtC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACtE,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACxE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;CAClD;AAED,qBAAa,QAAQ,CAAC,CAAC;IACnB,OAAO,CAAC,SAAS,CAAgC;IAE1C,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAG5C,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAI9C,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;CAG/B;AAED,qBAAa,gBAAgB,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,SAAS,CAAiD;IAE3D,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAG7D,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAI/D,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;CAGhD;AAGD,eAAO,MAAM,iBAAiB,eAA2B,CAAC;AAE1D;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAExE;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU,CAAC,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,8 +43,8 @@ export function isObservable(value) {
|
|
|
43
43
|
*/
|
|
44
44
|
export default class Observable {
|
|
45
45
|
object;
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
_mutationObserver = new MutationObserver();
|
|
47
|
+
_wraps = new Map();
|
|
48
48
|
// Mark as Observable
|
|
49
49
|
[OBSERVABLE_SYMBOL] = true;
|
|
50
50
|
constructor(object) {
|
|
@@ -67,38 +67,39 @@ export default class Observable {
|
|
|
67
67
|
getObject() {
|
|
68
68
|
return this.object ?? null;
|
|
69
69
|
}
|
|
70
|
-
getObserver() {
|
|
71
|
-
return this.observer;
|
|
72
|
-
}
|
|
73
|
-
getMutationObserver() {
|
|
74
|
-
return this.mutationObserver;
|
|
75
|
-
}
|
|
76
70
|
subscribe(listener) {
|
|
77
|
-
|
|
71
|
+
const w = (_o, n) => listener(n);
|
|
72
|
+
this._wraps.set(listener, w);
|
|
73
|
+
this._mutationObserver.subscribe(w);
|
|
78
74
|
}
|
|
79
75
|
unsubscribe(listener) {
|
|
80
|
-
this.
|
|
76
|
+
const w = this._wraps.get(listener);
|
|
77
|
+
if (w) {
|
|
78
|
+
this._mutationObserver.unsubscribe(w);
|
|
79
|
+
this._wraps.delete(listener);
|
|
80
|
+
}
|
|
81
81
|
}
|
|
82
82
|
subscribeMutation(listener) {
|
|
83
|
-
this.
|
|
83
|
+
this._mutationObserver.subscribe(listener);
|
|
84
84
|
}
|
|
85
85
|
unsubscribeMutation(listener) {
|
|
86
|
-
this.
|
|
86
|
+
this._mutationObserver.unsubscribe(listener);
|
|
87
|
+
}
|
|
88
|
+
notifyAll(oldValue, newValue) {
|
|
89
|
+
this._mutationObserver.notify(oldValue, newValue);
|
|
87
90
|
}
|
|
88
91
|
setObject(object, silent = false) {
|
|
89
92
|
const oldObject = this.object;
|
|
90
93
|
this.object = object;
|
|
91
94
|
if (!silent) {
|
|
92
|
-
this.
|
|
93
|
-
this.mutationObserver.notify(oldObject, this.object);
|
|
95
|
+
this.notifyAll(oldObject, this.object);
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
updateObject(updater, silent = false) {
|
|
97
99
|
const oldObject = this.object;
|
|
98
100
|
this.object = updater(this.object);
|
|
99
101
|
if (!silent) {
|
|
100
|
-
this.
|
|
101
|
-
this.mutationObserver.notify(oldObject, this.object);
|
|
102
|
+
this.notifyAll(oldObject, this.object);
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
transaction() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Observer.js","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,QAAQ;IACT,SAAS,GAA6B,EAAE,CAAC;IAE1C,SAAS,CAAC,QAA2B;QACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACM,WAAW,CAAC,QAA2B;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,IAAO;QACjB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;CACJ;AAED,MAAM,OAAO,gBAAgB;IACjB,SAAS,GAA8C,EAAE,CAAC;IAE3D,SAAS,CAAC,QAA4C;QACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACM,WAAW,CAAC,QAA4C;QAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,QAAW,EAAE,QAAW;QAClC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;CACJ;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,YAAY,CAAU,KAAU;IAC5C,OAAO,KAAK,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IACjB,MAAM,CAAK;IACX,
|
|
1
|
+
{"version":3,"file":"Observer.js","sourceRoot":"","sources":["../../../src/foundation/api/Observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import Observable, { IKeyMutationObserver } from "../api/Observer.js";
|
|
|
2
2
|
import Component from "./Component.js";
|
|
3
3
|
export default class Attribute<T = any> extends Observable<T | string> implements IKeyMutationObserver<string, T | string> {
|
|
4
4
|
private component;
|
|
5
|
-
private listeners;
|
|
6
5
|
private _name;
|
|
7
6
|
private _defaultValue;
|
|
8
7
|
constructor(component: Component, name: string, value?: T);
|
|
@@ -17,6 +16,8 @@ export default class Attribute<T = any> extends Observable<T | string> implement
|
|
|
17
16
|
isDefault(): boolean;
|
|
18
17
|
isExist(): boolean;
|
|
19
18
|
subscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
|
|
19
|
+
subscribe(listener: (newValue: string | T) => void): void;
|
|
20
20
|
unsubscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
|
|
21
|
+
unsubscribe(listener: (newValue: string | T) => void): void;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=Attribute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attribute.d.ts","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAU,CAAC,CAAC,GAAG,MAAM,CAAE,YAAW,oBAAoB,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;IACtH,OAAO,CAAC,SAAS,CAAa;
|
|
1
|
+
{"version":3,"file":"Attribute.d.ts","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAU,CAAC,CAAC,GAAG,MAAM,CAAE,YAAW,oBAAoB,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;IACtH,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,aAAa,CAAc;gBAEvB,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAWlD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI/D,OAAO,CAAC,UAAU;IAYlB,IAAW,IAAI,WAEd;IAED,IAAW,KAAK,IAAI,CAAC,GAAG,MAAM,CAE7B;IAED,IAAW,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,EAE/B;IAEM,SAAS,IAAI,MAAM,GAAG,CAAC;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAqBzD,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAIrF,SAAS,IAAI,OAAO;IAGpB,OAAO,IAAI,OAAO;IAIlB,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAC5F,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAYzD,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAC9F,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;CAQrE"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import Observable from "../api/Observer.js";
|
|
2
2
|
export default class Attribute extends Observable {
|
|
3
3
|
component;
|
|
4
|
-
listeners = [];
|
|
5
4
|
_name;
|
|
6
5
|
_defaultValue;
|
|
7
6
|
constructor(component, name, value) {
|
|
@@ -12,7 +11,7 @@ export default class Attribute extends Observable {
|
|
|
12
11
|
this._defaultValue = value;
|
|
13
12
|
}
|
|
14
13
|
notify(oldValue, newValue) {
|
|
15
|
-
this.
|
|
14
|
+
this.notifyAll(oldValue, newValue);
|
|
16
15
|
}
|
|
17
16
|
initialize(initValue) {
|
|
18
17
|
this.value = initValue ?? this._defaultValue;
|
|
@@ -38,26 +37,31 @@ export default class Attribute extends Observable {
|
|
|
38
37
|
setObject(val, silent = false) {
|
|
39
38
|
if (val === this.object)
|
|
40
39
|
return;
|
|
41
|
-
|
|
42
|
-
this.notify(this.value, val);
|
|
40
|
+
const oldObject = this.object;
|
|
43
41
|
this.object = val;
|
|
44
42
|
if (typeof val === "boolean") {
|
|
45
43
|
if (val)
|
|
46
44
|
this.component.setAttribute(this._name, "");
|
|
47
45
|
else
|
|
48
46
|
this.component.removeAttribute(this._name);
|
|
49
|
-
return;
|
|
50
47
|
}
|
|
51
|
-
if (typeof val === "string") {
|
|
52
|
-
if (this._defaultValue === this.
|
|
48
|
+
else if (typeof val === "string") {
|
|
49
|
+
if (this._defaultValue === this.object)
|
|
53
50
|
this.component.removeAttribute(this._name);
|
|
54
51
|
else
|
|
55
52
|
this.component.setAttribute(this._name, val);
|
|
56
53
|
}
|
|
57
|
-
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
else {
|
|
55
|
+
if (this._defaultValue === this.object)
|
|
56
|
+
this.component.removeAttribute(this._name);
|
|
57
|
+
else if (this.object != null)
|
|
58
|
+
this.component.setAttribute(this._name, this.object.toString());
|
|
59
|
+
else
|
|
60
|
+
this.component.removeAttribute(this._name);
|
|
61
|
+
}
|
|
62
|
+
if (!silent) {
|
|
63
|
+
this.notifyAll(oldObject, this.object);
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
updateObject(updater, silent = false) {
|
|
63
67
|
this.setObject(updater(this.value), silent);
|
|
@@ -69,10 +73,23 @@ export default class Attribute extends Observable {
|
|
|
69
73
|
return this.value !== undefined && this.value !== null && this.value !== "";
|
|
70
74
|
}
|
|
71
75
|
subscribe(listener) {
|
|
72
|
-
|
|
76
|
+
if (listener.length <= 1) {
|
|
77
|
+
const w = (_o, n) => listener(n);
|
|
78
|
+
this._wraps.set(listener, w);
|
|
79
|
+
this._mutationObserver.subscribe(w);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const w = (o, n) => listener(this._name, o, n);
|
|
83
|
+
this._wraps.set(listener, w);
|
|
84
|
+
this._mutationObserver.subscribe(w);
|
|
85
|
+
}
|
|
73
86
|
}
|
|
74
87
|
unsubscribe(listener) {
|
|
75
|
-
|
|
88
|
+
const w = this._wraps.get(listener);
|
|
89
|
+
if (w) {
|
|
90
|
+
this._mutationObserver.unsubscribe(w);
|
|
91
|
+
this._wraps.delete(listener);
|
|
92
|
+
}
|
|
76
93
|
}
|
|
77
94
|
}
|
|
78
95
|
//# sourceMappingURL=Attribute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attribute.js","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"AAAA,OAAO,UAAoC,MAAM,oBAAoB,CAAC;AAGtE,MAAM,CAAC,OAAO,OAAO,SAAmB,SAAQ,UAAsB;IAC1D,SAAS,CAAa;
|
|
1
|
+
{"version":3,"file":"Attribute.js","sourceRoot":"","sources":["../../../src/foundation/component_api/Attribute.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -67,8 +67,8 @@ export function isObservable<T = any>(value: any): value is Observable<T> {
|
|
|
67
67
|
*/
|
|
68
68
|
export default class Observable<T> {
|
|
69
69
|
protected object?: T;
|
|
70
|
-
protected
|
|
71
|
-
protected
|
|
70
|
+
protected _mutationObserver: MutationObserver<T> = new MutationObserver<T>();
|
|
71
|
+
protected _wraps = new Map<Function, (oldValue: T, newValue: T) => void>();
|
|
72
72
|
|
|
73
73
|
// Mark as Observable
|
|
74
74
|
public readonly [OBSERVABLE_SYMBOL] = true;
|
|
@@ -101,44 +101,44 @@ export default class Observable<T> {
|
|
|
101
101
|
return this.object ?? null;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
public getObserver(): Observer<T> {
|
|
105
|
-
return this.observer;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
public getMutationObserver(): MutationObserver<T> {
|
|
109
|
-
return this.mutationObserver;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
104
|
public subscribe(listener: (data: T) => void): void {
|
|
113
|
-
|
|
105
|
+
const w = (_o: T, n: T) => listener(n);
|
|
106
|
+
this._wraps.set(listener, w);
|
|
107
|
+
this._mutationObserver.subscribe(w);
|
|
114
108
|
}
|
|
115
109
|
|
|
116
110
|
public unsubscribe(listener: (data: T) => void): void {
|
|
117
|
-
this.
|
|
111
|
+
const w = this._wraps.get(listener);
|
|
112
|
+
if (w) {
|
|
113
|
+
this._mutationObserver.unsubscribe(w);
|
|
114
|
+
this._wraps.delete(listener);
|
|
115
|
+
}
|
|
118
116
|
}
|
|
119
117
|
|
|
120
118
|
public subscribeMutation(listener: (oldValue: T, newValue: T) => void): void {
|
|
121
|
-
this.
|
|
119
|
+
this._mutationObserver.subscribe(listener);
|
|
122
120
|
}
|
|
123
121
|
|
|
124
122
|
public unsubscribeMutation(listener: (oldValue: T, newValue: T) => void): void {
|
|
125
|
-
this.
|
|
123
|
+
this._mutationObserver.unsubscribe(listener);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
protected notifyAll(oldValue: T, newValue: T): void {
|
|
127
|
+
this._mutationObserver.notify(oldValue, newValue);
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
public setObject(object: T, silent: boolean = false): void {
|
|
129
131
|
const oldObject = this.object;
|
|
130
132
|
this.object = object;
|
|
131
133
|
if (!silent) {
|
|
132
|
-
this.
|
|
133
|
-
this.mutationObserver.notify(oldObject, this.object);
|
|
134
|
+
this.notifyAll(oldObject, this.object);
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
137
|
public updateObject(updater: (obj: T) => T, silent: boolean = false): void {
|
|
137
138
|
const oldObject = this.object;
|
|
138
139
|
this.object = updater(this.object);
|
|
139
140
|
if (!silent) {
|
|
140
|
-
this.
|
|
141
|
-
this.mutationObserver.notify(oldObject, this.object);
|
|
141
|
+
this.notifyAll(oldObject, this.object);
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
|
|
@@ -3,7 +3,6 @@ import Component from "./Component.js";
|
|
|
3
3
|
|
|
4
4
|
export default class Attribute<T = any> extends Observable<T | string> implements IKeyMutationObserver<string, T | string> {
|
|
5
5
|
private component!: Component;
|
|
6
|
-
private listeners: Array<(oldValue: string | T, newValue: string | T) => void> = [];
|
|
7
6
|
|
|
8
7
|
private _name: string;
|
|
9
8
|
|
|
@@ -21,7 +20,7 @@ export default class Attribute<T = any> extends Observable<T | string> implement
|
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
public notify(oldValue: string | T, newValue: string | T): void {
|
|
24
|
-
this.
|
|
23
|
+
this.notifyAll(oldValue, newValue);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
private initialize(initValue: T | string) {
|
|
@@ -54,21 +53,24 @@ export default class Attribute<T = any> extends Observable<T | string> implement
|
|
|
54
53
|
|
|
55
54
|
public setObject(val: string | T, silent: boolean = false): void {
|
|
56
55
|
if (val === this.object) return;
|
|
57
|
-
|
|
56
|
+
const oldObject = this.object;
|
|
58
57
|
this.object = val;
|
|
59
58
|
|
|
60
59
|
if (typeof val === "boolean") {
|
|
61
60
|
if (val) this.component.setAttribute(this._name, "");
|
|
62
61
|
else this.component.removeAttribute(this._name);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (typeof val === "string") {
|
|
66
|
-
if (this._defaultValue === this.value) this.component.removeAttribute(this._name);
|
|
62
|
+
} else if (typeof val === "string") {
|
|
63
|
+
if (this._defaultValue === this.object) this.component.removeAttribute(this._name);
|
|
67
64
|
else this.component.setAttribute(this._name, val);
|
|
65
|
+
} else {
|
|
66
|
+
if (this._defaultValue === this.object) this.component.removeAttribute(this._name);
|
|
67
|
+
else if (this.object != null) this.component.setAttribute(this._name, (this.object as any).toString());
|
|
68
|
+
else this.component.removeAttribute(this._name);
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
if (
|
|
71
|
-
|
|
71
|
+
if (!silent) {
|
|
72
|
+
this.notifyAll(oldObject, this.object);
|
|
73
|
+
}
|
|
72
74
|
}
|
|
73
75
|
public updateObject(updater: (obj: string | T) => string | T, silent: boolean = false): void {
|
|
74
76
|
this.setObject(updater(this.value), silent);
|
|
@@ -81,10 +83,26 @@ export default class Attribute<T = any> extends Observable<T | string> implement
|
|
|
81
83
|
return this.value !== undefined && this.value !== null && this.value !== "";
|
|
82
84
|
}
|
|
83
85
|
|
|
84
|
-
public subscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void
|
|
85
|
-
|
|
86
|
+
public subscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
|
|
87
|
+
public subscribe(listener: (newValue: string | T) => void): void;
|
|
88
|
+
public subscribe(listener: Function): void {
|
|
89
|
+
if (listener.length <= 1) {
|
|
90
|
+
const w = (_o: string | T, n: string | T) => (listener as any)(n);
|
|
91
|
+
this._wraps.set(listener, w as any);
|
|
92
|
+
this._mutationObserver.subscribe(w as any);
|
|
93
|
+
} else {
|
|
94
|
+
const w = (o: string | T, n: string | T) => (listener as any)(this._name, o, n);
|
|
95
|
+
this._wraps.set(listener, w as any);
|
|
96
|
+
this._mutationObserver.subscribe(w as any);
|
|
97
|
+
}
|
|
86
98
|
}
|
|
87
|
-
public unsubscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void
|
|
88
|
-
|
|
99
|
+
public unsubscribe(listener: (key: string, oldValue: string | T, newValue: string | T) => void): void;
|
|
100
|
+
public unsubscribe(listener: (newValue: string | T) => void): void;
|
|
101
|
+
public unsubscribe(listener: Function): void {
|
|
102
|
+
const w = this._wraps.get(listener);
|
|
103
|
+
if (w) {
|
|
104
|
+
this._mutationObserver.unsubscribe(w as any);
|
|
105
|
+
this._wraps.delete(listener);
|
|
106
|
+
}
|
|
89
107
|
}
|
|
90
108
|
}
|