mirror of https://github.com/sveltejs/svelte
parent
a2e96dbaba
commit
9fa133765d
@ -1,29 +1,24 @@
|
|||||||
import { snip } from '../../utils/snip';
|
|
||||||
import Renderer, { RenderOptions } from '../Renderer';
|
import Renderer, { RenderOptions } from '../Renderer';
|
||||||
import EachBlock from '../../nodes/EachBlock';
|
import EachBlock from '../../nodes/EachBlock';
|
||||||
|
import { x } from 'code-red';
|
||||||
|
|
||||||
export default function(node: EachBlock, renderer: Renderer, options: RenderOptions) {
|
export default function(node: EachBlock, renderer: Renderer, options: RenderOptions) {
|
||||||
const snippet = snip(node.expression);
|
const args = [node.context_node];
|
||||||
|
if (node.index) args.push({ type: 'Identifier', name: node.index });
|
||||||
const { start, end } = node.context_node as any;
|
|
||||||
|
|
||||||
const ctx = node.index
|
|
||||||
? `([✂${start}-${end}✂], ${node.index})`
|
|
||||||
: `([✂${start}-${end}✂])`;
|
|
||||||
|
|
||||||
const open = `\${${node.else ? `${snippet}.length ? ` : ''}@each(${snippet}, ${ctx} => \``;
|
|
||||||
renderer.append(open);
|
|
||||||
|
|
||||||
|
renderer.push();
|
||||||
renderer.render(node.children, options);
|
renderer.render(node.children, options);
|
||||||
|
const result = renderer.pop();
|
||||||
|
|
||||||
const close = `\`)`;
|
const consequent = x`@each(${node.expression.node}, (${args}) => ${result})`;
|
||||||
renderer.append(close);
|
|
||||||
|
|
||||||
if (node.else) {
|
if (node.else) {
|
||||||
renderer.append(` : \``);
|
renderer.push();
|
||||||
renderer.render(node.else.children, options);
|
renderer.render(node.else.children, options);
|
||||||
renderer.append(`\``);
|
const alternate = renderer.pop();
|
||||||
}
|
|
||||||
|
|
||||||
renderer.append('}');
|
renderer.add_expression(x`${node.expression.node}.length ? ${consequent} : ${alternate}`);
|
||||||
|
} else {
|
||||||
|
renderer.add_expression(consequent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import Renderer, { RenderOptions } from '../Renderer';
|
import Renderer, { RenderOptions } from '../Renderer';
|
||||||
import Head from '../../nodes/Head';
|
import Head from '../../nodes/Head';
|
||||||
|
import { x } from 'code-red';
|
||||||
|
|
||||||
export default function(node: Head, renderer: Renderer, options: RenderOptions) {
|
export default function(node: Head, renderer: Renderer, options: RenderOptions) {
|
||||||
renderer.append('${($$result.head += `');
|
renderer.push();
|
||||||
|
|
||||||
renderer.render(node.children, options);
|
renderer.render(node.children, options);
|
||||||
|
const result = renderer.pop();
|
||||||
|
|
||||||
renderer.append('`, "")}');
|
renderer.add_expression(x`($$result.head += ${result}, "")`);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { snip } from '../../utils/snip';
|
|
||||||
import Renderer, { RenderOptions } from '../Renderer';
|
import Renderer, { RenderOptions } from '../Renderer';
|
||||||
import RawMustacheTag from '../../nodes/RawMustacheTag';
|
import RawMustacheTag from '../../nodes/RawMustacheTag';
|
||||||
|
|
||||||
export default function(node: RawMustacheTag, renderer: Renderer, _options: RenderOptions) {
|
export default function(node: RawMustacheTag, renderer: Renderer, _options: RenderOptions) {
|
||||||
renderer.append('${' + snip(node.expression) + '}');
|
renderer.add_expression(node.expression.node);
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
import { snip } from '../../utils/snip';
|
|
||||||
import IfBlock from '../../nodes/IfBlock';
|
import IfBlock from '../../nodes/IfBlock';
|
||||||
import Renderer, { RenderOptions } from '../Renderer';
|
import Renderer, { RenderOptions } from '../Renderer';
|
||||||
export default function(node: IfBlock, renderer: Renderer, options: RenderOptions) {
|
import { x } from 'code-red';
|
||||||
const snippet = snip(node.expression);
|
|
||||||
|
|
||||||
renderer.append('${ ' + snippet + ' ? `');
|
export default function(node: IfBlock, renderer: Renderer, options: RenderOptions) {
|
||||||
|
const condition = node.expression.node;
|
||||||
|
|
||||||
|
renderer.push();
|
||||||
renderer.render(node.children, options);
|
renderer.render(node.children, options);
|
||||||
|
const consequent = renderer.pop();
|
||||||
|
|
||||||
renderer.append('` : `');
|
renderer.push();
|
||||||
|
if (node.else) renderer.render(node.else.children, options);
|
||||||
if (node.else) {
|
const alternate = renderer.pop();
|
||||||
renderer.render(node.else.children, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
renderer.append('` }');
|
renderer.add_expression(x`${condition} ? ${consequent} : ${alternate}`);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,21 @@
|
|||||||
import Let from '../../../nodes/Let';
|
import Let from '../../../nodes/Let';
|
||||||
|
import { ObjectPattern } from 'estree';
|
||||||
|
|
||||||
export function get_slot_scope(lets: Let[]) {
|
export function get_slot_scope(lets: Let[]): ObjectPattern {
|
||||||
if (lets.length === 0) return '';
|
if (lets.length === 0) return null;
|
||||||
return `{ ${lets.map(l => l.value ? `${l.name}: ${l.value}` : l.name).join(', ')} }`;
|
|
||||||
|
return {
|
||||||
|
type: 'ObjectPattern',
|
||||||
|
properties: lets.map(l => {
|
||||||
|
return {
|
||||||
|
type: 'Property',
|
||||||
|
kind: 'init',
|
||||||
|
method: false,
|
||||||
|
shorthand: false,
|
||||||
|
computed: false,
|
||||||
|
key: l.name,
|
||||||
|
value: l.value || l.name
|
||||||
|
};
|
||||||
|
})
|
||||||
|
};
|
||||||
}
|
}
|
Loading…
Reference in new issue