UNPKG

twing

Version:

First-class Twig engine for Node.js

66 lines (65 loc) 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIfTagHandler = void 0; const node_1 = require("../node"); const if_1 = require("../node/if"); /** * Tests a condition. * * <pre> * {% if users %} * <ul> * {% for user in users %} * <li>{{ user.username|e }}</li> * {% endfor %} * </ul> * {% endif %} * </pre> */ const createIfTagHandler = () => { const tag = 'if'; const decideIfFork = (token) => { return token.test("NAME", ['elseif', 'else', 'endif']); }; return { tag, initialize: (parser) => { return (token, stream) => { const { line, column } = token; let expression = parser.parseExpression(stream); stream.expect("TAG_END"); let index = 0; let body = parser.subparse(stream, tag, decideIfFork); const tests = { [index++]: expression, [index++]: body }; let elseNode = null; let end = stream.isEOF(); while (!end) { switch (stream.next().value) { case 'else': stream.expect("TAG_END"); elseNode = parser.subparse(stream, tag, (token) => { return token.test("NAME", 'endif'); }); break; case 'elseif': expression = parser.parseExpression(stream); stream.expect("TAG_END"); body = parser.subparse(stream, tag, decideIfFork); tests[index++] = expression; tests[index++] = body; break; case 'endif': end = true; break; } } stream.expect("TAG_END"); return (0, if_1.createIfNode)((0, node_1.createNode)(tests), elseNode, line, column, tag); }; } }; }; exports.createIfTagHandler = createIfTagHandler;