From b71ec52cae9834224319054c528766ddb4dcab1a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 16 Dec 2016 12:02:29 -0500 Subject: [PATCH] move createAnchor out of generator --- src/generators/Generator.js | 13 ------------- src/generators/dom/index.js | 14 ++++++++++++-- src/generators/dom/visitors/EachBlock.js | 6 +++++- src/generators/dom/visitors/IfBlock.js | 6 +++++- src/generators/dom/visitors/YieldTag.js | 6 +++++- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/generators/Generator.js b/src/generators/Generator.js index 5693093fc6..4bf72a085f 100644 --- a/src/generators/Generator.js +++ b/src/generators/Generator.js @@ -96,19 +96,6 @@ export default class Generator { }; } - createAnchor ( _name, description = '' ) { - const name = `${_name}_anchor`; - const renderStatement = `document.createComment( ${JSON.stringify( description )} )`; - - this.fire( 'addElement', { - name, - renderStatement, - needsIdentifier: true - }); - - return name; - } - createMountStatement ( name ) { if ( this.current.target === 'target' ) { this.current.builders.mount.addLine( diff --git a/src/generators/dom/index.js b/src/generators/dom/index.js index 0e045df9a5..878eb98539 100644 --- a/src/generators/dom/index.js +++ b/src/generators/dom/index.js @@ -56,8 +56,8 @@ export default function dom ( parsed, source, options, names ) { generator.on( 'addRenderer', addRenderer ); - generator.on( 'addElement', function addElement ({ name, renderStatement, needsIdentifier }) { - const isToplevel = this.current.localElementDepth === 0; + generator.on( 'addElement', ({ name, renderStatement, needsIdentifier }) => { + const isToplevel = generator.current.localElementDepth === 0; if ( needsIdentifier || isToplevel ) { generator.current.builders.init.addLine( `var ${name} = ${renderStatement};` @@ -77,6 +77,16 @@ export default function dom ( parsed, source, options, names ) { } }); + generator.on( 'createAnchor', ({ name, description = '' }) => { + const renderStatement = `document.createComment( ${JSON.stringify( description )} )`; + + generator.fire( 'addElement', { + name, + renderStatement, + needsIdentifier: true + }); + }); + let namespace = null; if ( templateProperties.namespace ) { const ns = templateProperties.namespace.value; diff --git a/src/generators/dom/visitors/EachBlock.js b/src/generators/dom/visitors/EachBlock.js index 5e75abd441..0c7b28072b 100644 --- a/src/generators/dom/visitors/EachBlock.js +++ b/src/generators/dom/visitors/EachBlock.js @@ -18,7 +18,11 @@ export default { const { dependencies, snippet } = generator.contextualise( node.expression ); - const anchor = generator.createAnchor( name, `#each ${generator.source.slice( node.expression.start, node.expression.end )}` ); + const anchor = `${name}_anchor`; + generator.fire( 'createAnchor', { + name: anchor, + description: `#each ${generator.source.slice( node.expression.start, node.expression.end )}` + }); generator.current.builders.init.addBlock( deindent` var ${name}_value = ${snippet}; diff --git a/src/generators/dom/visitors/IfBlock.js b/src/generators/dom/visitors/IfBlock.js index e95fefc7f1..4099113183 100644 --- a/src/generators/dom/visitors/IfBlock.js +++ b/src/generators/dom/visitors/IfBlock.js @@ -37,7 +37,11 @@ export default { const isToplevel = generator.current.localElementDepth === 0; const conditionsAndBlocks = getConditionsAndBlocks( generator, node, generator.getUniqueName( `renderIfBlock` ) ); - const anchor = generator.createAnchor( name, `#if ${generator.source.slice( node.expression.start, node.expression.end )}` ); + const anchor = `${name}_anchor`; + generator.fire( 'createAnchor', { + name: anchor, + description: `#if ${generator.source.slice( node.expression.start, node.expression.end )}` + }); generator.current.builders.init.addBlock( deindent` function ${getBlock} ( ${params} ) { diff --git a/src/generators/dom/visitors/YieldTag.js b/src/generators/dom/visitors/YieldTag.js index 68c850b66b..583964d129 100644 --- a/src/generators/dom/visitors/YieldTag.js +++ b/src/generators/dom/visitors/YieldTag.js @@ -1,6 +1,10 @@ export default { enter ( generator ) { - const anchor = generator.createAnchor( 'yield', 'yield' ); + const anchor = `yield_anchor`; + generator.fire( 'createAnchor', { + name: anchor, + description: 'yield' + }); generator.current.builders.mount.addLine( `component.yield && component.yield.mount( ${generator.current.target}, ${anchor} );`