factor generateBlock out as a generator helper function

pull/120/merge
Arpad Borsos 8 years ago
parent fd43dfc6d6
commit b5216999f3
No known key found for this signature in database
GPG Key ID: 908EDF65263368B4

@ -52,6 +52,28 @@ export default function generate ( parsed, source, options, names ) {
return name; return name;
}, },
generateBlock ( node, name ) {
generator.push({
name,
target: 'target',
localElementDepth: 0,
initStatements: [],
mountStatements: [],
updateStatements: [],
detachStatements: [],
teardownStatements: [],
getUniqueName: generator.getUniqueNameMaker()
});
// walk the children here
node.children.forEach( generator.visit );
generator.addRenderer( generator.current );
generator.pop();
// unset the children, to avoid them being visited again
node.children = [];
},
addRenderer ( fragment ) { addRenderer ( fragment ) {
if ( fragment.autofocus ) { if ( fragment.autofocus ) {
fragment.initStatements.push( `${fragment.autofocus}.focus();` ); fragment.initStatements.push( `${fragment.autofocus}.focus();` );

@ -30,31 +30,12 @@ export default {
`target: ${!isToplevel ? generator.current.target: 'null'}`, `target: ${!isToplevel ? generator.current.target: 'null'}`,
'root: component.root || component' 'root: component.root || component'
]; ];
// Component has children
// Component has children, put them in a separate {{yield}} block
if ( hasChildren ) { if ( hasChildren ) {
const yieldName = generator.current.getUniqueName( `render${name}YieldFragment` ); const yieldName = generator.current.getUniqueName( `render${name}YieldFragment` );
// {{YIELD STUFF}} generator.generateBlock( node, yieldName );
generator.push({
name: yieldName,
target: 'target',
localElementDepth: 0,
initStatements: [],
mountStatements: [],
updateStatements: [],
detachStatements: [],
teardownStatements: [],
getUniqueName: generator.getUniqueNameMaker()
});
node.children.forEach( generator.visit );
generator.addRenderer( generator.current );
generator.pop();
// Don't render children twice
node.children = [];
generator.current.initStatements.push(`var ${name}_yieldFragment = ${yieldName}( root, component );`); generator.current.initStatements.push(`var ${name}_yieldFragment = ${yieldName}( root, component );`);
generator.current.updateStatements.push(`${name}_yieldFragment.update ( changed, root );`); generator.current.updateStatements.push(`${name}_yieldFragment.update ( changed, root );`);

@ -101,22 +101,7 @@ export default {
} }
if ( node.else ) { if ( node.else ) {
generator.push({ generator.generateBlock( node.else, renderElse );
name: renderElse,
target: 'target',
localElementDepth: 0,
initStatements: [],
mountStatements: [],
updateStatements: [],
detachStatements: [],
teardownStatements: [],
getUniqueName: generator.getUniqueNameMaker()
});
node.else.children.forEach( generator.visit );
generator.addRenderer( generator.current );
generator.pop();
} }
const indexNames = Object.assign( {}, generator.current.indexNames ); const indexNames = Object.assign( {}, generator.current.indexNames );

@ -1,28 +1,5 @@
import deindent from '../utils/deindent.js'; import deindent from '../utils/deindent.js';
// collect all the conditions and blocks in the if/elseif/else chain
function generateBlock ( generator, node, name ) {
// walk the children here
generator.push({
name,
target: 'target',
localElementDepth: 0,
initStatements: [],
mountStatements: [],
updateStatements: [],
detachStatements: [],
teardownStatements: [],
getUniqueName: generator.getUniqueNameMaker()
});
node.children.forEach( generator.visit );
generator.addRenderer( generator.current );
generator.pop();
// unset the children, to avoid them being visited again
node.children = [];
}
function getConditionsAndBlocks ( generator, node, _name, i = 0 ) { function getConditionsAndBlocks ( generator, node, _name, i = 0 ) {
generator.addSourcemapLocations( node.expression ); generator.addSourcemapLocations( node.expression );
const name = `${_name}_${i}`; const name = `${_name}_${i}`;
@ -31,7 +8,7 @@ function getConditionsAndBlocks ( generator, node, _name, i = 0 ) {
condition: generator.contextualise( node.expression ).snippet, condition: generator.contextualise( node.expression ).snippet,
block: name block: name
}]; }];
generateBlock( generator, node, name ); generator.generateBlock( node, name );
if ( node.else && node.else.children.length === 1 && if ( node.else && node.else.children.length === 1 &&
node.else.children[0].type === 'IfBlock' ) { node.else.children[0].type === 'IfBlock' ) {
@ -44,7 +21,7 @@ function getConditionsAndBlocks ( generator, node, _name, i = 0 ) {
block: node.else ? name : null, block: node.else ? name : null,
}); });
if (node.else) { if (node.else) {
generateBlock( generator, node.else, name ); generator.generateBlock( node.else, name );
} }
} }
return conditionsAndBlocks; return conditionsAndBlocks;

Loading…
Cancel
Save