diff --git a/src/generators/dom/Block.ts b/src/generators/dom/Block.ts index 70323ae5cf..c0c32a45aa 100644 --- a/src/generators/dom/Block.ts +++ b/src/generators/dom/Block.ts @@ -184,7 +184,7 @@ export default class Block { } } - render() { + toString() { let introing; const hasIntros = !this.builders.intro.isEmpty(); if (hasIntros) { diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts index e2cbc4751c..de7ff1fc96 100644 --- a/src/generators/dom/index.ts +++ b/src/generators/dom/index.ts @@ -15,7 +15,7 @@ import Block from './Block'; import { Parsed, CompileOptions, Node } from '../../interfaces'; export class DomGenerator extends Generator { - blocks: Block[]; + blocks: (Block|string)[]; readonly: Set; metaBindings: string[]; @@ -160,7 +160,7 @@ export default function dom( } generator.blocks.forEach(block => { - builder.addBlock(block.render()); + builder.addBlock(block.toString()); }); const sharedPath = options.shared === true diff --git a/src/generators/dom/visitors/Element/EventHandler.ts b/src/generators/dom/visitors/Element/EventHandler.ts index 56fdb42a87..9e7df71143 100644 --- a/src/generators/dom/visitors/Element/EventHandler.ts +++ b/src/generators/dom/visitors/Element/EventHandler.ts @@ -94,11 +94,7 @@ export default function visitEventHandler( `; if (shouldHoist) { - generator.blocks.push( - { - render: () => handler, - } - ); + generator.blocks.push(handler); } else { block.builders.init.addBlock(handler); } diff --git a/src/generators/dom/visitors/IfBlock.ts b/src/generators/dom/visitors/IfBlock.ts index 75b88e363f..42fe054439 100644 --- a/src/generators/dom/visitors/IfBlock.ts +++ b/src/generators/dom/visitors/IfBlock.ts @@ -226,20 +226,22 @@ function compound( dynamic, { name, anchor, params, hasElse, if_name } ) { - const get_block = block.getUniqueName(`get_block`); + const select_block = generator.getUniqueName(`select_block`); const current_block = block.getUniqueName(`current_block`); const current_block_and = hasElse ? '' : `${current_block} && `; - block.builders.init.addBlock(deindent` - function ${get_block} ( ${params} ) { + generator.blocks.push(deindent` + function ${select_block} ( ${params} ) { ${branches .map(({ condition, block }) => { return `${condition ? `if ( ${condition} ) ` : ''}return ${block};`; }) .join('\n')} } + `); - var ${current_block} = ${get_block}( ${params} ); + block.builders.init.addBlock(deindent` + var ${current_block} = ${select_block}( ${params} ); var ${name} = ${current_block_and}${current_block}( ${params}, #component ); `); @@ -272,7 +274,7 @@ function compound( if (dynamic) { block.builders.update.addBlock(deindent` - if ( ${current_block} === ( ${current_block} = ${get_block}( ${params} ) ) && ${name} ) { + if ( ${current_block} === ( ${current_block} = ${select_block}( ${params} ) ) && ${name} ) { ${name}.update( changed, ${params} ); } else { ${changeBlock} @@ -280,7 +282,7 @@ function compound( `); } else { block.builders.update.addBlock(deindent` - if ( ${current_block} !== ( ${current_block} = ${get_block}( ${params} ) ) ) { + if ( ${current_block} !== ( ${current_block} = ${select_block}( ${params} ) ) ) { ${changeBlock} } `); @@ -302,7 +304,7 @@ function compoundWithOutros( dynamic, { name, anchor, params, hasElse } ) { - const get_block = block.getUniqueName(`get_block`); + const select_block = block.getUniqueName(`select_block`); const current_block_index = block.getUniqueName(`current_block_index`); const previous_block_index = block.getUniqueName(`previous_block_index`); const if_block_creators = block.getUniqueName(`if_block_creators`); @@ -322,7 +324,7 @@ function compoundWithOutros( var ${if_blocks} = []; - function ${get_block} ( ${params} ) { + function ${select_block} ( ${params} ) { ${branches .map(({ condition, block }, i) => { return `${condition ? `if ( ${condition} ) ` : ''}return ${block @@ -335,12 +337,12 @@ function compoundWithOutros( if (hasElse) { block.builders.init.addBlock(deindent` - ${current_block_index} = ${get_block}( ${params} ); + ${current_block_index} = ${select_block}( ${params} ); ${name} = ${if_blocks}[ ${current_block_index} ] = ${if_block_creators}[ ${current_block_index} ]( ${params}, #component ); `); } else { block.builders.init.addBlock(deindent` - if ( ~( ${current_block_index} = ${get_block}( ${params} ) ) ) { + if ( ~( ${current_block_index} = ${select_block}( ${params} ) ) ) { ${name} = ${if_blocks}[ ${current_block_index} ] = ${if_block_creators}[ ${current_block_index} ]( ${params}, #component ); } `); @@ -395,7 +397,7 @@ function compoundWithOutros( if (dynamic) { block.builders.update.addBlock(deindent` var ${previous_block_index} = ${current_block_index}; - ${current_block_index} = ${get_block}( ${params} ); + ${current_block_index} = ${select_block}( ${params} ); if ( ${current_block_index} === ${previous_block_index} ) { ${if_current_block_index}${if_blocks}[ ${current_block_index} ].update( changed, ${params} ); } else { @@ -405,7 +407,7 @@ function compoundWithOutros( } else { block.builders.update.addBlock(deindent` var ${previous_block_index} = ${current_block_index}; - ${current_block_index} = ${get_block}( ${params} ); + ${current_block_index} = ${select_block}( ${params} ); if ( ${current_block_index} !== ${previous_block_index} ) { ${changeBlock} } diff --git a/test/js/samples/if-block-no-update/expected-bundle.js b/test/js/samples/if-block-no-update/expected-bundle.js index 51895c4d5b..bc0a724ccf 100644 --- a/test/js/samples/if-block-no-update/expected-bundle.js +++ b/test/js/samples/if-block-no-update/expected-bundle.js @@ -138,12 +138,7 @@ var proto = { function create_main_fragment ( state, component ) { var if_block_anchor; - function get_block ( state ) { - if ( state.foo ) return create_if_block; - return create_if_block_1; - } - - var current_block = get_block( state ); + var current_block = select_block( state ); var if_block = current_block( state, component ); return { @@ -158,7 +153,7 @@ function create_main_fragment ( state, component ) { }, update: function ( changed, state ) { - if ( current_block !== ( current_block = get_block( state ) ) ) { + if ( current_block !== ( current_block = select_block( state ) ) ) { if_block.unmount(); if_block.destroy(); if_block = current_block( state, component ); @@ -222,6 +217,11 @@ function create_if_block_1 ( state, component ) { }; } +function select_block ( state ) { + if ( state.foo ) return create_if_block; + return create_if_block_1; +} + function SvelteComponent ( options ) { options = options || {}; this._state = options.data || {}; diff --git a/test/js/samples/if-block-no-update/expected.js b/test/js/samples/if-block-no-update/expected.js index 2d8972ad5e..795dc8f200 100644 --- a/test/js/samples/if-block-no-update/expected.js +++ b/test/js/samples/if-block-no-update/expected.js @@ -3,12 +3,7 @@ import { appendNode, assign, createComment, createElement, createText, detachNod function create_main_fragment ( state, component ) { var if_block_anchor; - function get_block ( state ) { - if ( state.foo ) return create_if_block; - return create_if_block_1; - } - - var current_block = get_block( state ); + var current_block = select_block( state ); var if_block = current_block( state, component ); return { @@ -23,7 +18,7 @@ function create_main_fragment ( state, component ) { }, update: function ( changed, state ) { - if ( current_block !== ( current_block = get_block( state ) ) ) { + if ( current_block !== ( current_block = select_block( state ) ) ) { if_block.unmount(); if_block.destroy(); if_block = current_block( state, component ); @@ -87,6 +82,11 @@ function create_if_block_1 ( state, component ) { }; } +function select_block ( state ) { + if ( state.foo ) return create_if_block; + return create_if_block_1; +} + function SvelteComponent ( options ) { options = options || {}; this._state = options.data || {};