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 EachBlock from '../../nodes/EachBlock';
|
||||
import { x } from 'code-red';
|
||||
|
||||
export default function(node: EachBlock, renderer: Renderer, options: RenderOptions) {
|
||||
const snippet = snip(node.expression);
|
||||
|
||||
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);
|
||||
const args = [node.context_node];
|
||||
if (node.index) args.push({ type: 'Identifier', name: node.index });
|
||||
|
||||
renderer.push();
|
||||
renderer.render(node.children, options);
|
||||
const result = renderer.pop();
|
||||
|
||||
const close = `\`)`;
|
||||
renderer.append(close);
|
||||
const consequent = x`@each(${node.expression.node}, (${args}) => ${result})`;
|
||||
|
||||
if (node.else) {
|
||||
renderer.append(` : \``);
|
||||
renderer.push();
|
||||
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 Head from '../../nodes/Head';
|
||||
import { x } from 'code-red';
|
||||
|
||||
export default function(node: Head, renderer: Renderer, options: RenderOptions) {
|
||||
renderer.append('${($$result.head += `');
|
||||
|
||||
renderer.push();
|
||||
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 RawMustacheTag from '../../nodes/RawMustacheTag';
|
||||
|
||||
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 Renderer, { RenderOptions } from '../Renderer';
|
||||
export default function(node: IfBlock, renderer: Renderer, options: RenderOptions) {
|
||||
const snippet = snip(node.expression);
|
||||
import { x } from 'code-red';
|
||||
|
||||
renderer.append('${ ' + snippet + ' ? `');
|
||||
export default function(node: IfBlock, renderer: Renderer, options: RenderOptions) {
|
||||
const condition = node.expression.node;
|
||||
|
||||
renderer.push();
|
||||
renderer.render(node.children, options);
|
||||
const consequent = renderer.pop();
|
||||
|
||||
renderer.append('` : `');
|
||||
|
||||
if (node.else) {
|
||||
renderer.render(node.else.children, options);
|
||||
}
|
||||
renderer.push();
|
||||
if (node.else) renderer.render(node.else.children, options);
|
||||
const alternate = renderer.pop();
|
||||
|
||||
renderer.append('` }');
|
||||
renderer.add_expression(x`${condition} ? ${consequent} : ${alternate}`);
|
||||
}
|
||||
|
@ -1,6 +1,21 @@
|
||||
import Let from '../../../nodes/Let';
|
||||
import { ObjectPattern } from 'estree';
|
||||
|
||||
export function get_slot_scope(lets: Let[]) {
|
||||
if (lets.length === 0) return '';
|
||||
return `{ ${lets.map(l => l.value ? `${l.name}: ${l.value}` : l.name).join(', ')} }`;
|
||||
export function get_slot_scope(lets: Let[]): ObjectPattern {
|
||||
if (lets.length === 0) return null;
|
||||
|
||||
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