@joist/element 4.0.0-next.4 → 4.0.0-next.6
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/README.md +2 -2
- package/package.json +4 -3
- package/src/lib/attr.test.ts +107 -98
- package/src/lib/attr.ts +2 -2
- package/src/lib/element.test.ts +84 -80
- package/src/lib/element.ts +5 -13
- package/src/lib/lifecycle.test.ts +31 -0
- package/src/lib/lifecycle.ts +9 -0
- package/src/lib/listen.ts +1 -1
- package/src/lib/metadata.ts +1 -0
- package/src/lib/query.test.ts +43 -44
- package/src/lib/query.ts +1 -1
- package/src/lib/result.ts +2 -22
- package/src/lib/tags.ts +28 -13
- package/src/lib/template.test.ts +65 -0
- package/src/lib/template.ts +132 -0
- package/src/lib.ts +3 -2
- package/target/lib/attr.d.ts +1 -1
- package/target/lib/attr.js +1 -1
- package/target/lib/attr.js.map +1 -1
- package/target/lib/attr.test.js +258 -252
- package/target/lib/attr.test.js.map +1 -1
- package/target/lib/element.d.ts +2 -5
- package/target/lib/element.js +3 -9
- package/target/lib/element.js.map +1 -1
- package/target/lib/element.test.js +181 -179
- package/target/lib/element.test.js.map +1 -1
- package/target/lib/lifecycle.d.ts +1 -0
- package/target/lib/lifecycle.js +8 -0
- package/target/lib/lifecycle.js.map +1 -0
- package/target/lib/lifecycle.test.d.ts +1 -0
- package/target/lib/lifecycle.test.js +48 -0
- package/target/lib/lifecycle.test.js.map +1 -0
- package/target/lib/listen.d.ts +1 -1
- package/target/lib/listen.js.map +1 -1
- package/target/lib/metadata.d.ts +1 -0
- package/target/lib/metadata.js +1 -0
- package/target/lib/metadata.js.map +1 -1
- package/target/lib/query.d.ts +1 -1
- package/target/lib/query.test.js +72 -74
- package/target/lib/query.test.js.map +1 -1
- package/target/lib/result.d.ts +2 -9
- package/target/lib/result.js +1 -14
- package/target/lib/result.js.map +1 -1
- package/target/lib/tags.d.ts +11 -7
- package/target/lib/tags.js +20 -11
- package/target/lib/tags.js.map +1 -1
- package/target/lib/template.d.ts +6 -0
- package/target/lib/template.js +91 -0
- package/target/lib/template.js.map +1 -0
- package/target/lib/template.test.d.ts +1 -0
- package/target/lib/template.test.js +47 -0
- package/target/lib/template.test.js.map +1 -0
- package/target/lib.d.ts +3 -2
- package/target/lib.js +3 -2
- package/target/lib.js.map +1 -1
package/target/lib/query.test.js
CHANGED
|
@@ -1,80 +1,78 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { expect } from '
|
|
2
|
+
import { expect } from 'chai';
|
|
3
3
|
import { element } from './element.js';
|
|
4
4
|
import { query } from './query.js';
|
|
5
5
|
import { html } from './tags.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
let
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
let
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
expect(el.shadowRoot?.querySelector('#lname')?.value).to.equal('Bar');
|
|
78
|
-
});
|
|
6
|
+
it('should work', () => {
|
|
7
|
+
let MyElement = (() => {
|
|
8
|
+
let _classDecorators = [element({
|
|
9
|
+
tagName: 'query-test-1',
|
|
10
|
+
shadow: [
|
|
11
|
+
html `
|
|
12
|
+
<form>
|
|
13
|
+
<input id="fname" name="fname" />
|
|
14
|
+
<input id="lname" name="lname" />
|
|
15
|
+
</form>
|
|
16
|
+
`
|
|
17
|
+
]
|
|
18
|
+
})];
|
|
19
|
+
let _classDescriptor;
|
|
20
|
+
let _classExtraInitializers = [];
|
|
21
|
+
let _classThis;
|
|
22
|
+
let _classSuper = HTMLElement;
|
|
23
|
+
var MyElement = class extends _classSuper {
|
|
24
|
+
static { _classThis = this; }
|
|
25
|
+
static {
|
|
26
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
27
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
28
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
29
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
30
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
31
|
+
}
|
|
32
|
+
fname = query('#fname');
|
|
33
|
+
lname = query('#lname');
|
|
34
|
+
};
|
|
35
|
+
return MyElement = _classThis;
|
|
36
|
+
})();
|
|
37
|
+
const el = new MyElement();
|
|
38
|
+
expect(el.fname()).to.equal(el.shadowRoot?.querySelector('#fname'));
|
|
39
|
+
expect(el.lname()).to.equal(el.shadowRoot?.querySelector('#lname'));
|
|
40
|
+
});
|
|
41
|
+
it('should patch the selected item', () => {
|
|
42
|
+
let MyElement = (() => {
|
|
43
|
+
let _classDecorators = [element({
|
|
44
|
+
tagName: 'query-test-2',
|
|
45
|
+
shadow: [
|
|
46
|
+
html `
|
|
47
|
+
<form>
|
|
48
|
+
<input id="fname" name="fname" />
|
|
49
|
+
<input id="lname" name="lname" />
|
|
50
|
+
</form>
|
|
51
|
+
`
|
|
52
|
+
]
|
|
53
|
+
})];
|
|
54
|
+
let _classDescriptor;
|
|
55
|
+
let _classExtraInitializers = [];
|
|
56
|
+
let _classThis;
|
|
57
|
+
let _classSuper = HTMLElement;
|
|
58
|
+
var MyElement = class extends _classSuper {
|
|
59
|
+
static { _classThis = this; }
|
|
60
|
+
static {
|
|
61
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
62
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
63
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
64
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
65
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
66
|
+
}
|
|
67
|
+
fname = query('#fname');
|
|
68
|
+
lname = query('#lname');
|
|
69
|
+
};
|
|
70
|
+
return MyElement = _classThis;
|
|
71
|
+
})();
|
|
72
|
+
const el = new MyElement();
|
|
73
|
+
el.fname({ value: 'Foo' });
|
|
74
|
+
el.lname({ value: 'Bar' });
|
|
75
|
+
expect(el.shadowRoot?.querySelector('#fname')?.value).to.equal('Foo');
|
|
76
|
+
expect(el.shadowRoot?.querySelector('#lname')?.value).to.equal('Bar');
|
|
79
77
|
});
|
|
80
78
|
//# sourceMappingURL=query.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.test.js","sourceRoot":"","sources":["../../src/lib/query.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"query.test.js","sourceRoot":"","sources":["../../src/lib/query.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QAYf,SAAS;gCAXd,OAAO,CAAC;gBACP,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE;oBACN,IAAI,CAAA;;;;;OAKH;iBACF;aACF,CAAC;;;;0BACsB,WAAW;6BAAnB,SAAQ,WAAW;;;;gBAAnC,6KAGC;;;gBAHK,uDAAS;;YACb,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;YAC1C,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;;;;IAG5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAE3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAYlC,SAAS;gCAXd,OAAO,CAAC;gBACP,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE;oBACN,IAAI,CAAA;;;;;OAKH;iBACF;aACF,CAAC;;;;0BACsB,WAAW;6BAAnB,SAAQ,WAAW;;;;gBAAnC,6KAGC;;;gBAHK,uDAAS;;YACb,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;YAC1C,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;;;;IAG5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAC3B,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3B,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3B,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC"}
|
package/target/lib/result.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
export interface ShadowResult {
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
export declare abstract class JoistShadowResult implements ShadowResult {
|
|
5
|
-
strings: TemplateStringsArray;
|
|
6
|
-
values: any[];
|
|
7
|
-
constructor(raw: TemplateStringsArray, ...values: any[]);
|
|
8
|
-
run(el: HTMLElement): void;
|
|
9
|
-
abstract setup(root: ShadowRoot): void;
|
|
1
|
+
export interface ShadowResult<T extends HTMLElement> {
|
|
2
|
+
apply(el: T): void;
|
|
10
3
|
}
|
package/target/lib/result.js
CHANGED
|
@@ -1,15 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
strings;
|
|
3
|
-
values;
|
|
4
|
-
constructor(raw, ...values) {
|
|
5
|
-
this.strings = raw;
|
|
6
|
-
this.values = values;
|
|
7
|
-
}
|
|
8
|
-
run(el) {
|
|
9
|
-
if (!el.shadowRoot) {
|
|
10
|
-
throw new Error('ShadowResult has not been applied');
|
|
11
|
-
}
|
|
12
|
-
this.setup(el.shadowRoot);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
export {};
|
|
15
2
|
//# sourceMappingURL=result.js.map
|
package/target/lib/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":""}
|
package/target/lib/tags.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class HTMLResult extends
|
|
3
|
-
|
|
1
|
+
import { ShadowResult } from './result.js';
|
|
2
|
+
export declare class HTMLResult<T extends HTMLElement> implements ShadowResult<T> {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(raw: TemplateStringsArray, ..._values: any[]);
|
|
5
|
+
apply(el: T): void;
|
|
4
6
|
}
|
|
5
|
-
export declare function html(strings: TemplateStringsArray, ...values: any[]): HTMLResult
|
|
6
|
-
export declare class CSSResult extends
|
|
7
|
-
|
|
7
|
+
export declare function html<T extends HTMLElement>(strings: TemplateStringsArray, ...values: any[]): HTMLResult<T>;
|
|
8
|
+
export declare class CSSResult<T extends HTMLElement> implements ShadowResult<T> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(raw: TemplateStringsArray, ..._values: any[]);
|
|
11
|
+
apply(el: HTMLElement): void;
|
|
8
12
|
}
|
|
9
|
-
export declare function css(strings: TemplateStringsArray): CSSResult
|
|
13
|
+
export declare function css<T extends HTMLElement>(strings: TemplateStringsArray): CSSResult<T>;
|
package/target/lib/tags.js
CHANGED
|
@@ -1,19 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
template.innerHTML = concat(
|
|
6
|
-
|
|
1
|
+
export class HTMLResult {
|
|
2
|
+
#template;
|
|
3
|
+
constructor(raw, ..._values) {
|
|
4
|
+
this.#template = document.createElement('template');
|
|
5
|
+
this.#template.innerHTML = concat(raw);
|
|
6
|
+
}
|
|
7
|
+
apply(el) {
|
|
8
|
+
if (el.shadowRoot) {
|
|
9
|
+
el.shadowRoot.append(this.#template.content.cloneNode(true));
|
|
10
|
+
}
|
|
7
11
|
}
|
|
8
12
|
}
|
|
9
13
|
export function html(strings, ...values) {
|
|
10
14
|
return new HTMLResult(strings, ...values);
|
|
11
15
|
}
|
|
12
|
-
export class CSSResult
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
sheet
|
|
16
|
-
|
|
16
|
+
export class CSSResult {
|
|
17
|
+
#sheet;
|
|
18
|
+
constructor(raw, ..._values) {
|
|
19
|
+
this.#sheet = new CSSStyleSheet();
|
|
20
|
+
this.#sheet.replaceSync(concat(raw));
|
|
21
|
+
}
|
|
22
|
+
apply(el) {
|
|
23
|
+
if (el.shadowRoot) {
|
|
24
|
+
el.shadowRoot.adoptedStyleSheets = [...el.shadowRoot.adoptedStyleSheets, this.#sheet];
|
|
25
|
+
}
|
|
17
26
|
}
|
|
18
27
|
}
|
|
19
28
|
export function css(strings) {
|
package/target/lib/tags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,SAAS,CAAC;IAEV,YAAY,GAAyB,EAAE,GAAG,OAAc;QACtD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,EAAK;QACT,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAClB,OAA6B,EAC7B,GAAG,MAAa;IAEhB,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC;IAEP,YAAY,GAAyB,EAAE,GAAG,OAAc;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,EAAe;QACnB,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,kBAAkB,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAwB,OAA6B;IACtE,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,OAA6B;IAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const TOKEN_PREFIX = '#:';
|
|
2
|
+
class NodeMap extends Map {
|
|
3
|
+
}
|
|
4
|
+
export function template(_templateOpts) {
|
|
5
|
+
let initialized = false;
|
|
6
|
+
const nodes = new NodeMap();
|
|
7
|
+
return function render(renderOpts) {
|
|
8
|
+
if (renderOpts?.refresh) {
|
|
9
|
+
initialized = false;
|
|
10
|
+
nodes.clear();
|
|
11
|
+
}
|
|
12
|
+
if (initialized) {
|
|
13
|
+
return updateNodes(this, nodes);
|
|
14
|
+
}
|
|
15
|
+
initializeNodes(this, nodes);
|
|
16
|
+
initialized = true;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function initializeNodes(el, nodes) {
|
|
20
|
+
const iterator = document.createTreeWalker(el.shadowRoot || el, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT);
|
|
21
|
+
while (iterator.nextNode()) {
|
|
22
|
+
const res = trackNode(el, iterator.currentNode, nodes);
|
|
23
|
+
if (res !== null) {
|
|
24
|
+
iterator.currentNode = res;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function updateNodes(el, nodes) {
|
|
29
|
+
for (let [node, prop] of nodes) {
|
|
30
|
+
const value = Reflect.get(el, prop);
|
|
31
|
+
const isAttribute = node.nodeType === Node.ATTRIBUTE_NODE;
|
|
32
|
+
if (isAttribute && isBooleanAttributeNode(node)) {
|
|
33
|
+
manageBooleanAttribute(el, node);
|
|
34
|
+
}
|
|
35
|
+
else if (value !== node.nodeValue) {
|
|
36
|
+
node.nodeValue = value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function trackNode(el, node, nodes) {
|
|
41
|
+
switch (node.nodeType) {
|
|
42
|
+
case Node.COMMENT_NODE: {
|
|
43
|
+
const nodeValue = node.nodeValue?.trim();
|
|
44
|
+
if (nodeValue?.startsWith(TOKEN_PREFIX)) {
|
|
45
|
+
if (node.parentNode) {
|
|
46
|
+
const propertyKey = nodeValue.replace(TOKEN_PREFIX, '');
|
|
47
|
+
const textNode = document.createTextNode(Reflect.get(el, propertyKey));
|
|
48
|
+
node.parentNode.replaceChild(textNode, node);
|
|
49
|
+
nodes.set(textNode, propertyKey);
|
|
50
|
+
return textNode;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case Node.ELEMENT_NODE: {
|
|
56
|
+
const element = node;
|
|
57
|
+
for (let attr of element.attributes) {
|
|
58
|
+
const nodeValue = attr.value.trim();
|
|
59
|
+
if (isBooleanAttributeNode(attr)) {
|
|
60
|
+
manageBooleanAttribute(el, attr);
|
|
61
|
+
nodes.set(attr, attr.value);
|
|
62
|
+
}
|
|
63
|
+
else if (nodeValue.startsWith(TOKEN_PREFIX)) {
|
|
64
|
+
const propertyKey = nodeValue.replace(TOKEN_PREFIX, '');
|
|
65
|
+
attr.value = Reflect.get(el, propertyKey);
|
|
66
|
+
nodes.set(attr, propertyKey);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function isBooleanAttributeNode(attr) {
|
|
75
|
+
return attr.name.startsWith(TOKEN_PREFIX);
|
|
76
|
+
}
|
|
77
|
+
function manageBooleanAttribute(el, attr) {
|
|
78
|
+
const realAttributeName = attr.name.replace(TOKEN_PREFIX, '');
|
|
79
|
+
if (attr.ownerElement) {
|
|
80
|
+
let value = attr.value.startsWith('!')
|
|
81
|
+
? !Reflect.get(el, attr.value.replace('!', ''))
|
|
82
|
+
: Reflect.get(el, attr.value);
|
|
83
|
+
if (value) {
|
|
84
|
+
attr.ownerElement.setAttribute(realAttributeName, '');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
attr.ownerElement.removeAttribute(realAttributeName);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { assert } from 'chai';
|
|
2
|
+
import { template } from './template.js';
|
|
3
|
+
const TESTS = [
|
|
4
|
+
function comments(el, root) {
|
|
5
|
+
it(`should intialize template comments ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
6
|
+
el.title = 'Hello World';
|
|
7
|
+
el.ariaLabel = 'This is the label';
|
|
8
|
+
el.ariaDescription = 'This is the description';
|
|
9
|
+
root.innerHTML = `
|
|
10
|
+
<!--#:title-->
|
|
11
|
+
|
|
12
|
+
<ul>
|
|
13
|
+
<li><!--#:ariaLabel--></li>
|
|
14
|
+
<li><!--#:ariaDescription--></li>
|
|
15
|
+
</ul>
|
|
16
|
+
`;
|
|
17
|
+
const render = template();
|
|
18
|
+
render.call(el);
|
|
19
|
+
assert.equal(root.innerHTML
|
|
20
|
+
.split('\n')
|
|
21
|
+
.map((res) => res.trim())
|
|
22
|
+
.join(''), 'Hello World<ul><li>This is the label</li><li>This is the description</li></ul>');
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
function attributes(el, root) {
|
|
26
|
+
it(`should intialize template attributes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
27
|
+
el.ariaLabel = 'This is the label';
|
|
28
|
+
el.ariaDescription = 'This is the description';
|
|
29
|
+
root.innerHTML = `
|
|
30
|
+
<ul aria-label="#:ariaLabel" aria-description="#:ariaDescription"></ul>
|
|
31
|
+
`;
|
|
32
|
+
const render = template();
|
|
33
|
+
render.call(el);
|
|
34
|
+
assert.equal(root.innerHTML
|
|
35
|
+
.split('\n')
|
|
36
|
+
.map((res) => res.trim())
|
|
37
|
+
.join(''), '<ul aria-label="This is the label" aria-description="This is the description"></ul>');
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
for (let test of TESTS) {
|
|
42
|
+
const lightEl = document.createElement('div');
|
|
43
|
+
test(lightEl, lightEl);
|
|
44
|
+
const shadowEl = document.createElement('div');
|
|
45
|
+
test(shadowEl, shadowEl.attachShadow({ mode: 'open' }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=template.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../src/lib/template.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,KAAK,GAAG;IACZ,SAAS,QAAQ,CAAC,EAAe,EAAE,IAA8B;QAC/D,EAAE,CAAC,sCAAsC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE;YACzG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC;YACzB,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC;YACnC,EAAE,CAAC,eAAe,GAAG,yBAAyB,CAAC;YAE/C,IAAI,CAAC,SAAS,GAAY;;;;;;;OAOzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAE1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS;iBACX,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC,EACX,gFAAgF,CACjF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,SAAS,UAAU,CAAC,EAAe,EAAE,IAA8B;QACjE,EAAE,CAAC,wCAAwC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE;YAC3G,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC;YACnC,EAAE,CAAC,eAAe,GAAG,yBAAyB,CAAC;YAE/C,IAAI,CAAC,SAAS,GAAY;;OAEzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAE1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS;iBACX,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC,EACX,qFAAqF,CACtF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
package/target/lib.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { JoistShadowResult as TemplateResult } from './lib/result.js';
|
|
2
1
|
export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
|
|
3
2
|
export { attr } from './lib/attr.js';
|
|
4
3
|
export { listen } from './lib/listen.js';
|
|
5
|
-
export { element
|
|
4
|
+
export { element } from './lib/element.js';
|
|
6
5
|
export { query } from './lib/query.js';
|
|
6
|
+
export { template } from './lib/template.js';
|
|
7
|
+
export { ready } from './lib/lifecycle.js';
|
package/target/lib.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { JoistShadowResult as TemplateResult } from './lib/result.js';
|
|
2
1
|
export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
|
|
3
2
|
export { attr } from './lib/attr.js';
|
|
4
3
|
export { listen } from './lib/listen.js';
|
|
5
|
-
export { element
|
|
4
|
+
export { element } from './lib/element.js';
|
|
6
5
|
export { query } from './lib/query.js';
|
|
6
|
+
export { template } from './lib/template.js';
|
|
7
|
+
export { ready } from './lib/lifecycle.js';
|
|
7
8
|
//# sourceMappingURL=lib.js.map
|
package/target/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
|