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