mirror of https://github.com/sveltejs/svelte
parent
0050871197
commit
f88788cc29
@ -1,6 +1,6 @@
|
||||
import visitors from './visitors/index.js';
|
||||
|
||||
export default function visit ( generator, fragment, state, node ) {
|
||||
export default function visit ( generator, block, state, node ) {
|
||||
const visitor = visitors[ node.type ];
|
||||
visitor( generator, fragment, state, node );
|
||||
visitor( generator, block, state, node );
|
||||
}
|
@ -1,18 +1,18 @@
|
||||
import deindent from '../../../utils/deindent.js';
|
||||
|
||||
export default function visitMustacheTag ( generator, fragment, state, node ) {
|
||||
const name = fragment.getUniqueName( 'text' );
|
||||
export default function visitMustacheTag ( generator, block, state, node ) {
|
||||
const name = block.getUniqueName( 'text' );
|
||||
|
||||
const { snippet } = generator.contextualise( fragment, node.expression );
|
||||
const { snippet } = generator.contextualise( block, node.expression );
|
||||
|
||||
fragment.builders.create.addLine( `var last_${name} = ${snippet};` );
|
||||
fragment.addElement( name, `${generator.helper( 'createText' )}( last_${name} )`, state.parentNode, true );
|
||||
block.builders.create.addLine( `var last_${name} = ${snippet};` );
|
||||
block.addElement( name, `${generator.helper( 'createText' )}( last_${name} )`, state.parentNode, true );
|
||||
|
||||
if ( !fragment.tmp ) fragment.tmp = fragment.getUniqueName( 'tmp' );
|
||||
if ( !block.tmp ) block.tmp = block.getUniqueName( 'tmp' );
|
||||
|
||||
fragment.builders.update.addBlock( deindent`
|
||||
if ( ( ${fragment.tmp} = ${snippet} ) !== last_${name} ) {
|
||||
${name}.data = last_${name} = ${fragment.tmp};
|
||||
block.builders.update.addBlock( deindent`
|
||||
if ( ( ${block.tmp} = ${snippet} ) !== last_${name} ) {
|
||||
${name}.data = last_${name} = ${block.tmp};
|
||||
}
|
||||
` );
|
||||
}
|
@ -1,39 +1,39 @@
|
||||
import deindent from '../../../utils/deindent.js';
|
||||
|
||||
export default function visitRawMustacheTag ( generator, fragment, state, node ) {
|
||||
const name = fragment.getUniqueName( 'raw' );
|
||||
export default function visitRawMustacheTag ( generator, block, state, node ) {
|
||||
const name = block.getUniqueName( 'raw' );
|
||||
|
||||
const { snippet } = generator.contextualise( fragment, node.expression );
|
||||
const { snippet } = generator.contextualise( block, node.expression );
|
||||
|
||||
// we would have used comments here, but the `insertAdjacentHTML` api only
|
||||
// exists for `Element`s.
|
||||
const before = `${name}_before`;
|
||||
fragment.addElement( before, `${generator.helper( 'createElement' )}( 'noscript' )`, state.parentNode, true );
|
||||
block.addElement( before, `${generator.helper( 'createElement' )}( 'noscript' )`, state.parentNode, true );
|
||||
|
||||
const after = `${name}_after`;
|
||||
fragment.addElement( after, `${generator.helper( 'createElement' )}( 'noscript' )`, state.parentNode, true );
|
||||
block.addElement( after, `${generator.helper( 'createElement' )}( 'noscript' )`, state.parentNode, true );
|
||||
|
||||
const isToplevel = !state.parentNode;
|
||||
|
||||
fragment.builders.create.addLine( `var last_${name} = ${snippet};` );
|
||||
block.builders.create.addLine( `var last_${name} = ${snippet};` );
|
||||
const mountStatement = `${before}.insertAdjacentHTML( 'afterend', last_${name} );`;
|
||||
const detachStatement = `${generator.helper( 'detachBetween' )}( ${before}, ${after} );`;
|
||||
|
||||
if ( isToplevel ) {
|
||||
fragment.builders.mount.addLine( mountStatement );
|
||||
block.builders.mount.addLine( mountStatement );
|
||||
} else {
|
||||
fragment.builders.create.addLine( mountStatement );
|
||||
block.builders.create.addLine( mountStatement );
|
||||
}
|
||||
|
||||
if ( !fragment.tmp ) fragment.tmp = fragment.getUniqueName( 'tmp' );
|
||||
if ( !block.tmp ) block.tmp = block.getUniqueName( 'tmp' );
|
||||
|
||||
fragment.builders.update.addBlock( deindent`
|
||||
if ( ( ${fragment.tmp} = ${snippet} ) !== last_${name} ) {
|
||||
last_${name} = ${fragment.tmp};
|
||||
block.builders.update.addBlock( deindent`
|
||||
if ( ( ${block.tmp} = ${snippet} ) !== last_${name} ) {
|
||||
last_${name} = ${block.tmp};
|
||||
${detachStatement}
|
||||
${mountStatement}
|
||||
}
|
||||
` );
|
||||
|
||||
fragment.builders.detachRaw.addBlock( detachStatement );
|
||||
block.builders.detachRaw.addBlock( detachStatement );
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
export default function visitText ( generator, fragment, state, node ) {
|
||||
export default function visitText ( generator, block, state, node ) {
|
||||
if ( state.namespace && !/\S/.test( node.data ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
const name = fragment.getUniqueName( `text` );
|
||||
fragment.addElement( name, `${generator.helper( 'createText' )}( ${JSON.stringify( node.data )} )`, state.parentNode, false );
|
||||
const name = block.getUniqueName( `text` );
|
||||
block.addElement( name, `${generator.helper( 'createText' )}( ${JSON.stringify( node.data )} )`, state.parentNode, false );
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
export default function visitYieldTag ( generator, fragment, state ) {
|
||||
export default function visitYieldTag ( generator, block, state ) {
|
||||
const anchor = `yield_anchor`;
|
||||
fragment.createAnchor( anchor, state.parentNode );
|
||||
block.createAnchor( anchor, state.parentNode );
|
||||
|
||||
fragment.builders.mount.addLine(
|
||||
`${fragment.component}._yield && ${fragment.component}._yield.mount( ${state.parentNode || 'target'}, ${anchor} );`
|
||||
block.builders.mount.addLine(
|
||||
`${block.component}._yield && ${block.component}._yield.mount( ${state.parentNode || 'target'}, ${anchor} );`
|
||||
);
|
||||
|
||||
fragment.builders.destroy.addLine(
|
||||
`${fragment.component}._yield && ${fragment.component}._yield.destroy( detach );`
|
||||
block.builders.destroy.addLine(
|
||||
`${block.component}._yield && ${block.component}._yield.destroy( detach );`
|
||||
);
|
||||
}
|
Loading…
Reference in new issue