baby steps...

pull/453/head
Rich Harris 9 years ago
parent 3006a245af
commit 063e76f322

@ -427,10 +427,6 @@ export default class Generator {
}
push ( fragment ) {
const newFragment = Object.assign( {}, this.current, fragment, {
parent: this.current
});
this.current = newFragment;
this.current = fragment;
}
}

@ -0,0 +1,9 @@
export default class Fragment {
constructor ( options ) {
Object.assign( this, options );
}
child ( options ) {
return new Fragment( Object.assign( {}, this, options, { parent: this } ) );
}
}

@ -3,6 +3,7 @@ import getBuilders from './utils/getBuilders.js';
import CodeBuilder from '../../utils/CodeBuilder.js';
import visit from './visit.js';
import Generator from '../Generator.js';
import Fragment from './Fragment.js';
import * as shared from '../../shared/index.js';
class DomGenerator extends Generator {
@ -116,7 +117,7 @@ class DomGenerator extends Generator {
}
generateBlock ( node, name, type ) {
this.push({
const childFragment = this.current.child({
type,
name,
target: 'target',
@ -125,6 +126,8 @@ class DomGenerator extends Generator {
getUniqueName: this.getUniqueNameMaker( this.current.params )
});
this.push( childFragment );
// walk the children here
node.children.forEach( node => visit( node, this ) );
this.addRenderer( this.current );
@ -156,8 +159,9 @@ export default function dom ( parsed, source, options ) {
const getUniqueName = generator.getUniqueNameMaker( [ 'root' ] );
const component = getUniqueName( 'component' );
generator.push({
const mainFragment = new Fragment({
type: 'block',
generator,
name: generator.alias( 'create_main_fragment' ),
namespace,
target: 'target',
@ -174,14 +178,15 @@ export default function dom ( parsed, source, options ) {
listNames: new Map(),
builders: getBuilders(),
getUniqueName,
getUniqueName
});
generator.push( mainFragment );
parsed.html.children.forEach( node => {
visit( node, generator );
});
generator.addRenderer( generator.pop() );
generator.addRenderer( mainFragment );
const builders = {
main: new CodeBuilder(),

@ -158,7 +158,7 @@ export default function visitComponent ( generator, node ) {
current.builders.create.addBlock( local.create );
if ( !local.update.isEmpty() ) current.builders.update.addBlock( local.update );
generator.push({
const childFragment = generator.current.child({
type: 'component',
namespace: local.namespace,
target: name,
@ -166,6 +166,7 @@ export default function visitComponent ( generator, node ) {
localElementDepth: current.localElementDepth + 1,
key: null
});
generator.push( childFragment );
generator.elementDepth += 1;

@ -192,7 +192,7 @@ export default function visitEachBlock ( generator, node ) {
const getUniqueName = generator.getUniqueNameMaker( blockParams );
generator.push({
const childFragment = generator.current.child({
type: 'block',
name: renderer,
target: 'target',
@ -212,9 +212,11 @@ export default function visitEachBlock ( generator, node ) {
params: blockParams,
builders: getBuilders(),
getUniqueName,
getUniqueName
});
generator.push( childFragment );
node.children.forEach( child => {
visit( child, generator );
});

@ -98,7 +98,7 @@ export default function visitElement ( generator, node ) {
generator.createMountStatement( name );
generator.push({
const childFragment = generator.current.child({
type: 'element',
namespace: local.namespace,
target: name,
@ -107,6 +107,8 @@ export default function visitElement ( generator, node ) {
key: null
});
generator.push( childFragment );
generator.elementDepth += 1;
node.children.forEach( child => {

@ -1,6 +1,7 @@
export default {
html: '<h1>Just some static HTML</h1>',
test: function ( assert, component, target, window ) {
test ( assert, component, target, window ) {
const newComp = new window.SvelteComponent();
assert.equal(newComp instanceof window.SvelteComponent, true);
}

Loading…
Cancel
Save