marko 4.28.1 → 4.28.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/compiler/Normalizer.js +1 -1
- package/dist/runtime/vdom/morphdom/index.js +15 -11
- package/dist/taglib/taglib-loader/loadTaglibFromProps.js +3 -0
- package/package.json +1 -1
- package/src/compiler/Normalizer.js +1 -1
- package/src/runtime/vdom/morphdom/index.js +21 -18
- package/src/taglib/taglib-loader/loadTaglibFromProps.js +3 -0
@@ -107,7 +107,7 @@ class Normalizer {
|
|
107
107
|
} else if (context.ignoreUnrecognizedTags && tagName[0] === "@") {
|
108
108
|
let owner = elNode.parentNode;
|
109
109
|
|
110
|
-
while (owner && /^(?:for|while|if|else(?:-if))
|
110
|
+
while (owner && /^(?:for|while|if|else(?:-if))$|^@/.test(owner.tagName)) {
|
111
111
|
owner = owner.parentNode;
|
112
112
|
}
|
113
113
|
|
@@ -148,7 +148,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
148
148
|
if (curToNodeType === COMPONENT_NODE) {
|
149
149
|
var component = curToNodeChild.v_;
|
150
150
|
if ((matchingFromComponent = existingComponentLookup[component.id]) === undefined) {
|
151
|
-
if (isHydrate
|
151
|
+
if (isHydrate) {
|
152
152
|
var rootNode = beginFragmentNode(curFromNodeChild, fromNode);
|
153
153
|
component._E_ = rootNode;
|
154
154
|
componentByDOMNode.set(rootNode, component);
|
@@ -236,7 +236,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
236
236
|
} else {
|
237
237
|
matchingFromEl = referenceComponent.N_[curToNodeKey];
|
238
238
|
if (matchingFromEl === undefined || matchingFromEl === curFromNodeChild) {
|
239
|
-
if (isHydrate
|
239
|
+
if (isHydrate && curFromNodeChild) {
|
240
240
|
if (curFromNodeChild.nodeType === ELEMENT_NODE && (curToNodeChild.ae_ || caseInsensitiveCompare(curFromNodeChild.nodeName, curToNodeChild.cd_ || ""))) {
|
241
241
|
curVFromNodeChild = virtualizeElement(curFromNodeChild);
|
242
242
|
curVFromNodeChild.cd_ = curToNodeChild.cd_;
|
@@ -406,7 +406,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
406
406
|
// Both nodes being compared are Element nodes
|
407
407
|
curVFromNodeChild = vElementByDOMNode.get(curFromNodeChild);
|
408
408
|
if (curVFromNodeChild === undefined) {
|
409
|
-
if (isHydrate
|
409
|
+
if (isHydrate) {
|
410
410
|
curVFromNodeChild = virtualizeElement(curFromNodeChild);
|
411
411
|
|
412
412
|
if (caseInsensitiveCompare(curVFromNodeChild.cd_, curToNodeChild.cd_)) {
|
@@ -434,14 +434,18 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
434
434
|
} else if (curFromNodeType === TEXT_NODE || curFromNodeType === COMMENT_NODE) {
|
435
435
|
// Both nodes being compared are Text or Comment nodes
|
436
436
|
isCompatible = true;
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
437
|
+
var curToNodeValue = curToNodeChild.bW_;
|
438
|
+
var curFromNodeValue = curFromNodeChild.nodeValue;
|
439
|
+
if (curFromNodeValue !== curToNodeValue) {
|
440
|
+
if (isHydrate && curFromNodeType === TEXT_NODE && curFromNodeValue.startsWith(curToNodeValue)) {
|
441
|
+
// In hydrate mode we can use splitText to more efficiently handle
|
442
|
+
// adjacent text vdom nodes that were merged.
|
443
|
+
fromNextSibling = curFromNodeChild.splitText(curToNodeValue.length);
|
444
|
+
} else {
|
445
|
+
// Simply update nodeValue on the original node to
|
446
|
+
// change the text value
|
447
|
+
curFromNodeChild.nodeValue = curToNodeValue;
|
448
|
+
}
|
445
449
|
}
|
446
450
|
}
|
447
451
|
}
|
@@ -197,6 +197,9 @@ class TaglibLoader {
|
|
197
197
|
}
|
198
198
|
}
|
199
199
|
}
|
200
|
+
scriptLang() {
|
201
|
+
// Marko 4 doesn't read script-lang, but it shouldn't break the app
|
202
|
+
}
|
200
203
|
tagsDir(dir) {
|
201
204
|
// The "tags-dir" property is used to supporting scanning
|
202
205
|
// of a directory to discover custom tags. Scanning a directory
|
package/package.json
CHANGED
@@ -125,7 +125,7 @@ class Normalizer {
|
|
125
125
|
} else if (context.ignoreUnrecognizedTags && tagName[0] === "@") {
|
126
126
|
let owner = elNode.parentNode;
|
127
127
|
|
128
|
-
while (owner && /^(?:for|while|if|else(?:-if))
|
128
|
+
while (owner && /^(?:for|while|if|else(?:-if))$|^@/.test(owner.tagName)) {
|
129
129
|
owner = owner.parentNode;
|
130
130
|
}
|
131
131
|
|
@@ -180,7 +180,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
180
180
|
(matchingFromComponent = existingComponentLookup[component.id]) ===
|
181
181
|
undefined
|
182
182
|
) {
|
183
|
-
if (isHydrate
|
183
|
+
if (isHydrate) {
|
184
184
|
var rootNode = beginFragmentNode(curFromNodeChild, fromNode);
|
185
185
|
component.___rootNode = rootNode;
|
186
186
|
componentByDOMNode.set(rootNode, component);
|
@@ -322,7 +322,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
322
322
|
matchingFromEl === undefined ||
|
323
323
|
matchingFromEl === curFromNodeChild
|
324
324
|
) {
|
325
|
-
if (isHydrate
|
325
|
+
if (isHydrate && curFromNodeChild) {
|
326
326
|
if (
|
327
327
|
curFromNodeChild.nodeType === ELEMENT_NODE &&
|
328
328
|
(curToNodeChild.___preserve ||
|
@@ -546,7 +546,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
546
546
|
// Both nodes being compared are Element nodes
|
547
547
|
curVFromNodeChild = vElementByDOMNode.get(curFromNodeChild);
|
548
548
|
if (curVFromNodeChild === undefined) {
|
549
|
-
if (isHydrate
|
549
|
+
if (isHydrate) {
|
550
550
|
curVFromNodeChild = virtualizeElement(curFromNodeChild);
|
551
551
|
|
552
552
|
if (
|
@@ -589,21 +589,24 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
589
589
|
) {
|
590
590
|
// Both nodes being compared are Text or Comment nodes
|
591
591
|
isCompatible = true;
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
592
|
+
var curToNodeValue = curToNodeChild.___nodeValue;
|
593
|
+
var curFromNodeValue = curFromNodeChild.nodeValue;
|
594
|
+
if (curFromNodeValue !== curToNodeValue) {
|
595
|
+
if (
|
596
|
+
isHydrate &&
|
597
|
+
curFromNodeType === TEXT_NODE &&
|
598
|
+
curFromNodeValue.startsWith(curToNodeValue)
|
599
|
+
) {
|
600
|
+
// In hydrate mode we can use splitText to more efficiently handle
|
601
|
+
// adjacent text vdom nodes that were merged.
|
602
|
+
fromNextSibling = curFromNodeChild.splitText(
|
603
|
+
curToNodeValue.length,
|
604
|
+
);
|
605
|
+
} else {
|
606
|
+
// Simply update nodeValue on the original node to
|
607
|
+
// change the text value
|
608
|
+
curFromNodeChild.nodeValue = curToNodeValue;
|
609
|
+
}
|
607
610
|
}
|
608
611
|
}
|
609
612
|
}
|
@@ -222,6 +222,9 @@ class TaglibLoader {
|
|
222
222
|
}
|
223
223
|
}
|
224
224
|
}
|
225
|
+
scriptLang() {
|
226
|
+
// Marko 4 doesn't read script-lang, but it shouldn't break the app
|
227
|
+
}
|
225
228
|
tagsDir(dir) {
|
226
229
|
// The "tags-dir" property is used to supporting scanning
|
227
230
|
// of a directory to discover custom tags. Scanning a directory
|