all files / liquidjs/tags/ unless.js

100% Statements 15/15
100% Branches 2/2
100% Functions 3/3
100% Lines 15/15
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   111×                              
const Liquid = require('..');
 
module.exports = function(liquid) {
    liquid.registerTag('unless', {
        parse: function(tagToken, remainTokens) {
            this.templates = [];
            this.elseTemplates = [];
            var p, stream = liquid.parser.parseStream(remainTokens)
                .on('start', x => {
                    p = this.templates;
                    this.cond = tagToken.args;
                })
                .on('tag:else', token => p = this.elseTemplates)
                .on('tag:endunless', token => stream.stop())
                .on('template', tpl => p.push(tpl))
                .on('end', x => {
                    throw new Error(`tag ${tagToken.raw} not closed`);
                });
 
            stream.start();
        },
 
        render: function(scope, hash) {
            var cond = Liquid.evalExp(this.cond, scope);
            return Liquid.isFalsy(cond) ?
                liquid.renderer.renderTemplates(this.templates, scope) :
                liquid.renderer.renderTemplates(this.elseTemplates, scope);
        }
    });
};