taggedjs 2.0.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/index.js +1 -1
- 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
|
@@ -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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getStateValue } from "./state.js";
|
|
2
|
+
import { setUse } from "./tagRunner.js";
|
|
3
|
+
export let getCallback = () => (callback) => () => {
|
|
4
|
+
throw new Error('The real callback function was called and that should never occur');
|
|
5
|
+
};
|
|
6
|
+
setUse({
|
|
7
|
+
beforeRender: (tagSupport) => {
|
|
8
|
+
tagSupport.callbacks = [];
|
|
9
|
+
getCallback = () => {
|
|
10
|
+
const callbackMaker = (callback) => {
|
|
11
|
+
const trigger = () => {
|
|
12
|
+
const state = tagSupport.state;
|
|
13
|
+
const oldest = callbackMaker.state; // state.oldest as StateConfigArray
|
|
14
|
+
const newest = state.newest;
|
|
15
|
+
// ensure that the oldest has the latest values first
|
|
16
|
+
updateState(newest, oldest);
|
|
17
|
+
// run the callback
|
|
18
|
+
const promise = callback();
|
|
19
|
+
// send the oldest state changes into the newest
|
|
20
|
+
updateState(oldest, newest);
|
|
21
|
+
tagSupport.render();
|
|
22
|
+
if (promise instanceof Promise) {
|
|
23
|
+
promise.finally(() => {
|
|
24
|
+
// send the oldest state changes into the newest
|
|
25
|
+
updateState(oldest, newest);
|
|
26
|
+
tagSupport.render();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const state = tagSupport.state;
|
|
31
|
+
trigger.state = state;
|
|
32
|
+
return trigger;
|
|
33
|
+
};
|
|
34
|
+
const callbacks = tagSupport.callbacks;
|
|
35
|
+
callbacks.push(callbackMaker);
|
|
36
|
+
return callbackMaker;
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
afterRender: (tagSupport) => {
|
|
40
|
+
const callbacks = tagSupport.callbacks;
|
|
41
|
+
callbacks.forEach(callback => {
|
|
42
|
+
const state = tagSupport.state;
|
|
43
|
+
callback.state = [...state.newest];
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
function updateState(stateFrom, stateTo) {
|
|
48
|
+
stateFrom.forEach((state, index) => {
|
|
49
|
+
const oldValue = getStateValue(state);
|
|
50
|
+
const [checkValue] = stateTo[index](oldValue);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=getCallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCallback.js","sourceRoot":"","sources":["../ts/getCallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,aAAa,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAIvC,MAAM,CAAC,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,GAAS,EAAE;IAChE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;AACtF,CAAC,CAAA;AAOD,MAAM,CAAC;IACL,YAAY,EAAE,CAAC,UAA8B,EAAE,EAAE;QAC/C,UAAU,CAAC,SAAS,GAAG,EAAE,CAAA;QAEzB,WAAW,GAAG,GAAG,EAAE;YAEjB,MAAM,aAAa,GAAG,CACpB,QAAkB,EAClB,EAAE;gBACF,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAc,CAAA;oBACvC,MAAM,MAAM,GAAI,aAAqB,CAAC,KAAK,CAAA,CAAC,mCAAmC;oBAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;oBAE3B,qDAAqD;oBACrD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;oBAE3B,mBAAmB;oBACnB,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAA;oBAE1B,gDAAgD;oBAChD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;oBAE3B,UAAU,CAAC,MAAM,EAAE,CAAA;oBAEnB,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;wBAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;4BACnB,gDAAgD;4BAChD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;4BAE3B,UAAU,CAAC,MAAM,EAAE,CAAA;wBACrB,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC,CAAA;gBAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAc,CAAA;gBACvC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;gBAErB,OAAO,OAAO,CAAA;YAChB,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,UAAU,CAAC,SAAkB,CAAA;YAC/C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAE7B,OAAO,aAAa,CAAA;QACtB,CAAC,CAAA;IACH,CAAC;IACD,WAAW,EAAE,CAAC,UAA8B,EAAE,EAAE;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAkB,CAAA;QAC/C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAc,CAAA;YACvC,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAa,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA;AAEF,SAAS,WAAW,CAClB,SAA2B,EAC3B,OAAyB;IAEzB,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAE,QAAQ,CAAE,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Tag } from "./Tag.class.js";
|
|
2
|
+
import { TemplaterResult } from "./tag.js";
|
|
3
|
+
export interface TagSupport {
|
|
4
|
+
templater?: TemplaterResult;
|
|
5
|
+
/** Indicator of re-rending. Saves from double rending something already rendered */
|
|
6
|
+
renderCount: 0;
|
|
7
|
+
mutatingRender: () => any;
|
|
8
|
+
render: () => any;
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @param {*} props value.props
|
|
12
|
+
* @param {*} newProps value.newProps
|
|
13
|
+
* @param {*} compareToProps compareSupport.templater.props
|
|
14
|
+
* @returns {boolean}
|
|
15
|
+
*/
|
|
16
|
+
hasPropChanges: (props: any, newProps: any, compareToProps: any) => boolean;
|
|
17
|
+
oldest?: Tag;
|
|
18
|
+
newest?: Tag;
|
|
19
|
+
}
|
|
20
|
+
export declare function getTagSupport(templater?: TemplaterResult): TagSupport;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { deepEqual } from "./deepFunctions.js";
|
|
2
|
+
export function getTagSupport(templater) {
|
|
3
|
+
const tagSupport = {
|
|
4
|
+
templater,
|
|
5
|
+
renderCount: 0,
|
|
6
|
+
mutatingRender: () => { throw new Error('Tag function "render()" was called in sync but can only be called async'); }, // loaded later and only callable async
|
|
7
|
+
render: () => {
|
|
8
|
+
++tagSupport.renderCount;
|
|
9
|
+
return tagSupport.mutatingRender();
|
|
10
|
+
}, // ensure this function still works even during deconstructing
|
|
11
|
+
hasPropChanges: (props, newProps, compareToProps) => {
|
|
12
|
+
const oldProps = tagSupport.templater.cloneProps;
|
|
13
|
+
const isCommonEqual = props === undefined && props === compareToProps;
|
|
14
|
+
const isEqual = isCommonEqual || deepEqual(newProps, oldProps);
|
|
15
|
+
return !isEqual;
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
return tagSupport;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=getTagSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTagSupport.js","sourceRoot":"","sources":["../ts/getTagSupport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AA8B9C,MAAM,UAAU,aAAa,CAC3B,SAA2B;IAE3B,MAAM,UAAU,GAAe;QAC7B,SAAS;QACT,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,GAAG,EAAE,GAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAA,CAAA,CAAC,EAAE,uCAAuC;QAC3J,MAAM,EAAE,GAAG,EAAE;YACX,EAAE,UAAU,CAAC,WAAW,CAAA;YACxB,OAAO,UAAU,CAAC,cAAc,EAAE,CAAA;QACpC,CAAC,EAAE,8DAA8D;QAEjE,cAAc,EAAE,CACd,KAAU,EACV,QAAa,EACb,cAAmB,EACnB,EAAE;YACF,MAAM,QAAQ,GAAI,UAAU,CAAC,SAAiB,CAAC,UAAU,CAAA;YACzD,MAAM,aAAa,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,cAAc,CAAA;YACrE,MAAM,OAAO,GAAG,aAAa,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC9D,OAAO,CAAC,OAAO,CAAA;QACjB,CAAC;KACF,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
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,OAAiB,EACjB,GAAG,MAAiB;IAEpB,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACjC,CAAC"}
|
package/js/js/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { html } from "./html.js";
|
|
2
|
+
export { tag } from "./tag.js";
|
|
3
|
+
export { Subject } from "./Subject.js";
|
|
4
|
+
export { wait } from "./wait.js";
|
|
5
|
+
export { renderAppToElement } from "./renderAppToElement.js";
|
|
6
|
+
export { Tag } from "./Tag.class.js";
|
|
7
|
+
export * from "./onInit.js";
|
|
8
|
+
export { providers } from "./providers.js";
|
|
9
|
+
export { state } from "./state.js";
|
|
10
|
+
export { getCallback } from "./getCallback.js";
|
package/js/js/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { html } from "./html.js";
|
|
2
|
+
export { tag } from "./tag.js";
|
|
3
|
+
export { Subject } from "./Subject.js";
|
|
4
|
+
export { wait } from "./wait.js";
|
|
5
|
+
export { renderAppToElement } from "./renderAppToElement.js";
|
|
6
|
+
export { Tag } from "./Tag.class.js";
|
|
7
|
+
// hooks
|
|
8
|
+
export * from "./onInit.js";
|
|
9
|
+
export { providers } from "./providers.js";
|
|
10
|
+
export { state } from "./state.js";
|
|
11
|
+
export { getCallback } from "./getCallback.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEpC,QAAQ;AACR,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -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,69 @@
|
|
|
1
|
+
import { Subject } from "./Subject.js";
|
|
2
|
+
import { inputAttribute } from "./inputAttribute.js";
|
|
3
|
+
const startRegX = /^\s*{/;
|
|
4
|
+
const endRegX = /}\s*$/;
|
|
5
|
+
export function interpolateAttributes(child, scope, ownerTag) {
|
|
6
|
+
child.getAttributeNames().forEach(attrName => {
|
|
7
|
+
const value = child.getAttribute(attrName);
|
|
8
|
+
const isSpecial = isSpecialAttr(attrName);
|
|
9
|
+
// An attempt to replicate React
|
|
10
|
+
if (value && value.search(startRegX) >= 0 && value.search(endRegX) >= 0) {
|
|
11
|
+
// get the code inside the brackets like "variable0" or "{variable0}"
|
|
12
|
+
const code = value.replace('{', '').split('').reverse().join('').replace('}', '').split('').reverse().join('');
|
|
13
|
+
const result = scope[code];
|
|
14
|
+
// attach as callback
|
|
15
|
+
if (result instanceof Function) {
|
|
16
|
+
;
|
|
17
|
+
child[attrName] = function (...args) {
|
|
18
|
+
result(child, args);
|
|
19
|
+
};
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (result instanceof Subject) {
|
|
23
|
+
child.removeAttribute(attrName);
|
|
24
|
+
const callback = (newAttrValue) => {
|
|
25
|
+
if (newAttrValue instanceof Function) {
|
|
26
|
+
;
|
|
27
|
+
child[attrName] = function (...args) {
|
|
28
|
+
newAttrValue(child, args);
|
|
29
|
+
};
|
|
30
|
+
child[attrName].tagFunction = newAttrValue;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (isSpecial) {
|
|
34
|
+
inputAttribute(attrName, newAttrValue, child);
|
|
35
|
+
}
|
|
36
|
+
if (newAttrValue) {
|
|
37
|
+
child.setAttribute(attrName, newAttrValue);
|
|
38
|
+
}
|
|
39
|
+
const isDeadValue = newAttrValue === undefined || newAttrValue === false || newAttrValue === null;
|
|
40
|
+
if (isDeadValue) {
|
|
41
|
+
child.removeAttribute(attrName);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// value is 0
|
|
45
|
+
child.setAttribute(attrName, newAttrValue);
|
|
46
|
+
};
|
|
47
|
+
const sub = result.subscribe(callback);
|
|
48
|
+
ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// child.setAttribute(attrName, result)
|
|
52
|
+
/*
|
|
53
|
+
if(attrName === 'style') {
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
*/
|
|
57
|
+
child.setAttribute(attrName, result.value);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Non dynamic
|
|
61
|
+
if (isSpecial) {
|
|
62
|
+
return inputAttribute(attrName, value, child);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export function isSpecialAttr(attrName) {
|
|
67
|
+
return attrName.search(/^(class|style)(\.)/) >= 0;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=interpolateAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateAttributes.js","sourceRoot":"","sources":["../ts/interpolateAttributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { interpolateTemplate } from "./interpolateTemplate.js";
|
|
2
|
+
/** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
|
|
3
|
+
export function interpolateContentTemplates(element, variable, ownerTag) {
|
|
4
|
+
if (!element.children || element.tagName === 'TEMPLATE') {
|
|
5
|
+
return; // done
|
|
6
|
+
}
|
|
7
|
+
const counts = {
|
|
8
|
+
added: 0,
|
|
9
|
+
removed: 0,
|
|
10
|
+
};
|
|
11
|
+
const children = new Array(...element.children);
|
|
12
|
+
children.forEach((child, index) => {
|
|
13
|
+
interpolateChild(child, index, children);
|
|
14
|
+
if (child.children) {
|
|
15
|
+
const nextKids = new Array(...child.children);
|
|
16
|
+
nextKids.forEach((subChild, index) => {
|
|
17
|
+
if (isRenderEndTemplate(subChild)) {
|
|
18
|
+
interpolateChild(subChild, index, nextKids);
|
|
19
|
+
}
|
|
20
|
+
interpolateContentTemplates(subChild, variable, ownerTag);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
function interpolateChild(child, index, children) {
|
|
25
|
+
children.forEach((child, subIndex) => {
|
|
26
|
+
if (subIndex < index) {
|
|
27
|
+
return; // too low
|
|
28
|
+
}
|
|
29
|
+
if (child.tagName !== 'TEMPLATE') {
|
|
30
|
+
return; // not a template
|
|
31
|
+
}
|
|
32
|
+
if (child.getAttribute('interpolate') === undefined || child.getAttribute('end') === undefined) {
|
|
33
|
+
return; // not a rendering template
|
|
34
|
+
}
|
|
35
|
+
return child;
|
|
36
|
+
});
|
|
37
|
+
interpolateTemplate(child, variable, ownerTag, counts);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
function isRenderEndTemplate(child) {
|
|
42
|
+
const isTemplate = child.tagName === 'TEMPLATE';
|
|
43
|
+
return isTemplate &&
|
|
44
|
+
child.getAttribute('interpolate') !== undefined &&
|
|
45
|
+
child.getAttribute('end') !== undefined;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=interpolateContentTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolateContentTemplates.js","sourceRoot":"","sources":["../ts/interpolateContentTemplates.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEtE,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CACzC,OAAgB,EAChB,QAAa,EACb,QAAa;IAEb,IAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAG,CAAC;QAC1D,OAAM,CAAC,OAAO;IAChB,CAAC;IACD,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;KACX,CAAA;IAED,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAI,OAAO,CAAC,QAAgB,CAAC,CAAA;IAExD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAExC,IAAK,KAAK,CAAC,QAAQ,EAAG,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACnC,IAAK,mBAAmB,CAAC,QAAQ,CAAC,EAAG,CAAC;oBACpC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC7C,CAAC;gBAED,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC3D,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,SAAS,gBAAgB,CACvB,KAAc,EACd,KAAa,EACb,QAAmB;QAEnB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACnC,IAAK,QAAQ,GAAG,KAAK,EAAG,CAAC;gBACvB,OAAM,CAAC,UAAU;YACnB,CAAC;YAED,IAAK,KAAK,CAAC,OAAO,KAAG,UAAU,EAAG,CAAC;gBACjC,OAAM,CAAC,iBAAiB;YAC1B,CAAC;YAED,IAAK,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,KAAG,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,SAAS,EAAG,CAAC;gBAC/F,OAAM,CAAC,2BAA2B;YACpC,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QAEF,mBAAmB,CACjB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,CACP,CAAA;IACH,CAAC;IAED,OAAM;AACR,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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Context, Tag } from "./Tag.class.js";
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param {*} element
|
|
5
|
+
* @param {*} context
|
|
6
|
+
* @param {Tag} ownerTag
|
|
7
|
+
*/
|
|
8
|
+
export declare function interpolateElement(element: Element, context: Context, // variables used to evaluate
|
|
9
|
+
ownerTag: Tag): void;
|
|
10
|
+
/** Convert interpolations into template tags */
|
|
11
|
+
export declare function interpolateElementChild(child: Element): {
|
|
12
|
+
string: string;
|
|
13
|
+
keys: string[];
|
|
14
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @param {*} element
|
|
8
|
+
* @param {*} context
|
|
9
|
+
* @param {Tag} ownerTag
|
|
10
|
+
*/
|
|
11
|
+
export function interpolateElement(element, context, // variables used to evaluate
|
|
12
|
+
ownerTag) {
|
|
13
|
+
const result = interpolateElementChild(element);
|
|
14
|
+
if (result.keys.length) {
|
|
15
|
+
interpolateContentTemplates(element, context, ownerTag);
|
|
16
|
+
}
|
|
17
|
+
interpolateAttributes(element, context, ownerTag);
|
|
18
|
+
function processChildren(children) {
|
|
19
|
+
new Array(...children).forEach(child => {
|
|
20
|
+
interpolateAttributes(child, context, ownerTag);
|
|
21
|
+
if (child.children) {
|
|
22
|
+
processChildren(child.children);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
processChildren(element.children);
|
|
27
|
+
}
|
|
28
|
+
/** Convert interpolations into template tags */
|
|
29
|
+
export function interpolateElementChild(child) {
|
|
30
|
+
const result = interpolateToTemplates(child.innerHTML);
|
|
31
|
+
result.string = result.string.replace(escapeSearch, variablePrefix);
|
|
32
|
+
child.innerHTML = result.string;
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
//# 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;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,OAAgB,EAAE,6BAA6B;AAC/C,QAAa;IAEb,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAE/C,IAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IACzD,CAAC;IAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEjD,SAAS,eAAe,CAAC,QAAwB;QAC/C,IAAI,KAAK,CAAC,GAAG,QAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5C,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YAE/C,IAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAClB,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACnC,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,uBAAuB,CACrC,KAAc;IAEd,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACtD,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"}
|