dothtml 5.2.12 → 6.0.0-beta.10
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/build_module/constants.d.ts +1 -0
- package/build_module/constants.js +2 -0
- package/build_module/constants.js.map +1 -0
- package/build_module/css/css.d.ts +0 -0
- package/build_module/css/css.js +1 -0
- package/build_module/css/css.js.map +1 -0
- package/build_module/decoration/component.d.ts +14 -0
- package/build_module/decoration/component.js +43 -0
- package/build_module/decoration/component.js.map +1 -0
- package/build_module/decoration/style.d.ts +0 -0
- package/build_module/decoration/style.js +1 -0
- package/build_module/decoration/style.js.map +1 -0
- package/build_module/decoration/use-styles.d.ts +14 -0
- package/build_module/decoration/use-styles.js +19 -0
- package/build_module/decoration/use-styles.js.map +1 -0
- package/build_module/dot.d.ts +3 -0
- package/build_module/dot.js +534 -0
- package/build_module/dot.js.map +1 -0
- package/build_module/helpers/render-css.d.ts +2 -0
- package/build_module/helpers/render-css.js +19 -0
- package/build_module/helpers/render-css.js.map +1 -0
- package/build_module/helpers.d.ts +2 -0
- package/build_module/helpers.js +49 -0
- package/build_module/helpers.js.map +1 -0
- package/build_module/index.d.ts +7 -0
- package/build_module/index.js +5 -0
- package/build_module/index.js.map +1 -0
- package/build_module/reactive.d.ts +37 -0
- package/build_module/reactive.js +120 -0
- package/build_module/reactive.js.map +1 -0
- package/build_module/v-dom-node.d.ts +0 -0
- package/build_module/v-dom-node.js +1 -0
- package/build_module/v-dom-node.js.map +1 -0
- package/build_module/vdom-nodes/collection-vdom.d.ts +24 -0
- package/build_module/vdom-nodes/collection-vdom.js +154 -0
- package/build_module/vdom-nodes/collection-vdom.js.map +1 -0
- package/build_module/vdom-nodes/component-vdom.d.ts +14 -0
- package/build_module/vdom-nodes/component-vdom.js +61 -0
- package/build_module/vdom-nodes/component-vdom.js.map +1 -0
- package/build_module/vdom-nodes/conditional-vdom.d.ts +14 -0
- package/build_module/vdom-nodes/conditional-vdom.js +97 -0
- package/build_module/vdom-nodes/conditional-vdom.js.map +1 -0
- package/build_module/vdom-nodes/container-vdom.d.ts +23 -0
- package/build_module/vdom-nodes/container-vdom.js +85 -0
- package/build_module/vdom-nodes/container-vdom.js.map +1 -0
- package/build_module/vdom-nodes/element-vdom.d.ts +18 -0
- package/build_module/vdom-nodes/element-vdom.js +88 -0
- package/build_module/vdom-nodes/element-vdom.js.map +1 -0
- package/build_module/vdom-nodes/html-vdom.d.ts +13 -0
- package/build_module/vdom-nodes/html-vdom.js +53 -0
- package/build_module/vdom-nodes/html-vdom.js.map +1 -0
- package/build_module/vdom-nodes/text-vdom.d.ts +11 -0
- package/build_module/vdom-nodes/text-vdom.js +37 -0
- package/build_module/vdom-nodes/text-vdom.js.map +1 -0
- package/build_module/vdom-nodes/vdom.d.ts +7 -0
- package/build_module/vdom-nodes/vdom.js +28 -0
- package/build_module/vdom-nodes/vdom.js.map +1 -0
- package/package.json +26 -19
- package/lib/arg-callback-obj.d.ts +0 -29
- package/lib/arg-callback-obj.js +0 -64
- package/lib/arg-callback-obj.js.map +0 -1
- package/lib/built-in-components/nav-link.d.ts +0 -8
- package/lib/built-in-components/nav-link.js +0 -24
- package/lib/built-in-components/nav-link.js.map +0 -1
- package/lib/built-in-components/router.d.ts +0 -57
- package/lib/built-in-components/router.js +0 -282
- package/lib/built-in-components/router.js.map +0 -1
- package/lib/component.d.ts +0 -93
- package/lib/component.js +0 -354
- package/lib/component.js.map +0 -1
- package/lib/dot-util.d.ts +0 -26
- package/lib/dot-util.js +0 -62
- package/lib/dot-util.js.map +0 -1
- package/lib/dot.d.ts +0 -5
- package/lib/dot.js +0 -1129
- package/lib/dot.js.map +0 -1
- package/lib/dothtml.d.ts +0 -29
- package/lib/dothtml.js +0 -15
- package/lib/dothtml.js.map +0 -1
- package/lib/err.d.ts +0 -2
- package/lib/err.js +0 -26
- package/lib/err.js.map +0 -1
- package/lib/event-bus.d.ts +0 -10
- package/lib/event-bus.js +0 -37
- package/lib/event-bus.js.map +0 -1
- package/lib/i-dot.d.ts +0 -689
- package/lib/i-dot.js +0 -3
- package/lib/i-dot.js.map +0 -1
- package/lib/node-polyfill.d.ts +0 -2
- package/lib/node-polyfill.js +0 -14
- package/lib/node-polyfill.js.map +0 -1
- package/lib/observable-array.d.ts +0 -49
- package/lib/observable-array.js +0 -274
- package/lib/observable-array.js.map +0 -1
- package/lib/pages/home-page.d.ts +0 -9
- package/lib/pages/home-page.js +0 -24
- package/lib/pages/home-page.js.map +0 -1
- package/lib/styling/css-types.ts/css-angle.d.ts +0 -7
- package/lib/styling/css-types.ts/css-angle.js +0 -22
- package/lib/styling/css-types.ts/css-angle.js.map +0 -1
- package/lib/styling/css-types.ts/css-color.d.ts +0 -9
- package/lib/styling/css-types.ts/css-color.js +0 -824
- package/lib/styling/css-types.ts/css-color.js.map +0 -1
- package/lib/styling/css-types.ts/css-complex.d.ts +0 -7
- package/lib/styling/css-types.ts/css-complex.js +0 -23
- package/lib/styling/css-types.ts/css-complex.js.map +0 -1
- package/lib/styling/css-types.ts/css-data-type.d.ts +0 -5
- package/lib/styling/css-types.ts/css-data-type.js +0 -9
- package/lib/styling/css-types.ts/css-data-type.js.map +0 -1
- package/lib/styling/css-types.ts/css-filter.d.ts +0 -22
- package/lib/styling/css-types.ts/css-filter.js +0 -121
- package/lib/styling/css-types.ts/css-filter.js.map +0 -1
- package/lib/styling/css-types.ts/css-length.d.ts +0 -7
- package/lib/styling/css-types.ts/css-length.js +0 -24
- package/lib/styling/css-types.ts/css-length.js.map +0 -1
- package/lib/styling/css-types.ts/css-number.d.ts +0 -6
- package/lib/styling/css-types.ts/css-number.js +0 -17
- package/lib/styling/css-types.ts/css-number.js.map +0 -1
- package/lib/styling/css-types.ts/css-percentage.d.ts +0 -5
- package/lib/styling/css-types.ts/css-percentage.js +0 -13
- package/lib/styling/css-types.ts/css-percentage.js.map +0 -1
- package/lib/styling/css-types.ts/css-transform.d.ts +0 -38
- package/lib/styling/css-types.ts/css-transform.js +0 -183
- package/lib/styling/css-types.ts/css-transform.js.map +0 -1
- package/lib/styling/css-types.ts/css-unknown.d.ts +0 -6
- package/lib/styling/css-types.ts/css-unknown.js +0 -17
- package/lib/styling/css-types.ts/css-unknown.js.map +0 -1
- package/lib/styling/css-types.ts/css-url.d.ts +0 -6
- package/lib/styling/css-types.ts/css-url.js +0 -45
- package/lib/styling/css-types.ts/css-url.js.map +0 -1
- package/lib/styling/i-dotcss.d.ts +0 -1085
- package/lib/styling/i-dotcss.js +0 -3
- package/lib/styling/i-dotcss.js.map +0 -1
- package/lib/styling/style-builder.d.ts +0 -24
- package/lib/styling/style-builder.js +0 -815
- package/lib/styling/style-builder.js.map +0 -1
- package/lib/styling/unit-function-tables.d.ts +0 -10
- package/lib/styling/unit-function-tables.js +0 -27
- package/lib/styling/unit-function-tables.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export default function renderCss(styleCallback) {
|
|
2
|
+
let sharedStyles = new CSSStyleSheet();
|
|
3
|
+
if (typeof styleCallback == "string") {
|
|
4
|
+
sharedStyles.replaceSync(styleCallback);
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
let finalStylesheet = "";
|
|
8
|
+
let css = null;
|
|
9
|
+
let styles = styleCallback(css);
|
|
10
|
+
if (typeof styles == "string") {
|
|
11
|
+
finalStylesheet = styles;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
}
|
|
15
|
+
sharedStyles.replaceSync(finalStylesheet);
|
|
16
|
+
}
|
|
17
|
+
return sharedStyles;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=render-css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-css.js","sourceRoot":"","sources":["../../src/helpers/render-css.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,aAAoD;IACrF,IAAI,YAAY,GAAG,IAAI,aAAa,EAAE,CAAC;IAEvC,IAAI,OAAO,aAAa,IAAI,QAAQ,EAAE;QACrC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;KACxC;SACI;QACJ,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;YAE9B,eAAe,GAAG,MAAM,CAAC;SACzB;aACI;SAGJ;QAED,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;KAC1C;IACD,OAAO,YAAY,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DOT_VDOM_PROP_NAME } from "./constants";
|
|
2
|
+
export function removeNodesBetween(start, end) {
|
|
3
|
+
if (start.parentNode !== end.parentNode) {
|
|
4
|
+
throw new Error("Start and end nodes must have the same parent.");
|
|
5
|
+
}
|
|
6
|
+
let current = start.nextSibling;
|
|
7
|
+
while (current && current !== end) {
|
|
8
|
+
const next = current.nextSibling;
|
|
9
|
+
if (current[DOT_VDOM_PROP_NAME]) {
|
|
10
|
+
current[DOT_VDOM_PROP_NAME]._unrender();
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
current.parentNode?.removeChild(current);
|
|
14
|
+
}
|
|
15
|
+
current = next;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function deepEqual(obj1, obj2, visited = new Map()) {
|
|
19
|
+
if (obj1 === obj2) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (obj1 == null || obj2 == null || typeof obj1 !== 'object' || typeof obj2 !== 'object') {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (visited.has(obj1)) {
|
|
26
|
+
return visited.get(obj1) === obj2;
|
|
27
|
+
}
|
|
28
|
+
visited.set(obj1, obj2);
|
|
29
|
+
if (Array.isArray(obj1) && Array.isArray(obj2)) {
|
|
30
|
+
if (obj1.length !== obj2.length) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
for (const prop in obj1) {
|
|
35
|
+
if (!obj2.hasOwnProperty(prop)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (!deepEqual(obj1[prop], obj2[prop], visited)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const prop in obj2) {
|
|
43
|
+
if (!obj1.hasOwnProperty(prop)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,kBAAkB,CAAC,KAAW,EAAE,GAAS;IAExD,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;KAClE;IAED,IAAI,OAAO,GAAc,KAAK,CAAC,WAAW,CAAC;IAG3C,OAAO,OAAO,IAAI,OAAO,KAAK,GAAG,EAAE;QAClC,MAAM,IAAI,GAAc,OAAO,CAAC,WAAW,CAAC;QAG5C,IAAG,OAAO,CAAC,kBAAkB,CAAC,EAAC;YAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC;SACxC;aACG;YACH,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;SACzC;QACD,OAAO,GAAG,IAAI,CAAC;KACf;AACF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAS,EAAE,IAAS,EAAE,OAAO,GAAG,IAAI,GAAG,EAAE;IAC/D,IAAI,IAAI,KAAK,IAAI,EAAE;QACf,OAAO,IAAI,CAAC;KACf;IAED,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACtF,OAAO,KAAK,CAAC;KAChB;IAGD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;KACrC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAExB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAC7B,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE;YAC7C,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AAUtB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AAEjB,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { IReactive } from "dothtml-interfaces";
|
|
2
|
+
import ElementVdom from "./vdom-nodes/element-vdom";
|
|
3
|
+
import { TextVdom } from "./vdom-nodes/text-vdom";
|
|
4
|
+
import { HtmlVdom } from "./vdom-nodes/html-vdom";
|
|
5
|
+
import { ConditionalVdom } from "./vdom-nodes/conditional-vdom";
|
|
6
|
+
import CollectionVdom from "./vdom-nodes/collection-vdom";
|
|
7
|
+
export default class Reactive<Ti = any, To = Ti> implements IReactive<Ti, To> {
|
|
8
|
+
_value: Ti;
|
|
9
|
+
private _cachedLastValue;
|
|
10
|
+
key: string;
|
|
11
|
+
observingTextNodes: Record<number, TextVdom>;
|
|
12
|
+
observingHtmlNodes: Record<number, HtmlVdom>;
|
|
13
|
+
observingAttributes: Record<number, {
|
|
14
|
+
element: ElementVdom;
|
|
15
|
+
attribute: string;
|
|
16
|
+
}>;
|
|
17
|
+
observingCollections: Record<number, {
|
|
18
|
+
collection: CollectionVdom;
|
|
19
|
+
key?: string;
|
|
20
|
+
}>;
|
|
21
|
+
observingConditionals: Record<number, ConditionalVdom>;
|
|
22
|
+
observingCallbacks: Record<number, (value: To) => void>;
|
|
23
|
+
constructor();
|
|
24
|
+
getValue(): To;
|
|
25
|
+
setValue(v: Ti): void;
|
|
26
|
+
private updater;
|
|
27
|
+
transformer?: (input: Ti) => To;
|
|
28
|
+
nextId: number;
|
|
29
|
+
subscribeText(node: TextVdom): number;
|
|
30
|
+
subscribeHtml(node: HtmlVdom): number;
|
|
31
|
+
subscribeAttr(node: ElementVdom, attributeName: string): number;
|
|
32
|
+
subscribeCollection(node: CollectionVdom): number;
|
|
33
|
+
subscribeCond(node: ConditionalVdom): number;
|
|
34
|
+
subscribeCallback(callback: (value: To) => void): number;
|
|
35
|
+
detachBinding(id: number): void;
|
|
36
|
+
updateObservers(): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
const TEXT_OFFSET = 0;
|
|
2
|
+
const HTML_OFFSET = 1;
|
|
3
|
+
const ATTR_OFFSET = 2;
|
|
4
|
+
const COND_OFFSET = 3;
|
|
5
|
+
const ARRAY_OFFSET = 4;
|
|
6
|
+
const CB_OFFSET = 5;
|
|
7
|
+
const CATEGORIES = CB_OFFSET + 1;
|
|
8
|
+
export default class Reactive {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.observingTextNodes = {};
|
|
11
|
+
this.observingHtmlNodes = {};
|
|
12
|
+
this.observingAttributes = {};
|
|
13
|
+
this.observingCollections = {};
|
|
14
|
+
this.observingConditionals = {};
|
|
15
|
+
this.observingCallbacks = {};
|
|
16
|
+
this.nextId = 1;
|
|
17
|
+
}
|
|
18
|
+
getValue() {
|
|
19
|
+
return this.transformer ? this.transformer(this._value) : this._value;
|
|
20
|
+
}
|
|
21
|
+
setValue(v) {
|
|
22
|
+
this._value = v;
|
|
23
|
+
let newValue = this.getValue();
|
|
24
|
+
if (this._cachedLastValue != newValue) {
|
|
25
|
+
this._cachedLastValue = newValue;
|
|
26
|
+
this.updater(newValue);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
updater(value) {
|
|
30
|
+
for (let o in this.observingTextNodes) {
|
|
31
|
+
let n = this.observingTextNodes[o];
|
|
32
|
+
n.textNode.textContent = value ?? "";
|
|
33
|
+
}
|
|
34
|
+
for (let o in this.observingHtmlNodes) {
|
|
35
|
+
let n = this.observingHtmlNodes[o];
|
|
36
|
+
n.updateHtml(value);
|
|
37
|
+
}
|
|
38
|
+
for (let o in this.observingAttributes) {
|
|
39
|
+
let a = this.observingAttributes[o];
|
|
40
|
+
a.element.setAttr(a.attribute, this);
|
|
41
|
+
}
|
|
42
|
+
for (let o in this.observingCollections) {
|
|
43
|
+
let c = this.observingCollections[o];
|
|
44
|
+
c.collection.updateList();
|
|
45
|
+
}
|
|
46
|
+
for (let o in this.observingConditionals) {
|
|
47
|
+
let a = this.observingConditionals[o];
|
|
48
|
+
a.updateConditions();
|
|
49
|
+
}
|
|
50
|
+
for (let o in this.observingCallbacks) {
|
|
51
|
+
let cb = this.observingCallbacks[o];
|
|
52
|
+
cb(value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
subscribeText(node) {
|
|
56
|
+
let id = TEXT_OFFSET + CATEGORIES * this.nextId++;
|
|
57
|
+
this.observingTextNodes[id] = node;
|
|
58
|
+
return id;
|
|
59
|
+
}
|
|
60
|
+
subscribeHtml(node) {
|
|
61
|
+
let id = HTML_OFFSET + CATEGORIES * this.nextId++;
|
|
62
|
+
this.observingHtmlNodes[id] = node;
|
|
63
|
+
return id;
|
|
64
|
+
}
|
|
65
|
+
subscribeAttr(node, attributeName) {
|
|
66
|
+
let id = ATTR_OFFSET + CATEGORIES * this.nextId++;
|
|
67
|
+
this.observingAttributes[id] = { element: node, attribute: attributeName };
|
|
68
|
+
return id;
|
|
69
|
+
}
|
|
70
|
+
subscribeCollection(node) {
|
|
71
|
+
let id = ARRAY_OFFSET + CATEGORIES * this.nextId++;
|
|
72
|
+
this.observingCollections[id] = { collection: node, key: null };
|
|
73
|
+
return id;
|
|
74
|
+
}
|
|
75
|
+
subscribeCond(node) {
|
|
76
|
+
let id = COND_OFFSET + CATEGORIES * this.nextId++;
|
|
77
|
+
this.observingConditionals[id] = node;
|
|
78
|
+
return id;
|
|
79
|
+
}
|
|
80
|
+
subscribeCallback(callback) {
|
|
81
|
+
let id = CB_OFFSET + CATEGORIES * this.nextId++;
|
|
82
|
+
this.observingCallbacks[id] = callback;
|
|
83
|
+
return id;
|
|
84
|
+
}
|
|
85
|
+
detachBinding(id) {
|
|
86
|
+
let category = id % CATEGORIES;
|
|
87
|
+
switch (category) {
|
|
88
|
+
case TEXT_OFFSET: {
|
|
89
|
+
delete this.observingTextNodes[id];
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case ATTR_OFFSET: {
|
|
93
|
+
delete this.observingAttributes[id];
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case HTML_OFFSET: {
|
|
97
|
+
delete this.observingHtmlNodes[id];
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
case ARRAY_OFFSET: {
|
|
101
|
+
delete this.observingCollections[id];
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case COND_OFFSET: {
|
|
105
|
+
delete this.observingConditionals[id];
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case CB_OFFSET: {
|
|
109
|
+
delete this.observingCallbacks[id];
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
updateObservers() {
|
|
115
|
+
let updatedValue = this.getValue();
|
|
116
|
+
this._cachedLastValue = updatedValue;
|
|
117
|
+
this.updater(updatedValue);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=reactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.js","sourceRoot":"","sources":["../src/reactive.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=v-dom-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v-dom-node.js","sourceRoot":"","sources":["../src/v-dom-node.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Reactive from "../reactive";
|
|
2
|
+
import { Vdom } from "./vdom";
|
|
3
|
+
import { ObservableCollection } from "./vdom-types";
|
|
4
|
+
type DatumMap = {
|
|
5
|
+
vdom: Vdom;
|
|
6
|
+
value: any;
|
|
7
|
+
keyValue: any;
|
|
8
|
+
afterNode: Node;
|
|
9
|
+
observableIndex: Reactive<number>;
|
|
10
|
+
};
|
|
11
|
+
export default class CollectionVdom extends Vdom {
|
|
12
|
+
value: ObservableCollection;
|
|
13
|
+
renderCallback: (x: any, i: number | string | Reactive, k: string) => Vdom;
|
|
14
|
+
startNode: Node;
|
|
15
|
+
endNode: Node;
|
|
16
|
+
observerId: number;
|
|
17
|
+
mappedItems: Array<DatumMap>;
|
|
18
|
+
constructor(value: ObservableCollection, renderCallback: (x: any, i: number | string, k: string) => Vdom);
|
|
19
|
+
_render(target: HTMLElement): void;
|
|
20
|
+
_unrender(): void;
|
|
21
|
+
private removeItem;
|
|
22
|
+
updateList(): void;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { deepEqual } from "../helpers";
|
|
2
|
+
import Reactive from "../reactive";
|
|
3
|
+
import { TextVdom } from "./text-vdom";
|
|
4
|
+
import { Vdom } from "./vdom";
|
|
5
|
+
export default class CollectionVdom extends Vdom {
|
|
6
|
+
constructor(value, renderCallback) {
|
|
7
|
+
super();
|
|
8
|
+
this.observerId = 0;
|
|
9
|
+
this.mappedItems = [];
|
|
10
|
+
this.value = value;
|
|
11
|
+
this.renderCallback = renderCallback;
|
|
12
|
+
}
|
|
13
|
+
_render(target) {
|
|
14
|
+
if (this.value instanceof Reactive) {
|
|
15
|
+
this.observerId = this.value.subscribeCollection(this);
|
|
16
|
+
}
|
|
17
|
+
this.startNode = target.ownerDocument.createTextNode("");
|
|
18
|
+
this.endNode = target.ownerDocument.createTextNode("");
|
|
19
|
+
target.appendChild(this.startNode);
|
|
20
|
+
target.appendChild(this.endNode);
|
|
21
|
+
this.updateList();
|
|
22
|
+
}
|
|
23
|
+
_unrender() {
|
|
24
|
+
if (this.observerId && this.value instanceof Reactive) {
|
|
25
|
+
this.value.detachBinding(this.observerId);
|
|
26
|
+
this.observerId = null;
|
|
27
|
+
}
|
|
28
|
+
for (let i = 0; i < this.mappedItems.length; i++) {
|
|
29
|
+
let I = this.mappedItems[i];
|
|
30
|
+
I.vdom._unrender();
|
|
31
|
+
I.afterNode.parentElement.removeChild(I.afterNode);
|
|
32
|
+
}
|
|
33
|
+
this.mappedItems.length = 0;
|
|
34
|
+
this.startNode.parentElement.removeChild(this.startNode);
|
|
35
|
+
this.endNode.parentElement.removeChild(this.endNode);
|
|
36
|
+
this.startNode = null;
|
|
37
|
+
this.endNode = null;
|
|
38
|
+
}
|
|
39
|
+
removeItem(item) {
|
|
40
|
+
item.vdom._unrender();
|
|
41
|
+
item.afterNode.parentElement.removeChild(item.afterNode);
|
|
42
|
+
}
|
|
43
|
+
updateList() {
|
|
44
|
+
let key = null;
|
|
45
|
+
let mappedData;
|
|
46
|
+
{
|
|
47
|
+
let unmappedCollection = null;
|
|
48
|
+
if (this.value instanceof Reactive) {
|
|
49
|
+
unmappedCollection = this.value.getValue();
|
|
50
|
+
key = this.value.key ?? null;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
unmappedCollection = this.value;
|
|
54
|
+
}
|
|
55
|
+
if (unmappedCollection instanceof Array) {
|
|
56
|
+
mappedData = unmappedCollection.map((v, i) => {
|
|
57
|
+
let kv = !!key ? v[key] : null;
|
|
58
|
+
return {
|
|
59
|
+
vdom: null,
|
|
60
|
+
value: v,
|
|
61
|
+
keyValue: kv,
|
|
62
|
+
afterNode: null,
|
|
63
|
+
observableIndex: new Reactive()
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
mappedData = [];
|
|
69
|
+
for (let k in unmappedCollection) {
|
|
70
|
+
let v = unmappedCollection[k];
|
|
71
|
+
let kv = !!key ? v[key] : k;
|
|
72
|
+
mappedData.push({
|
|
73
|
+
vdom: null,
|
|
74
|
+
value: v,
|
|
75
|
+
keyValue: kv,
|
|
76
|
+
afterNode: null,
|
|
77
|
+
observableIndex: new Reactive()
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
{
|
|
83
|
+
let oi = 0;
|
|
84
|
+
let ns = 0;
|
|
85
|
+
let ni = 0;
|
|
86
|
+
while (oi < this.mappedItems.length) {
|
|
87
|
+
let existing = this.mappedItems[oi];
|
|
88
|
+
let candidate = mappedData[ni];
|
|
89
|
+
if (!candidate) {
|
|
90
|
+
this.removeItem(existing);
|
|
91
|
+
this.mappedItems.splice(oi, 1);
|
|
92
|
+
ni = ns;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
else if ((candidate == existing) || (key && candidate.keyValue == existing.keyValue)) {
|
|
96
|
+
ns++;
|
|
97
|
+
oi++;
|
|
98
|
+
ni = ns;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
ni++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
{
|
|
107
|
+
let oi = 0;
|
|
108
|
+
let ni = 0;
|
|
109
|
+
let afterTarget = this.startNode;
|
|
110
|
+
while (ni < mappedData.length) {
|
|
111
|
+
let existing = this.mappedItems[oi];
|
|
112
|
+
let candidate = mappedData[ni];
|
|
113
|
+
if (existing && ((candidate == existing) || (key && candidate.keyValue == existing.keyValue))) {
|
|
114
|
+
if (!deepEqual(existing.value, candidate.value)) {
|
|
115
|
+
existing.vdom._unrender();
|
|
116
|
+
existing.vdom = this.renderCallback(candidate.value, this.value instanceof Reactive ? existing.observableIndex : ni, candidate.keyValue);
|
|
117
|
+
existing.value = candidate.value;
|
|
118
|
+
existing.vdom._renderBefore(existing.afterNode);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
existing.observableIndex.setValue(ni);
|
|
122
|
+
}
|
|
123
|
+
afterTarget = existing.afterNode;
|
|
124
|
+
ni++;
|
|
125
|
+
oi++;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
let beforeTarget = afterTarget.ownerDocument.createTextNode("");
|
|
130
|
+
let ns = afterTarget.parentElement.nextSibling;
|
|
131
|
+
if (ns) {
|
|
132
|
+
this.startNode.parentElement.insertBefore(beforeTarget, ns);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
this.startNode.parentElement.appendChild(beforeTarget);
|
|
136
|
+
}
|
|
137
|
+
candidate.afterNode = beforeTarget;
|
|
138
|
+
candidate.observableIndex._value = ni;
|
|
139
|
+
let content = this.renderCallback(candidate.value, this.value instanceof Reactive ? candidate.observableIndex : ni, candidate.keyValue);
|
|
140
|
+
if (content instanceof Vdom) {
|
|
141
|
+
candidate.vdom = content;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
candidate.vdom = new TextVdom(content);
|
|
145
|
+
}
|
|
146
|
+
candidate.vdom._renderBefore(candidate.afterNode);
|
|
147
|
+
this.mappedItems.splice(ni, 0, candidate);
|
|
148
|
+
ni++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=collection-vdom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-vdom.js","sourceRoot":"","sources":["../../src/vdom-nodes/collection-vdom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IComponent } from "dothtml-interfaces";
|
|
2
|
+
import { Vdom } from "./vdom";
|
|
3
|
+
import { ContainerVdom } from "./container-vdom";
|
|
4
|
+
export declare class ComponentVdom extends Vdom {
|
|
5
|
+
component: IComponent;
|
|
6
|
+
shadowEl: HTMLElement;
|
|
7
|
+
childShadowVdom: ContainerVdom;
|
|
8
|
+
sharedStyles: CSSStyleSheet;
|
|
9
|
+
constructor(component: IComponent);
|
|
10
|
+
private setupCustomElement;
|
|
11
|
+
_render(node: HTMLElement): void;
|
|
12
|
+
_unrender(): void;
|
|
13
|
+
toString(): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Vdom } from "./vdom";
|
|
2
|
+
export class ComponentVdom extends Vdom {
|
|
3
|
+
constructor(component) {
|
|
4
|
+
super();
|
|
5
|
+
this.component = component;
|
|
6
|
+
this.component.creating && this.component.creating();
|
|
7
|
+
this.childShadowVdom = this.component.build && this.component.build(...component._._meta.args);
|
|
8
|
+
this.component.built && this.component.built();
|
|
9
|
+
}
|
|
10
|
+
setupCustomElement(component, document) {
|
|
11
|
+
let cvdom = this;
|
|
12
|
+
let customElementConstructor = document.defaultView.customElements.get(component._._meta.tagName);
|
|
13
|
+
if (customElementConstructor == undefined) {
|
|
14
|
+
customElementConstructor = class extends HTMLElement {
|
|
15
|
+
set component(value) {
|
|
16
|
+
this._component = value;
|
|
17
|
+
this._renderComponent();
|
|
18
|
+
}
|
|
19
|
+
_renderComponent() {
|
|
20
|
+
if (cvdom instanceof Vdom) {
|
|
21
|
+
let shadow = this.attachShadow({ mode: 'open' });
|
|
22
|
+
this._component._._meta.shadowRoot = shadow;
|
|
23
|
+
cvdom.childShadowVdom._render(shadow);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new Error("Component build function returned invalid object.");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
document.defaultView.customElements.define(component._._meta.tagName, customElementConstructor);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
_render(node) {
|
|
34
|
+
if (!this.component._)
|
|
35
|
+
throw new Error("Invalid component. Ensure components are created through the component factory or through decoration.");
|
|
36
|
+
if (this.component._?._meta?.isRendered)
|
|
37
|
+
throw new Error("Individual component instances cannot be rendered twice at once.");
|
|
38
|
+
if (!this.component._._meta)
|
|
39
|
+
this.component._._meta = {};
|
|
40
|
+
this.component._._meta.isRendered = true;
|
|
41
|
+
let document = node.ownerDocument;
|
|
42
|
+
this.setupCustomElement(this.component, document);
|
|
43
|
+
this.shadowEl = document.createElement(this.component._._meta.tagName);
|
|
44
|
+
this.shadowEl["component"] = this.component;
|
|
45
|
+
this.component._.restyle && this.component._.restyle();
|
|
46
|
+
node.appendChild(this.shadowEl);
|
|
47
|
+
}
|
|
48
|
+
_unrender() {
|
|
49
|
+
this.component.deleting && this.component.deleting();
|
|
50
|
+
this.childShadowVdom._unrender();
|
|
51
|
+
this.childShadowVdom = null;
|
|
52
|
+
this.shadowEl.remove();
|
|
53
|
+
this.shadowEl = null;
|
|
54
|
+
this.component._._meta.isRendered = false;
|
|
55
|
+
this.component.deleted && this.component.deleted();
|
|
56
|
+
}
|
|
57
|
+
toString() {
|
|
58
|
+
return `<${this.component._._meta.tagName}></${this.component._._meta.tagName}>`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=component-vdom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-vdom.js","sourceRoot":"","sources":["../../src/vdom-nodes/component-vdom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Reactive from "../reactive";
|
|
2
|
+
import { ContainerVdom } from "./container-vdom";
|
|
3
|
+
import { Vdom } from "./vdom";
|
|
4
|
+
import { ConditionalNodeItem } from "./vdom-types";
|
|
5
|
+
export declare class ConditionalVdom extends Vdom {
|
|
6
|
+
private conditions;
|
|
7
|
+
private sealed;
|
|
8
|
+
private renderedIndex;
|
|
9
|
+
addCondition(condition: Reactive | boolean, vNode: ContainerVdom, seal?: boolean): void;
|
|
10
|
+
addAnchor(C: ConditionalNodeItem, node: HTMLElement): void;
|
|
11
|
+
_render(node: HTMLElement): void;
|
|
12
|
+
_unrender(): void;
|
|
13
|
+
updateConditions(): void;
|
|
14
|
+
}
|