@domql/element 3.7.5 → 3.8.0
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 +14 -0
- package/create.js +0 -8
- package/dist/cjs/create.js +0 -8
- package/dist/cjs/mixins/text.js +1 -0
- package/dist/esm/create.js +0 -8
- package/dist/esm/mixins/text.js +2 -1
- package/dist/iife/index.js +19 -9
- package/mixins/text.js +2 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -55,6 +55,20 @@ variables, on, component, context
|
|
|
55
55
|
|
|
56
56
|
Plus mixin handlers: `attr`, `style`, `text`, `html`, `data`, `classlist`, `state`, `scope`, `deps`.
|
|
57
57
|
|
|
58
|
+
## Scope and globalScope
|
|
59
|
+
|
|
60
|
+
During `create()`, `createScope(element, parent)` establishes a prototype chain:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
el.scope → parent.scope → ... → root.scope → context.globalScope
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- Elements without a `scope` property inherit their parent's scope (same reference)
|
|
67
|
+
- Elements with `scope: { ... }` get their own scope with parent's scope as prototype
|
|
68
|
+
- `context.globalScope` is auto-initialized as `{}` and sits at the chain's root
|
|
69
|
+
|
|
70
|
+
This enables serialized functions to access module-scoped values (constants, helpers) via `el.scope.X` without closures or imports — the values are placed in `globalScope` by the serialization pipeline and are accessible through prototype lookup.
|
|
71
|
+
|
|
58
72
|
> **v3 note:** `childExtend` (singular) is deprecated v2 syntax — use `childExtends` (plural) in new code. The singular forms remain in REGISTRY for backwards compatibility with older projects. If a key is missing from REGISTRY, it gets interpreted as a child element name, causing silent rendering failures.
|
|
59
73
|
|
|
60
74
|
## set.js — Content Setting
|
package/create.js
CHANGED
|
@@ -91,7 +91,6 @@ export const create = (
|
|
|
91
91
|
createScope(element, parent)
|
|
92
92
|
|
|
93
93
|
createState(element, parent)
|
|
94
|
-
if (element.scope === 'state') element.scope = element.state
|
|
95
94
|
|
|
96
95
|
createIfConditionFlag(element, parent)
|
|
97
96
|
|
|
@@ -103,9 +102,6 @@ export const create = (
|
|
|
103
102
|
if (!element.tag) element.tag = detectTag(element)
|
|
104
103
|
// Populate element.attr from props matching the tag's HTML spec
|
|
105
104
|
applyPropsAsAttrs(element)
|
|
106
|
-
if (element.scope === 'props' || element.scope === true) {
|
|
107
|
-
element.scope = element.props
|
|
108
|
-
}
|
|
109
105
|
|
|
110
106
|
// recatch if it passess props again
|
|
111
107
|
createIfConditionFlag(element, parent)
|
|
@@ -240,7 +236,6 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
240
236
|
createScope(element, parent)
|
|
241
237
|
|
|
242
238
|
createState(element, parent)
|
|
243
|
-
if (element.scope === 'state') element.scope = element.state
|
|
244
239
|
|
|
245
240
|
createIfConditionFlag(element, parent)
|
|
246
241
|
|
|
@@ -248,9 +243,6 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
248
243
|
initProps(element, parent, options)
|
|
249
244
|
// Re-pickup component-named properties that entered props via childProps/inheritParentProps
|
|
250
245
|
pickupElementFromProps.call(element, element, { cachedKeys: [] })
|
|
251
|
-
if (element.scope === 'props' || element.scope === true) {
|
|
252
|
-
element.scope = element.props
|
|
253
|
-
}
|
|
254
246
|
|
|
255
247
|
if (element.node && ref.__if) {
|
|
256
248
|
parent[key || element.key] = element
|
package/dist/cjs/create.js
CHANGED
|
@@ -72,15 +72,11 @@ const create = (props, parentEl, passedKey, options = import_utils.OPTIONS.creat
|
|
|
72
72
|
(0, import_set.addMethods)(element, parent, options);
|
|
73
73
|
(0, import_utils.createScope)(element, parent);
|
|
74
74
|
(0, import_state.createState)(element, parent);
|
|
75
|
-
if (element.scope === "state") element.scope = element.state;
|
|
76
75
|
(0, import_utils.createIfConditionFlag)(element, parent);
|
|
77
76
|
(0, import_utils.initProps)(element, parent, options);
|
|
78
77
|
import_utils.pickupElementFromProps.call(element, element, { cachedKeys: [] });
|
|
79
78
|
if (!element.tag) element.tag = (0, import_cache.detectTag)(element);
|
|
80
79
|
applyPropsAsAttrs(element);
|
|
81
|
-
if (element.scope === "props" || element.scope === true) {
|
|
82
|
-
element.scope = element.props;
|
|
83
|
-
}
|
|
84
80
|
(0, import_utils.createIfConditionFlag)(element, parent);
|
|
85
81
|
if (element.node) {
|
|
86
82
|
if (ref.__if) return (0, import_render.assignNode)(element, parent, key, attachOptions);
|
|
@@ -176,13 +172,9 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
176
172
|
(0, import_set.addMethods)(element, parent, options);
|
|
177
173
|
(0, import_utils.createScope)(element, parent);
|
|
178
174
|
(0, import_state.createState)(element, parent);
|
|
179
|
-
if (element.scope === "state") element.scope = element.state;
|
|
180
175
|
(0, import_utils.createIfConditionFlag)(element, parent);
|
|
181
176
|
(0, import_utils.initProps)(element, parent, options);
|
|
182
177
|
import_utils.pickupElementFromProps.call(element, element, { cachedKeys: [] });
|
|
183
|
-
if (element.scope === "props" || element.scope === true) {
|
|
184
|
-
element.scope = element.props;
|
|
185
|
-
}
|
|
186
178
|
if (element.node && ref.__if) {
|
|
187
179
|
parent[key || element.key] = element;
|
|
188
180
|
}
|
package/dist/cjs/mixins/text.js
CHANGED
|
@@ -26,6 +26,7 @@ var import_create = require("../create.js");
|
|
|
26
26
|
var import_utils = require("@domql/utils");
|
|
27
27
|
function text(param, element, node) {
|
|
28
28
|
let prop = (0, import_utils.exec)(element.props.text || param, element);
|
|
29
|
+
if ((0, import_utils.isFunction)(prop)) prop = (0, import_utils.exec)(prop, element);
|
|
29
30
|
if ((0, import_utils.isString)(prop) && prop.includes("{{")) {
|
|
30
31
|
prop = element.call("replaceLiteralsWithObjectFields", prop, element.state);
|
|
31
32
|
}
|
package/dist/esm/create.js
CHANGED
|
@@ -63,15 +63,11 @@ const create = (props, parentEl, passedKey, options = OPTIONS.create || {}, atta
|
|
|
63
63
|
addMethods(element, parent, options);
|
|
64
64
|
createScope(element, parent);
|
|
65
65
|
createState(element, parent);
|
|
66
|
-
if (element.scope === "state") element.scope = element.state;
|
|
67
66
|
createIfConditionFlag(element, parent);
|
|
68
67
|
initProps(element, parent, options);
|
|
69
68
|
pickupElementFromProps.call(element, element, { cachedKeys: [] });
|
|
70
69
|
if (!element.tag) element.tag = detectTag(element);
|
|
71
70
|
applyPropsAsAttrs(element);
|
|
72
|
-
if (element.scope === "props" || element.scope === true) {
|
|
73
|
-
element.scope = element.props;
|
|
74
|
-
}
|
|
75
71
|
createIfConditionFlag(element, parent);
|
|
76
72
|
if (element.node) {
|
|
77
73
|
if (ref.__if) return assignNode(element, parent, key, attachOptions);
|
|
@@ -167,13 +163,9 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
167
163
|
addMethods(element, parent, options);
|
|
168
164
|
createScope(element, parent);
|
|
169
165
|
createState(element, parent);
|
|
170
|
-
if (element.scope === "state") element.scope = element.state;
|
|
171
166
|
createIfConditionFlag(element, parent);
|
|
172
167
|
initProps(element, parent, options);
|
|
173
168
|
pickupElementFromProps.call(element, element, { cachedKeys: [] });
|
|
174
|
-
if (element.scope === "props" || element.scope === true) {
|
|
175
|
-
element.scope = element.props;
|
|
176
|
-
}
|
|
177
169
|
if (element.node && ref.__if) {
|
|
178
170
|
parent[key || element.key] = element;
|
|
179
171
|
}
|
package/dist/esm/mixins/text.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { create } from "../create.js";
|
|
2
|
-
import { exec, isString, SVG_TAGS } from "@domql/utils";
|
|
2
|
+
import { exec, isFunction, isString, SVG_TAGS } from "@domql/utils";
|
|
3
3
|
function text(param, element, node) {
|
|
4
4
|
let prop = exec(element.props.text || param, element);
|
|
5
|
+
if (isFunction(prop)) prop = exec(prop, element);
|
|
5
6
|
if (isString(prop) && prop.includes("{{")) {
|
|
6
7
|
prop = element.call("replaceLiteralsWithObjectFields", prop, element.state);
|
|
7
8
|
}
|
package/dist/iife/index.js
CHANGED
|
@@ -1813,7 +1813,24 @@ var DomqlElement = (() => {
|
|
|
1813
1813
|
"../utils/dist/esm/scope.js"() {
|
|
1814
1814
|
createScope = (element, parent) => {
|
|
1815
1815
|
const { __ref: ref } = element;
|
|
1816
|
-
|
|
1816
|
+
const context = element.context || parent.context || ref.root?.context;
|
|
1817
|
+
if (context && !context.globalScope) context.globalScope = {};
|
|
1818
|
+
const parentScope = parent.scope || ref.root?.scope;
|
|
1819
|
+
const globalScope = context?.globalScope;
|
|
1820
|
+
if (!element.scope) {
|
|
1821
|
+
if (parentScope) {
|
|
1822
|
+
element.scope = parentScope;
|
|
1823
|
+
} else if (globalScope) {
|
|
1824
|
+
element.scope = Object.create(globalScope);
|
|
1825
|
+
} else {
|
|
1826
|
+
element.scope = {};
|
|
1827
|
+
}
|
|
1828
|
+
} else if (typeof element.scope === "object" && element.scope !== null) {
|
|
1829
|
+
if (Object.getPrototypeOf(element.scope) === Object.prototype) {
|
|
1830
|
+
const proto = parentScope || globalScope;
|
|
1831
|
+
if (proto) Object.setPrototypeOf(element.scope, proto);
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1817
1834
|
};
|
|
1818
1835
|
}
|
|
1819
1836
|
});
|
|
@@ -4408,6 +4425,7 @@ ${element}` : "";
|
|
|
4408
4425
|
init_esm();
|
|
4409
4426
|
function text(param, element, node) {
|
|
4410
4427
|
let prop = exec(element.props.text || param, element);
|
|
4428
|
+
if (isFunction(prop)) prop = exec(prop, element);
|
|
4411
4429
|
if (isString(prop) && prop.includes("{{")) {
|
|
4412
4430
|
prop = element.call("replaceLiteralsWithObjectFields", prop, element.state);
|
|
4413
4431
|
}
|
|
@@ -6514,15 +6532,11 @@ ${element}` : "";
|
|
|
6514
6532
|
addMethods(element, parent, options);
|
|
6515
6533
|
createScope(element, parent);
|
|
6516
6534
|
createState(element, parent);
|
|
6517
|
-
if (element.scope === "state") element.scope = element.state;
|
|
6518
6535
|
createIfConditionFlag(element, parent);
|
|
6519
6536
|
initProps(element, parent, options);
|
|
6520
6537
|
pickupElementFromProps.call(element, element, { cachedKeys: [] });
|
|
6521
6538
|
if (!element.tag) element.tag = detectTag(element);
|
|
6522
6539
|
applyPropsAsAttrs(element);
|
|
6523
|
-
if (element.scope === "props" || element.scope === true) {
|
|
6524
|
-
element.scope = element.props;
|
|
6525
|
-
}
|
|
6526
6540
|
createIfConditionFlag(element, parent);
|
|
6527
6541
|
if (element.node) {
|
|
6528
6542
|
if (ref.__if) return assignNode(element, parent, key, attachOptions);
|
|
@@ -6618,13 +6632,9 @@ ${element}` : "";
|
|
|
6618
6632
|
addMethods(element, parent, options);
|
|
6619
6633
|
createScope(element, parent);
|
|
6620
6634
|
createState(element, parent);
|
|
6621
|
-
if (element.scope === "state") element.scope = element.state;
|
|
6622
6635
|
createIfConditionFlag(element, parent);
|
|
6623
6636
|
initProps(element, parent, options);
|
|
6624
6637
|
pickupElementFromProps.call(element, element, { cachedKeys: [] });
|
|
6625
|
-
if (element.scope === "props" || element.scope === true) {
|
|
6626
|
-
element.scope = element.props;
|
|
6627
|
-
}
|
|
6628
6638
|
if (element.node && ref.__if) {
|
|
6629
6639
|
parent[key || element.key] = element;
|
|
6630
6640
|
}
|
package/mixins/text.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
import { create } from '../create.js'
|
|
4
|
-
import { exec, isString, SVG_TAGS } from '@domql/utils'
|
|
4
|
+
import { exec, isFunction, isString, SVG_TAGS } from '@domql/utils'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Creates a text node and appends into
|
|
@@ -9,6 +9,7 @@ import { exec, isString, SVG_TAGS } from '@domql/utils'
|
|
|
9
9
|
*/
|
|
10
10
|
export function text (param, element, node) {
|
|
11
11
|
let prop = exec(element.props.text || param, element)
|
|
12
|
+
if (isFunction(prop)) prop = exec(prop, element)
|
|
12
13
|
if (isString(prop) && prop.includes('{{')) {
|
|
13
14
|
prop = element.call('replaceLiteralsWithObjectFields', prop, element.state)
|
|
14
15
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@domql/element",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"license": "CC-BY-NC-4.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"build:iife": "cross-env NODE_ENV=$NODE_ENV esbuild index.js --bundle --target=es2020 --format=iife --global-name=DomqlElement --outfile=dist/iife/index.js --define:process.env.NODE_ENV=process.env.NODE_ENV"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@domql/report": "^3.
|
|
50
|
-
"@domql/state": "^3.
|
|
51
|
-
"@domql/utils": "^3.
|
|
52
|
-
"attrs-in-props": "^3.
|
|
49
|
+
"@domql/report": "^3.8.0",
|
|
50
|
+
"@domql/state": "^3.8.0",
|
|
51
|
+
"@domql/utils": "^3.8.0",
|
|
52
|
+
"attrs-in-props": "^3.8.0"
|
|
53
53
|
},
|
|
54
54
|
"gitHead": "9fc1b79b41cdc725ca6b24aec64920a599634681",
|
|
55
55
|
"devDependencies": {
|