free-swig
Version:
A simple, powerful, and extendable templating engine for node.js, similar to Django, Jinja2, and Twig.
68 lines (62 loc) • 1.34 kB
JavaScript
/**
* 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 '';
}
const parentFile = args[0];
const breaker = true;
const l = parents.length;
let i = 0;
let parent;
let block;
for (i; i < l; i += 1) {
parent = parents[i];
if (!parent.blocks || !parent.blocks.hasOwnProperty(blockName)) {
continue;
}
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;
};