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;
},
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 ) {
if ( fragment.autofocus ) {
fragment.initStatements.push( `${fragment.autofocus}.focus();` );

@ -30,31 +30,12 @@ export default {
`target: ${!isToplevel ? generator.current.target: 'null'}`,
'root: component.root || component'
];
// Component has children
// Component has children, put them in a separate {{yield}} block
if ( hasChildren ) {
const yieldName = generator.current.getUniqueName( `render${name}YieldFragment` );
// {{YIELD STUFF}}
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.generateBlock( node, yieldName );
generator.current.initStatements.push(`var ${name}_yieldFragment = ${yieldName}( root, component );`);
generator.current.updateStatements.push(`${name}_yieldFragment.update ( changed, root );`);

@ -101,22 +101,7 @@ export default {
}
if ( node.else ) {
generator.push({
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();
generator.generateBlock( node.else, renderElse );
}
const indexNames = Object.assign( {}, generator.current.indexNames );

@ -1,28 +1,5 @@
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 ) {
generator.addSourcemapLocations( node.expression );
const name = `${_name}_${i}`;
@ -31,7 +8,7 @@ function getConditionsAndBlocks ( generator, node, _name, i = 0 ) {
condition: generator.contextualise( node.expression ).snippet,
block: name
}];
generateBlock( generator, node, name );
generator.generateBlock( node, name );
if ( node.else && node.else.children.length === 1 &&
node.else.children[0].type === 'IfBlock' ) {
@ -44,7 +21,7 @@ function getConditionsAndBlocks ( generator, node, _name, i = 0 ) {
block: node.else ? name : null,
});
if (node.else) {
generateBlock( generator, node.else, name );
generator.generateBlock( node.else, name );
}
}
return conditionsAndBlocks;

Loading…
Cancel
Save