UNPKG

twing

Version:

First-class Twig engine for Node.js

58 lines (57 loc) 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createEmbedTagHandler = void 0; const include_1 = require("./include"); const embed_1 = require("../node/include/embed"); const twig_lexer_1 = require("twig-lexer"); const createEmbedTagHandler = () => { const tag = 'embed'; return { tag, initialize: (parser) => { return (token, stream) => { const { line, column } = token; let parent = parser.parseExpression(stream); let embedArguments = (0, include_1.parseArguments)(parser, stream, line, column); let variables = embedArguments.variables; let only = embedArguments.only; let ignoreMissing = embedArguments.ignoreMissing; let parentToken; let fakeParentToken; parentToken = fakeParentToken = new twig_lexer_1.Token("STRING", '__parent__', token.line, token.column); if (parent.type === "constant") { parentToken = new twig_lexer_1.Token("STRING", parent.attributes.value, token.line, token.column); } else if (parent.type === "name") { parentToken = new twig_lexer_1.Token("NAME", parent.attributes.name, token.line, token.column); } // inject a fake parent to make the parent() function work stream.injectTokens([ new twig_lexer_1.Token("TAG_START", '', token.line, token.column), new twig_lexer_1.Token("NAME", 'extends', token.line, token.column), parentToken, new twig_lexer_1.Token("TAG_END", '', token.line, token.column), ]); let module = parser.parse(stream, tag, (token) => { return token.test("NAME", 'endembed'); }); stream.next(); // override the parent with the correct one if (fakeParentToken === parentToken) { module.children.parent = parent; } parser.embedTemplate(module); stream.expect("TAG_END"); const { index } = module.attributes; return (0, embed_1.createEmbedNode)({ index, only, ignoreMissing }, { variables }, token.line, token.column, tag); }; } }; }; exports.createEmbedTagHandler = createEmbedTagHandler;