taggedjs 2.1.1 → 2.3.25
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/index.js +1 -1
- package/js/Clones.type.d.ts +1 -0
- package/js/Clones.type.js +2 -0
- package/js/Clones.type.js.map +1 -0
- package/js/Props.d.ts +1 -0
- package/js/Props.js +2 -0
- package/js/Props.js.map +1 -0
- package/js/Subject.d.ts +17 -0
- package/js/Subject.js +43 -0
- package/js/Subject.js.map +1 -0
- package/js/Tag.class.d.ts +69 -0
- package/js/Tag.class.js +247 -0
- package/js/Tag.class.js.map +1 -0
- package/js/Tag.utils.d.ts +12 -0
- package/js/Tag.utils.js +31 -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/bindSubjectCallback.function.d.ts +5 -0
- package/js/bindSubjectCallback.function.js +19 -0
- package/js/bindSubjectCallback.function.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/elementDestroyCheck.function.d.ts +3 -0
- package/js/elementDestroyCheck.function.js +17 -0
- package/js/elementDestroyCheck.function.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/gateway/gateway.web.component.d.ts +11 -0
- package/js/gateway/gateway.web.component.js +20 -0
- package/js/gateway/gateway.web.component.js.map +1 -0
- package/js/gateway/index.d.ts +3 -0
- package/js/gateway/index.js +3 -0
- package/js/gateway/index.js.map +1 -0
- package/js/gateway/loadTagGateway.function.d.ts +2 -0
- package/js/gateway/loadTagGateway.function.js +18 -0
- package/js/gateway/loadTagGateway.function.js.map +1 -0
- package/js/gateway/tagGateway.function.d.ts +31 -0
- package/js/gateway/tagGateway.function.js +187 -0
- package/js/gateway/tagGateway.function.js.map +1 -0
- package/js/getCallback.d.ts +3 -0
- package/js/getCallback.js +50 -0
- package/js/getCallback.js.map +1 -0
- package/js/getTagSupport.d.ts +21 -0
- package/js/getTagSupport.js +109 -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 +19 -0
- package/js/index.js +24 -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 +4 -0
- package/js/interpolateAttributes.js +135 -0
- package/js/interpolateAttributes.js.map +1 -0
- package/js/interpolateContentTemplates.d.ts +6 -0
- package/js/interpolateContentTemplates.js +54 -0
- package/js/interpolateContentTemplates.js.map +1 -0
- package/js/interpolateElement.d.ts +9 -0
- package/js/interpolateElement.js +39 -0
- package/js/interpolateElement.js.map +1 -0
- package/js/interpolateTemplate.d.ts +17 -0
- package/js/interpolateTemplate.js +64 -0
- package/js/interpolateTemplate.js.map +1 -0
- package/js/interpolations.d.ts +7 -0
- package/js/interpolations.js +18 -0
- package/js/interpolations.js.map +1 -0
- package/js/isInstance.d.ts +6 -0
- package/js/isInstance.js +10 -0
- package/js/isInstance.js.map +1 -0
- package/js/js/Clones.type.d.ts +1 -0
- package/js/js/Clones.type.js +2 -0
- package/js/js/Clones.type.js.map +1 -0
- package/js/js/Props.d.ts +1 -0
- package/js/js/Props.js +2 -0
- package/js/js/Props.js.map +1 -0
- package/js/js/Subject.d.ts +17 -0
- package/js/js/Subject.js +43 -0
- package/js/js/Subject.js.map +1 -0
- package/js/js/Tag.class.d.ts +67 -0
- package/js/js/Tag.class.js +241 -0
- package/js/js/Tag.class.js.map +1 -0
- package/js/js/Tag.utils.d.ts +12 -0
- package/js/js/Tag.utils.js +31 -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/bindSubjectCallback.function.d.ts +5 -0
- package/js/js/bindSubjectCallback.function.js +19 -0
- package/js/js/bindSubjectCallback.function.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/elementDestroyCheck.function.d.ts +3 -0
- package/js/js/elementDestroyCheck.function.js +17 -0
- package/js/js/elementDestroyCheck.function.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 +50 -0
- package/js/js/getCallback.js.map +1 -0
- package/js/js/getTagSupport.d.ts +22 -0
- package/js/js/getTagSupport.js +116 -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 +19 -0
- package/js/js/index.js +24 -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 +4 -0
- package/js/js/interpolateAttributes.js +127 -0
- package/js/js/interpolateAttributes.js.map +1 -0
- package/js/js/interpolateContentTemplates.d.ts +5 -0
- package/js/js/interpolateContentTemplates.js +57 -0
- package/js/js/interpolateContentTemplates.js.map +1 -0
- package/js/js/interpolateElement.d.ts +9 -0
- package/js/js/interpolateElement.js +32 -0
- package/js/js/interpolateElement.js.map +1 -0
- package/js/js/interpolateTemplate.d.ts +17 -0
- package/js/js/interpolateTemplate.js +64 -0
- package/js/js/interpolateTemplate.js.map +1 -0
- package/js/js/interpolations.d.ts +8 -0
- package/js/js/interpolations.js +17 -0
- package/js/js/interpolations.js.map +1 -0
- package/js/js/isInstance.d.ts +6 -0
- package/js/js/isInstance.js +10 -0
- package/js/js/isInstance.js.map +1 -0
- package/js/js/onDestroy.d.ts +2 -0
- package/js/js/onDestroy.js +20 -0
- package/js/js/onDestroy.js.map +1 -0
- package/js/js/onInit.d.ts +2 -0
- package/js/js/onInit.js +19 -0
- package/js/js/onInit.js.map +1 -0
- package/js/js/processSubjectComponent.function.d.ts +8 -0
- package/js/js/processSubjectComponent.function.js +53 -0
- package/js/js/processSubjectComponent.function.js.map +1 -0
- package/js/js/processSubjectValue.function.d.ts +16 -0
- package/js/js/processSubjectValue.function.js +122 -0
- package/js/js/processSubjectValue.function.js.map +1 -0
- package/js/js/processTagArray.d.ts +9 -0
- package/js/js/processTagArray.js +60 -0
- package/js/js/processTagArray.js.map +1 -0
- package/js/js/processTagResult.function.d.ts +10 -0
- package/js/js/processTagResult.function.js +42 -0
- package/js/js/processTagResult.function.js.map +1 -0
- package/js/js/providers.d.ts +17 -0
- package/js/js/providers.js +86 -0
- package/js/js/providers.js.map +1 -0
- package/js/js/redrawTag.function.d.ts +7 -0
- package/js/js/redrawTag.function.js +9 -0
- package/js/js/redrawTag.function.js.map +1 -0
- package/js/js/render.d.ts +1 -0
- package/js/js/render.js +24 -0
- package/js/js/render.js.map +1 -0
- package/js/js/renderAppToElement.d.ts +14 -0
- package/js/js/renderAppToElement.js +57 -0
- package/js/js/renderAppToElement.js.map +1 -0
- package/js/js/setUse.function.d.ts +23 -0
- package/js/js/setUse.function.js +14 -0
- package/js/js/setUse.function.js.map +1 -0
- package/js/js/state.d.ts +24 -0
- package/js/js/state.js +98 -0
- package/js/js/state.js.map +1 -0
- package/js/js/tag.d.ts +8 -0
- package/js/js/tag.js +46 -0
- package/js/js/tag.js.map +1 -0
- package/js/js/tagElement.d.ts +14 -0
- package/js/js/tagElement.js +57 -0
- package/js/js/tagElement.js.map +1 -0
- package/js/js/tagGateway.function.d.ts +5 -0
- package/js/js/tagGateway.function.js +119 -0
- package/js/js/tagGateway.function.js.map +1 -0
- package/js/js/tagRunner.d.ts +6 -0
- package/js/js/tagRunner.js +19 -0
- package/js/js/tagRunner.js.map +1 -0
- package/js/js/templater.utils.d.ts +28 -0
- package/js/js/templater.utils.js +99 -0
- package/js/js/templater.utils.js.map +1 -0
- package/js/js/updateTag.utils.d.ts +6 -0
- package/js/js/updateTag.utils.js +84 -0
- package/js/js/updateTag.utils.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/onDestroy.d.ts +2 -0
- package/js/onDestroy.js +20 -0
- package/js/onDestroy.js.map +1 -0
- package/js/onInit.d.ts +2 -0
- package/js/onInit.js +19 -0
- package/js/onInit.js.map +1 -0
- package/js/processSubjectComponent.function.d.ts +8 -0
- package/js/processSubjectComponent.function.js +53 -0
- package/js/processSubjectComponent.function.js.map +1 -0
- package/js/processSubjectValue.function.d.ts +16 -0
- package/js/processSubjectValue.function.js +122 -0
- package/js/processSubjectValue.function.js.map +1 -0
- package/js/processTagArray.d.ts +9 -0
- package/js/processTagArray.js +60 -0
- package/js/processTagArray.js.map +1 -0
- package/js/processTagResult.function.d.ts +10 -0
- package/js/processTagResult.function.js +39 -0
- package/js/processTagResult.function.js.map +1 -0
- package/js/providers.d.ts +17 -0
- package/js/providers.js +86 -0
- package/js/providers.js.map +1 -0
- package/js/redrawTag.function.d.ts +7 -0
- package/js/redrawTag.function.js +8 -0
- package/js/redrawTag.function.js.map +1 -0
- package/js/render.d.ts +1 -0
- package/js/render.js +17 -0
- package/js/render.js.map +1 -0
- package/js/renderAppToElement.d.ts +14 -0
- package/js/renderAppToElement.js +57 -0
- package/js/renderAppToElement.js.map +1 -0
- package/js/setUse.function.d.ts +23 -0
- package/js/setUse.function.js +14 -0
- package/js/setUse.function.js.map +1 -0
- package/js/state.d.ts +24 -0
- package/js/state.js +98 -0
- package/js/state.js.map +1 -0
- package/js/tag.d.ts +7 -0
- package/js/tag.js +46 -0
- package/js/tag.js.map +1 -0
- package/js/tagElement.d.ts +14 -0
- package/js/tagElement.js +57 -0
- package/js/tagElement.js.map +1 -0
- package/js/tagGateway.function.d.ts +14 -0
- package/js/tagGateway.function.js +138 -0
- package/js/tagGateway.function.js.map +1 -0
- package/js/tagRunner.d.ts +6 -0
- package/js/tagRunner.js +19 -0
- package/js/tagRunner.js.map +1 -0
- package/js/templater.utils.d.ts +27 -0
- package/js/templater.utils.js +98 -0
- package/js/templater.utils.js.map +1 -0
- package/js/updateTag.utils.d.ts +6 -0
- package/js/updateTag.utils.js +102 -0
- package/js/updateTag.utils.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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Props } from "./Props.js";
|
|
2
|
+
import { Tag, TagMemory } from "./Tag.class.js";
|
|
3
|
+
import { TemplaterResult } from "./templater.utils.js";
|
|
4
|
+
export declare class TagSupport {
|
|
5
|
+
templater: TemplaterResult;
|
|
6
|
+
props?: unknown;
|
|
7
|
+
depth: number;
|
|
8
|
+
clonedProps: Props;
|
|
9
|
+
latestProps: Props;
|
|
10
|
+
latestClonedProps: Props;
|
|
11
|
+
memory: TagMemory;
|
|
12
|
+
constructor(templater: TemplaterResult, props?: unknown);
|
|
13
|
+
oldest?: Tag;
|
|
14
|
+
newest?: Tag;
|
|
15
|
+
hasPropChanges(props: any, // natural props
|
|
16
|
+
pastCloneProps: any, // previously cloned props
|
|
17
|
+
compareToProps: any): boolean;
|
|
18
|
+
mutatingRender(): Tag;
|
|
19
|
+
render(): Tag;
|
|
20
|
+
renderExistingTag(tag: Tag, newTemplater: TemplaterResult): boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function getTagSupport(depth: number, templater: TemplaterResult, props?: Props): TagSupport;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { deepClone, deepEqual } from "./deepFunctions.js";
|
|
2
|
+
import { getNewProps } from "./templater.utils.js";
|
|
3
|
+
/*
|
|
4
|
+
{
|
|
5
|
+
depth,
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
export class TagSupport {
|
|
9
|
+
templater;
|
|
10
|
+
props;
|
|
11
|
+
depth = 0; // TODO: maybe remove
|
|
12
|
+
// props from **constructor** are converted for comparing over renders
|
|
13
|
+
clonedProps;
|
|
14
|
+
latestProps; // new props NOT cloned props
|
|
15
|
+
latestClonedProps;
|
|
16
|
+
memory = {
|
|
17
|
+
context: {}, // populated after reading interpolated.values array converted to an object {variable0, variable:1}
|
|
18
|
+
state: {
|
|
19
|
+
newest: [],
|
|
20
|
+
},
|
|
21
|
+
providers: [],
|
|
22
|
+
/** Indicator of re-rending. Saves from double rending something already rendered */
|
|
23
|
+
renderCount: 0,
|
|
24
|
+
};
|
|
25
|
+
constructor(templater, props) {
|
|
26
|
+
this.templater = templater;
|
|
27
|
+
this.props = props;
|
|
28
|
+
this.latestProps = props; // getNewProps(props, templater)
|
|
29
|
+
const latestProps = getNewProps(props, templater);
|
|
30
|
+
this.latestClonedProps = deepClone(latestProps);
|
|
31
|
+
this.clonedProps = this.latestClonedProps;
|
|
32
|
+
}
|
|
33
|
+
// TODO: these below may not be in use
|
|
34
|
+
oldest;
|
|
35
|
+
newest;
|
|
36
|
+
hasPropChanges(props, // natural props
|
|
37
|
+
pastCloneProps, // previously cloned props
|
|
38
|
+
compareToProps) {
|
|
39
|
+
const oldProps = this.props;
|
|
40
|
+
const isCommonEqual = props === undefined && props === compareToProps;
|
|
41
|
+
const isEqual = isCommonEqual || deepEqual(pastCloneProps, oldProps);
|
|
42
|
+
return !isEqual;
|
|
43
|
+
}
|
|
44
|
+
mutatingRender() {
|
|
45
|
+
const message = 'Tag function "render()" was called in sync but can only be called async';
|
|
46
|
+
console.error(message, { tagSupport: this });
|
|
47
|
+
throw new Error(message);
|
|
48
|
+
} // loaded later and only callable async
|
|
49
|
+
render() {
|
|
50
|
+
++this.memory.renderCount;
|
|
51
|
+
return this.mutatingRender();
|
|
52
|
+
} // ensure this function still works even during deconstructing
|
|
53
|
+
renderExistingTag(tag, newTemplater) {
|
|
54
|
+
const preRenderCount = this.memory.renderCount;
|
|
55
|
+
providersChangeCheck(tag);
|
|
56
|
+
// When the providers were checked, a render to myself occurred and I do not need to re-render again
|
|
57
|
+
if (preRenderCount !== this.memory.renderCount) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
const oldTemplater = tag.tagSupport.templater;
|
|
61
|
+
const nowProps = newTemplater.tagSupport.props; // natural props
|
|
62
|
+
const oldProps = oldTemplater?.tagSupport.props; // previously cloned props
|
|
63
|
+
const newProps = newTemplater.tagSupport.clonedProps; // new props cloned
|
|
64
|
+
return renderTag(this, nowProps, oldProps, newProps, this.templater);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function getTagSupport(depth, templater, props) {
|
|
68
|
+
const tagSupport = new TagSupport(templater, props);
|
|
69
|
+
tagSupport.depth = depth;
|
|
70
|
+
return tagSupport;
|
|
71
|
+
}
|
|
72
|
+
function providersChangeCheck(tag) {
|
|
73
|
+
const providersWithChanges = tag.tagSupport.memory.providers.filter(provider => {
|
|
74
|
+
return !deepEqual(provider.instance, provider.clone);
|
|
75
|
+
});
|
|
76
|
+
// reset clones
|
|
77
|
+
providersWithChanges.forEach(provider => {
|
|
78
|
+
const appElement = tag.getAppElement();
|
|
79
|
+
handleProviderChanges(appElement, provider);
|
|
80
|
+
provider.clone = deepClone(provider.instance);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function handleProviderChanges(appElement, provider) {
|
|
84
|
+
const tagsWithProvider = getTagsWithProvider(appElement, provider);
|
|
85
|
+
tagsWithProvider.forEach(({ tag, renderCount, provider }) => {
|
|
86
|
+
const unRendered = renderCount === tag.tagSupport.memory.renderCount;
|
|
87
|
+
if (unRendered) {
|
|
88
|
+
provider.clone = deepClone(provider.instance);
|
|
89
|
+
tag.tagSupport.render();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function getTagsWithProvider(tag, provider, memory = []) {
|
|
94
|
+
const hasProvider = tag.tagSupport.memory.providers.find(xProvider => xProvider.constructMethod === provider.constructMethod);
|
|
95
|
+
if (hasProvider) {
|
|
96
|
+
memory.push({
|
|
97
|
+
tag,
|
|
98
|
+
renderCount: tag.tagSupport.memory.renderCount,
|
|
99
|
+
provider: hasProvider
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
tag.children.forEach(child => getTagsWithProvider(child, provider, memory));
|
|
103
|
+
return memory;
|
|
104
|
+
}
|
|
105
|
+
function renderTag(tagSupport, nowProps, // natural props
|
|
106
|
+
oldProps, // previously NOT cloned props
|
|
107
|
+
newProps, // now props cloned
|
|
108
|
+
templater) {
|
|
109
|
+
const hasPropsChanged = tagSupport.hasPropChanges(nowProps, newProps, oldProps);
|
|
110
|
+
tagSupport.newest = templater.redraw(); // No change detected, just redraw me only
|
|
111
|
+
if (!hasPropsChanged) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=getTagSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTagSupport.js","sourceRoot":"","sources":["../ts/getTagSupport.ts"],"names":[],"mappings":"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"}
|
package/js/js/html.d.ts
ADDED
package/js/js/html.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../ts/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEpC,MAAM,UAAU,IAAI,CAClB,OAAwC,EACxC,GAAG,MAAiB;IAEpB,OAAO,IAAI,GAAG,CAAC,OAAmB,EAAE,MAAM,CAAC,CAAA;AAC7C,CAAC"}
|
package/js/js/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Must use .js and NOT .ts extensions here */
|
|
2
|
+
export * from "./html.js";
|
|
3
|
+
export * from "./Subject.js";
|
|
4
|
+
export * from "./interpolateElement.js";
|
|
5
|
+
export * from "./getTagSupport.js";
|
|
6
|
+
export * from "./redrawTag.function.js";
|
|
7
|
+
export * from "./tagGateway.function.js";
|
|
8
|
+
export { isTagComponent } from "./isInstance.js";
|
|
9
|
+
export { tags, tag } from "./tag.js";
|
|
10
|
+
export { TagComponent } from "./templater.utils.js";
|
|
11
|
+
export { tagElement } from "./tagElement.js";
|
|
12
|
+
export { Tag } from "./Tag.class.js";
|
|
13
|
+
export { runBeforeRender } from "./tagRunner.js";
|
|
14
|
+
export { setUse } from "./setUse.function.js";
|
|
15
|
+
export { providers } from "./providers.js";
|
|
16
|
+
export { state } from "./state.js";
|
|
17
|
+
export * from "./onInit.js";
|
|
18
|
+
export * from "./onDestroy.js";
|
|
19
|
+
export * from "./getCallback.js";
|
package/js/js/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Must use .js and NOT .ts extensions here */
|
|
2
|
+
export * from "./html.js";
|
|
3
|
+
export * from "./Subject.js";
|
|
4
|
+
export * from "./interpolateElement.js";
|
|
5
|
+
export * from "./getTagSupport.js";
|
|
6
|
+
export * from "./redrawTag.function.js";
|
|
7
|
+
export * from "./tagGateway.function.js";
|
|
8
|
+
// TODO: export *
|
|
9
|
+
export { isTagComponent } from "./isInstance.js";
|
|
10
|
+
export { tags, tag } from "./tag.js";
|
|
11
|
+
export { tagElement } from "./tagElement.js";
|
|
12
|
+
export { Tag } from "./Tag.class.js";
|
|
13
|
+
export { runBeforeRender } from "./tagRunner.js";
|
|
14
|
+
export { setUse } from "./setUse.function.js";
|
|
15
|
+
/* hooks */
|
|
16
|
+
// TODO: export *
|
|
17
|
+
export { providers } from "./providers.js";
|
|
18
|
+
// TODO: export *
|
|
19
|
+
export { state } from "./state.js";
|
|
20
|
+
export * from "./onInit.js";
|
|
21
|
+
export * from "./onDestroy.js";
|
|
22
|
+
export * from "./getCallback.js";
|
|
23
|
+
/* end: hooks */
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AAExC,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,WAAW;AACT,iBAAiB;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,iBAAiB;AACjB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAClC,gBAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function inputAttribute(name: string, value: any, element: Element): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function inputAttribute(name, value, element) {
|
|
2
|
+
const names = name.split('.');
|
|
3
|
+
// style.position = "absolute"
|
|
4
|
+
if (names[0] === 'style') {
|
|
5
|
+
element.style[names[1]] = value;
|
|
6
|
+
}
|
|
7
|
+
// Example: class.width-full = "true"
|
|
8
|
+
if (names[0] === 'class') {
|
|
9
|
+
names.pop();
|
|
10
|
+
if (value) {
|
|
11
|
+
names.forEach(name => element.classList.remove(name));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
names.forEach(name => element.classList.add(name));
|
|
15
|
+
}
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=inputAttribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputAttribute.js","sourceRoot":"","sources":["../ts/inputAttribute.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,KAAU,EACV,OAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE7B,8BAA8B;IAC9B,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACvB,OAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC1C,CAAC;IAED,qCAAqC;IACrC,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,GAAG,EAAE,CAAA;QACX,IAAG,KAAK,EAAE,CAAC;YACT,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,CAAC;QACD,OAAM;IACR,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Context, Tag } from "./Tag.class.js";
|
|
2
|
+
export declare function interpolateAttributes(child: Element, scope: Context, ownerTag: Tag): void;
|
|
3
|
+
/** Looking for (class | style) followed by a period */
|
|
4
|
+
export declare function isSpecialAttr(attrName: string | String): boolean;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { inputAttribute } from "./inputAttribute.js";
|
|
2
|
+
import { isSubjectInstance } from "./isInstance.js";
|
|
3
|
+
export function interpolateAttributes(child, scope, ownerTag) {
|
|
4
|
+
const attrNames = child.getAttributeNames();
|
|
5
|
+
const isTextArea = child.nodeName === 'TEXTAREA';
|
|
6
|
+
if (isTextArea && !attrNames.includes('value')) {
|
|
7
|
+
const value = child.getAttribute('textVarValue'); // (child as any).value
|
|
8
|
+
processAttribute('textVarValue', value, child, scope, ownerTag, (_name, value) => child.value = value);
|
|
9
|
+
}
|
|
10
|
+
const howToSet = (name, value) => child.setAttribute(name, value);
|
|
11
|
+
attrNames.forEach(attrName => {
|
|
12
|
+
const value = child.getAttribute(attrName);
|
|
13
|
+
processAttribute(attrName, value, child, scope, ownerTag, howToSet);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Looking for (class | style) followed by a period */
|
|
17
|
+
export function isSpecialAttr(attrName) {
|
|
18
|
+
return attrName.search(/^(class|style)(\.)/) >= 0;
|
|
19
|
+
}
|
|
20
|
+
function processAttribute(attrName, value, child, scope, ownerTag, howToSet) {
|
|
21
|
+
if (isTagVar(value)) {
|
|
22
|
+
return processScopedNameValueAttr(attrName, value, child, scope, ownerTag, howToSet);
|
|
23
|
+
}
|
|
24
|
+
if (isTagVar(attrName)) {
|
|
25
|
+
const contextValueSubject = getContextValueByVarString(scope, attrName);
|
|
26
|
+
let lastValue;
|
|
27
|
+
// the above callback gets called immediately since its a ValueSubject()
|
|
28
|
+
const sub = contextValueSubject.subscribe((value) => {
|
|
29
|
+
processNameOnlyAttr(value, lastValue, child, ownerTag, howToSet);
|
|
30
|
+
lastValue = value;
|
|
31
|
+
});
|
|
32
|
+
ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
|
|
33
|
+
child.removeAttribute(attrName);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Non dynamic
|
|
37
|
+
const isSpecial = isSpecialAttr(attrName);
|
|
38
|
+
if (isSpecial) {
|
|
39
|
+
return inputAttribute(attrName, value, child);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const startRegX = /^\s*{__tagvar/;
|
|
43
|
+
const endRegX = /}\s*$/;
|
|
44
|
+
function isTagVar(value) {
|
|
45
|
+
return value && value.search(startRegX) >= 0 && value.search(endRegX) >= 0;
|
|
46
|
+
}
|
|
47
|
+
function processNameOnlyAttr(attrValue, lastValue, child, ownerTag, howToSet) {
|
|
48
|
+
if (lastValue && lastValue != attrValue) {
|
|
49
|
+
if (typeof (lastValue) === 'string') {
|
|
50
|
+
child.removeAttribute(lastValue);
|
|
51
|
+
}
|
|
52
|
+
else if (lastValue instanceof Object) {
|
|
53
|
+
Object.entries(lastValue).forEach(([name]) => child.removeAttribute(name));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (typeof (lastValue) === 'string') {
|
|
57
|
+
if (!attrValue.length) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
processNameValueAttr(attrValue, '', child, ownerTag, howToSet);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (attrValue instanceof Object) {
|
|
64
|
+
Object.entries(attrValue).forEach(([name, value]) => processNameValueAttr(name, value, child, ownerTag, howToSet));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function getContextValueByVarString(scope, value) {
|
|
69
|
+
const code = value.replace('{', '').split('').reverse().join('').replace('}', '').split('').reverse().join('');
|
|
70
|
+
return scope[code];
|
|
71
|
+
}
|
|
72
|
+
function processNameValueAttr(attrName, result, child, ownerTag, howToSet) {
|
|
73
|
+
const isSpecial = isSpecialAttr(attrName);
|
|
74
|
+
// attach as callback
|
|
75
|
+
if (result instanceof Function) {
|
|
76
|
+
;
|
|
77
|
+
child[attrName] = function (...args) {
|
|
78
|
+
return result(child, args);
|
|
79
|
+
};
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (isSubjectInstance(result)) {
|
|
83
|
+
child.removeAttribute(attrName);
|
|
84
|
+
const callback = (newAttrValue) => processSubjectValue(newAttrValue, child, attrName, isSpecial, result, howToSet);
|
|
85
|
+
// the above callback gets called immediately since its a ValueSubject()
|
|
86
|
+
const sub = result.subscribe(callback);
|
|
87
|
+
ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
howToSet(attrName, result);
|
|
91
|
+
// child.setAttribute(attrName, result.value)
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
function processSubjectValue(newAttrValue, child, attrName, isSpecial, result, howToSet) {
|
|
95
|
+
if (newAttrValue instanceof Function) {
|
|
96
|
+
;
|
|
97
|
+
child[attrName] = function (...args) {
|
|
98
|
+
return newAttrValue(child, args);
|
|
99
|
+
};
|
|
100
|
+
child[attrName].tagFunction = newAttrValue;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (isSpecial) {
|
|
104
|
+
inputAttribute(attrName, newAttrValue, child);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (newAttrValue) {
|
|
108
|
+
howToSet(attrName, newAttrValue);
|
|
109
|
+
// child.setAttribute(attrName, newAttrValue)
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const isDeadValue = newAttrValue === undefined || newAttrValue === false || newAttrValue === null;
|
|
113
|
+
if (isDeadValue) {
|
|
114
|
+
child.removeAttribute(attrName);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// value is 0
|
|
118
|
+
howToSet(attrName, newAttrValue);
|
|
119
|
+
// child.setAttribute(attrName, newAttrValue)
|
|
120
|
+
}
|
|
121
|
+
function processScopedNameValueAttr(attrName, value, // {__tagVarN}
|
|
122
|
+
child, scope, ownerTag, howToSet) {
|
|
123
|
+
// get the code inside the brackets like "variable0" or "{variable0}"
|
|
124
|
+
const result = getContextValueByVarString(scope, value);
|
|
125
|
+
return processNameValueAttr(attrName, result, child, ownerTag, howToSet);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=interpolateAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateAttributes.js","sourceRoot":"","sources":["../ts/interpolateAttributes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,KAAc,EACd,QAAa;IAEb,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAA;IAE3C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAA;IAChD,IAAG,UAAU,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA,CAAC,uBAAuB;QACxE,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAE,KAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;IACjH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAEjF,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC1C,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,aAAa,CAC3B,QAAyB;IAEzB,OAAO,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAgB,EAChB,KAAoB,EACpB,KAAc,EACd,KAAc,EACd,QAAa,EACb,QAA8C;IAE9C,IAAK,QAAQ,CAAC,KAAK,CAAC,EAAG,CAAC;QACtB,OAAO,0BAA0B,CAC/B,QAAQ,EACR,KAAe,EACf,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,CACT,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAG,CAAC;QACxB,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACvE,IAAI,SAAc,CAAC;QAEnB,wEAAwE;QACxE,MAAM,GAAG,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAU,EAAE,EAAE;YACvD,mBAAmB,CACjB,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,CACT,CAAA;YAED,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC,yCAAyC;QACtE,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAE/B,OAAM;IACR,CAAC;IAED,cAAc;IACd,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,eAAe,CAAA;AACjC,MAAM,OAAO,GAAG,OAAO,CAAA;AACvB,SAAS,QAAQ,CAAC,KAAoB;IACpC,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5E,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAAuC,EACvC,SAAmD,EACnD,KAAc,EACd,QAAa,EACb,QAAkB;IAElB,IAAG,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QACvC,IAAG,OAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,eAAe,CAAC,SAAmB,CAAC,CAAA;QAC5C,CAAC;aAAM,IAAG,SAAS,YAAY,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAC3C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAC5B,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAG,OAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QAED,oBAAoB,CAClB,SAAmB,EACnB,EAAE,EACF,KAAK,EACL,QAAQ,EACR,QAAQ,CACT,CAAA;QAED,OAAM;IACR,CAAC;IAED,IAAG,SAAS,YAAY,MAAM,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAClD,oBAAoB,CAClB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,CACT,CACF,CAAA;QAED,OAAM;IACR,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAc,EACd,KAAa;IAEb,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5G,OAAO,KAAK,CAAC,IAAI,CAAC,CAAA;AACpB,CAAC;AAID,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,MAAW,EACX,KAAc,EACd,QAAa,EACb,QAAkB;IAElB,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IAEzC,qBAAqB;IACrB,IAAG,MAAM,YAAY,QAAQ,EAAE,CAAC;QAC9B,CAAC;QAAC,KAAa,CAAC,QAAQ,CAAC,GAAG,UAAS,GAAG,IAAW;YACjD,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC5B,CAAC,CAAA;QACD,OAAM;IACR,CAAC;IAED,IAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,CAAC,YAAiB,EAAE,EAAE,CACrC,mBAAmB,CACjB,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,SAAS,EACT,MAAM,EACN,QAAQ,CACT,CAAA;QAEH,wEAAwE;QACxE,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,QAAe,CAAC,CAAA;QAC7C,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC,yCAAyC;QAEtE,OAAM;IACR,CAAC;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC1B,6CAA6C;IAC7C,OAAM;AACR,CAAC;AAED,SAAS,mBAAmB,CAC1B,YAAiB,EACjB,KAAc,EACd,QAAgB,EAChB,SAAkB,EAClB,MAAW,EACX,QAAkB;IAElB,IAAG,YAAY,YAAY,QAAQ,EAAE,CAAC;QACpC,CAAC;QAAC,KAAa,CAAC,QAAQ,CAAC,GAAG,UAAS,GAAG,IAAW;YACjD,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAClC,CAAC,CAGA;QAAC,KAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,YAAY,CAAA;QAEpD,OAAM;IACR,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;QAC7C,OAAM;IACR,CAAC;IAED,IAAG,YAAY,EAAE,CAAC;QAChB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAChC,6CAA6C;QAC7C,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,IAAI,CAAA;IACjG,IAAG,WAAW,EAAE,CAAC;QACf,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC/B,OAAM;IACR,CAAC;IAED,aAAa;IACb,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAChC,6CAA6C;AAC/C,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAgB,EAChB,KAAa,EAAE,cAAc;AAC7B,KAAc,EACd,KAAc,EACd,QAAa,EACb,QAA8C;IAE9C,qEAAqE;IACrE,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACvD,OAAO,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC1E,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Clones } from "./Clones.type.js";
|
|
2
|
+
import { Tag } from "./Tag.class.js";
|
|
3
|
+
import { InterpolateOptions } from "./interpolateElement.js";
|
|
4
|
+
/** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
|
|
5
|
+
export declare function interpolateContentTemplates(element: Element, variable: any, tag: Tag, options: InterpolateOptions): Clones;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { interpolateTemplate } from "./interpolateTemplate.js";
|
|
2
|
+
const templateSearch = new RegExp('\\s*<template interpolate end id="__tagvar(\\d{1,4})"([^>]*)></template>(\\s*)');
|
|
3
|
+
/** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
|
|
4
|
+
export function interpolateContentTemplates(element, variable, tag, options) {
|
|
5
|
+
if (!element.children || element.tagName === 'TEMPLATE') {
|
|
6
|
+
return []; // done
|
|
7
|
+
}
|
|
8
|
+
const counts = {
|
|
9
|
+
added: 0,
|
|
10
|
+
removed: 0,
|
|
11
|
+
};
|
|
12
|
+
const clones = [];
|
|
13
|
+
const children = new Array(...element.children);
|
|
14
|
+
if (element.tagName === 'TEXTAREA') {
|
|
15
|
+
scanTextAreaValue(element);
|
|
16
|
+
}
|
|
17
|
+
children.forEach((child, index) => {
|
|
18
|
+
const nextClones = interpolateChild(child, options, variable, tag, counts);
|
|
19
|
+
if (child.tagName === 'TEXTAREA') {
|
|
20
|
+
scanTextAreaValue(child);
|
|
21
|
+
}
|
|
22
|
+
clones.push(...nextClones);
|
|
23
|
+
if (child.children) {
|
|
24
|
+
const nextKids = new Array(...child.children);
|
|
25
|
+
nextKids.forEach(subChild => {
|
|
26
|
+
if (isRenderEndTemplate(subChild)) {
|
|
27
|
+
interpolateChild(subChild, options, variable, tag, counts);
|
|
28
|
+
}
|
|
29
|
+
const nextClones = interpolateContentTemplates(subChild, variable, tag, options);
|
|
30
|
+
clones.push(...nextClones);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return clones;
|
|
35
|
+
}
|
|
36
|
+
function interpolateChild(child, options, variable, tag, counts) {
|
|
37
|
+
const clones = interpolateTemplate(child, variable, tag, counts, options);
|
|
38
|
+
return clones;
|
|
39
|
+
}
|
|
40
|
+
function isRenderEndTemplate(child) {
|
|
41
|
+
const isTemplate = child.tagName === 'TEMPLATE';
|
|
42
|
+
return isTemplate &&
|
|
43
|
+
child.getAttribute('interpolate') !== undefined &&
|
|
44
|
+
child.getAttribute('end') !== undefined;
|
|
45
|
+
}
|
|
46
|
+
function scanTextAreaValue(textarea) {
|
|
47
|
+
const value = textarea.value;
|
|
48
|
+
if (value.search(templateSearch) >= 0) {
|
|
49
|
+
const match = value.match(/__tagvar(\d{1,4})/);
|
|
50
|
+
const result = match ? match[0] : '';
|
|
51
|
+
const token = '{' + result + '}';
|
|
52
|
+
// textarea.value = token
|
|
53
|
+
textarea.value = '';
|
|
54
|
+
textarea.setAttribute('textVarValue', token);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=interpolateContentTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateContentTemplates.js","sourceRoot":"","sources":["../ts/interpolateContentTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEhF,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,gFAAgF,CAAC,CAAA;AAEnH,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CACzC,OAAgB,EAChB,QAAa,EACb,GAAQ,EACR,OAA2B;IAE3B,IAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAG,CAAC;QAC1D,OAAO,EAAE,CAAA,CAAC,OAAO;IACnB,CAAC;IAED,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;KACX,CAAA;IACD,MAAM,MAAM,GAAW,EAAE,CAAA;IAEzB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAI,OAAO,CAAC,QAAgB,CAAC,CAAA;IAExD,IAAG,OAAO,CAAC,OAAO,KAAG,UAAU,EAAE,CAAC;QAChC,iBAAiB,CAAC,OAA8B,CAAC,CAAA;IACnD,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,UAAU,GAAG,gBAAgB,CACjC,KAAK,EACL,OAAO,EACP,QAAQ,EACR,GAAG,EACH,MAAM,CACP,CAAA;QAED,IAAG,KAAK,CAAC,OAAO,KAAG,UAAU,EAAE,CAAC;YAC9B,iBAAiB,CAAC,KAA4B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAA;QAE1B,IAAK,KAAK,CAAC,QAAQ,EAAG,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC1B,IAAK,mBAAmB,CAAC,QAAQ,CAAC,EAAG,CAAC;oBACpC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;gBAC5D,CAAC;gBAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;gBAChF,MAAM,CAAC,IAAI,CAAE,GAAG,UAAU,CAAE,CAAA;YAC9B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,OAA2B,EAC3B,QAAa,EACb,GAAQ,EACR,MAAc;IAEd,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAiB,EACjB,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,CACR,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAG,UAAU,CAAA;IAC7C,OAAO,UAAU;QACjB,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,SAAS;QAC/C,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,SAAS,CAAA;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA6B;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAG,CAAC,EAAG,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAA;QAChC,yBAAyB;QACzB,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAA;QACnB,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Context, Tag } from "./Tag.class.js";
|
|
2
|
+
import { Clones } from "./Clones.type.js";
|
|
3
|
+
export type InterpolateOptions = {
|
|
4
|
+
/** make the element go on document */
|
|
5
|
+
forceElement?: boolean;
|
|
6
|
+
depth: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function interpolateElement(element: Element, context: Context, // variables used to evaluate
|
|
9
|
+
tag: Tag, options: InterpolateOptions): Clones;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { interpolateAttributes } from "./interpolateAttributes.js";
|
|
2
|
+
import { interpolateToTemplates } from "./interpolations.js";
|
|
3
|
+
import { interpolateContentTemplates } from "./interpolateContentTemplates.js";
|
|
4
|
+
import { escapeSearch, variablePrefix } from "./Tag.class.js";
|
|
5
|
+
export function interpolateElement(element, context, // variables used to evaluate
|
|
6
|
+
tag, options) {
|
|
7
|
+
const clones = [];
|
|
8
|
+
const result = interpolateElementChild(element, options.depth + 1);
|
|
9
|
+
if (result.keys.length) {
|
|
10
|
+
const nextClones = interpolateContentTemplates(element, context, tag, options);
|
|
11
|
+
clones.push(...nextClones);
|
|
12
|
+
}
|
|
13
|
+
interpolateAttributes(element, context, tag);
|
|
14
|
+
processChildrenAttributes(element.children, context, tag);
|
|
15
|
+
return clones;
|
|
16
|
+
}
|
|
17
|
+
function processChildrenAttributes(children, context, ownerTag) {
|
|
18
|
+
new Array(...children).forEach(child => {
|
|
19
|
+
interpolateAttributes(child, context, ownerTag);
|
|
20
|
+
if (child.children) {
|
|
21
|
+
processChildrenAttributes(child.children, context, ownerTag);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Convert interpolations into template tags */
|
|
26
|
+
function interpolateElementChild(child, depth) {
|
|
27
|
+
const result = interpolateToTemplates(child.innerHTML, { depth });
|
|
28
|
+
result.string = result.string.replace(escapeSearch, variablePrefix);
|
|
29
|
+
child.innerHTML = result.string;
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=interpolateElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateElement.js","sourceRoot":"","sources":["../ts/interpolateElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,EAAgB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAS3E,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,OAAgB,EAAE,6BAA6B;AAC/C,GAAQ,EACR,OAA2B;IAE3B,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IAElE,IAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;QAC9E,MAAM,CAAC,IAAI,CAAE,GAAG,UAAU,CAAE,CAAA;IAC9B,CAAC;IAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IAC5C,yBAAyB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IAEzD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAwB,EACxB,OAAgB,EAChB,QAAa;IAEb,IAAI,KAAK,CAAC,GAAG,QAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5C,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE/C,IAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClB,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,gDAAgD;AAChD,SAAS,uBAAuB,CAC9B,KAAc,EACd,KAAa;IAEb,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAC,KAAK,EAAC,CAAC,CAAA;IAC/D,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IACnE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Context, ElementBuildOptions, Tag } from "./Tag.class.js";
|
|
2
|
+
import { InterpolateOptions } from "./interpolateElement.js";
|
|
3
|
+
import { Clones } from "./Clones.type.js";
|
|
4
|
+
export type Template = Element & {
|
|
5
|
+
clone: any;
|
|
6
|
+
};
|
|
7
|
+
export declare function interpolateTemplate(template: Template, // <template end interpolate /> (will be removed)
|
|
8
|
+
context: Context, // variable scope of {`__tagvar${index}`:'x'}
|
|
9
|
+
tag: Tag, // Tag class
|
|
10
|
+
counts: Counts, // {added:0, removed:0}
|
|
11
|
+
options: InterpolateOptions): Clones;
|
|
12
|
+
export declare function updateBetweenTemplates(value: string | undefined | boolean | number, lastFirstChild: Element): Text;
|
|
13
|
+
export type Counts = {
|
|
14
|
+
added: number;
|
|
15
|
+
removed: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function afterElmBuild(elm: Element | ChildNode, options: ElementBuildOptions): void;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { variablePrefix } from "./Tag.class.js";
|
|
2
|
+
import { elementInitCheck } from "./elementInitCheck.js";
|
|
3
|
+
import { processSubjectValue } from "./processSubjectValue.function.js";
|
|
4
|
+
export function interpolateTemplate(template, // <template end interpolate /> (will be removed)
|
|
5
|
+
context, // variable scope of {`__tagvar${index}`:'x'}
|
|
6
|
+
tag, // Tag class
|
|
7
|
+
counts, // {added:0, removed:0}
|
|
8
|
+
options) {
|
|
9
|
+
const clones = [];
|
|
10
|
+
if (!template.hasAttribute('end')) {
|
|
11
|
+
return clones; // only care about starts
|
|
12
|
+
}
|
|
13
|
+
const variableName = template.getAttribute('id');
|
|
14
|
+
if (variableName?.substring(0, variablePrefix.length) !== variablePrefix) {
|
|
15
|
+
return clones; // ignore, not a tagVar
|
|
16
|
+
}
|
|
17
|
+
const result = context[variableName];
|
|
18
|
+
// const isSubject = isSubjectInstance(result)
|
|
19
|
+
let isForceElement = options.forceElement;
|
|
20
|
+
const callback = (templateNewValue) => {
|
|
21
|
+
const { clones } = processSubjectValue(templateNewValue, result, template, tag, { counts, forceElement: isForceElement });
|
|
22
|
+
if (isForceElement) {
|
|
23
|
+
isForceElement = false; // only can happen once
|
|
24
|
+
}
|
|
25
|
+
clones.push(...clones);
|
|
26
|
+
// TODO: See if we can remove
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
counts.added = 0; // reset
|
|
29
|
+
counts.removed = 0; // reset
|
|
30
|
+
}, 0);
|
|
31
|
+
};
|
|
32
|
+
const sub = result.subscribe(callback);
|
|
33
|
+
tag.cloneSubs.push(sub);
|
|
34
|
+
return clones;
|
|
35
|
+
}
|
|
36
|
+
// Function to update the value of x
|
|
37
|
+
export function updateBetweenTemplates(value, lastFirstChild) {
|
|
38
|
+
const parent = lastFirstChild.parentNode;
|
|
39
|
+
// mimic React skipping to display EXCEPT for true does display on page
|
|
40
|
+
if (value === undefined || value === false || value === null) { // || value === true
|
|
41
|
+
value = '';
|
|
42
|
+
}
|
|
43
|
+
// Insert the new value (never use innerHTML here)
|
|
44
|
+
const textNode = document.createTextNode(value); // never innerHTML
|
|
45
|
+
parent.insertBefore(textNode, lastFirstChild);
|
|
46
|
+
/* remove existing nodes */
|
|
47
|
+
parent.removeChild(lastFirstChild);
|
|
48
|
+
if (lastFirstChild.nodeName === 'TEMPLATE') {
|
|
49
|
+
lastFirstChild.setAttribute('removedAt', Date.now().toString());
|
|
50
|
+
}
|
|
51
|
+
return textNode;
|
|
52
|
+
}
|
|
53
|
+
export function afterElmBuild(elm, options) {
|
|
54
|
+
if (!elm.getAttribute) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (!options.forceElement) {
|
|
58
|
+
elementInitCheck(elm, options.counts);
|
|
59
|
+
}
|
|
60
|
+
if (elm.children) {
|
|
61
|
+
new Array(...elm.children).forEach(child => afterElmBuild(child, options));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=interpolateTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateTemplate.js","sourceRoot":"","sources":["../ts/interpolateTemplate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const interpolateReplace: RegExp;
|
|
2
|
+
/** replaces ${x} with <template id="x-start"></template><template id="x-end"></template> */
|
|
3
|
+
export declare function interpolateToTemplates(template: string, { depth }: {
|
|
4
|
+
depth: number;
|
|
5
|
+
}): {
|
|
6
|
+
string: string;
|
|
7
|
+
keys: string[];
|
|
8
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const interpolateReplace = /(?:<[^>]*>)|({__tagvar[^}]+})/g;
|
|
2
|
+
/** replaces ${x} with <template id="x-start"></template><template id="x-end"></template> */
|
|
3
|
+
export function interpolateToTemplates(template, { depth }) {
|
|
4
|
+
const keys = [];
|
|
5
|
+
const string = template.replace(interpolateReplace, (match, expression) => {
|
|
6
|
+
if (match.startsWith('<')) {
|
|
7
|
+
// If the match is an HTML tag, don't replace
|
|
8
|
+
return match;
|
|
9
|
+
}
|
|
10
|
+
const noBraces = expression.substring(1, expression.length - 1);
|
|
11
|
+
const id = noBraces;
|
|
12
|
+
keys.push(id);
|
|
13
|
+
return `<template interpolate end id="${id}" depth="${depth}"></template>`;
|
|
14
|
+
});
|
|
15
|
+
return { string, keys };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=interpolations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolations.js","sourceRoot":"","sources":["../ts/interpolations.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,gCAAgC,CAAA;AAElE,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,EAAC,KAAK,EAAkB;IAExB,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACxE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAC,CAAC,CAAC,CAAA;QAC7D,MAAM,EAAE,GAAG,QAAQ,CAAA;QACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACb,OAAO,iCAAiC,EAAE,YAAY,KAAK,eAAe,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SubjectLike } from "./Subject.js";
|
|
2
|
+
import { Tag } from "./Tag.class.js";
|
|
3
|
+
import { TemplaterResult } from "./templater.utils.js";
|
|
4
|
+
export declare function isTagComponent(value?: TemplaterResult): boolean;
|
|
5
|
+
export declare function isTagInstance(tag?: Tag | unknown): boolean;
|
|
6
|
+
export declare function isSubjectInstance(subject?: SubjectLike): Boolean;
|