mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-15 12:20:40 -07:00
40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
const _ = require('lodash');
|
|
const lexical = require('./lexical.js');
|
|
const error = require('./error.js');
|
|
|
|
var scope = {
|
|
get: function(str) {
|
|
str = str && str.trim();
|
|
if(!str) return '';
|
|
|
|
if (lexical.isLiteral(str)) {
|
|
var a = lexical.parseLiteral(str);
|
|
return lexical.parseLiteral(str);
|
|
}
|
|
if (lexical.isVariable(str)) {
|
|
for (var i = this.scopes.length - 1; i >= 0; i--) {
|
|
var v = _.get(this.scopes[i], str);
|
|
if (v !== undefined) return v;
|
|
}
|
|
}
|
|
return '';
|
|
},
|
|
set: function(k, v){
|
|
this.scopes[this.scopes.length-1][k] = v;
|
|
return this;
|
|
},
|
|
push: function(ctx) {
|
|
if(!ctx) error(`trying to push ${ctx} into scopes`);
|
|
return this.scopes.push(ctx);
|
|
},
|
|
pop: function() {
|
|
return this.scopes.pop();
|
|
}
|
|
};
|
|
|
|
exports.factory = function(_ctx) {
|
|
var ctx = Object.create(scope);
|
|
ctx.scopes = _ctx ? [_ctx] : [];
|
|
return ctx;
|
|
};
|