all files / liquidjs/tags/ include.js

100% Statements 24/24
100% Branches 4/4
100% Functions 3/3
100% Lines 24/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43     111×   14× 14× 13×   13× 13×       13×   13× 13× 13×   13×   13×   13× 13×     12× 12× 12×            
const Liquid = require('..');
const lexical = Liquid.lexical;
const withRE = new RegExp(`with\\s+(${lexical.value.source})`);
const assert = require('../src/util/assert.js');
 
module.exports = function(liquid) {
 
    liquid.registerTag('include', {
        parse: function(token){
            var match = lexical.value.exec(token.args);
            assert(match, `illegal token ${token.raw}`);
            this.value = match[0];
 
            match = withRE.exec(token.args);
            if(match){
                this.with = match[1];
            }
        },
        render: function(scope, hash) {
            var filepath = Liquid.evalValue(this.value, scope);
 
            var register = scope.get('liquid');
            var originBlocks = register.blocks;
            register.blocks = {};
 
            if(this.with){
                hash[filepath] = Liquid.evalValue(this.with, scope);
            }
            return liquid.getTemplate(filepath, register.root)
                .then((templates) => {
                    scope.push(hash);
                    return liquid.renderer.renderTemplates(templates, scope);
                })
                .then((html) => {
                    scope.pop();
                    register.blocks = originBlocks;
                    return html;
                });
        }
    });
 
};