vsn 0.1.124 → 0.1.126
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/demo/demo.html +4 -8
- package/demo/examples/cascading-function-sheets.html +28 -0
- package/demo/examples/component-slots.html +16 -22
- package/demo/examples/loop.html +21 -0
- package/demo/resources/xhr-cfs.html +1 -0
- package/demo/resources/xhr-test-component.html +4 -0
- package/demo/service.html +3 -3
- package/demo/vsn.js +2 -2
- package/dist/AST/ClassNode.js +6 -3
- package/dist/AST/ClassNode.js.map +1 -1
- package/dist/AST/DispatchEventNode.d.ts +3 -1
- package/dist/AST/DispatchEventNode.js +48 -14
- package/dist/AST/DispatchEventNode.js.map +1 -1
- package/dist/AST/ElementQueryNode.d.ts +2 -1
- package/dist/AST/ElementQueryNode.js +5 -5
- package/dist/AST/ElementQueryNode.js.map +1 -1
- package/dist/AST/FunctionNode.d.ts +1 -1
- package/dist/AST/LoopNode.d.ts +12 -0
- package/dist/AST/LoopNode.js +121 -0
- package/dist/AST/LoopNode.js.map +1 -0
- package/dist/AST/OnNode.d.ts +1 -1
- package/dist/AST/OnNode.js.map +1 -1
- package/dist/AST/ScopeMemberNode.js +4 -0
- package/dist/AST/ScopeMemberNode.js.map +1 -1
- package/dist/AST.d.ts +64 -62
- package/dist/AST.js +82 -69
- package/dist/AST.js.map +1 -1
- package/dist/Component.d.ts +2 -0
- package/dist/Component.js +12 -27
- package/dist/Component.js.map +1 -1
- package/dist/DOM/AbstractDOM.d.ts +48 -0
- package/dist/DOM/AbstractDOM.js +937 -0
- package/dist/DOM/AbstractDOM.js.map +1 -0
- package/dist/DOM/ShadowDOM.d.ts +5 -0
- package/dist/DOM/ShadowDOM.js +32 -0
- package/dist/DOM/ShadowDOM.js.map +1 -0
- package/dist/DOM.d.ts +3 -48
- package/dist/DOM.js +6 -913
- package/dist/DOM.js.map +1 -1
- package/dist/Scope/ObjectAccessor.d.ts +7 -0
- package/dist/Scope/ObjectAccessor.js +40 -0
- package/dist/Scope/ObjectAccessor.js.map +1 -0
- package/dist/Scope/ScopeAbstract.d.ts +9 -0
- package/dist/Scope/ScopeAbstract.js +28 -0
- package/dist/Scope/ScopeAbstract.js.map +1 -0
- package/dist/Scope.d.ts +3 -2
- package/dist/Scope.js +37 -10
- package/dist/Scope.js.map +1 -1
- package/dist/Tag.d.ts +2 -0
- package/dist/Tag.js +52 -9
- package/dist/Tag.js.map +1 -1
- package/dist/helpers/VisionHelper.d.ts +1 -0
- package/dist/helpers/VisionHelper.js +45 -0
- package/dist/helpers/VisionHelper.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vsn.js +3 -9
- package/dist/vsn.js.map +1 -1
- package/package.json +1 -1
- package/src/AST/ClassNode.ts +6 -3
- package/src/AST/DispatchEventNode.ts +19 -11
- package/src/AST/ElementQueryNode.ts +2 -1
- package/src/AST/FunctionNode.ts +1 -1
- package/src/AST/LoopNode.ts +35 -0
- package/src/AST/OnNode.ts +2 -2
- package/src/AST/ScopeMemberNode.ts +4 -0
- package/src/AST.ts +19 -7
- package/src/Component.ts +15 -13
- package/src/DOM/AbstractDOM.ts +389 -0
- package/src/DOM/ShadowDOM.ts +15 -0
- package/src/DOM.ts +4 -385
- package/src/Scope/ObjectAccessor.ts +21 -0
- package/src/Scope/ScopeAbstract.ts +11 -0
- package/src/Scope.ts +14 -1
- package/src/Tag.ts +25 -0
- package/src/helpers/VisionHelper.ts +6 -0
- package/src/version.ts +1 -1
- package/src/vsn.ts +3 -7
- package/test/AST/ClassNode.spec.ts +26 -4
- package/test/AST.spec.ts +21 -21
- package/test/Controller.spec.ts +1 -1
- package/test/DOM.spec.ts +3 -3
- package/test/Tag/TagList.spec.ts +1 -1
- package/test/attributes/Bind.spec.ts +12 -12
- package/test/attributes/JSONAttribute.spec.ts +5 -5
- package/test/attributes/ListItem.spec.ts +6 -6
- package/test/attributes/ScopeAttribute.spec.ts +2 -2
- package/test/attributes/ServiceAttribute.spec.ts +1 -1
- package/test/attributes/SetAttribute.spec.ts +3 -3
- package/test/attributes/Styles.spec.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisionHelper.js","sourceRoot":"","sources":["../../src/helpers/VisionHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VisionHelper.js","sourceRoot":"","sources":["../../src/helpers/VisionHelper.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.126";
|
package/dist/version.js
CHANGED
package/dist/vsn.js
CHANGED
|
@@ -68,7 +68,6 @@ var Registry_1 = require("./Registry");
|
|
|
68
68
|
var Configuration_1 = require("./Configuration");
|
|
69
69
|
var VisionHelper_1 = require("./helpers/VisionHelper");
|
|
70
70
|
var AST_1 = require("./AST");
|
|
71
|
-
var Query_1 = require("./Query");
|
|
72
71
|
var EventDispatcher_1 = require("./EventDispatcher");
|
|
73
72
|
var DynamicScopeData_1 = require("./Scope/DynamicScopeData");
|
|
74
73
|
var version_1 = require("./version");
|
|
@@ -79,6 +78,7 @@ var Vision = /** @class */ (function (_super) {
|
|
|
79
78
|
var _this = _super.call(this) || this;
|
|
80
79
|
_this.registry = Registry_1.Registry.instance;
|
|
81
80
|
_this.config = Configuration_1.Configuration.instance;
|
|
81
|
+
document.ondragover = function (e) { return e.cancelable && e.preventDefault(); }; // Allow dragging over document
|
|
82
82
|
Registry_1.Registry.instance.tags.on('register', _this.defineComponent, _this);
|
|
83
83
|
if (VisionHelper_1.VisionHelper.document) {
|
|
84
84
|
document.addEventListener("DOMContentLoaded", _this.setup.bind(_this));
|
|
@@ -90,13 +90,7 @@ var Vision = /** @class */ (function (_super) {
|
|
|
90
90
|
_this.registry.functions.register('warn', console.warn);
|
|
91
91
|
_this.registry.functions.register('error', console.error);
|
|
92
92
|
_this.registry.functions.register('info', console.info);
|
|
93
|
-
_this.registry.functions.register('wait',
|
|
94
|
-
return __generator(this, function (_a) {
|
|
95
|
-
return [2 /*return*/, new Promise(function (resolve) {
|
|
96
|
-
setTimeout(resolve, seconds * 1000);
|
|
97
|
-
})];
|
|
98
|
-
});
|
|
99
|
-
}); });
|
|
93
|
+
_this.registry.functions.register('wait', VisionHelper_1.VisionHelper.wait);
|
|
100
94
|
_this.registry.models.register('Object', Object);
|
|
101
95
|
_this.registry.controllers.register('WrappedArray', WrappedArray_1.WrappedArray);
|
|
102
96
|
_this.registry.controllers.register('Data', DynamicScopeData_1.DynamicScopeData);
|
|
@@ -105,7 +99,7 @@ var Vision = /** @class */ (function (_super) {
|
|
|
105
99
|
window['Registry'] = Registry_1.Registry;
|
|
106
100
|
window['vision'] = window['vsn'] = _this;
|
|
107
101
|
window['Tree'] = AST_1.Tree;
|
|
108
|
-
window['$'] =
|
|
102
|
+
window['$'] = _this.exec.bind(_this);
|
|
109
103
|
VisionHelper_1.VisionHelper.window.dispatchEvent(new Event('vsn'));
|
|
110
104
|
}
|
|
111
105
|
return _this;
|
package/dist/vsn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsn.js","sourceRoot":"","sources":["../src/vsn.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA0B;AAC1B,qDAAkD;AAClD,uCAAoC;AACpC,iDAA8C;AAC9C,uDAAoD;AACpD,6BAA2B;AAC3B,
|
|
1
|
+
{"version":3,"file":"vsn.js","sourceRoot":"","sources":["../src/vsn.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/AST/ClassNode.ts
CHANGED
|
@@ -70,8 +70,7 @@ export class ClassNode extends Node implements TreeNode {
|
|
|
70
70
|
if (root) {
|
|
71
71
|
if (dom.built)
|
|
72
72
|
await this.findClassElements(dom);
|
|
73
|
-
|
|
74
|
-
dom.once('builtRoot', () => this.findClassElements(dom));
|
|
73
|
+
dom.on('built', () => this.findClassElements(dom));
|
|
75
74
|
}
|
|
76
75
|
} else if (meta['PrepForSelector'] === this.fullSelector) { // Only prepare top level class if we're prepping for tag
|
|
77
76
|
await this.block.prepare(tag.scope, dom, tag, meta);
|
|
@@ -94,6 +93,11 @@ export class ClassNode extends Node implements TreeNode {
|
|
|
94
93
|
}
|
|
95
94
|
|
|
96
95
|
public async constructTag(tag: Tag, dom: DOM, hasConstruct: boolean | null = null) {
|
|
96
|
+
if (ClassNode.preppedTags[this.fullSelector].indexOf(tag) !== -1) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
ClassNode.preppedTags[this.fullSelector].push(tag);
|
|
100
|
+
|
|
97
101
|
if (hasConstruct === null)
|
|
98
102
|
hasConstruct = this.classScope.has('construct');
|
|
99
103
|
|
|
@@ -107,7 +111,6 @@ export class ClassNode extends Node implements TreeNode {
|
|
|
107
111
|
await fnc();
|
|
108
112
|
}
|
|
109
113
|
tag.dispatch(`${this.fullSelector}.construct`, tag.element.id);
|
|
110
|
-
ClassNode.preppedTags[this.fullSelector].push(tag);
|
|
111
114
|
ClassNode.addPreparedClassToElement(tag.element, this.fullSelector);
|
|
112
115
|
}
|
|
113
116
|
|
|
@@ -5,12 +5,14 @@ import {Token, TokenType, Tree, TreeNode} from "../AST";
|
|
|
5
5
|
import {Node} from "./Node";
|
|
6
6
|
import {ObjectNode} from "./ObjectNode";
|
|
7
7
|
import {ScopeData} from "../Scope/ScopeData";
|
|
8
|
+
import {ElementQueryNode} from "./ElementQueryNode";
|
|
8
9
|
|
|
9
10
|
export class DispatchEventNode extends Node implements TreeNode {
|
|
10
11
|
constructor(
|
|
11
12
|
public readonly name: string,
|
|
12
13
|
public readonly data: ObjectNode | null,
|
|
13
|
-
public readonly bubbles: boolean = false
|
|
14
|
+
public readonly bubbles: boolean = false,
|
|
15
|
+
public readonly elementRef: ElementQueryNode | null,
|
|
14
16
|
) {
|
|
15
17
|
super();
|
|
16
18
|
}
|
|
@@ -23,28 +25,34 @@ export class DispatchEventNode extends Node implements TreeNode {
|
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
public async evaluate(scope: Scope, dom: DOM, tag: Tag = null) {
|
|
26
|
-
let detail = this.data ? await this.data.evaluate(scope, dom, tag) : {};
|
|
28
|
+
let detail = this.data ? (await this.data.evaluate(scope, dom, tag)).objectify : {};
|
|
27
29
|
if (detail instanceof Scope)
|
|
28
30
|
detail = detail.data.getData();
|
|
29
31
|
else if (detail instanceof ScopeData)
|
|
30
32
|
detail = detail.getData();
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
let targets: Tag[] = [tag];
|
|
35
|
+
if (this.elementRef) {
|
|
36
|
+
targets = await this.elementRef.evaluate(scope, dom, tag, true);
|
|
37
|
+
}
|
|
33
38
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
for (const target of targets) {
|
|
40
|
+
detail['source'] = target.element;
|
|
41
|
+
target.element.dispatchEvent(new CustomEvent(this.name, {
|
|
42
|
+
bubbles: this.bubbles,
|
|
43
|
+
detail: detail
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
public static parse(lastNode, token, tokens: Token[]) {
|
|
41
49
|
const name = tokens.shift();
|
|
42
50
|
let data: ObjectNode = null;
|
|
43
|
-
if (tokens.length && tokens[0].type === TokenType.
|
|
44
|
-
const containedTokens = Tree.getNextStatementTokens(tokens,
|
|
51
|
+
if (tokens.length && tokens[0].type === TokenType.L_BRACE) {
|
|
52
|
+
const containedTokens = Tree.getNextStatementTokens(tokens, false, false, true);
|
|
45
53
|
data = Tree.processTokens(containedTokens).statements[0] as ObjectNode;
|
|
46
54
|
}
|
|
47
|
-
|
|
48
|
-
return new DispatchEventNode(name.value, data, name.full.startsWith('!!!'));
|
|
55
|
+
const elementRef = lastNode instanceof ElementQueryNode ? lastNode : null;
|
|
56
|
+
return new DispatchEventNode(name.value, data, name.full.startsWith('!!!'), elementRef);
|
|
49
57
|
}
|
|
50
58
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {Scope} from "../Scope";
|
|
2
|
-
import {DOM
|
|
2
|
+
import {DOM} from "../DOM";
|
|
3
3
|
import {Tag} from "../Tag";
|
|
4
4
|
import {Token, TreeNode} from "../AST";
|
|
5
5
|
import {Node} from "./Node";
|
|
6
|
+
import {EQuerySelectDirection} from "../DOM/AbstractDOM";
|
|
6
7
|
|
|
7
8
|
export class ElementQueryNode extends Node implements TreeNode {
|
|
8
9
|
protected requiresPrep: boolean = true;
|
package/src/AST/FunctionNode.ts
CHANGED
|
@@ -57,7 +57,7 @@ export class FunctionNode extends Node implements TreeNode {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
public static parse<T = FunctionNode>(lastNode, token, tokens: Token[], cls: any = FunctionNode):
|
|
60
|
+
public static parse<T = FunctionNode>(lastNode, token, tokens: Token[], cls: any = FunctionNode): T {
|
|
61
61
|
tokens.shift(); // skip 'func'
|
|
62
62
|
const name = tokens.shift();
|
|
63
63
|
const modifiers = this.moveModifiers(tokens);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {Token, TreeNode} from "../AST";
|
|
2
|
+
import {FunctionNode} from "./FunctionNode";
|
|
3
|
+
import {Scope} from "../Scope";
|
|
4
|
+
import {DOM} from "../DOM";
|
|
5
|
+
import {Tag} from "../Tag";
|
|
6
|
+
|
|
7
|
+
export class LoopNode extends FunctionNode implements TreeNode {
|
|
8
|
+
protected looping?: boolean = true;
|
|
9
|
+
|
|
10
|
+
public async prepare(scope: Scope, dom: DOM, tag: Tag = null, meta): Promise<void> {
|
|
11
|
+
const classPrep = meta?.ClassNodePrepare; // Don't add event handler if we're in class prep
|
|
12
|
+
if (tag && !classPrep) {
|
|
13
|
+
const func = await this.getFunction(tag.scope || scope, dom, tag);
|
|
14
|
+
this.setTimeout(func);
|
|
15
|
+
}
|
|
16
|
+
await super.prepare(scope, dom, tag, meta);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async loop(func) {
|
|
20
|
+
if (this.looping) {
|
|
21
|
+
await func();
|
|
22
|
+
this.setTimeout(func);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
setTimeout(func, time: number = 33) {
|
|
27
|
+
setTimeout(async () => {
|
|
28
|
+
await this.loop(func);
|
|
29
|
+
}, time);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public static parse<T = LoopNode>(lastNode, token, tokens: Token[]): T {
|
|
33
|
+
return super.parse<T>(lastNode, token, tokens, LoopNode);
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/AST/OnNode.ts
CHANGED
|
@@ -17,7 +17,7 @@ export class OnNode extends FunctionNode implements TreeNode {
|
|
|
17
17
|
await super.prepare(scope, dom, tag, meta);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
public static parse(lastNode, token, tokens: Token[]):
|
|
21
|
-
return super.parse<
|
|
20
|
+
public static parse<T = OnNode>(lastNode, token, tokens: Token[]): T {
|
|
21
|
+
return super.parse<T>(lastNode, token, tokens, OnNode);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -7,6 +7,8 @@ import {TreeNode} from "../AST";
|
|
|
7
7
|
import {Node} from "./Node";
|
|
8
8
|
import {ElementQueryNode} from "./ElementQueryNode";
|
|
9
9
|
import {ScopeNodeAbstract} from "./ScopeNodeAbstract";
|
|
10
|
+
import {ObjectAccessor} from "../Scope/ObjectAccessor";
|
|
11
|
+
import {ScopeAbstract} from "../Scope/ScopeAbstract";
|
|
10
12
|
|
|
11
13
|
export class ScopeMemberNode extends ScopeNodeAbstract implements TreeNode {
|
|
12
14
|
constructor(
|
|
@@ -45,6 +47,8 @@ export class ScopeMemberNode extends ScopeNodeAbstract implements TreeNode {
|
|
|
45
47
|
for (let parent of scopes) {
|
|
46
48
|
if (parent instanceof DOMObject)
|
|
47
49
|
parent = parent.scope;
|
|
50
|
+
else if (parent && !(parent instanceof ScopeAbstract))
|
|
51
|
+
parent = new ObjectAccessor(parent);
|
|
48
52
|
|
|
49
53
|
if (!parent) {
|
|
50
54
|
throw Error(`Cannot access "${await this.name.evaluate(scope, dom, tag)}" of undefined.`);
|
package/src/AST.ts
CHANGED
|
@@ -34,6 +34,7 @@ import {DispatchEventNode} from "./AST/DispatchEventNode";
|
|
|
34
34
|
import {WithNode} from "./AST/WithNode";
|
|
35
35
|
import {AsNode} from "./AST/AsNode";
|
|
36
36
|
import {NamedStackNode} from "./AST/NamedStackNode";
|
|
37
|
+
import {LoopNode} from "./AST/LoopNode";
|
|
37
38
|
|
|
38
39
|
function lower(str: string): string {
|
|
39
40
|
return str ? str.toLowerCase() : null;
|
|
@@ -65,6 +66,7 @@ export enum TokenType {
|
|
|
65
66
|
TYPE_UINT,
|
|
66
67
|
TYPE_FLOAT,
|
|
67
68
|
TYPE_STRING,
|
|
69
|
+
TYPE_BOOL,
|
|
68
70
|
RETURN,
|
|
69
71
|
NOT,
|
|
70
72
|
OF,
|
|
@@ -77,6 +79,7 @@ export enum TokenType {
|
|
|
77
79
|
ELSE_IF,
|
|
78
80
|
ELSE,
|
|
79
81
|
FUNC,
|
|
82
|
+
LOOP,
|
|
80
83
|
ON,
|
|
81
84
|
CLASS,
|
|
82
85
|
NAME,
|
|
@@ -156,24 +159,24 @@ const TOKEN_PATTERNS: TokenPattern[] = [
|
|
|
156
159
|
},
|
|
157
160
|
{
|
|
158
161
|
type: TokenType.TYPE_INT,
|
|
159
|
-
pattern: /^int
|
|
162
|
+
pattern: /^int\s/
|
|
160
163
|
},
|
|
161
164
|
{
|
|
162
165
|
type: TokenType.TYPE_UINT,
|
|
163
|
-
pattern: /^uint
|
|
166
|
+
pattern: /^uint\s/
|
|
164
167
|
},
|
|
165
168
|
{
|
|
166
169
|
type: TokenType.TYPE_FLOAT,
|
|
167
|
-
pattern: /^float
|
|
170
|
+
pattern: /^float\s/
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
type: TokenType.TYPE_BOOL,
|
|
174
|
+
pattern: /^bool\s/
|
|
168
175
|
},
|
|
169
176
|
{
|
|
170
177
|
type: TokenType.UNIT,
|
|
171
178
|
pattern: /^\d+\.?\d?(?:cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)/
|
|
172
179
|
},
|
|
173
|
-
{
|
|
174
|
-
type: TokenType.TYPE_STRING,
|
|
175
|
-
pattern: /^string+/
|
|
176
|
-
},
|
|
177
180
|
{
|
|
178
181
|
type: TokenType.BOOLEAN_LITERAL,
|
|
179
182
|
pattern: /^(true|false)/
|
|
@@ -230,6 +233,10 @@ const TOKEN_PATTERNS: TokenPattern[] = [
|
|
|
230
233
|
type: TokenType.FUNC,
|
|
231
234
|
pattern: /^func\s/
|
|
232
235
|
},
|
|
236
|
+
{
|
|
237
|
+
type: TokenType.LOOP,
|
|
238
|
+
pattern: /^loop\s/
|
|
239
|
+
},
|
|
233
240
|
{
|
|
234
241
|
type: TokenType.ON,
|
|
235
242
|
pattern: /^on\s/
|
|
@@ -577,6 +584,11 @@ export class Tree {
|
|
|
577
584
|
lastBlock = node;
|
|
578
585
|
blockNodes.push(node);
|
|
579
586
|
node = null;
|
|
587
|
+
} else if (token.type === TokenType.LOOP) {
|
|
588
|
+
node = LoopNode.parse(node, token, tokens);
|
|
589
|
+
lastBlock = node;
|
|
590
|
+
blockNodes.push(node);
|
|
591
|
+
node = null;
|
|
580
592
|
} else if (token.type === TokenType.ON) {
|
|
581
593
|
node = OnNode.parse(node, token, tokens);
|
|
582
594
|
lastBlock = node;
|
package/src/Component.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import {Registry} from "./Registry";
|
|
2
|
-
import {DOM} from "./DOM";
|
|
3
2
|
import {SlotTag} from "./Tag/SlotTag";
|
|
4
3
|
import {SlottedTag} from "./Tag/SlottedTag";
|
|
4
|
+
import {ShadowDOM} from "./DOM/ShadowDOM";
|
|
5
|
+
import {DOM} from "./DOM";
|
|
5
6
|
|
|
6
7
|
export class Component extends HTMLElement {
|
|
7
8
|
protected readonly shadow: ShadowRoot;
|
|
9
|
+
protected readonly shadowDOM: ShadowDOM;
|
|
8
10
|
|
|
9
11
|
constructor() {
|
|
10
12
|
super();
|
|
11
13
|
Object.setPrototypeOf(this, Component.prototype);
|
|
12
14
|
|
|
15
|
+
this.shadowDOM = new ShadowDOM(DOM.instance, this, false);
|
|
13
16
|
this.shadow = this.attachShadow({mode: 'open'});
|
|
17
|
+
|
|
14
18
|
const templateId = this.getAttribute('template');
|
|
15
19
|
let template: HTMLTemplateElement;
|
|
16
20
|
|
|
@@ -28,34 +32,32 @@ export class Component extends HTMLElement {
|
|
|
28
32
|
const slotPromises = [];
|
|
29
33
|
const tagsToSetup = [];
|
|
30
34
|
this.shadow.querySelectorAll('slot').forEach((slot) => {
|
|
31
|
-
const slotTagPromise =
|
|
35
|
+
const slotTagPromise = this.shadowDOM.buildTag(slot,false, SlotTag);
|
|
32
36
|
const promise = new Promise<SlotTag>((resolve, reject) => {
|
|
33
37
|
slot.addEventListener('slotchange', (e) => {
|
|
34
38
|
slotTagPromise.then(async (slotTag) => {
|
|
35
|
-
|
|
36
39
|
for (const child of slot.assignedNodes()) {
|
|
37
|
-
const t = await
|
|
40
|
+
const t = await this.shadowDOM.buildTag<SlottedTag>(child as HTMLElement, false, SlottedTag);
|
|
38
41
|
await t?.slotted(slotTag);
|
|
39
42
|
tagsToSetup.push(t);
|
|
40
43
|
}
|
|
41
44
|
resolve(slotTag);
|
|
42
45
|
});
|
|
43
46
|
});
|
|
44
|
-
})
|
|
47
|
+
});
|
|
45
48
|
slotPromises.push(promise);
|
|
46
49
|
});
|
|
47
50
|
Promise.all(slotPromises).then(async (slotTags: SlotTag[]) => {
|
|
48
|
-
|
|
49
|
-
await DOM.instance.setupTags(slotTags);
|
|
50
|
-
await DOM.instance.setupTags(tagsToSetup);
|
|
51
|
+
console.log('Building after slot setup', this);
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
async connectedCallback() {
|
|
55
|
-
const tag = await
|
|
56
|
-
tag.createScope(true);
|
|
57
|
-
|
|
58
|
-
await
|
|
59
|
-
await tag.dom.
|
|
56
|
+
//const tag = await this.shadowDOM.buildTag(this, true);
|
|
57
|
+
//tag.createScope(true);
|
|
58
|
+
console.log('Building from shadow', this.shadow);
|
|
59
|
+
await this.shadowDOM.buildFrom(this.shadow, true, true);
|
|
60
|
+
///await tag.dom.resetBranch(tag);
|
|
61
|
+
//await tag.dom.setupTags([tag]);
|
|
60
62
|
}
|
|
61
63
|
}
|