UNPKG

swig

Version:

A simple, powerful, and extendable templating engine for node.js and browsers, similar to Django, Jinja2, and Twig.

52 lines (46 loc) 1.29 kB
/** * Inject the content from the parent template's block of the same name into the current block. * * See <a href="#inheritance">Template Inheritance</a> for more information. * * @alias parent * * @example * {% extends "./foo.html" %} * {% block content %} * My content. * {% parent %} * {% endblock %} * */ exports.compile = function (compiler, args, content, parents, options, blockName) { if (!parents || !parents.length) { return ''; } var parentFile = args[0], breaker = true, l = parents.length, i = 0, parent, block; for (i; i < l; i += 1) { parent = parents[i]; if (!parent.blocks || !parent.blocks.hasOwnProperty(blockName)) { continue; } // Silly JSLint "Strange Loop" requires return to be in a conditional if (breaker && parentFile !== parent.name) { block = parent.blocks[blockName]; return block.compile(compiler, [blockName], block.content, parents.slice(i + 1), options) + '\n'; } } }; exports.parse = function (str, line, parser, types, stack, opts) { parser.on('*', function (token) { throw new Error('Unexpected argument "' + token.match + '" on line ' + line + '.'); }); parser.on('end', function () { this.out.push(opts.filename); }); return true; };