taggedjs 2.1.1 → 2.1.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.
- package/js/Subject.d.ts +12 -0
- package/js/Subject.js +38 -0
- package/js/Subject.js.map +1 -0
- package/js/Tag.class.d.ts +45 -0
- package/js/Tag.class.js +213 -0
- package/js/Tag.class.js.map +1 -0
- package/js/Tag.utils.d.ts +24 -0
- package/js/Tag.utils.js +102 -0
- package/js/Tag.utils.js.map +1 -0
- package/js/ValueSubject.d.ts +6 -0
- package/js/ValueSubject.js +15 -0
- package/js/ValueSubject.js.map +1 -0
- package/js/deepFunctions.d.ts +2 -0
- package/js/deepFunctions.js +76 -0
- package/js/deepFunctions.js.map +1 -0
- package/js/elementInitCheck.d.ts +2 -0
- package/js/elementInitCheck.js +18 -0
- package/js/elementInitCheck.js.map +1 -0
- package/js/getCallback.d.ts +3 -0
- package/js/getCallback.js +53 -0
- package/js/getCallback.js.map +1 -0
- package/js/getTagSupport.d.ts +20 -0
- package/js/getTagSupport.js +20 -0
- package/js/getTagSupport.js.map +1 -0
- package/js/html.d.ts +2 -0
- package/js/html.js +5 -0
- package/js/html.js.map +1 -0
- package/js/index.d.ts +10 -0
- package/js/index.js +12 -0
- package/js/index.js.map +1 -0
- package/js/inputAttribute.d.ts +1 -0
- package/js/inputAttribute.js +19 -0
- package/js/inputAttribute.js.map +1 -0
- package/js/interpolateAttributes.d.ts +3 -0
- package/js/interpolateAttributes.js +69 -0
- package/js/interpolateAttributes.js.map +1 -0
- package/js/interpolateContentTemplates.d.ts +3 -0
- package/js/interpolateContentTemplates.js +47 -0
- package/js/interpolateContentTemplates.js.map +1 -0
- package/js/interpolateElement.d.ts +14 -0
- package/js/interpolateElement.js +35 -0
- package/js/interpolateElement.js.map +1 -0
- package/js/interpolateTemplate.d.ts +21 -0
- package/js/interpolateTemplate.js +262 -0
- package/js/interpolateTemplate.js.map +1 -0
- package/js/interpolations.d.ts +6 -0
- package/js/interpolations.js +17 -0
- package/js/interpolations.js.map +1 -0
- package/js/js/Subject.d.ts +12 -0
- package/js/js/Subject.js +38 -0
- package/js/js/Subject.js.map +1 -0
- package/js/js/Tag.class.d.ts +45 -0
- package/js/js/Tag.class.js +213 -0
- package/js/js/Tag.class.js.map +1 -0
- package/js/js/Tag.utils.d.ts +24 -0
- package/js/js/Tag.utils.js +102 -0
- package/js/js/Tag.utils.js.map +1 -0
- package/js/js/ValueSubject.d.ts +6 -0
- package/js/js/ValueSubject.js +15 -0
- package/js/js/ValueSubject.js.map +1 -0
- package/js/js/deepFunctions.d.ts +2 -0
- package/js/js/deepFunctions.js +76 -0
- package/js/js/deepFunctions.js.map +1 -0
- package/js/js/elementInitCheck.d.ts +2 -0
- package/js/js/elementInitCheck.js +18 -0
- package/js/js/elementInitCheck.js.map +1 -0
- package/js/js/getCallback.d.ts +3 -0
- package/js/js/getCallback.js +53 -0
- package/js/js/getCallback.js.map +1 -0
- package/js/js/getTagSupport.d.ts +20 -0
- package/js/js/getTagSupport.js +20 -0
- package/js/js/getTagSupport.js.map +1 -0
- package/js/js/html.d.ts +2 -0
- package/js/js/html.js +5 -0
- package/js/js/html.js.map +1 -0
- package/js/js/index.d.ts +10 -0
- package/js/js/index.js +12 -0
- package/js/js/index.js.map +1 -0
- package/js/js/inputAttribute.d.ts +1 -0
- package/js/js/inputAttribute.js +19 -0
- package/js/js/inputAttribute.js.map +1 -0
- package/js/js/interpolateAttributes.d.ts +3 -0
- package/js/js/interpolateAttributes.js +69 -0
- package/js/js/interpolateAttributes.js.map +1 -0
- package/js/js/interpolateContentTemplates.d.ts +3 -0
- package/js/js/interpolateContentTemplates.js +47 -0
- package/js/js/interpolateContentTemplates.js.map +1 -0
- package/js/js/interpolateElement.d.ts +14 -0
- package/js/js/interpolateElement.js +35 -0
- package/js/js/interpolateElement.js.map +1 -0
- package/js/js/interpolateTemplate.d.ts +21 -0
- package/js/js/interpolateTemplate.js +262 -0
- package/js/js/interpolateTemplate.js.map +1 -0
- package/js/js/interpolations.d.ts +6 -0
- package/js/js/interpolations.js +17 -0
- package/js/js/interpolations.js.map +1 -0
- package/js/js/onInit.d.ts +6 -0
- package/js/js/onInit.js +17 -0
- package/js/js/onInit.js.map +1 -0
- package/js/js/processTagArray.d.ts +5 -0
- package/js/js/processTagArray.js +49 -0
- package/js/js/processTagArray.js.map +1 -0
- package/js/js/providers.d.ts +25 -0
- package/js/js/providers.js +78 -0
- package/js/js/providers.js.map +1 -0
- package/js/js/render.d.ts +6 -0
- package/js/js/render.js +31 -0
- package/js/js/render.js.map +1 -0
- package/js/js/renderAppToElement.d.ts +8 -0
- package/js/js/renderAppToElement.js +38 -0
- package/js/js/renderAppToElement.js.map +1 -0
- package/js/js/state.d.ts +21 -0
- package/js/js/state.js +63 -0
- package/js/js/state.js.map +1 -0
- package/js/js/tag.d.ts +17 -0
- package/js/js/tag.js +57 -0
- package/js/js/tag.js.map +1 -0
- package/js/js/tagRunner.d.ts +17 -0
- package/js/js/tagRunner.js +19 -0
- package/js/js/tagRunner.js.map +1 -0
- package/js/js/wait.d.ts +1 -0
- package/js/js/wait.js +8 -0
- package/js/js/wait.js.map +1 -0
- package/js/onInit.d.ts +6 -0
- package/js/onInit.js +17 -0
- package/js/onInit.js.map +1 -0
- package/js/processTagArray.d.ts +5 -0
- package/js/processTagArray.js +49 -0
- package/js/processTagArray.js.map +1 -0
- package/js/providers.d.ts +25 -0
- package/js/providers.js +78 -0
- package/js/providers.js.map +1 -0
- package/js/render.d.ts +6 -0
- package/js/render.js +31 -0
- package/js/render.js.map +1 -0
- package/js/renderAppToElement.d.ts +8 -0
- package/js/renderAppToElement.js +38 -0
- package/js/renderAppToElement.js.map +1 -0
- package/js/state.d.ts +21 -0
- package/js/state.js +63 -0
- package/js/state.js.map +1 -0
- package/js/tag.d.ts +17 -0
- package/js/tag.js +57 -0
- package/js/tag.js.map +1 -0
- package/js/tagRunner.d.ts +17 -0
- package/js/tagRunner.js +19 -0
- package/js/tagRunner.js.map +1 -0
- package/js/wait.d.ts +1 -0
- package/js/wait.js +8 -0
- package/js/wait.js.map +1 -0
- package/package.json +1 -1
package/js/Subject.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type Subscription = (() => void) & {
|
|
2
|
+
unsubscribe: () => any;
|
|
3
|
+
};
|
|
4
|
+
type Subscriber = () => any;
|
|
5
|
+
export declare class Subject {
|
|
6
|
+
subscribers: Subscriber[];
|
|
7
|
+
value?: any;
|
|
8
|
+
subscribe(callback: Subscriber): Subscription;
|
|
9
|
+
set(value: any): void;
|
|
10
|
+
next: (value: any) => void;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
package/js/Subject.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export class Subject {
|
|
2
|
+
subscribers = [];
|
|
3
|
+
value;
|
|
4
|
+
// unsubcount = 0 // 🔬 testing
|
|
5
|
+
subscribe(callback) {
|
|
6
|
+
this.subscribers.push(callback);
|
|
7
|
+
Subject.globalSubs.push(callback); // 🔬 testing
|
|
8
|
+
++Subject.globalSubCount;
|
|
9
|
+
const unsubscribe = () => {
|
|
10
|
+
removeSubFromArray(this.subscribers, callback);
|
|
11
|
+
removeSubFromArray(Subject.globalSubs, callback); // 🔬 testing
|
|
12
|
+
--Subject.globalSubCount;
|
|
13
|
+
};
|
|
14
|
+
// Return a function to unsubscribe from the BehaviorSubject
|
|
15
|
+
unsubscribe.unsubscribe = unsubscribe;
|
|
16
|
+
return unsubscribe;
|
|
17
|
+
}
|
|
18
|
+
set(value) {
|
|
19
|
+
this.value = value;
|
|
20
|
+
// Notify all subscribers with the new value
|
|
21
|
+
this.subscribers.forEach((callback) => {
|
|
22
|
+
callback.value = value;
|
|
23
|
+
callback(value);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
next = this.set;
|
|
27
|
+
}
|
|
28
|
+
function removeSubFromArray(subscribers, callback) {
|
|
29
|
+
const index = subscribers.indexOf(callback);
|
|
30
|
+
if (index !== -1) {
|
|
31
|
+
subscribers.splice(index, 1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
;
|
|
35
|
+
Subject.globalSubCount = 0 // for ease of debugging
|
|
36
|
+
;
|
|
37
|
+
Subject.globalSubs = []; // 🔬 testing
|
|
38
|
+
//# sourceMappingURL=Subject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Subject.js","sourceRoot":"","sources":["../ts/Subject.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,OAAO;IAClB,WAAW,GAAiB,EAAE,CAAA;IAC9B,KAAK,CAAM;IACX,+BAA+B;IAE/B,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC9B;QAAC,OAAe,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,aAAa;QAEzD,EAAG,OAAe,CAAC,cAAc,CAAA;QAEjC,MAAM,WAAW,GAAiB,GAAG,EAAE;YACrC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC9C,kBAAkB,CAAE,OAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA,CAAC,aAAa;YACvE,EAAG,OAAe,CAAC,cAAc,CAAA;QACnC,CAAC,CAAA;QAED,4DAA4D;QAC5D,WAAW,CAAC,WAAW,GAAG,WAAW,CAAA;QAErC,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,GAAG,CAAC,KAAU;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,4CAA4C;QAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE;YACzC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;CAChB;AAED,SAAS,kBAAkB,CACzB,WAAyB,EACzB,QAAoB;IAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,CAAC;AAAC,OAAe,CAAC,cAAc,GAAG,CAAC,CAAC,wBAAwB;CAC5D;AAAC,OAAe,CAAC,UAAU,GAAG,EAAE,CAAA,CAAC,aAAa"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { TagSupport } from "./getTagSupport.js";
|
|
2
|
+
import { Provider } from "./providers.js";
|
|
3
|
+
import { Subscription } from "./Subject.js";
|
|
4
|
+
export declare const variablePrefix = "__tagVar";
|
|
5
|
+
export declare const escapeVariable: string;
|
|
6
|
+
export declare const escapeSearch: RegExp;
|
|
7
|
+
export type Context = {
|
|
8
|
+
[index: string]: any;
|
|
9
|
+
};
|
|
10
|
+
export declare class Tag {
|
|
11
|
+
strings: string[];
|
|
12
|
+
values: any[];
|
|
13
|
+
context: Context;
|
|
14
|
+
clones: (Element | Text | ChildNode)[];
|
|
15
|
+
cloneSubs: Subscription[];
|
|
16
|
+
children: Tag[];
|
|
17
|
+
tagSupport: TagSupport;
|
|
18
|
+
ownerTag?: Tag;
|
|
19
|
+
arrayValue?: any[];
|
|
20
|
+
constructor(strings: string[], values: any[]);
|
|
21
|
+
providers: Provider[];
|
|
22
|
+
beforeRedraw(): void;
|
|
23
|
+
afterRender(): void;
|
|
24
|
+
/** Used for array, such as array.map(), calls aka array.map(x => html``.key(x)) */
|
|
25
|
+
key(arrayValue: any[]): this;
|
|
26
|
+
destroy(stagger?: number, byParent?: boolean): number;
|
|
27
|
+
destroySubscriptions(): void;
|
|
28
|
+
destroyClones(stagger?: number): number;
|
|
29
|
+
updateByTag(tag: Tag): void;
|
|
30
|
+
lastTemplateString: string | undefined;
|
|
31
|
+
/** A method of passing down the same render method */
|
|
32
|
+
setSupport(tagSupport: TagSupport): void;
|
|
33
|
+
updateConfig(strings: string[], values: any[]): void;
|
|
34
|
+
getTemplate(): {
|
|
35
|
+
string: string;
|
|
36
|
+
strings: string[];
|
|
37
|
+
values: any[];
|
|
38
|
+
context: Context;
|
|
39
|
+
};
|
|
40
|
+
isLikeTag(tag: Tag): boolean;
|
|
41
|
+
update(): Context;
|
|
42
|
+
updateValues(values: any[]): Context;
|
|
43
|
+
updateContext(context: Context): Context;
|
|
44
|
+
getAppElement(): Tag;
|
|
45
|
+
}
|
package/js/Tag.class.js
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { bindSubjectFunction, elementDestroyCheck, getSubjectFunction, setValueRedraw } from "./Tag.utils.js";
|
|
2
|
+
import { getTagSupport } from "./getTagSupport.js";
|
|
3
|
+
import { isTagComponent } from "./interpolateTemplate.js";
|
|
4
|
+
import { ValueSubject } from "./ValueSubject.js";
|
|
5
|
+
import { deepEqual } from "./deepFunctions.js";
|
|
6
|
+
import { runAfterRender, runBeforeRedraw, runBeforeRender } from "./tagRunner.js";
|
|
7
|
+
export const variablePrefix = '__tagVar';
|
|
8
|
+
export const escapeVariable = '--' + variablePrefix + '--';
|
|
9
|
+
const prefixSearch = new RegExp(variablePrefix, 'g');
|
|
10
|
+
export const escapeSearch = new RegExp(escapeVariable, 'g');
|
|
11
|
+
export class Tag {
|
|
12
|
+
strings;
|
|
13
|
+
values;
|
|
14
|
+
context = {}; // populated after reading interpolated.values array converted to an object {variable0, variable:1}
|
|
15
|
+
clones = []; // elements on document
|
|
16
|
+
cloneSubs = []; // subscriptions created by clones
|
|
17
|
+
children = []; // tags on me
|
|
18
|
+
tagSupport;
|
|
19
|
+
// only present when a child of a tag
|
|
20
|
+
ownerTag;
|
|
21
|
+
// present only when an array. Populated by this.key()
|
|
22
|
+
arrayValue;
|
|
23
|
+
constructor(strings, values) {
|
|
24
|
+
this.strings = strings;
|
|
25
|
+
this.values = values;
|
|
26
|
+
}
|
|
27
|
+
providers = [];
|
|
28
|
+
beforeRedraw() {
|
|
29
|
+
runBeforeRedraw(this.tagSupport, this);
|
|
30
|
+
}
|
|
31
|
+
afterRender() {
|
|
32
|
+
runAfterRender(this.tagSupport, this);
|
|
33
|
+
}
|
|
34
|
+
/** Used for array, such as array.map(), calls aka array.map(x => html``.key(x)) */
|
|
35
|
+
key(arrayValue) {
|
|
36
|
+
this.arrayValue = arrayValue;
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
destroy(stagger = 0, byParent = false) {
|
|
40
|
+
this.children.forEach((kid, index) => kid.destroy(0, true));
|
|
41
|
+
this.destroySubscriptions();
|
|
42
|
+
if (!byParent) {
|
|
43
|
+
stagger = this.destroyClones(stagger);
|
|
44
|
+
}
|
|
45
|
+
return stagger;
|
|
46
|
+
}
|
|
47
|
+
destroySubscriptions() {
|
|
48
|
+
this.cloneSubs.forEach(cloneSub => cloneSub.unsubscribe());
|
|
49
|
+
this.cloneSubs.length = 0;
|
|
50
|
+
}
|
|
51
|
+
destroyClones(stagger = 0) {
|
|
52
|
+
this.clones.reverse().forEach((clone, index) => {
|
|
53
|
+
let promise = Promise.resolve();
|
|
54
|
+
if (clone.ondestroy) {
|
|
55
|
+
promise = elementDestroyCheck(clone, stagger);
|
|
56
|
+
}
|
|
57
|
+
promise.then(() => clone.parentNode.removeChild(clone));
|
|
58
|
+
});
|
|
59
|
+
this.clones.length = 0;
|
|
60
|
+
return stagger;
|
|
61
|
+
}
|
|
62
|
+
updateByTag(tag) {
|
|
63
|
+
this.updateConfig(tag.strings, tag.values);
|
|
64
|
+
this.tagSupport.templater = tag.tagSupport.templater;
|
|
65
|
+
}
|
|
66
|
+
lastTemplateString = undefined; // used to compare templates for updates
|
|
67
|
+
/** A method of passing down the same render method */
|
|
68
|
+
setSupport(tagSupport) {
|
|
69
|
+
this.tagSupport = this.tagSupport || tagSupport;
|
|
70
|
+
this.tagSupport.mutatingRender = this.tagSupport.mutatingRender || tagSupport.mutatingRender;
|
|
71
|
+
this.children.forEach(kid => kid.setSupport(tagSupport));
|
|
72
|
+
}
|
|
73
|
+
updateConfig(strings, values) {
|
|
74
|
+
this.strings = strings;
|
|
75
|
+
this.updateValues(values);
|
|
76
|
+
}
|
|
77
|
+
getTemplate() {
|
|
78
|
+
// TODO: treat interpolation hack here
|
|
79
|
+
const string = this.lastTemplateString = this.strings.map((string, index) => {
|
|
80
|
+
const safeString = string.replace(prefixSearch, escapeVariable);
|
|
81
|
+
const endString = safeString + (this.values.length > index ? `{${variablePrefix}${index}}` : '');
|
|
82
|
+
return endString;
|
|
83
|
+
}).join('');
|
|
84
|
+
return { string, strings: this.strings, values: this.values, context: this.context };
|
|
85
|
+
}
|
|
86
|
+
isLikeTag(tag) {
|
|
87
|
+
if (tag.lastTemplateString !== this.lastTemplateString) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
if (tag.values.length !== this.values.length) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
const allVarsMatch = tag.values.every((value, index) => {
|
|
94
|
+
const compareTo = this.values[index];
|
|
95
|
+
const isFunctions = value instanceof Function && compareTo instanceof Function;
|
|
96
|
+
if (isFunctions) {
|
|
97
|
+
const stringMatch = value.toString() === compareTo.toString();
|
|
98
|
+
if (stringMatch) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
if (value instanceof Tag && compareTo instanceof Tag) {
|
|
104
|
+
value.ownerTag = this; // let children know I own them
|
|
105
|
+
this.children.push(value); // record children I created
|
|
106
|
+
value.lastTemplateString || value.getTemplate().string; // ensure last template string is generated
|
|
107
|
+
if (value.isLikeTag(compareTo)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
if (allVarsMatch) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
update() {
|
|
120
|
+
return this.updateContext(this.context);
|
|
121
|
+
}
|
|
122
|
+
updateValues(values) {
|
|
123
|
+
this.values = values;
|
|
124
|
+
return this.updateContext(this.context);
|
|
125
|
+
}
|
|
126
|
+
updateContext(context) {
|
|
127
|
+
this.strings.map((_string, index) => {
|
|
128
|
+
const variableName = variablePrefix + index;
|
|
129
|
+
const hasValue = this.values.length > index;
|
|
130
|
+
const value = this.values[index];
|
|
131
|
+
// is something already there?
|
|
132
|
+
const existing = context[variableName];
|
|
133
|
+
if (existing) {
|
|
134
|
+
/** @type {Tag | undefined} */
|
|
135
|
+
const ogTag = existing.value?.tag;
|
|
136
|
+
// handle already seen tag components
|
|
137
|
+
if (isTagComponent(value)) {
|
|
138
|
+
const latestProps = value.cloneProps;
|
|
139
|
+
const existingTag = existing.tag;
|
|
140
|
+
// previously was something else, now a tag component
|
|
141
|
+
if (!existing.tag) {
|
|
142
|
+
setValueRedraw(value, existing, this);
|
|
143
|
+
value.redraw(latestProps);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const oldTagSetup = existingTag.tagSupport;
|
|
147
|
+
const tagSupport = value.tagSupport || oldTagSetup || getTagSupport(value);
|
|
148
|
+
const oldCloneProps = tagSupport.templater?.cloneProps;
|
|
149
|
+
const oldProps = tagSupport.templater?.props;
|
|
150
|
+
if (existingTag) {
|
|
151
|
+
const isCommonEqual = oldProps === undefined && oldProps === latestProps;
|
|
152
|
+
const equal = isCommonEqual || deepEqual(oldCloneProps, latestProps);
|
|
153
|
+
if (equal) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
setValueRedraw(value, existing, this);
|
|
158
|
+
oldTagSetup.templater = value;
|
|
159
|
+
existing.value.tag = oldTagSetup.newest = value.redraw(latestProps);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// handle already seen tags
|
|
163
|
+
if (ogTag) {
|
|
164
|
+
const tagSupport = ogTag.tagSupport;
|
|
165
|
+
const templater = value;
|
|
166
|
+
runBeforeRender(tagSupport, ogTag);
|
|
167
|
+
tagSupport.oldest.beforeRedraw();
|
|
168
|
+
const retag = templater.wrapper();
|
|
169
|
+
retag.tagSupport = tagSupport;
|
|
170
|
+
templater.newest = retag;
|
|
171
|
+
tagSupport.oldest.afterRender();
|
|
172
|
+
ogTag.updateByTag(retag);
|
|
173
|
+
existing.set(value);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// now its a function
|
|
177
|
+
if (value instanceof Function) {
|
|
178
|
+
existing.set(bindSubjectFunction(value, this));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
existing.set(value); // let ValueSubject now of newest value
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// First time values below
|
|
185
|
+
if (isTagComponent(value)) {
|
|
186
|
+
const existing = context[variableName] = new ValueSubject(value);
|
|
187
|
+
setValueRedraw(value, existing, this);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (value instanceof Function) {
|
|
191
|
+
context[variableName] = getSubjectFunction(value, this);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (!hasValue) {
|
|
195
|
+
return; // more strings than values, stop here
|
|
196
|
+
}
|
|
197
|
+
if (value instanceof Tag) {
|
|
198
|
+
value.ownerTag = this;
|
|
199
|
+
this.children.push(value);
|
|
200
|
+
}
|
|
201
|
+
context[variableName] = new ValueSubject(value);
|
|
202
|
+
});
|
|
203
|
+
return context;
|
|
204
|
+
}
|
|
205
|
+
getAppElement() {
|
|
206
|
+
let tag = this;
|
|
207
|
+
while (tag.ownerTag) {
|
|
208
|
+
tag = tag.ownerTag;
|
|
209
|
+
}
|
|
210
|
+
return tag;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=Tag.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tag.class.js","sourceRoot":"","sources":["../ts/Tag.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAc,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGjF,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAA;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAAA;AAE1D,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;AAI3D,MAAM,OAAO,GAAG;IAeL;IACA;IAfT,OAAO,GAAY,EAAE,CAAA,CAAC,mGAAmG;IACzH,MAAM,GAAmC,EAAE,CAAA,CAAC,uBAAuB;IACnE,SAAS,GAAmB,EAAE,CAAA,CAAC,kCAAkC;IACjE,QAAQ,GAAU,EAAE,CAAA,CAAC,aAAa;IAElC,UAAU,CAAa;IAEvB,qCAAqC;IACrC,QAAQ,CAAM;IAEd,sDAAsD;IACtD,UAAU,CAAQ;IAElB,YACS,OAAiB,EACjB,MAAa;QADb,YAAO,GAAP,OAAO,CAAU;QACjB,WAAM,GAAN,MAAM,CAAO;IACnB,CAAC;IAEJ,SAAS,GAAe,EAAE,CAAA;IAE1B,YAAY;QACV,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,WAAW;QACT,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,mFAAmF;IACnF,GAAG,CAAC,UAAiB;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,KAAK;QAEhB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAE3B,IAAG,CAAC,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,aAAa,CACX,OAAO,GAAG,CAAC;QAEX,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;YAC1D,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;YAC/B,IAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC/C,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAChB,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CACpC,CAAA;QACH,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QAEtB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,WAAW,CAAC,GAAQ;QAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1C,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAA;IACtD,CAAC;IAED,kBAAkB,GAAuB,SAAS,CAAA,CAAC,wCAAwC;IAE3F,sDAAsD;IACtD,UAAU,CAAC,UAAsB;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAA;QAC/C,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,cAAc,CAAA;QAC5F,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,YAAY,CAAC,OAAiB,EAAE,MAAa;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,WAAW;QACT,sCAAsC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;YAC/D,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAChG,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEX,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAC,IAAI,CAAC,OAAO,EAAE,CAAA;IACrF,CAAC;IAED,SAAS,CAAC,GAAQ;QAChB,IAAG,GAAG,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAG,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAC,EAAE;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACpC,MAAM,WAAW,GAAG,KAAK,YAAY,QAAQ,IAAI,SAAS,YAAY,QAAQ,CAAA;YAE9E,IAAG,WAAW,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAA;gBAC7D,IAAG,WAAW,EAAE,CAAC;oBACf,OAAO,IAAI,CAAA;gBACb,CAAC;gBAED,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAG,KAAK,YAAY,GAAG,IAAI,SAAS,YAAY,GAAG,EAAE,CAAC;gBACpD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA,CAAC,+BAA+B;gBACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC,oCAAoC;gBAC9D,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAA,CAAC,2CAA2C;gBAElG,IAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9B,OAAO,IAAI,CAAA;gBACb,CAAC;gBAED,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,IAAG,YAAY,EAAE,CAAC;YAChB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,aAAa,CAAE,IAAI,CAAC,OAAO,CAAE,CAAA;IAC3C,CAAC;IAED,YAAY,CAAC,MAAa;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,aAAa,CAAC,OAAgB;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,YAAY,GAAG,cAAc,GAAG,KAAK,CAAA;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAEhC,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;YAEtC,IAAG,QAAQ,EAAE,CAAC;gBACZ,8BAA8B;gBAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAA;gBAEjC,qCAAqC;gBACrC,IAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAA;oBACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAA;oBAEhC,qDAAqD;oBACrD,IAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;wBACjB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;wBACrC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;wBACzB,OAAM;oBACR,CAAC;oBAED,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAA;oBAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;oBAC1E,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,EAAE,UAAU,CAAA;oBACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAA;oBAE5C,IAAG,WAAW,EAAE,CAAC;wBACf,MAAM,aAAa,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,CAAA;wBACxE,MAAM,KAAK,GAAG,aAAa,IAAI,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;wBACpE,IAAG,KAAK,EAAE,CAAC;4BACT,OAAM;wBACR,CAAC;oBACH,CAAC;oBAED,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;oBACrC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAA;oBAC7B,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;oBACnE,OAAM;gBACR,CAAC;gBAED,2BAA2B;gBAC3B,IAAG,KAAK,EAAE,CAAC;oBACT,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;oBACnC,MAAM,SAAS,GAAG,KAAwB,CAAA;oBAC1C,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;oBAClC,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;oBAEhC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,CAAA;oBAEjC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;oBAC7B,SAAS,CAAC,MAAM,GAAG,KAAK,CAAA;oBACxB,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;oBAC/B,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;oBACxB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBAEnB,OAAM;gBACR,CAAC;gBAED,qBAAqB;gBACrB,IAAG,KAAK,YAAY,QAAQ,EAAE,CAAC;oBAC7B,QAAQ,CAAC,GAAG,CAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAE,CAAA;oBAChD,OAAM;gBACR,CAAC;gBAED,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA,CAAC,uCAAuC;gBAE3D,OAAM;YACR,CAAC;YAED,0BAA0B;YAE1B,IAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;gBAChE,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;gBACrC,OAAM;YACR,CAAC;YAED,IAAG,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC7B,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBACvD,OAAM;YACR,CAAC;YAED,IAAG,CAAC,QAAQ,EAAE,CAAC;gBACb,OAAM,CAAC,sCAAsC;YAC/C,CAAC;YAED,IAAG,KAAK,YAAY,GAAG,EAAE,CAAC;gBACxB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;gBACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC3B,CAAC;YAED,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QAEF,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,aAAa;QACX,IAAI,GAAG,GAAQ,IAAI,CAAA;QAEnB,OAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnB,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAA;QACpB,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ValueSubject } from "./ValueSubject.js";
|
|
2
|
+
import { Tag } from "./Tag.class.js";
|
|
3
|
+
import { TemplaterResult } from "./tag.js";
|
|
4
|
+
export declare function getSubjectFunction(value: any, tag: Tag): ValueSubject;
|
|
5
|
+
/**
|
|
6
|
+
* @param {*} value
|
|
7
|
+
* @param {Tag} tag
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function bindSubjectFunction(value: (...args: any[]) => any, tag: Tag): {
|
|
11
|
+
(element: Element, args: any[]): any;
|
|
12
|
+
tagFunction: (...args: any[]) => any;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param {*} templater
|
|
17
|
+
* @param {ExistingValue} existing
|
|
18
|
+
* @param {Tag} ownerTag
|
|
19
|
+
*/
|
|
20
|
+
export declare function setValueRedraw(templater: TemplaterResult, // latest tag function to call for rendering
|
|
21
|
+
existing: any, ownerTag: Tag): void;
|
|
22
|
+
export declare function elementDestroyCheck(nextSibling: Element & {
|
|
23
|
+
ondestroy?: () => any;
|
|
24
|
+
}, stagger: number): any;
|
package/js/Tag.utils.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { getTagSupport } from "./getTagSupport.js";
|
|
2
|
+
import { config as providers } from "./providers.js";
|
|
3
|
+
import { ValueSubject } from "./ValueSubject.js";
|
|
4
|
+
import { runBeforeRender } from "./tagRunner.js";
|
|
5
|
+
export function getSubjectFunction(value, tag) {
|
|
6
|
+
return new ValueSubject(bindSubjectFunction(value, tag));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @param {*} value
|
|
10
|
+
* @param {Tag} tag
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
export function bindSubjectFunction(value, tag) {
|
|
14
|
+
function subjectFunction(element, args) {
|
|
15
|
+
const renderCount = tag.tagSupport.renderCount;
|
|
16
|
+
const method = value.bind(element);
|
|
17
|
+
const callbackResult = method(...args);
|
|
18
|
+
if (renderCount !== tag.tagSupport.renderCount) {
|
|
19
|
+
return; // already rendered
|
|
20
|
+
}
|
|
21
|
+
tag.tagSupport.render();
|
|
22
|
+
if (callbackResult instanceof Promise) {
|
|
23
|
+
callbackResult.then(() => {
|
|
24
|
+
tag.tagSupport.render();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return callbackResult;
|
|
28
|
+
}
|
|
29
|
+
subjectFunction.tagFunction = value;
|
|
30
|
+
return subjectFunction;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param {*} templater
|
|
35
|
+
* @param {ExistingValue} existing
|
|
36
|
+
* @param {Tag} ownerTag
|
|
37
|
+
*/
|
|
38
|
+
export function setValueRedraw(templater, // latest tag function to call for rendering
|
|
39
|
+
existing, ownerTag) {
|
|
40
|
+
// redraw does not communicate to parent
|
|
41
|
+
templater.redraw = () => {
|
|
42
|
+
// Find previous variables
|
|
43
|
+
const existingTag = existing.tag;
|
|
44
|
+
const tagSupport = existingTag?.tagSupport || getTagSupport(templater); // this.tagSupport
|
|
45
|
+
// signify to other operations that a rendering has occurred so they do not need to render again
|
|
46
|
+
++tagSupport.renderCount;
|
|
47
|
+
existing.tagSupport = tagSupport;
|
|
48
|
+
// const self = this as any
|
|
49
|
+
const self = templater;
|
|
50
|
+
tagSupport.mutatingRender = tagSupport.mutatingRender || existing.tagSupport?.mutatingRender || ( /* TODO: we might be able to remove this last OR */self.tagSupport.mutatingRender);
|
|
51
|
+
const runtimeOwnerTag = existingTag?.ownerTag || ownerTag;
|
|
52
|
+
runBeforeRender(tagSupport, tagSupport.oldest);
|
|
53
|
+
if (tagSupport.oldest) {
|
|
54
|
+
tagSupport.oldest.beforeRedraw();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
providers.ownerTag = runtimeOwnerTag;
|
|
58
|
+
}
|
|
59
|
+
const retag = templater.wrapper();
|
|
60
|
+
retag.tagSupport = tagSupport;
|
|
61
|
+
if (tagSupport.oldest) {
|
|
62
|
+
tagSupport.oldest.afterRender();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
retag.afterRender();
|
|
66
|
+
}
|
|
67
|
+
templater.newest = retag;
|
|
68
|
+
retag.ownerTag = runtimeOwnerTag;
|
|
69
|
+
const oldest = tagSupport.oldest = tagSupport.oldest || retag;
|
|
70
|
+
tagSupport.newest = retag;
|
|
71
|
+
const oldestTagSupport = oldest.tagSupport;
|
|
72
|
+
oldest.tagSupport = oldestTagSupport || tagSupport;
|
|
73
|
+
oldest.tagSupport.templater = templater;
|
|
74
|
+
// retag.getTemplate() // cause lastTemplateString to render
|
|
75
|
+
retag.setSupport(tagSupport);
|
|
76
|
+
const isSameTag = existingTag && existingTag.isLikeTag(retag);
|
|
77
|
+
// If previously was a tag and seems to be same tag, then just update current tag with new values
|
|
78
|
+
if (isSameTag) {
|
|
79
|
+
oldest.updateByTag(retag);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
existing.set(templater);
|
|
83
|
+
return retag;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function elementDestroyCheck(nextSibling, stagger) {
|
|
87
|
+
const onDestroyDoubleWrap = nextSibling.ondestroy; // nextSibling.getAttribute('onDestroy')
|
|
88
|
+
if (!onDestroyDoubleWrap) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const onDestroyWrap = onDestroyDoubleWrap.tagFunction;
|
|
92
|
+
if (!onDestroyWrap) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const onDestroy = onDestroyWrap.tagFunction;
|
|
96
|
+
if (!onDestroy) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const event = { target: nextSibling, stagger };
|
|
100
|
+
return onDestroy(event);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=Tag.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tag.utils.js","sourceRoot":"","sources":["../ts/Tag.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Subject } from './Subject.js';
|
|
2
|
+
export class ValueSubject extends Subject {
|
|
3
|
+
value;
|
|
4
|
+
constructor(initialValue) {
|
|
5
|
+
super();
|
|
6
|
+
this.value = initialValue;
|
|
7
|
+
}
|
|
8
|
+
subscribe(callback) {
|
|
9
|
+
const unsubscribe = super.subscribe(callback);
|
|
10
|
+
// Call the callback immediately with the current value
|
|
11
|
+
callback(this.value);
|
|
12
|
+
return unsubscribe;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ValueSubject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueSubject.js","sourceRoot":"","sources":["../ts/ValueSubject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,KAAK,CAAK;IAEV,YAAY,YAAiB;QAC3B,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;IAC3B,CAAC;IAED,SAAS,CAAC,QAAa;QACrB,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAE7C,uDAAuD;QACvD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEpB,OAAO,WAAW,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export function deepClone(obj, visited = new WeakMap()) {
|
|
2
|
+
// If obj is a primitive type or null, return it directly
|
|
3
|
+
if (obj === null || typeof obj !== 'object') {
|
|
4
|
+
return obj;
|
|
5
|
+
}
|
|
6
|
+
// If obj is already visited, return the cloned reference
|
|
7
|
+
if (visited.has(obj)) {
|
|
8
|
+
return visited.get(obj);
|
|
9
|
+
}
|
|
10
|
+
// Handle special cases like Date and RegExp
|
|
11
|
+
if (obj instanceof Date) {
|
|
12
|
+
return new Date(obj);
|
|
13
|
+
}
|
|
14
|
+
if (obj instanceof RegExp) {
|
|
15
|
+
return new RegExp(obj);
|
|
16
|
+
}
|
|
17
|
+
// Create an empty object or array with the same prototype
|
|
18
|
+
const clone = Array.isArray(obj) ? [] : Object.create(Object.getPrototypeOf(obj));
|
|
19
|
+
// Register the cloned object to avoid cyclic references
|
|
20
|
+
visited.set(obj, clone);
|
|
21
|
+
// Clone each property or element of the object or array
|
|
22
|
+
if (Array.isArray(obj)) {
|
|
23
|
+
for (let i = 0; i < obj.length; i++) {
|
|
24
|
+
clone[i] = deepClone(obj[i], visited);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
for (const key in obj) {
|
|
29
|
+
if (obj.hasOwnProperty(key)) {
|
|
30
|
+
clone[key] = deepClone(obj[key], visited);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return clone;
|
|
35
|
+
}
|
|
36
|
+
export function deepEqual(obj1, obj2) {
|
|
37
|
+
if (obj1 === obj2) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
if (typeof obj1 !== 'object' ||
|
|
41
|
+
typeof obj2 !== 'object' ||
|
|
42
|
+
obj1 === null ||
|
|
43
|
+
obj2 === null) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const keys1 = Object.keys(obj1);
|
|
47
|
+
const keys2 = Object.keys(obj2);
|
|
48
|
+
if (keys1.length !== keys2.length) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
for (const key of keys1) {
|
|
52
|
+
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
|
|
53
|
+
if (obj1[key] instanceof Function && obj2[key] instanceof Function && obj1[key].toString() === obj2[key].toString()) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Check if obj1 and obj2 are both arrays
|
|
60
|
+
if (Array.isArray(obj1) && Array.isArray(obj2)) {
|
|
61
|
+
if (obj1.length !== obj2.length) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
for (let i = 0; i < obj1.length; i++) {
|
|
65
|
+
if (!deepEqual(obj1[i], obj2[i])) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (Array.isArray(obj1) || Array.isArray(obj2)) {
|
|
71
|
+
// One is an array, and the other is not
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=deepFunctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepFunctions.js","sourceRoot":"","sources":["../ts/deepFunctions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function elementInitCheck(nextSibling, counts) {
|
|
2
|
+
const onInitDoubleWrap = nextSibling.oninit;
|
|
3
|
+
if (!onInitDoubleWrap) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
const onInitWrap = onInitDoubleWrap.tagFunction;
|
|
7
|
+
if (!onInitWrap) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const onInit = onInitWrap.tagFunction;
|
|
11
|
+
if (!onInit) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const event = { target: nextSibling, stagger: counts.added };
|
|
15
|
+
onInit(event);
|
|
16
|
+
++counts.added;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=elementInitCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementInitCheck.js","sourceRoot":"","sources":["../ts/elementInitCheck.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,WAAgC,EAChC,MAAc;IAEd,MAAM,gBAAgB,GAAI,WAAmB,CAAC,MAAM,CAAA;IACpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7D,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,EAAE,MAAM,CAAC,KAAK,CAAC;AACjB,CAAC"}
|