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
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* jshint newcap:false */
|
|
3
|
+
|
|
4
|
+
var BaseState;
|
|
5
|
+
var BaseComponent;
|
|
6
|
+
var inherit;
|
|
7
|
+
var loader = require("@internal/loader");
|
|
8
|
+
var registry = require("@internal/components-registry");
|
|
9
|
+
var jQuery = require("../../../runtime/components/legacy/jquery");
|
|
10
|
+
var ready = require("../../../runtime/components/legacy/ready");
|
|
11
|
+
|
|
12
|
+
var complain = "MARKO_DEBUG" && require("complain");
|
|
13
|
+
var stateToJSONDef = {
|
|
14
|
+
enumerable: false,
|
|
15
|
+
value: function returnSelf() {
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
function noop() { }
|
|
20
|
+
|
|
21
|
+
module.exports = function defineWidget(def, renderer) {
|
|
22
|
+
def = def.Widget || def;
|
|
23
|
+
|
|
24
|
+
if (def.___isComponent) {
|
|
25
|
+
return def;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var ComponentClass = function () { };
|
|
29
|
+
var proto;
|
|
30
|
+
var legacyInit;
|
|
31
|
+
|
|
32
|
+
if (typeof def === "function") {
|
|
33
|
+
proto = def.prototype;
|
|
34
|
+
legacyInit = def;
|
|
35
|
+
} else if (typeof def === "object") {
|
|
36
|
+
proto = def;
|
|
37
|
+
legacyInit = def.init;
|
|
38
|
+
} else {
|
|
39
|
+
throw TypeError();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
ComponentClass.prototype = proto;
|
|
43
|
+
|
|
44
|
+
// We don't use the constructor provided by the user
|
|
45
|
+
// since we don't invoke their constructor until
|
|
46
|
+
// we have had a chance to do our own initialization.
|
|
47
|
+
// Instead, we store their constructor in the "initComponent"
|
|
48
|
+
// property and that method gets called later inside
|
|
49
|
+
// init-components-browser.js
|
|
50
|
+
function Component(id, doc) {
|
|
51
|
+
BaseComponent.call(this, id, doc);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (!proto.___isComponent) {
|
|
55
|
+
// Inherit from Component if they didn't already
|
|
56
|
+
ComponentClass.prototype = Object.create(BaseComponent.prototype);
|
|
57
|
+
for (var propName in proto) {
|
|
58
|
+
if (proto.hasOwnProperty(propName)) {
|
|
59
|
+
ComponentClass.prototype[propName] = proto[propName];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// The same prototype will be used by our constructor after
|
|
65
|
+
// we he have set up the prototype chain using the inherit function
|
|
66
|
+
proto = Component.prototype = ComponentClass.prototype;
|
|
67
|
+
proto.___isLegacy = true;
|
|
68
|
+
|
|
69
|
+
proto.constructor = def.constructor = Component;
|
|
70
|
+
|
|
71
|
+
Object.defineProperty(proto, "state", {
|
|
72
|
+
get: function () {
|
|
73
|
+
var raw = this.___state && this.___state.___raw;
|
|
74
|
+
|
|
75
|
+
if (raw && !raw.toJSON) {
|
|
76
|
+
Object.defineProperty(this.___state.___raw, "toJSON", stateToJSONDef);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return raw;
|
|
80
|
+
},
|
|
81
|
+
set: function (newState) {
|
|
82
|
+
newState = newState || {};
|
|
83
|
+
// eslint-disable-next-line no-constant-condition
|
|
84
|
+
if ("MARKO_DEBUG") {
|
|
85
|
+
if (
|
|
86
|
+
Object.keys(newState).sort().join("") !==
|
|
87
|
+
Object.keys((this.___state && this.___state.___raw) || {})
|
|
88
|
+
.sort()
|
|
89
|
+
.join("")
|
|
90
|
+
)
|
|
91
|
+
complain(
|
|
92
|
+
"'widget.state = newState' has changed from merging the newState to replacing the old state."
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
this.setState(newState);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
Object.defineProperty(proto, "__document", {
|
|
101
|
+
get: function () {
|
|
102
|
+
// eslint-disable-next-line no-constant-condition
|
|
103
|
+
if ("MARKO_DEBUG") {
|
|
104
|
+
complain("__document is deprecated");
|
|
105
|
+
}
|
|
106
|
+
return this.___host;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
Object.defineProperty(proto, "el", {
|
|
111
|
+
get: function () {
|
|
112
|
+
// eslint-disable-next-line no-constant-condition
|
|
113
|
+
if ("MARKO_DEBUG") {
|
|
114
|
+
if (
|
|
115
|
+
this.___currentLegacyBindEl !==
|
|
116
|
+
(this.___rootNode && this.___rootNode.firstChild)
|
|
117
|
+
) {
|
|
118
|
+
complain(
|
|
119
|
+
"this.el no longer returns the `w-bind` element and instead returns the first node in the template. Assign a key to the w-bind element and use getEl(key) instead."
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return this.___currentLegacyBindEl;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// get legacy methods
|
|
129
|
+
|
|
130
|
+
proto.___legacyOnRender = proto.onRender;
|
|
131
|
+
Object.defineProperty(proto, "onRender", {
|
|
132
|
+
get: noop,
|
|
133
|
+
set: function (v) {
|
|
134
|
+
proto.___legacyOnRender = v;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
proto.___legacyOnUpdate = proto.onUpdate;
|
|
139
|
+
Object.defineProperty(proto, "onUpdate", {
|
|
140
|
+
get: function () {
|
|
141
|
+
return modernMountOrUpdate;
|
|
142
|
+
},
|
|
143
|
+
set: function (v) {
|
|
144
|
+
proto.___legacyOnUpdate = v;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
proto.___legacyOnDestroy = proto.onDestroy;
|
|
149
|
+
Object.defineProperty(proto, "onDestroy", {
|
|
150
|
+
get: function () {
|
|
151
|
+
return modernOnDestory;
|
|
152
|
+
},
|
|
153
|
+
set: function (v) {
|
|
154
|
+
proto.___legacyOnDestroy = v;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
proto.getWidget = proto.getComponent;
|
|
159
|
+
proto.getWidgets = proto.getComponents;
|
|
160
|
+
proto.onMount = modernMountOrUpdate;
|
|
161
|
+
|
|
162
|
+
if (legacyInit) {
|
|
163
|
+
proto.___legacyInit = legacyInit;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// convert legacy to modern
|
|
167
|
+
proto.___modernUpdate = proto.update;
|
|
168
|
+
proto.update = function () {
|
|
169
|
+
if (this.___destroyed) {
|
|
170
|
+
// eslint-disable-next-line no-constant-condition
|
|
171
|
+
if ("MARKO_DEBUG") {
|
|
172
|
+
complain(
|
|
173
|
+
"widget was updated after it was destroyed, if this widget is migrated to a modern component this will become a noop.",
|
|
174
|
+
{
|
|
175
|
+
location: this.___type
|
|
176
|
+
}
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
this.destroy = modernOnDestory;
|
|
181
|
+
this.___destroyed = false;
|
|
182
|
+
}
|
|
183
|
+
this.___legacyExplicitUpdate = true;
|
|
184
|
+
if (this.___currentLegacyBindEl) {
|
|
185
|
+
this.onBeforeUpdate && this.onBeforeUpdate();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
this.___modernUpdate();
|
|
189
|
+
this.___legacyExplicitUpdate = false;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
function modernMountOrUpdate() {
|
|
193
|
+
var self = this;
|
|
194
|
+
var el = this.___keyedElements["@_wbind"];
|
|
195
|
+
var prevEl = this.___currentLegacyBindEl;
|
|
196
|
+
|
|
197
|
+
if (prevEl !== el) {
|
|
198
|
+
this.___currentLegacyBindEl = el;
|
|
199
|
+
|
|
200
|
+
if (prevEl) {
|
|
201
|
+
this.onBeforeDestroy && this.onBeforeDestroy();
|
|
202
|
+
this.___legacyOnDestroy && this.___legacyOnDestroy();
|
|
203
|
+
this.___legacyRender = undefined;
|
|
204
|
+
this.removeAllListeners();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (el) {
|
|
208
|
+
this.___legacyInit && this.___legacyInit(this.widgetConfig || {});
|
|
209
|
+
this.___legacyOnRender && this.___legacyOnRender({ firstRender: true });
|
|
210
|
+
this.___legacyRender = legacyRender;
|
|
211
|
+
|
|
212
|
+
// eslint-disable-next-line no-constant-condition
|
|
213
|
+
if ("MARKO_DEBUG") {
|
|
214
|
+
Object.defineProperty(el, "__widget", {
|
|
215
|
+
configurable: true,
|
|
216
|
+
get: function () {
|
|
217
|
+
complain("__widget is deprecated");
|
|
218
|
+
return self;
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
} else {
|
|
222
|
+
el.__widget = this;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
} else if (el) {
|
|
226
|
+
if (prevEl) {
|
|
227
|
+
this.___legacyOnUpdate && this.___legacyOnUpdate();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (this.___didUpdate) {
|
|
231
|
+
this.___legacyOnRender &&
|
|
232
|
+
this.___legacyOnRender({ firstRender: false });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
this.___widgetProps = this.___input;
|
|
237
|
+
this.___input = null;
|
|
238
|
+
this.___didUpdate = false;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function legacyRender() {
|
|
242
|
+
if (!this.___legacyExplicitUpdate) {
|
|
243
|
+
this.onBeforeUpdate && this.onBeforeUpdate();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
this.___didUpdate = true;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function modernOnDestory() {
|
|
250
|
+
if (this.___currentLegacyBindEl) {
|
|
251
|
+
this.onBeforeDestroy && this.onBeforeDestroy();
|
|
252
|
+
this.___legacyOnDestroy && this.___legacyOnDestroy();
|
|
253
|
+
this.___currentLegacyBindEl = null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Set a flag on the constructor function to make it clear this is
|
|
258
|
+
// a component so that we can short-circuit this work later
|
|
259
|
+
Component.___isComponent = true;
|
|
260
|
+
|
|
261
|
+
function State() {
|
|
262
|
+
BaseState.apply(this, arguments);
|
|
263
|
+
}
|
|
264
|
+
inherit(State, BaseState);
|
|
265
|
+
proto.___State = State;
|
|
266
|
+
|
|
267
|
+
jQuery.patchComponent(
|
|
268
|
+
window.$,
|
|
269
|
+
proto,
|
|
270
|
+
true /* don't throw error until used if `$` is missing*/
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
ready.patchComponent(proto);
|
|
274
|
+
|
|
275
|
+
if (!renderer) {
|
|
276
|
+
renderer = ComponentClass.renderer || ComponentClass.prototype.renderer;
|
|
277
|
+
if (renderer) {
|
|
278
|
+
// Legacy support
|
|
279
|
+
var createOut = renderer.createOut;
|
|
280
|
+
if (typeof renderer !== "function") {
|
|
281
|
+
var rendererObject = renderer;
|
|
282
|
+
renderer = function (input, out) {
|
|
283
|
+
var rendererFunc = rendererObject.renderer || rendererObject.render;
|
|
284
|
+
rendererFunc(input, out);
|
|
285
|
+
};
|
|
286
|
+
renderer.createOut = createOut;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
renderer.render = function (input) {
|
|
290
|
+
var out = createOut();
|
|
291
|
+
renderer(input, out);
|
|
292
|
+
return out.end();
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (renderer) {
|
|
298
|
+
// Add the rendering related methods as statics on the
|
|
299
|
+
// new component constructor function
|
|
300
|
+
Component.renderer = proto.___renderer = renderer;
|
|
301
|
+
Component.render = renderer.render;
|
|
302
|
+
Component.renderSync = renderer.renderSync;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// eslint-disable-next-line no-constant-condition
|
|
306
|
+
if ("MARKO_DEBUG") {
|
|
307
|
+
Object.defineProperty(Component, "_isWidget", {
|
|
308
|
+
get: function () {
|
|
309
|
+
complain("_isWidget is deprecated");
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
} else {
|
|
314
|
+
Component._isWidget = true;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
var template = def.template;
|
|
318
|
+
if (template) {
|
|
319
|
+
if (typeof template === "string") {
|
|
320
|
+
template = loader(template);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
registry.r(template.___typeName, function () { return Component });
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return Component;
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
BaseState = require("../../../runtime/components/State");
|
|
330
|
+
BaseComponent = require("../../../runtime/components/Component");
|
|
331
|
+
inherit = require("raptor-util/inherit");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module.exports = function defineWidget(def, renderer) {
|
|
2
|
+
if (def.___isComponent) {
|
|
3
|
+
return def;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
if (renderer) {
|
|
7
|
+
return {
|
|
8
|
+
___isComponent: true,
|
|
9
|
+
_isWidget: true,
|
|
10
|
+
renderer: renderer,
|
|
11
|
+
render: renderer.render,
|
|
12
|
+
renderSync: renderer.renderSync,
|
|
13
|
+
template: renderer.template
|
|
14
|
+
};
|
|
15
|
+
} else {
|
|
16
|
+
return { ___isComponent: true, _isWidget: true };
|
|
17
|
+
}
|
|
18
|
+
};
|
|
@@ -7,6 +7,8 @@ var DEFAULT_RUNTIME_ID = "M";
|
|
|
7
7
|
|
|
8
8
|
var FLAG_WILL_RERENDER_IN_BROWSER = 1;
|
|
9
9
|
var FLAG_HAS_RENDER_BODY = 2;
|
|
10
|
+
var FLAG_IS_LEGACY = 4;
|
|
11
|
+
var FLAG_OLD_HYDRATE_NO_CREATE = 8;
|
|
10
12
|
|
|
11
13
|
function safeJSONReplacer(match) {
|
|
12
14
|
if (match === "</") {
|
|
@@ -65,66 +67,92 @@ function addComponentsFromContext(componentsContext, componentsToHydrate) {
|
|
|
65
67
|
var id = componentDef.id;
|
|
66
68
|
var component = componentDef.___component;
|
|
67
69
|
var flags = componentDef.___flags;
|
|
70
|
+
var isLegacy = componentDef.___isLegacy;
|
|
71
|
+
|
|
72
|
+
var state = component.state;
|
|
68
73
|
var input = component.input || 0;
|
|
69
74
|
var typeName = component.typeName;
|
|
70
75
|
var customEvents = component.___customEvents;
|
|
71
76
|
var scope = component.___scope;
|
|
72
77
|
var bubblingDomEvents = component.___bubblingDomEvents;
|
|
73
78
|
|
|
74
|
-
var
|
|
79
|
+
var needsState;
|
|
75
80
|
var serializedProps;
|
|
76
|
-
var
|
|
81
|
+
var renderBody;
|
|
77
82
|
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
if (isLegacy) {
|
|
84
|
+
flags |= FLAG_IS_LEGACY;
|
|
85
|
+
renderBody = component.___widgetBody;
|
|
86
|
+
|
|
87
|
+
if (component.widgetConfig && isNotEmpty(component.widgetConfig)) {
|
|
88
|
+
serializedProps = component.widgetConfig;
|
|
82
89
|
}
|
|
90
|
+
|
|
91
|
+
needsState = true;
|
|
83
92
|
} else {
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
if (input && input.renderBody) {
|
|
94
|
+
renderBody = input.renderBody;
|
|
95
|
+
input.renderBody = undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (
|
|
99
|
+
!(flags & FLAG_WILL_RERENDER_IN_BROWSER) ||
|
|
100
|
+
flags & FLAG_OLD_HYDRATE_NO_CREATE
|
|
101
|
+
) {
|
|
102
|
+
component.___state = undefined; // We don't use `delete` to avoid V8 deoptimization
|
|
103
|
+
component.___input = undefined; // We don't use `delete` to avoid V8 deoptimization
|
|
104
|
+
component.typeName = undefined;
|
|
105
|
+
component.id = undefined;
|
|
106
|
+
component.___customEvents = undefined;
|
|
107
|
+
component.___scope = undefined;
|
|
108
|
+
component.___bubblingDomEvents = undefined;
|
|
109
|
+
component.___bubblingDomEventsExtraArgsCount = undefined;
|
|
110
|
+
component.___updatedInput = undefined;
|
|
111
|
+
component.___updateQueued = undefined;
|
|
112
|
+
|
|
113
|
+
needsState = true;
|
|
114
|
+
|
|
115
|
+
if (isNotEmpty(component)) {
|
|
116
|
+
serializedProps = component;
|
|
100
117
|
}
|
|
101
118
|
}
|
|
119
|
+
}
|
|
102
120
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
121
|
+
var undefinedPropNames = undefined;
|
|
122
|
+
|
|
123
|
+
if (needsState && state) {
|
|
124
|
+
// Update state properties with an `undefined` value to have a `null`
|
|
125
|
+
// value so that the property name will be serialized down to the browser.
|
|
126
|
+
// This ensures that we add the proper getter/setter for the state property.
|
|
127
|
+
const stateKeys = Object.keys(state);
|
|
128
|
+
for (let i = stateKeys.length; i--; ) {
|
|
129
|
+
const stateKey = stateKeys[i];
|
|
130
|
+
|
|
131
|
+
if (state[stateKey] === undefined) {
|
|
132
|
+
if (undefinedPropNames) {
|
|
133
|
+
undefinedPropNames.push(stateKey);
|
|
134
|
+
} else {
|
|
135
|
+
undefinedPropNames = [stateKey];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
116
138
|
}
|
|
117
139
|
}
|
|
118
140
|
|
|
141
|
+
if (typeof renderBody === "function") {
|
|
142
|
+
flags |= FLAG_HAS_RENDER_BODY;
|
|
143
|
+
renderBody = undefined;
|
|
144
|
+
}
|
|
145
|
+
|
|
119
146
|
var extra = {
|
|
120
147
|
b: bubblingDomEvents,
|
|
121
148
|
d: componentDef.___domEvents,
|
|
122
149
|
e: customEvents,
|
|
123
150
|
f: flags || undefined,
|
|
124
151
|
p: customEvents && scope, // Only serialize scope if we need to attach custom events
|
|
125
|
-
s: state,
|
|
152
|
+
s: needsState && state,
|
|
126
153
|
u: undefinedPropNames,
|
|
127
|
-
w: serializedProps
|
|
154
|
+
w: serializedProps,
|
|
155
|
+
r: renderBody
|
|
128
156
|
};
|
|
129
157
|
|
|
130
158
|
var parts = [id, typeName];
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var Component = require("../../../runtime/components/Component");
|
|
2
|
+
var loader = require("@internal/loader");
|
|
3
|
+
var getComponentForEl =
|
|
4
|
+
require("@internal/components-util").___getComponentForEl;
|
|
5
|
+
|
|
6
|
+
var complain = "MARKO_DEBUG" && require("complain");
|
|
7
|
+
|
|
8
|
+
// expose legacy
|
|
9
|
+
require("@internal/components-registry").___legacy = exports;
|
|
10
|
+
exports.load = function (typeName) {
|
|
11
|
+
return exports.defineWidget(loader(typeName));
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// legacy api
|
|
15
|
+
exports.defineComponent = require("../../../runtime/components/legacy/defineComponent-legacy");
|
|
16
|
+
exports.defineWidget = require("@internal/components-define-widget-legacy");
|
|
17
|
+
exports.defineRenderer = require("../../../runtime/components/legacy/defineRenderer-legacy");
|
|
18
|
+
exports.makeRenderable = exports.renderable = require("../../../runtime/renderable");
|
|
19
|
+
|
|
20
|
+
// browser only
|
|
21
|
+
var Widget = (exports.Widget = Component);
|
|
22
|
+
exports.getWidgetForEl = exports.get = function (elOrId) {
|
|
23
|
+
var el = elOrId;
|
|
24
|
+
|
|
25
|
+
if (typeof elOrId === "string") {
|
|
26
|
+
el = document.getElementById(elOrId);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (el && el.__widget) {
|
|
30
|
+
return el.__widget;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return getComponentForEl(el);
|
|
34
|
+
};
|
|
35
|
+
exports.initWidgets =
|
|
36
|
+
require("@internal/components-registry").___initServerRendered;
|
|
37
|
+
|
|
38
|
+
// monkey patch Widget
|
|
39
|
+
if (Widget) {
|
|
40
|
+
var WidgetProto = Widget.prototype;
|
|
41
|
+
WidgetProto.setProps = function (newInput) {
|
|
42
|
+
this.___isReceivingNewInput = true;
|
|
43
|
+
this.___setInput(newInput);
|
|
44
|
+
};
|
|
45
|
+
WidgetProto.rerender = function (newInput) {
|
|
46
|
+
if (newInput) {
|
|
47
|
+
this.setProps(newInput);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
this.forceUpdate();
|
|
51
|
+
this.update();
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
var RenderResult = require("../../../runtime/RenderResult");
|
|
56
|
+
|
|
57
|
+
RenderResult.prototype.getWidget = function () {
|
|
58
|
+
// eslint-disable-next-line no-constant-condition
|
|
59
|
+
if ("MARKO_DEBUG") {
|
|
60
|
+
complain("getWidget is deprecated. use getComponent instead.");
|
|
61
|
+
}
|
|
62
|
+
return this.getWidgets()[0];
|
|
63
|
+
};
|
|
64
|
+
RenderResult.prototype.getWidgets = function () {
|
|
65
|
+
// eslint-disable-next-line no-constant-condition
|
|
66
|
+
if ("MARKO_DEBUG") {
|
|
67
|
+
complain("getWidgets is deprecated. use getComponents instead.");
|
|
68
|
+
}
|
|
69
|
+
return RenderResult.prototype.getComponents
|
|
70
|
+
.apply(this, arguments)
|
|
71
|
+
.filter(function (component) {
|
|
72
|
+
return component.___isLegacy;
|
|
73
|
+
});
|
|
74
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var modernMarko = require("@internal/components-entry");
|
|
2
|
+
|
|
3
|
+
// legacy api
|
|
4
|
+
exports.defineComponent = require("../../../runtime/components/legacy/defineComponent-legacy");
|
|
5
|
+
exports.defineWidget = require("@internal/components-define-widget-legacy");
|
|
6
|
+
exports.defineRenderer = require("../../../runtime/components/legacy/defineRenderer-legacy");
|
|
7
|
+
exports.makeRenderable = exports.renderable = require("../../../runtime/renderable");
|
|
8
|
+
|
|
9
|
+
// server only
|
|
10
|
+
exports.writeInitWidgetsCode = modernMarko.writeInitComponentsCode;
|
|
11
|
+
exports.getRenderedWidgets = exports.getRenderedWidgetIds =
|
|
12
|
+
modernMarko.getRenderedComponents;
|
|
13
|
+
exports.getInitWidgetsCode = function (out) {
|
|
14
|
+
return modernMarko.___getInitComponentsCode(out);
|
|
15
|
+
};
|