From b21d3ffbe8ada75b578134001f55eda7e872c541 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sat, 10 Dec 2016 14:58:13 -0500 Subject: [PATCH] fix detach order for triples --- src/generate/index.js | 11 ++++++++--- src/generate/visitors/RawMustacheTag.js | 8 +------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/generate/index.js b/src/generate/index.js index a5749ffd27..52a92b6b52 100644 --- a/src/generate/index.js +++ b/src/generate/index.js @@ -76,10 +76,14 @@ export default function generate ( parsed, source, options, names ) { fragment.builders.init.addLine( `${fragment.autofocus}.focus();` ); } - if ( !fragment.builders.detach.isEmpty() ) { + // minor hack – we need to ensure that any {{{triples}}} are detached + // first, so we append normal detach statements to detachRaw + fragment.builders.detachRaw.addBlock( fragment.builders.detach ); + + if ( !fragment.builders.detachRaw.isEmpty() ) { fragment.builders.teardown.addBlock( deindent` if ( detach ) { - ${fragment.builders.detach} + ${fragment.builders.detachRaw} } ` ); } @@ -171,6 +175,7 @@ export default function generate ( parsed, source, options, names ) { mount: new CodeBuilder(), update: new CodeBuilder(), detach: new CodeBuilder(), + detachRaw: new CodeBuilder(), teardown: new CodeBuilder() }; }, @@ -293,7 +298,7 @@ export default function generate ( parsed, source, options, names ) { target: 'target', elementDepth: 0, localElementDepth: 0, - + contexts: {}, indexes: {}, diff --git a/src/generate/visitors/RawMustacheTag.js b/src/generate/visitors/RawMustacheTag.js index 68314c9a23..d90e1d7d01 100644 --- a/src/generate/visitors/RawMustacheTag.js +++ b/src/generate/visitors/RawMustacheTag.js @@ -32,12 +32,6 @@ export default { generator.current.builders.update.addBlock( detachStatement ); generator.current.builders.update.addBlock( mountStatement ); - // if ( isToplevel ) { - // const { detachStatements } = generator.current; - // // we need `before` and `after` to still be in the DOM when running the - // // detach code, so splice in the detach code *before* detaching - // // `before`/`after`. - // detachStatements.splice( detachStatements.length - 2, 0, detachStatement); - // } + generator.current.builders.detachRaw.addBlock( detachStatement ); } };