marko 5.29.2 → 5.30.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 +1 -1
- package/bin/markoc.js +18 -18
- package/dist/core-tags/core/await/renderer.js +5 -1
- package/dist/node_modules/@internal/components-beginComponent/index.js +13 -3
- package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
- package/dist/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
- package/dist/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
- package/dist/node_modules/@internal/components-entry/index-browser.js +2 -2
- package/dist/node_modules/@internal/components-entry/index.js +73 -45
- package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
- package/dist/node_modules/@internal/components-entry-legacy/index.js +15 -0
- package/dist/node_modules/@internal/components-entry-legacy/package.json +11 -0
- package/dist/node_modules/@internal/components-registry/index-browser.js +70 -43
- package/dist/node_modules/@internal/components-registry/index.js +2 -2
- package/dist/node_modules/@internal/components-util/index-browser.js +17 -17
- package/dist/node_modules/@internal/components-util/index.js +18 -8
- package/dist/node_modules/@internal/create-readable/index-browser.js +1 -1
- package/dist/node_modules/@internal/create-readable/index.js +9 -9
- package/dist/node_modules/@internal/set-immediate/index-browser.js +1 -1
- package/dist/node_modules/@internal/set-immediate/index-worker.js +2 -2
- package/dist/node_modules/@internal/set-immediate/index.js +2 -2
- package/dist/runtime/RenderResult.js +3 -3
- package/dist/runtime/components/Component.js +146 -148
- package/dist/runtime/components/ComponentDef.js +41 -27
- package/dist/runtime/components/ComponentsContext.js +6 -6
- package/dist/runtime/components/GlobalComponentsContext.js +3 -3
- package/dist/runtime/components/KeySequence.js +3 -3
- package/dist/runtime/components/ServerComponent.js +13 -13
- package/dist/runtime/components/State.js +27 -27
- package/dist/runtime/components/attach-detach.js +7 -7
- package/dist/runtime/components/defineComponent.js +5 -5
- package/dist/runtime/components/dom-data.js +6 -6
- package/dist/runtime/components/event-delegation.js +10 -10
- package/dist/runtime/components/legacy/browser.json +9 -0
- package/dist/runtime/components/legacy/defineComponent-legacy.js +32 -0
- package/dist/runtime/components/legacy/defineRenderer-legacy.js +171 -0
- package/dist/runtime/components/legacy/defineWidget-legacy.js +1 -0
- package/dist/runtime/components/legacy/dependencies/html.js +3 -0
- package/dist/runtime/components/legacy/dependencies/index.js +178 -0
- package/dist/runtime/components/legacy/dependencies/vdom.js +3 -0
- package/dist/runtime/components/legacy/index.js +1 -0
- package/dist/runtime/components/legacy/jquery.js +51 -0
- package/dist/runtime/components/legacy/ready.js +152 -0
- package/dist/runtime/components/legacy/renderer-legacy.js +230 -0
- package/dist/runtime/components/renderer.js +30 -26
- package/dist/runtime/components/update-manager.js +10 -10
- package/dist/runtime/createOut.js +1 -1
- package/dist/runtime/dom-insert.js +5 -5
- package/dist/runtime/helpers/_change-case.js +2 -2
- package/dist/runtime/helpers/dynamic-tag.js +7 -9
- package/dist/runtime/helpers/style-value.js +7 -2
- package/dist/runtime/html/AsyncStream.js +20 -20
- package/dist/runtime/html/BufferedWriter.js +2 -2
- package/dist/runtime/html/helpers/_dynamic-attr.js +2 -2
- package/dist/runtime/html/helpers/attr.js +19 -6
- package/dist/runtime/html/helpers/attrs.js +7 -0
- package/dist/runtime/html/helpers/data-marko.js +2 -2
- package/dist/runtime/html/helpers/escape-quotes.js +1 -1
- package/dist/runtime/html/helpers/escape-xml.js +1 -1
- package/dist/runtime/html/helpers/merge-attrs.js +38 -7
- package/dist/runtime/html/index.js +2 -2
- package/dist/runtime/renderable.js +9 -6
- package/dist/runtime/vdom/AsyncVDOMBuilder.js +86 -86
- package/dist/runtime/vdom/VComponent.js +3 -3
- package/dist/runtime/vdom/VDocumentFragment.js +7 -7
- package/dist/runtime/vdom/VElement.js +61 -50
- package/dist/runtime/vdom/VFragment.js +8 -8
- package/dist/runtime/vdom/VNode.js +36 -36
- package/dist/runtime/vdom/VText.js +8 -8
- package/dist/runtime/vdom/helpers/attrs.js +24 -4
- package/dist/runtime/vdom/helpers/merge-attrs.js +16 -0
- package/dist/runtime/vdom/helpers/v-element.js +1 -1
- package/dist/runtime/vdom/helpers/v-text.js +1 -1
- package/dist/runtime/vdom/hot-reload.js +19 -19
- package/dist/runtime/vdom/index.js +2 -2
- package/dist/runtime/vdom/morphdom/fragment.js +5 -5
- package/dist/runtime/vdom/morphdom/helpers.js +5 -5
- package/dist/runtime/vdom/morphdom/index.js +56 -56
- package/dist/runtime/vdom/morphdom/specialElHandlers.js +7 -7
- package/dist/runtime/vdom/preserve-attrs.js +1 -1
- package/dist/runtime/vdom/vdom.js +14 -14
- package/docs/10-awesome-marko-features.md +1 -1
- package/docs/body-content.md +3 -3
- package/docs/class-components.md +6 -6
- package/docs/cloudflare-workers.md +3 -3
- package/docs/compiler.md +5 -5
- package/docs/express.md +2 -2
- package/docs/http.md +1 -1
- package/docs/koa.md +1 -1
- package/docs/lasso.md +1 -1
- package/docs/marko-vs-react.md +2 -2
- package/docs/rendering.md +6 -6
- package/docs/rollup.md +30 -30
- package/docs/troubleshooting-streaming.md +1 -1
- package/docs/typescript.md +1 -1
- package/docs/vite.md +3 -3
- package/docs/webpack.md +25 -25
- package/docs/why-is-marko-fast.md +2 -2
- package/index.d.ts +1 -0
- package/legacy-components-browser.marko +15 -0
- package/legacy-components.js +7 -0
- package/package.json +51 -45
- package/src/compiler/config.js +1 -1
- package/src/compiler/index.js +5 -5
- package/src/core-tags/core/__flush_here_and_after__.js +1 -1
- package/src/core-tags/core/await/AsyncValue.js +1 -1
- package/src/core-tags/core/await/renderer.js +8 -4
- package/src/core-tags/core/await/reorderer-renderer.js +1 -1
- package/src/node-require/browser-refresh.js +2 -2
- package/src/node-require/index.js +2 -2
- package/src/node_modules/@internal/components-beginComponent/index.js +16 -6
- package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
- package/src/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
- package/src/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
- package/src/node_modules/@internal/components-entry/index.js +65 -37
- package/src/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
- package/src/node_modules/@internal/components-entry-legacy/index.js +15 -0
- package/src/node_modules/@internal/components-entry-legacy/package.json +11 -0
- package/src/node_modules/@internal/components-registry/index-browser.js +33 -6
- package/src/node_modules/@internal/components-util/index.js +10 -0
- package/src/runtime/RenderResult.js +3 -3
- package/src/runtime/components/Component.js +16 -18
- package/src/runtime/components/ComponentDef.js +22 -8
- package/src/runtime/components/ComponentsContext.js +1 -1
- package/src/runtime/components/State.js +2 -2
- package/src/runtime/components/attach-detach.js +1 -1
- package/src/runtime/components/dom-data.js +1 -1
- package/src/runtime/components/legacy/browser.json +9 -0
- package/src/runtime/components/legacy/defineComponent-legacy.js +32 -0
- package/src/runtime/components/legacy/defineRenderer-legacy.js +171 -0
- package/src/runtime/components/legacy/defineWidget-legacy.js +1 -0
- package/src/runtime/components/legacy/dependencies/html.js +3 -0
- package/src/runtime/components/legacy/dependencies/index.js +178 -0
- package/src/runtime/components/legacy/dependencies/vdom.js +3 -0
- package/src/runtime/components/legacy/index.js +1 -0
- package/src/runtime/components/legacy/jquery.js +51 -0
- package/src/runtime/components/legacy/ready.js +152 -0
- package/src/runtime/components/legacy/renderer-legacy.js +230 -0
- package/src/runtime/components/renderer.js +4 -0
- package/src/runtime/components/update-manager.js +1 -1
- package/src/runtime/dom-insert.js +1 -1
- package/src/runtime/helpers/dynamic-tag.js +2 -4
- package/src/runtime/helpers/style-value.js +7 -2
- package/src/runtime/html/AsyncStream.js +5 -5
- package/src/runtime/html/BufferedWriter.js +1 -1
- package/src/runtime/html/StringWriter.js +1 -1
- package/src/runtime/html/helpers/attr.js +15 -2
- package/src/runtime/html/helpers/attrs.js +7 -0
- package/src/runtime/html/helpers/merge-attrs.js +38 -7
- package/src/runtime/html/hot-reload.js +1 -1
- package/src/runtime/html/index.js +2 -2
- package/src/runtime/renderable.js +5 -2
- package/src/runtime/vdom/AsyncVDOMBuilder.js +2 -2
- package/src/runtime/vdom/VComponent.js +1 -1
- package/src/runtime/vdom/VDocumentFragment.js +1 -1
- package/src/runtime/vdom/VElement.js +17 -6
- package/src/runtime/vdom/VFragment.js +1 -1
- package/src/runtime/vdom/VNode.js +1 -1
- package/src/runtime/vdom/VText.js +1 -1
- package/src/runtime/vdom/helpers/attrs.js +26 -6
- package/src/runtime/vdom/helpers/merge-attrs.js +16 -0
- package/src/runtime/vdom/hot-reload.js +1 -1
- package/src/runtime/vdom/index.js +2 -2
- package/src/runtime/vdom/morphdom/fragment.js +1 -1
- package/src/runtime/vdom/morphdom/specialElHandlers.js +1 -1
- package/src/taglib/index.js +1 -1
- package/tags-html.d.ts +9 -0
|
@@ -8,6 +8,7 @@ var createFragmentNode =
|
|
|
8
8
|
var ComponentDef = require("../../../runtime/components/ComponentDef");
|
|
9
9
|
var domData = require("../../../runtime/components/dom-data");
|
|
10
10
|
var componentsUtil = require("@internal/components-util");
|
|
11
|
+
var loader = require("@internal/loader");
|
|
11
12
|
var componentLookup = componentsUtil.___componentLookup;
|
|
12
13
|
var addComponentRootToKeyedElements =
|
|
13
14
|
componentsUtil.___addComponentRootToKeyedElements;
|
|
@@ -72,13 +73,23 @@ function addPendingDef(def, type, meta, host, runtimeId) {
|
|
|
72
73
|
]);
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
function load(typeName) {
|
|
76
|
+
function load(typeName, isLegacy) {
|
|
76
77
|
var target = loaded[typeName];
|
|
77
78
|
if (!target) {
|
|
78
79
|
target = registered[typeName];
|
|
79
80
|
|
|
80
81
|
if (target) {
|
|
81
82
|
target = target();
|
|
83
|
+
} else if (isLegacy) {
|
|
84
|
+
target = exports.___legacy.load(typeName);
|
|
85
|
+
} else {
|
|
86
|
+
target = loader(typeName);
|
|
87
|
+
// eslint-disable-next-line no-constant-condition
|
|
88
|
+
if ("MARKO_DEBUG") {
|
|
89
|
+
complain(
|
|
90
|
+
"Looks like you used `require:` in your browser.json to load a component. This requires that Marko has knowledge of how lasso generates paths and will be removed in a future version. `marko-dependencies:/path/to/template.marko` should be used instead."
|
|
91
|
+
);
|
|
92
|
+
}
|
|
82
93
|
}
|
|
83
94
|
|
|
84
95
|
if (!target) {
|
|
@@ -91,14 +102,14 @@ function load(typeName) {
|
|
|
91
102
|
return target;
|
|
92
103
|
}
|
|
93
104
|
|
|
94
|
-
function getComponentClass(typeName) {
|
|
105
|
+
function getComponentClass(typeName, isLegacy) {
|
|
95
106
|
var ComponentClass = componentTypes[typeName];
|
|
96
107
|
|
|
97
108
|
if (ComponentClass) {
|
|
98
109
|
return ComponentClass;
|
|
99
110
|
}
|
|
100
111
|
|
|
101
|
-
ComponentClass = load(typeName);
|
|
112
|
+
ComponentClass = load(typeName, isLegacy);
|
|
102
113
|
|
|
103
114
|
ComponentClass = ComponentClass.Component || ComponentClass;
|
|
104
115
|
|
|
@@ -124,6 +135,7 @@ function getComponentClass(typeName) {
|
|
|
124
135
|
.replace(/^[^a-z$_]/i, "_$&")
|
|
125
136
|
.replace(/[^0-9a-z$_]+/gi, "_");
|
|
126
137
|
className = className[0].toUpperCase() + className.slice(1);
|
|
138
|
+
// eslint-disable-next-line no-unused-vars
|
|
127
139
|
var OldComponentClass = ComponentClass;
|
|
128
140
|
ComponentClass = {
|
|
129
141
|
[className]: function (id, doc) {
|
|
@@ -138,8 +150,8 @@ function getComponentClass(typeName) {
|
|
|
138
150
|
return ComponentClass;
|
|
139
151
|
}
|
|
140
152
|
|
|
141
|
-
function createComponent(typeName, id) {
|
|
142
|
-
var ComponentClass = getComponentClass(typeName);
|
|
153
|
+
function createComponent(typeName, id, isLegacy) {
|
|
154
|
+
var ComponentClass = getComponentClass(typeName, isLegacy);
|
|
143
155
|
return new ComponentClass(id);
|
|
144
156
|
}
|
|
145
157
|
|
|
@@ -290,6 +302,10 @@ function addDOMEventListeners(
|
|
|
290
302
|
function initComponent(componentDef, host) {
|
|
291
303
|
var component = componentDef.___component;
|
|
292
304
|
|
|
305
|
+
if (!component || !component.___isComponent) {
|
|
306
|
+
return; // legacy
|
|
307
|
+
}
|
|
308
|
+
|
|
293
309
|
component.___reset();
|
|
294
310
|
component.___host = host;
|
|
295
311
|
|
|
@@ -479,7 +495,18 @@ function initServerRendered(renderedComponents, host) {
|
|
|
479
495
|
.map(function (componentDef) {
|
|
480
496
|
var typeName = meta.___types[componentDef[1]];
|
|
481
497
|
|
|
482
|
-
return
|
|
498
|
+
return (
|
|
499
|
+
registered[typeName] ||
|
|
500
|
+
document.readyState === "complete" ||
|
|
501
|
+
(
|
|
502
|
+
// loader.runtime is only going to exist for lasso apps
|
|
503
|
+
// this code is used to detect if a module was registered
|
|
504
|
+
// via a browser.json but not executed.
|
|
505
|
+
loader.runtime &&
|
|
506
|
+
loader.runtime.resolve &&
|
|
507
|
+
loader.runtime.resolve(typeName)
|
|
508
|
+
)
|
|
509
|
+
)
|
|
483
510
|
? tryHydrateComponent(componentDef, meta, host, runtimeId)
|
|
484
511
|
: addPendingDef(componentDef, typeName, meta, host, runtimeId);
|
|
485
512
|
})
|
|
@@ -5,6 +5,16 @@ function nextComponentIdProvider(out) {
|
|
|
5
5
|
var prefix = out.global.componentIdPrefix || out.global.widgetIdPrefix || "s"; // "s" is for server (we use "b" for the browser)
|
|
6
6
|
var nextId = 0;
|
|
7
7
|
|
|
8
|
+
// eslint-disable-next-line no-constant-condition
|
|
9
|
+
if ("MARKO_DEBUG") {
|
|
10
|
+
if (out.global.widgetIdPrefix) {
|
|
11
|
+
require("complain")(
|
|
12
|
+
"$global.widgetIdPrefix is deprecated. use $global.componentIdPrefix instead.",
|
|
13
|
+
{ location: false }
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
8
18
|
return function nextComponentId() {
|
|
9
19
|
return prefix + nextId++;
|
|
10
20
|
};
|
|
@@ -66,7 +66,7 @@ var proto = (RenderResult.prototype = {
|
|
|
66
66
|
toString: function () {
|
|
67
67
|
return this.___out.toString();
|
|
68
68
|
},
|
|
69
|
-
document: typeof document === "object" && document
|
|
69
|
+
document: typeof document === "object" && document,
|
|
70
70
|
});
|
|
71
71
|
|
|
72
72
|
Object.defineProperty(proto, "html", {
|
|
@@ -78,7 +78,7 @@ Object.defineProperty(proto, "html", {
|
|
|
78
78
|
);
|
|
79
79
|
}
|
|
80
80
|
return this.toString();
|
|
81
|
-
}
|
|
81
|
+
},
|
|
82
82
|
});
|
|
83
83
|
|
|
84
84
|
Object.defineProperty(proto, "context", {
|
|
@@ -90,7 +90,7 @@ Object.defineProperty(proto, "context", {
|
|
|
90
90
|
);
|
|
91
91
|
}
|
|
92
92
|
return this.___out;
|
|
93
|
-
}
|
|
93
|
+
},
|
|
94
94
|
});
|
|
95
95
|
|
|
96
96
|
// Add all of the following DOM methods to Component.prototype:
|
|
@@ -27,7 +27,7 @@ var slice = Array.prototype.slice;
|
|
|
27
27
|
|
|
28
28
|
var COMPONENT_SUBSCRIBE_TO_OPTIONS;
|
|
29
29
|
var NON_COMPONENT_SUBSCRIBE_TO_OPTIONS = {
|
|
30
|
-
addDestroyListener: false
|
|
30
|
+
addDestroyListener: false,
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
var emit = EventEmitter.prototype.emit;
|
|
@@ -247,19 +247,17 @@ Component.prototype = componentProto = {
|
|
|
247
247
|
},
|
|
248
248
|
getEl: function (key, index) {
|
|
249
249
|
if (key) {
|
|
250
|
-
var
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
keyedElement.nodeType !== 1 /* Node.ELEMENT_NODE */
|
|
258
|
-
) {
|
|
259
|
-
throw new Error(
|
|
260
|
-
"Using 'getEl(key)' to get a component instance is not supported, did you mean 'getComponent(key)'?"
|
|
250
|
+
var resolvedKey = resolveKeyHelper(key, index);
|
|
251
|
+
var keyedElement = this.___keyedElements["@" + resolvedKey];
|
|
252
|
+
if (keyedElement && keyedElement.nodeType === 12 /** FRAGMENT_NODE */) {
|
|
253
|
+
// eslint-disable-next-line no-constant-condition
|
|
254
|
+
if ("MARKO_DEBUG") {
|
|
255
|
+
complain(
|
|
256
|
+
"Accessing the elements of a child component using 'component.getEl' is deprecated."
|
|
261
257
|
);
|
|
262
258
|
}
|
|
259
|
+
|
|
260
|
+
return walkFragments(keyedElement);
|
|
263
261
|
}
|
|
264
262
|
|
|
265
263
|
return keyedElement;
|
|
@@ -281,15 +279,15 @@ Component.prototype = componentProto = {
|
|
|
281
279
|
},
|
|
282
280
|
getComponent: function (key, index) {
|
|
283
281
|
var rootNode = this.___keyedElements["@" + resolveKeyHelper(key, index)];
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
if (
|
|
287
|
-
|
|
282
|
+
if (/\[\]$/.test(key)) {
|
|
283
|
+
// eslint-disable-next-line no-constant-condition
|
|
284
|
+
if ("MARKO_DEBUG") {
|
|
285
|
+
complain(
|
|
288
286
|
"A repeated key[] was passed to getComponent. Use a non-repeating key if there is only one of these components."
|
|
289
287
|
);
|
|
290
288
|
}
|
|
289
|
+
rootNode = rootNode && rootNode[Object.keys(rootNode)[0]];
|
|
291
290
|
}
|
|
292
|
-
|
|
293
291
|
return rootNode && componentsByDOMNode.get(rootNode);
|
|
294
292
|
},
|
|
295
293
|
getComponents: function (key) {
|
|
@@ -636,7 +634,7 @@ Component.prototype = componentProto = {
|
|
|
636
634
|
___emitDestroy() {
|
|
637
635
|
this.onDestroy && this.onDestroy();
|
|
638
636
|
this.___emit("destroy");
|
|
639
|
-
}
|
|
637
|
+
},
|
|
640
638
|
};
|
|
641
639
|
|
|
642
640
|
componentProto.elId = componentProto.getElId;
|
|
@@ -11,6 +11,8 @@ var EMPTY_OBJECT = {};
|
|
|
11
11
|
|
|
12
12
|
var FLAG_WILL_RERENDER_IN_BROWSER = 1;
|
|
13
13
|
var FLAG_HAS_RENDER_BODY = 2;
|
|
14
|
+
var FLAG_IS_LEGACY = 4;
|
|
15
|
+
var FLAG_OLD_HYDRATE_NO_CREATE = 8;
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* A ComponentDef is used to hold the metadata collected at runtime for
|
|
@@ -81,7 +83,7 @@ ComponentDef.prototype = {
|
|
|
81
83
|
|
|
82
84
|
get ___type() {
|
|
83
85
|
return this.___component.___type;
|
|
84
|
-
}
|
|
86
|
+
},
|
|
85
87
|
};
|
|
86
88
|
|
|
87
89
|
ComponentDef.prototype.nk = ComponentDef.prototype.___nextKey;
|
|
@@ -93,19 +95,31 @@ ComponentDef.___deserialize = function (o, types, global, registry) {
|
|
|
93
95
|
var extra = o[3] || EMPTY_OBJECT;
|
|
94
96
|
|
|
95
97
|
var state = extra.s;
|
|
96
|
-
var componentProps = extra.w;
|
|
98
|
+
var componentProps = extra.w || EMPTY_OBJECT;
|
|
97
99
|
var flags = extra.f;
|
|
98
|
-
var
|
|
100
|
+
var isLegacy = flags & FLAG_IS_LEGACY;
|
|
101
|
+
var renderBody = flags & FLAG_HAS_RENDER_BODY ? w10Noop : extra.r;
|
|
102
|
+
|
|
103
|
+
var component =
|
|
104
|
+
typeName /* legacy */ &&
|
|
105
|
+
registry.___createComponent(typeName, id, isLegacy);
|
|
99
106
|
|
|
100
107
|
// Prevent newly created component from being queued for update since we area
|
|
101
108
|
// just building it from the server info
|
|
102
109
|
component.___updateQueued = true;
|
|
103
110
|
|
|
104
|
-
if (
|
|
105
|
-
|
|
111
|
+
if (isLegacy) {
|
|
112
|
+
component.widgetConfig = componentProps;
|
|
113
|
+
component.___widgetBody = renderBody;
|
|
114
|
+
} else if (renderBody) {
|
|
115
|
+
(input || (input = {})).renderBody = renderBody;
|
|
106
116
|
}
|
|
107
117
|
|
|
108
|
-
if (
|
|
118
|
+
if (
|
|
119
|
+
!isLegacy &&
|
|
120
|
+
flags & FLAG_WILL_RERENDER_IN_BROWSER &&
|
|
121
|
+
!(flags & FLAG_OLD_HYDRATE_NO_CREATE)
|
|
122
|
+
) {
|
|
109
123
|
if (component.onCreate) {
|
|
110
124
|
component.onCreate(input, { global: global });
|
|
111
125
|
}
|
|
@@ -125,7 +139,7 @@ ComponentDef.___deserialize = function (o, types, global, registry) {
|
|
|
125
139
|
component.state = state;
|
|
126
140
|
}
|
|
127
141
|
|
|
128
|
-
if (componentProps) {
|
|
142
|
+
if (!isLegacy && componentProps) {
|
|
129
143
|
extend(component, componentProps);
|
|
130
144
|
}
|
|
131
145
|
}
|
|
@@ -148,7 +162,7 @@ ComponentDef.___deserialize = function (o, types, global, registry) {
|
|
|
148
162
|
id: id,
|
|
149
163
|
___component: component,
|
|
150
164
|
___domEvents: extra.d,
|
|
151
|
-
___flags: extra.f || 0
|
|
165
|
+
___flags: extra.f || 0,
|
|
152
166
|
};
|
|
153
167
|
};
|
|
154
168
|
|
|
@@ -9,7 +9,7 @@ function ensure(state, propertyName) {
|
|
|
9
9
|
},
|
|
10
10
|
set: function (value) {
|
|
11
11
|
this.___set(propertyName, value, false /* ensure:false */);
|
|
12
|
-
}
|
|
12
|
+
},
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -99,7 +99,7 @@ State.prototype = {
|
|
|
99
99
|
},
|
|
100
100
|
toJSON: function () {
|
|
101
101
|
return this.___raw;
|
|
102
|
-
}
|
|
102
|
+
},
|
|
103
103
|
};
|
|
104
104
|
|
|
105
105
|
module.exports = State;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Define a new UI component that includes component and renderer.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} def The definition of the UI component (component methods, component constructor, rendering methods, etc.)
|
|
5
|
+
* @return {Component} The resulting Component with renderer
|
|
6
|
+
*/
|
|
7
|
+
var defineRenderer;
|
|
8
|
+
var defineWidget;
|
|
9
|
+
|
|
10
|
+
module.exports = function defineComponent(def) {
|
|
11
|
+
// eslint-disable-next-line no-constant-condition
|
|
12
|
+
if ("MARKO_DEBUG") {
|
|
13
|
+
require("complain")("defineComponent is deprecated");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (def.___isComponent) {
|
|
17
|
+
return def;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var renderer;
|
|
21
|
+
|
|
22
|
+
if (def.template || def.renderer) {
|
|
23
|
+
renderer = defineRenderer(def);
|
|
24
|
+
} else {
|
|
25
|
+
throw new Error('Expected "template" or "renderer"');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return defineWidget(def, renderer);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
defineRenderer = require("./defineRenderer-legacy");
|
|
32
|
+
defineWidget = require("./defineWidget-legacy");
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
var complain = "MARKO_DEBUG" && require("complain");
|
|
2
|
+
var makeRenderable = require("../../renderable");
|
|
3
|
+
var getComponentsContext =
|
|
4
|
+
require("../ComponentsContext").___getComponentsContext;
|
|
5
|
+
var componentLookup = require("@internal/components-util").___componentLookup;
|
|
6
|
+
var modernRenderer = require("../renderer");
|
|
7
|
+
var loader = require("@internal/loader");
|
|
8
|
+
var resolveComponentKey = modernRenderer.___resolveComponentKey;
|
|
9
|
+
|
|
10
|
+
module.exports = function defineRenderer(renderingLogic) {
|
|
11
|
+
var renderer = renderingLogic.renderer;
|
|
12
|
+
|
|
13
|
+
// eslint-disable-next-line no-constant-condition
|
|
14
|
+
if ("MARKO_DEBUG") {
|
|
15
|
+
require("complain")("defineRenderer is deprecated");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (renderer && renderer.___isRenderer) {
|
|
19
|
+
return renderer;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var template = renderingLogic.template;
|
|
23
|
+
|
|
24
|
+
if (typeof template === "string") {
|
|
25
|
+
template = loader(template);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!renderer) {
|
|
29
|
+
var getInitialProps;
|
|
30
|
+
var getTemplateData;
|
|
31
|
+
var getInitialState;
|
|
32
|
+
var getWidgetConfig;
|
|
33
|
+
var getInitialBody;
|
|
34
|
+
|
|
35
|
+
if (renderingLogic) {
|
|
36
|
+
getInitialProps = renderingLogic.getInitialProps;
|
|
37
|
+
getTemplateData = renderingLogic.getTemplateData;
|
|
38
|
+
getInitialState = renderingLogic.getInitialState;
|
|
39
|
+
getWidgetConfig = renderingLogic.getWidgetConfig;
|
|
40
|
+
getInitialBody = renderingLogic.getInitialBody;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Create a renderer function that takes care of translating
|
|
44
|
+
// the input properties to a view state. Also, this renderer
|
|
45
|
+
// takes care of re-using existing components.
|
|
46
|
+
renderer = function renderer(input, out) {
|
|
47
|
+
var componentsContext = getComponentsContext(out);
|
|
48
|
+
var globalComponentsContext = componentsContext.___globalContext;
|
|
49
|
+
var component = globalComponentsContext.___rerenderComponent;
|
|
50
|
+
var isReceivingNewInput = !component || component.___isReceivingNewInput;
|
|
51
|
+
var parentComponentDef;
|
|
52
|
+
|
|
53
|
+
if (component) {
|
|
54
|
+
component.___isReceivingNewInput = false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Render the template associated with the component using the final template
|
|
58
|
+
// data that we constructed
|
|
59
|
+
var newProps = input;
|
|
60
|
+
var widgetConfig;
|
|
61
|
+
var widgetState;
|
|
62
|
+
var widgetBody;
|
|
63
|
+
var id;
|
|
64
|
+
|
|
65
|
+
if (!component && componentLookup) {
|
|
66
|
+
var key = out.___assignedKey;
|
|
67
|
+
|
|
68
|
+
if (
|
|
69
|
+
(parentComponentDef = componentsContext.___componentDef) &&
|
|
70
|
+
key != null
|
|
71
|
+
) {
|
|
72
|
+
id = resolveComponentKey(key.toString(), parentComponentDef);
|
|
73
|
+
} else if (parentComponentDef) {
|
|
74
|
+
id = parentComponentDef.___nextComponentId();
|
|
75
|
+
} else {
|
|
76
|
+
id = globalComponentsContext.___nextComponentId();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
component = componentLookup[id];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (isReceivingNewInput) {
|
|
83
|
+
// If we do not have state then we need to go through the process
|
|
84
|
+
// of converting the input to a widget state, or simply normalizing
|
|
85
|
+
// the input using getInitialProps
|
|
86
|
+
|
|
87
|
+
if (getInitialProps) {
|
|
88
|
+
// This optional method is used to normalize input state
|
|
89
|
+
newProps = getInitialProps(newProps, out) || {};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (getInitialState) {
|
|
93
|
+
// This optional method is used to derive the widget state
|
|
94
|
+
// from the input properties
|
|
95
|
+
widgetState = getInitialState(newProps, out);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (getInitialBody) {
|
|
99
|
+
// If we have widget a widget body then pass it to the template
|
|
100
|
+
// so that it is available to the widget tag and can be inserted
|
|
101
|
+
// at the w-body marker
|
|
102
|
+
widgetBody = getInitialBody(newProps, out);
|
|
103
|
+
} else {
|
|
104
|
+
// Default to using the nested content as the widget body
|
|
105
|
+
// getInitialBody was not implemented
|
|
106
|
+
widgetBody = newProps.renderBody;
|
|
107
|
+
}
|
|
108
|
+
} else if (component) {
|
|
109
|
+
newProps = newProps || component.___widgetProps;
|
|
110
|
+
widgetBody = component.___widgetBody;
|
|
111
|
+
widgetState = component.___rawState;
|
|
112
|
+
widgetConfig = component.widgetConfig;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Use getTemplateData(state, props, out) to get the template
|
|
116
|
+
// data. If that method is not provided then just use the
|
|
117
|
+
// the state (if provided) or the input data.
|
|
118
|
+
var templateData = clone(
|
|
119
|
+
getTemplateData
|
|
120
|
+
? getTemplateData(widgetState, newProps, out)
|
|
121
|
+
: widgetState || newProps
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
if (isReceivingNewInput && getWidgetConfig) {
|
|
125
|
+
// If getWidgetConfig() was implemented then use that to
|
|
126
|
+
// get the widget config. The widget config will be passed
|
|
127
|
+
// to the widget constructor. If rendered on the server the
|
|
128
|
+
// widget config will be serialized.
|
|
129
|
+
widgetConfig = getWidgetConfig(newProps, out);
|
|
130
|
+
}
|
|
131
|
+
// eslint-disable-next-line no-constant-condition
|
|
132
|
+
if ("MARKO_DEBUG") {
|
|
133
|
+
if (widgetState && "widgetState" in templateData) {
|
|
134
|
+
complain("Passing widgetState as input is deprecated.");
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (widgetConfig && "widgetConfig" in templateData) {
|
|
138
|
+
complain("Passing widgetConfig as input is deprecated.");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
templateData.widgetProps = newProps;
|
|
143
|
+
widgetBody && (templateData.renderBody = widgetBody);
|
|
144
|
+
widgetState && (templateData.widgetState = widgetState);
|
|
145
|
+
widgetConfig && (templateData.widgetConfig = widgetConfig);
|
|
146
|
+
|
|
147
|
+
template._(templateData, out, id, renderingLogic);
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
renderer.___isRenderer = true;
|
|
152
|
+
renderer.createOut = template ? template.createOut : renderingLogic.createOut;
|
|
153
|
+
renderer.template = template;
|
|
154
|
+
|
|
155
|
+
makeRenderable(renderer, renderer);
|
|
156
|
+
renderer.render = renderer.render.bind(this);
|
|
157
|
+
|
|
158
|
+
return renderer;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
function clone(src) {
|
|
162
|
+
var result = {};
|
|
163
|
+
|
|
164
|
+
if (src) {
|
|
165
|
+
for (var key in src) {
|
|
166
|
+
result[key] = src[key];
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require("@internal/components-define-widget-legacy");
|