twing
Version:
First-class Twig engine for Node.js
66 lines (65 loc) • 2.27 kB
JavaScript
;
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;