diff --git a/src/components/Component.js b/src/components/Component.js index 02d39263a..94f8c5152 100644 --- a/src/components/Component.js +++ b/src/components/Component.js @@ -302,7 +302,6 @@ Component.prototype = componentProto = { root.detached = true; delete componentLookup[this.id]; - delete this.___rootNode; this.___keyedElements = {}; }, diff --git a/src/morphdom/index.js b/src/morphdom/index.js index ae6f9c3b2..c40773305 100644 --- a/src/morphdom/index.js +++ b/src/morphdom/index.js @@ -356,12 +356,28 @@ function morphdom(fromNode, toNode, doc, componentsContext) { ) { var content = curFromNodeChild.nodeValue; if (content == "F#" + curToNodeKeyOriginal) { - var endNode = curFromNodeChild; - while ( - endNode.nodeType !== COMMENT_NODE || - endNode.nodeValue !== "F/" - ) + var endNode = curFromNodeChild.nextSibling; + var depth = 0; + var nodeValue; + + // eslint-disable-next-line no-constant-condition + while (true) { + if (endNode.nodeType === COMMENT_NODE) { + nodeValue = endNode.nodeValue; + if (nodeValue === "F/") { + if (depth === 0) { + break; + } else { + depth--; + } + } else if ( + nodeValue.indexOf("F#") === 0 + ) { + depth++; + } + } endNode = endNode.nextSibling; + } var fragment = createFragmentNode( curFromNodeChild, diff --git a/test/components-browser/fixtures/adjacent-nested-fragments/components/text-display/index.marko b/test/components-browser/fixtures/adjacent-nested-fragments/components/text-display/index.marko new file mode 100644 index 000000000..25f1cb598 --- /dev/null +++ b/test/components-browser/fixtures/adjacent-nested-fragments/components/text-display/index.marko @@ -0,0 +1,11 @@ + + ${type}: ${value} + + + + $ const type = typeof value; + + : ${type} + + + \ No newline at end of file diff --git a/test/components-browser/fixtures/adjacent-nested-fragments/index.marko b/test/components-browser/fixtures/adjacent-nested-fragments/index.marko new file mode 100644 index 000000000..019d2d352 --- /dev/null +++ b/test/components-browser/fixtures/adjacent-nested-fragments/index.marko @@ -0,0 +1,17 @@ +class { + onCreate() { + this.state = { + show: true + } + } + + hide() { + this.state.show = false; + } +} + +
+ + + +
\ No newline at end of file diff --git a/test/components-browser/fixtures/adjacent-nested-fragments/test.js b/test/components-browser/fixtures/adjacent-nested-fragments/test.js new file mode 100644 index 000000000..f55742b09 --- /dev/null +++ b/test/components-browser/fixtures/adjacent-nested-fragments/test.js @@ -0,0 +1,10 @@ +var expect = require("chai").expect; + +module.exports = function(helpers) { + var component = helpers.mount(require.resolve("./index.marko"), {}); + var root = component.getEl("root"); + expect(root.textContent).to.equal("number: 123: number"); + component.hide(); + component.update(); + expect(root.textContent).to.equal(""); +};