ეს სკრიპტი არ უნდა იყოს პირდაპირ დაინსტალირებული. ეს ბიბლიოთეკაა, სხვა სკრიპტებისთვის უნდა ჩართეთ მეტა-დირექტივაში // @require https://update.greasyfork.org/scripts/440537/1021756/nunjucks.js
.
/*! Browser bundle of nunjucks 2.4.2 */
var nunjucks = function (e) {
function t(i) {
if (n[i]) return n[i].exports;
var r = n[i] = {exports: {}, id: i, loaded: !1};
return e[i].call(r.exports, r, r.exports, t), r.loaded = !0, r.exports
}
var n = {};
return t.m = e, t.c = n, t.p = "", t(0)
}([function (e, t, n) {
"use strict";
var i = n(1), r = n(2), s = n(15), o = n(14), a = n(3);
e.exports = {}, e.exports.Environment = r.Environment, e.exports.Template = r.Template, e.exports.Loader = s, e.exports.FileSystemLoader = o.FileSystemLoader, e.exports.PrecompiledLoader = o.PrecompiledLoader, e.exports.WebLoader = o.WebLoader, e.exports.compiler = n(7), e.exports.parser = n(8), e.exports.lexer = n(9), e.exports.runtime = n(12), e.exports.lib = i, e.exports.nodes = n(10), e.exports.installJinjaCompat = n(18);
var l;
e.exports.configure = function (e, t) {
t = t || {}, i.isObject(e) && (t = e, e = null);
var n;
return o.FileSystemLoader ? n = new o.FileSystemLoader(e, {
watch: t.watch,
noCache: t.noCache
}) : o.WebLoader && (n = new o.WebLoader(e, {
useCache: t.web && t.web.useCache,
async: t.web && t.web.async
})), l = new r.Environment(n, t), t && t.express && l.express(t.express), l
}, e.exports.compile = function (t, n, i, r) {
return l || e.exports.configure(), new e.exports.Template(t, n, i, r)
}, e.exports.render = function (t, n, i) {
return l || e.exports.configure(), l.render(t, n, i)
}, e.exports.renderString = function (t, n, i) {
return l || e.exports.configure(), l.renderString(t, n, i)
}, a && (e.exports.precompile = a.precompile, e.exports.precompileString = a.precompileString)
}, function (e, t) {
"use strict";
var n = Array.prototype, i = Object.prototype,
r = {"&": "&", '"': """, "'": "'", "<": "<", ">": ">"}, s = /[&"'<>]/g, o = function (e) {
return r[e]
}, t = e.exports = {};
t.prettifyError = function (e, n, i) {
if (i.Update || (i = new t.TemplateError(i)), i.Update(e), !n) {
var r = i;
i = new Error(r.message), i.name = r.name
}
return i
}, t.TemplateError = function (e, t, n) {
var i = this;
if (e instanceof Error) {
i = e, e = e.name + ": " + e.message;
try {
i.name = ""
} catch (r) {
i = this
}
} else Error.captureStackTrace && Error.captureStackTrace(i);
return i.name = "Template render error", i.message = e, i.lineno = t, i.colno = n, i.firstUpdate = !0, i.Update = function (e) {
var t = "(" + (e || "unknown path") + ")";
return this.firstUpdate && (this.lineno && this.colno ? t += " [Line " + this.lineno + ", Column " + this.colno + "]" : this.lineno && (t += " [Line " + this.lineno + "]")), t += "\n ", this.firstUpdate && (t += " "), this.message = t + (this.message || ""), this.firstUpdate = !1, this
}, i
}, t.TemplateError.prototype = Error.prototype, t.escape = function (e) {
return e.replace(s, o)
}, t.isFunction = function (e) {
return "[object Function]" === i.toString.call(e)
}, t.isArray = Array.isArray || function (e) {
return "[object Array]" === i.toString.call(e)
}, t.isString = function (e) {
return "[object String]" === i.toString.call(e)
}, t.isObject = function (e) {
return "[object Object]" === i.toString.call(e)
}, t.groupBy = function (e, n) {
for (var i = {}, r = t.isFunction(n) ? n : function (e) {
return e[n]
}, s = 0; s < e.length; s++) {
var o = e[s], a = r(o, s);
(i[a] || (i[a] = [])).push(o)
}
return i
}, t.toArray = function (e) {
return Array.prototype.slice.call(e)
}, t.without = function (e) {
var n = [];
if (!e) return n;
for (var i = -1, r = e.length, s = t.toArray(arguments).slice(1); ++i < r;) -1 === t.indexOf(s, e[i]) && n.push(e[i]);
return n
}, t.extend = function (e, t) {
for (var n in t) e[n] = t[n];
return e
}, t.repeat = function (e, t) {
for (var n = "", i = 0; t > i; i++) n += e;
return n
}, t.each = function (e, t, i) {
if (null != e) if (n.each && e.each === n.each) e.forEach(t, i); else if (e.length === +e.length) for (var r = 0, s = e.length; s > r; r++) t.call(i, e[r], r, e)
}, t.map = function (e, t) {
var i = [];
if (null == e) return i;
if (n.map && e.map === n.map) return e.map(t);
for (var r = 0; r < e.length; r++) i[i.length] = t(e[r], r);
return e.length === +e.length && (i.length = e.length), i
}, t.asyncIter = function (e, t, n) {
function i() {
r++, r < e.length ? t(e[r], r, i, n) : n()
}
var r = -1;
i()
}, t.asyncFor = function (e, n, i) {
function r() {
a++;
var t = s[a];
o > a ? n(t, e[t], a, o, r) : i()
}
var s = t.keys(e), o = s.length, a = -1;
r()
}, t.indexOf = Array.prototype.indexOf ? function (e, t, n) {
return Array.prototype.indexOf.call(e, t, n)
} : function (e, t, n) {
var i = this.length >>> 0;
for (n = +n || 0, Math.abs(n) === 1 / 0 && (n = 0), 0 > n && (n += i, 0 > n && (n = 0)); i > n; n++) if (e[n] === t) return n;
return -1
}, Array.prototype.map || (Array.prototype.map = function () {
throw new Error("map is unimplemented for this js engine")
}), t.keys = function (e) {
if (Object.prototype.keys) return e.keys();
var t = [];
for (var n in e) e.hasOwnProperty(n) && t.push(n);
return t
}, t.inOperator = function (e, n) {
if (t.isArray(n)) return -1 !== t.indexOf(n, e);
if (t.isObject(n)) return e in n;
if (t.isString(n)) return -1 !== n.indexOf(e);
throw new Error('Cannot use "in" operator to search for "' + e + '" in unexpected types.')
}
}, function (e, t, n) {
"use strict";
function i(e, t, n) {
o(function () {
e(t, n)
})
}
var r, s = n(3), o = n(4), a = n(1), l = n(6), c = n(7), h = n(13), u = n(14), p = n(12), f = n(17), m = p.Frame;
u.PrecompiledLoader = n(16);
var d = l.extend({
init: function (e, t) {
t = this.opts = t || {}, this.opts.dev = !!t.dev, this.opts.autoescape = null != t.autoescape ? t.autoescape : !0, this.opts.throwOnUndefined = !!t.throwOnUndefined, this.opts.trimBlocks = !!t.trimBlocks, this.opts.lstripBlocks = !!t.lstripBlocks, this.loaders = [], e ? this.loaders = a.isArray(e) ? e : [e] : u.FileSystemLoader ? this.loaders = [new u.FileSystemLoader("views")] : u.WebLoader && (this.loaders = [new u.WebLoader("/views")]), window.nunjucksPrecompiled && this.loaders.unshift(new u.PrecompiledLoader(window.nunjucksPrecompiled)), this.initCache(), this.globals = f(), this.filters = {}, this.asyncFilters = [], this.extensions = {}, this.extensionsList = [];
for (var n in h) this.addFilter(n, h[n])
}, initCache: function () {
a.each(this.loaders, function (e) {
e.cache = {}, "function" == typeof e.on && e.on("update", function (t) {
e.cache[t] = null
})
})
}, addExtension: function (e, t) {
return t._name = e, this.extensions[e] = t, this.extensionsList.push(t), this
}, removeExtension: function (e) {
var t = this.getExtension(e);
t && (this.extensionsList = a.without(this.extensionsList, t), delete this.extensions[e])
}, getExtension: function (e) {
return this.extensions[e]
}, hasExtension: function (e) {
return !!this.extensions[e]
}, addGlobal: function (e, t) {
return this.globals[e] = t, this
}, getGlobal: function (e) {
if ("undefined" == typeof this.globals[e]) throw new Error("global not found: " + e);
return this.globals[e]
}, addFilter: function (e, t, n) {
var i = t;
return n && this.asyncFilters.push(e), this.filters[e] = i, this
}, getFilter: function (e) {
if (!this.filters[e]) throw new Error("filter not found: " + e);
return this.filters[e]
}, resolveTemplate: function (e, t, n) {
var i = e.isRelative && t ? e.isRelative(n) : !1;
return i && e.resolve ? e.resolve(t, n) : n
}, getTemplate: function (e, t, n, i, s) {
var o = this, l = null;
if (e && e.raw && (e = e.raw), a.isFunction(n) && (s = n, n = null, t = t || !1), a.isFunction(t) && (s = t, t = !1), e instanceof r) l = e; else {
if ("string" != typeof e) throw new Error("template names must be a string: " + e);
for (var c = 0; c < this.loaders.length; c++) {
var h = this.resolveTemplate(this.loaders[c], n, e);
if (l = this.loaders[c].cache[h]) break
}
}
if (!l) {
var u, p = this, f = function (n, o) {
if (o || n || i || (n = new Error("template not found: " + e)), n) {
if (!s) throw n;
s(n)
} else {
var a;
o ? (a = new r(o.src, p, o.path, t), o.noCache || (o.loader.cache[e] = a)) : a = new r("", p, "", t), s ? s(null, a) : u = a
}
};
return a.asyncIter(this.loaders, function (t, i, r, s) {
function a(e, n) {
e ? s(e) : n ? (n.loader = t, s(null, n)) : r()
}
e = o.resolveTemplate(t, n, e), t.async ? t.getSource(e, a) : a(null, t.getSource(e))
}, f), u
}
return t && l.compile(), s ? void s(null, l) : l
}, express: function (e) {
function t(e, t) {
if (this.name = e, this.path = e, this.defaultEngine = t.defaultEngine, this.ext = s.extname(e), !this.ext && !this.defaultEngine) throw new Error("No default engine was specified and no extension was provided.");
this.ext || (this.name += this.ext = ("." !== this.defaultEngine[0] ? "." : "") + this.defaultEngine)
}
var n = this;
return t.prototype.render = function (e, t) {
n.render(this.name, e, t)
}, e.set("view", t), this
}, render: function (e, t, n) {
a.isFunction(t) && (n = t, t = null);
var r = null;
return this.getTemplate(e, function (e, s) {
if (e && n) i(n, e); else {
if (e) throw e;
r = s.render(t, n)
}
}), r
}, renderString: function (e, t, n, i) {
a.isFunction(n) && (i = n, n = {}), n = n || {};
var s = new r(e, this, n.path);
return s.render(t, i)
}
}), v = l.extend({
init: function (e, t, n) {
this.env = n || new d, this.ctx = {};
for (var i in e) e.hasOwnProperty(i) && (this.ctx[i] = e[i]);
this.blocks = {}, this.exported = [];
for (var r in t) this.addBlock(r, t[r])
}, lookup: function (e) {
return e in this.env.globals && !(e in this.ctx) ? this.env.globals[e] : this.ctx[e]
}, setVariable: function (e, t) {
this.ctx[e] = t
}, getVariables: function () {
return this.ctx
}, addBlock: function (e, t) {
return this.blocks[e] = this.blocks[e] || [], this.blocks[e].push(t), this
}, getBlock: function (e) {
if (!this.blocks[e]) throw new Error('unknown block "' + e + '"');
return this.blocks[e][0]
}, getSuper: function (e, t, n, i, r, s) {
var o = a.indexOf(this.blocks[t] || [], n), l = this.blocks[t][o + 1], c = this;
if (-1 === o || !l) throw new Error('no super block available for "' + t + '"');
l(e, c, i, r, s)
}, addExport: function (e) {
this.exported.push(e)
}, getExported: function () {
for (var e = {}, t = 0; t < this.exported.length; t++) {
var n = this.exported[t];
e[n] = this.ctx[n]
}
return e
}
});
r = l.extend({
init: function (e, t, n, i) {
if (this.env = t || new d, a.isObject(e)) switch (e.type) {
case"code":
this.tmplProps = e.obj;
break;
case"string":
this.tmplStr = e.obj
} else {
if (!a.isString(e)) throw new Error("src must be a string or an object describing the source");
this.tmplStr = e
}
if (this.path = n, i) {
var r = this;
try {
r._compile()
} catch (s) {
throw a.prettifyError(this.path, this.env.opts.dev, s)
}
} else this.compiled = !1
}, render: function (e, t, n) {
"function" == typeof e ? (n = e, e = {}) : "function" == typeof t && (n = t, t = null);
var r = !0;
t && (r = !1);
var s = this;
try {
s.compile()
} catch (o) {
var l = a.prettifyError(this.path, this.env.opts.dev, o);
if (n) return i(n, l);
throw l
}
var c = new v(e || {}, s.blocks, s.env), h = t ? t.push(!0) : new m;
h.topLevel = !0;
var u = null;
return s.rootRenderFunc(s.env, c, h || new m, p, function (e, t) {
if (e && (e = a.prettifyError(s.path, s.env.opts.dev, e)), n) r ? i(n, e, t) : n(e, t); else {
if (e) throw e;
u = t
}
}), u
}, getExported: function (e, t, n) {
"function" == typeof e && (n = e, e = {}), "function" == typeof t && (n = t, t = null);
try {
this.compile()
} catch (i) {
if (n) return n(i);
throw i
}
var r = t ? t.push() : new m;
r.topLevel = !0;
var s = new v(e || {}, this.blocks, this.env);
this.rootRenderFunc(this.env, s, r, p, function (e) {
e ? n(e, null) : n(null, s.getExported())
})
}, compile: function () {
this.compiled || this._compile()
}, _compile: function () {
var e;
if (this.tmplProps) e = this.tmplProps; else {
var t = c.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts),
n = new Function(t);
e = n()
}
this.blocks = this._getBlocks(e), this.rootRenderFunc = e.root, this.compiled = !0
}, _getBlocks: function (e) {
var t = {};
for (var n in e) "b_" === n.slice(0, 2) && (t[n.slice(2)] = e[n]);
return t
}
}), e.exports = {Environment: d, Template: r}
}, function (e, t) {
}, function (e, t, n) {
"use strict";
function i() {
if (l.length) throw l.shift()
}
function r(e) {
var t;
t = a.length ? a.pop() : new s, t.task = e, o(t)
}
function s() {
this.task = null
}
var o = n(5), a = [], l = [], c = o.makeRequestCallFromTimer(i);
e.exports = r, s.prototype.call = function () {
try {
this.task.call()
} catch (e) {
r.onerror ? r.onerror(e) : (l.push(e), c())
} finally {
this.task = null, a[a.length] = this
}
}
}, function (e, t) {
(function (t) {
"use strict";
function n(e) {
a.length || (o(), l = !0), a[a.length] = e
}
function i() {
for (; c < a.length;) {
var e = c;
if (c += 1, a[e].call(), c > h) {
for (var t = 0, n = a.length - c; n > t; t++) a[t] = a[t + c];
a.length -= c, c = 0
}
}
a.length = 0, c = 0, l = !1
}
function r(e) {
var t = 1, n = new u(e), i = document.createTextNode("");
return n.observe(i, {characterData: !0}), function () {
t = -t, i.data = t
}
}
function s(e) {
return function () {
function t() {
clearTimeout(n), clearInterval(i), e()
}
var n = setTimeout(t, 0), i = setInterval(t, 50)
}
}
e.exports = n;
var o, a = [], l = !1, c = 0, h = 1024, u = t.MutationObserver || t.WebKitMutationObserver;
o = "function" == typeof u ? r(i) : s(i), n.requestFlush = o, n.makeRequestCallFromTimer = s
}).call(t, function () {
return this
}())
}, function (e, t) {
"use strict";
function n(e, t, i) {
var r = function () {
};
r.prototype = e.prototype;
var s = new r, o = /xyz/.test(function () {
xyz
}) ? /\bparent\b/ : /.*/;
i = i || {};
for (var a in i) {
var l = i[a], c = s[a];
"function" == typeof c && "function" == typeof l && o.test(l) ? s[a] = function (e, t) {
return function () {
var n = this.parent;
this.parent = t;
var i = e.apply(this, arguments);
return this.parent = n, i
}
}(l, c) : s[a] = l
}
s.typename = t;
var h = function () {
s.init && s.init.apply(this, arguments)
};
return h.prototype = s, h.prototype.constructor = h, h.extend = function (e, t) {
return "object" == typeof e && (t = e, e = "anonymous"), n(h, e, t)
}, h
}
e.exports = n(Object, "Object", {})
}, function (e, t, n) {
"use strict";
function i(e) {
return function (t, n) {
this.compile(t.left, n), this.emit(e), this.compile(t.right, n)
}
}
var r = n(1), s = n(8), o = n(11), a = n(10), l = n(6), c = n(12).Frame,
h = {"==": "==", "!=": "!=", "<": "<", ">": ">", "<=": "<=", ">=": ">="}, u = l.extend({
init: function (e, t) {
this.templateName = e, this.codebuf = [], this.lastId = 0, this.buffer = null, this.bufferStack = [], this.scopeClosers = "", this.inBlock = !1, this.throwOnUndefined = t
},
fail: function (e, t, n) {
throw void 0 !== t && (t += 1), void 0 !== n && (n += 1), new r.TemplateError(e, t, n)
},
pushBufferId: function (e) {
this.bufferStack.push(this.buffer), this.buffer = e, this.emit("var " + this.buffer + ' = "";')
},
popBufferId: function () {
this.buffer = this.bufferStack.pop()
},
emit: function (e) {
this.codebuf.push(e)
},
emitLine: function (e) {
this.emit(e + "\n")
},
emitLines: function () {
r.each(r.toArray(arguments), function (e) {
this.emitLine(e)
}, this)
},
emitFuncBegin: function (e) {
this.buffer = "output", this.scopeClosers = "", this.emitLine("function " + e + "(env, context, frame, runtime, cb) {"), this.emitLine("var lineno = null;"), this.emitLine("var colno = null;"), this.emitLine("var " + this.buffer + ' = "";'), this.emitLine("try {")
},
emitFuncEnd: function (e) {
e || this.emitLine("cb(null, " + this.buffer + ");"), this.closeScopeLevels(), this.emitLine("} catch (e) {"), this.emitLine(" cb(runtime.handleError(e, lineno, colno));"), this.emitLine("}"), this.emitLine("}"), this.buffer = null
},
addScopeLevel: function () {
this.scopeClosers += "})"
},
closeScopeLevels: function () {
this.emitLine(this.scopeClosers + ";"), this.scopeClosers = ""
},
withScopedSyntax: function (e) {
var t = this.scopeClosers;
this.scopeClosers = "", e.call(this), this.closeScopeLevels(), this.scopeClosers = t
},
makeCallback: function (e) {
var t = this.tmpid();
return "function(" + t + (e ? "," + e : "") + ") {\nif(" + t + ") { cb(" + t + "); return; }"
},
tmpid: function () {
return this.lastId++, "t_" + this.lastId
},
_templateName: function () {
return null == this.templateName ? "undefined" : JSON.stringify(this.templateName)
},
_compileChildren: function (e, t) {
for (var n = e.children, i = 0, r = n.length; r > i; i++) this.compile(n[i], t)
},
_compileAggregate: function (e, t, n, i) {
n && this.emit(n);
for (var r = 0; r < e.children.length; r++) r > 0 && this.emit(","), this.compile(e.children[r], t);
i && this.emit(i)
},
_compileExpression: function (e, t) {
this.assertType(e, a.Literal, a.Symbol, a.Group, a.Array, a.Dict, a.FunCall, a.Caller, a.Filter, a.LookupVal, a.Compare, a.InlineIf, a.In, a.And, a.Or, a.Not, a.Add, a.Concat, a.Sub, a.Mul, a.Div, a.FloorDiv, a.Mod, a.Pow, a.Neg, a.Pos, a.Compare, a.NodeList), this.compile(e, t)
},
assertType: function (e) {
for (var t = r.toArray(arguments).slice(1), n = !1, i = 0; i < t.length; i++) e instanceof t[i] && (n = !0);
n || this.fail("assertType: invalid type: " + e.typename, e.lineno, e.colno)
},
compileCallExtension: function (e, t, n) {
var i = e.args, s = e.contentArgs, o = "boolean" == typeof e.autoescape ? e.autoescape : !0;
if (n || this.emit(this.buffer + " += runtime.suppressValue("), this.emit('env.getExtension("' + e.extName + '")["' + e.prop + '"]('), this.emit("context"), (i || s) && this.emit(","), i && (i instanceof a.NodeList || this.fail("compileCallExtension: arguments must be a NodeList, use `parser.parseSignature`"), r.each(i.children, function (e, n) {
this._compileExpression(e, t), (n !== i.children.length - 1 || s.length) && this.emit(",")
}, this)), s.length && r.each(s, function (e, n) {
if (n > 0 && this.emit(","), e) {
var i = this.tmpid();
this.emitLine("function(cb) {"), this.emitLine("if(!cb) { cb = function(err) { if(err) { throw err; }}}"), this.pushBufferId(i), this.withScopedSyntax(function () {
this.compile(e, t), this.emitLine("cb(null, " + i + ");")
}), this.popBufferId(), this.emitLine("return " + i + ";"), this.emitLine("}")
} else this.emit("null")
}, this), n) {
var l = this.tmpid();
this.emitLine(", " + this.makeCallback(l)), this.emitLine(this.buffer + " += runtime.suppressValue(" + l + ", " + o + " && env.opts.autoescape);"), this.addScopeLevel()
} else this.emit(")"), this.emit(", " + o + " && env.opts.autoescape);\n")
},
compileCallExtensionAsync: function (e, t) {
this.compileCallExtension(e, t, !0)
},
compileNodeList: function (e, t) {
this._compileChildren(e, t)
},
compileLiteral: function (e) {
if ("string" == typeof e.value) {
var t = e.value.replace(/\\/g, "\\\\");
t = t.replace(/"/g, '\\"'), t = t.replace(/\n/g, "\\n"), t = t.replace(/\r/g, "\\r"), t = t.replace(/\t/g, "\\t"), this.emit('"' + t + '"')
} else null === e.value ? this.emit("null") : this.emit(e.value.toString())
},
compileSymbol: function (e, t) {
var n, i = e.value;
(n = t.lookup(i)) ? this.emit(n) : this.emit('runtime.contextOrFrameLookup(context, frame, "' + i + '")')
},
compileGroup: function (e, t) {
this._compileAggregate(e, t, "(", ")")
},
compileArray: function (e, t) {
this._compileAggregate(e, t, "[", "]")
},
compileDict: function (e, t) {
this._compileAggregate(e, t, "{", "}")
},
compilePair: function (e, t) {
var n = e.key, i = e.value;
n instanceof a.Symbol ? n = new a.Literal(n.lineno, n.colno, n.value) : n instanceof a.Literal && "string" == typeof n.value || this.fail("compilePair: Dict keys must be strings or names", n.lineno, n.colno), this.compile(n, t), this.emit(": "), this._compileExpression(i, t)
},
compileInlineIf: function (e, t) {
this.emit("("), this.compile(e.cond, t), this.emit("?"), this.compile(e.body, t), this.emit(":"), null !== e.else_ ? this.compile(e.else_, t) : this.emit('""'), this.emit(")")
},
compileIn: function (e, t) {
this.emit("runtime.inOperator("), this.compile(e.left, t), this.emit(","), this.compile(e.right, t), this.emit(")")
},
compileOr: i(" || "),
compileAnd: i(" && "),
compileAdd: i(" + "),
compileConcat: i(' + "" + '),
compileSub: i(" - "),
compileMul: i(" * "),
compileDiv: i(" / "),
compileMod: i(" % "),
compileNot: function (e, t) {
this.emit("!"), this.compile(e.target, t)
},
compileFloorDiv: function (e, t) {
this.emit("Math.floor("), this.compile(e.left, t), this.emit(" / "), this.compile(e.right, t), this.emit(")")
},
compilePow: function (e, t) {
this.emit("Math.pow("), this.compile(e.left, t), this.emit(", "), this.compile(e.right, t), this.emit(")")
},
compileNeg: function (e, t) {
this.emit("-"), this.compile(e.target, t)
},
compilePos: function (e, t) {
this.emit("+"), this.compile(e.target, t)
},
compileCompare: function (e, t) {
this.compile(e.expr, t);
for (var n = 0; n < e.ops.length; n++) {
var i = e.ops[n];
this.emit(" " + h[i.type] + " "), this.compile(i.expr, t)
}
},
compileLookupVal: function (e, t) {
this.emit("runtime.memberLookup(("), this._compileExpression(e.target, t), this.emit("),"), this._compileExpression(e.val, t), this.emit(")")
},
_getNodeName: function (e) {
switch (e.typename) {
case"Symbol":
return e.value;
case"FunCall":
return "the return value of (" + this._getNodeName(e.name) + ")";
case"LookupVal":
return this._getNodeName(e.target) + '["' + this._getNodeName(e.val) + '"]';
case"Literal":
return e.value.toString();
default:
return "--expression--"
}
},
compileFunCall: function (e, t) {
this.emit("(lineno = " + e.lineno + ", colno = " + e.colno + ", "), this.emit("runtime.callWrap("), this._compileExpression(e.name, t), this.emit(', "' + this._getNodeName(e.name).replace(/"/g, '\\"') + '", context, '), this._compileAggregate(e.args, t, "[", "])"), this.emit(")")
},
compileFilter: function (e, t) {
var n = e.name;
this.assertType(n, a.Symbol), this.emit('env.getFilter("' + n.value + '").call(context, '), this._compileAggregate(e.args, t), this.emit(")")
},
compileFilterAsync: function (e, t) {
var n = e.name;
this.assertType(n, a.Symbol);
var i = e.symbol.value;
t.set(i, i), this.emit('env.getFilter("' + n.value + '").call(context, '), this._compileAggregate(e.args, t), this.emitLine(", " + this.makeCallback(i)), this.addScopeLevel()
},
compileKeywordArgs: function (e, t) {
var n = [];
r.each(e.children, function (e) {
n.push(e.key.value)
}), this.emit("runtime.makeKeywordArgs("), this.compileDict(e, t), this.emit(")")
},
compileSet: function (e, t) {
var n = [];
r.each(e.targets, function (e) {
var i = e.value, r = t.lookup(i);
(null === r || void 0 === r) && (r = this.tmpid(), this.emitLine("var " + r + ";")), n.push(r)
}, this), e.value ? (this.emit(n.join(" = ") + " = "), this._compileExpression(e.value, t), this.emitLine(";")) : (this.emit(n.join(" = ") + " = "), this.compile(e.body, t), this.emitLine(";")), r.each(e.targets, function (e, t) {
var i = n[t], r = e.value;
this.emitLine('frame.set("' + r + '", ' + i + ", true);"), this.emitLine("if(frame.topLevel) {"), this.emitLine('context.setVariable("' + r + '", ' + i + ");"), this.emitLine("}"), "_" !== r.charAt(0) && (this.emitLine("if(frame.topLevel) {"), this.emitLine('context.addExport("' + r + '", ' + i + ");"), this.emitLine("}"))
}, this)
},
compileIf: function (e, t, n) {
this.emit("if("), this._compileExpression(e.cond, t), this.emitLine(") {"), this.withScopedSyntax(function () {
this.compile(e.body, t), n && this.emit("cb()")
}), e.else_ ? (this.emitLine("}\nelse {"), this.withScopedSyntax(function () {
this.compile(e.else_, t), n && this.emit("cb()")
})) : n && (this.emitLine("}\nelse {"), this.emit("cb()")), this.emitLine("}")
},
compileIfAsync: function (e, t) {
this.emit("(function(cb) {"), this.compileIf(e, t, !0), this.emit("})(" + this.makeCallback()), this.addScopeLevel()
},
emitLoopBindings: function (e, t, n, i) {
var r = {
index: n + " + 1",
index0: n,
revindex: i + " - " + n,
revindex0: i + " - " + n + " - 1",
first: n + " === 0",
last: n + " === " + i + " - 1",
length: i
};
for (var s in r) this.emitLine('frame.set("loop.' + s + '", ' + r[s] + ");")
},
compileFor: function (e, t) {
var n, i = this.tmpid(), r = this.tmpid(), s = this.tmpid();
if (t = t.push(), this.emitLine("frame = frame.push();"), this.emit("var " + s + " = "), this._compileExpression(e.arr, t), this.emitLine(";"), this.emit("if(" + s + ") {"), e.name instanceof a.Array) {
this.emitLine("var " + i + ";"), this.emitLine("if(runtime.isArray(" + s + ")) {"), this.emitLine("var " + r + " = " + s + ".length;"), this.emitLine("for(" + i + "=0; " + i + " < " + s + ".length; " + i + "++) {");
for (var o = 0; o < e.name.children.length; o++) {
var l = this.tmpid();
this.emitLine("var " + l + " = " + s + "[" + i + "][" + o + "]"), this.emitLine('frame.set("' + e.name.children[o].value + '", ' + s + "[" + i + "][" + o + "]);"), t.set(e.name.children[o].value, l)
}
this.emitLoopBindings(e, s, i, r), this.withScopedSyntax(function () {
this.compile(e.body, t)
}), this.emitLine("}"), this.emitLine("} else {");
var c = e.name.children[0], h = e.name.children[1], u = this.tmpid();
n = this.tmpid(), t.set(c.value, u), t.set(h.value, n), this.emitLine(i + " = -1;"), this.emitLine("var " + r + " = runtime.keys(" + s + ").length;"), this.emitLine("for(var " + u + " in " + s + ") {"), this.emitLine(i + "++;"), this.emitLine("var " + n + " = " + s + "[" + u + "];"), this.emitLine('frame.set("' + c.value + '", ' + u + ");"), this.emitLine('frame.set("' + h.value + '", ' + n + ");"), this.emitLoopBindings(e, s, i, r), this.withScopedSyntax(function () {
this.compile(e.body, t)
}), this.emitLine("}"), this.emitLine("}")
} else n = this.tmpid(), t.set(e.name.value, n), this.emitLine("var " + r + " = " + s + ".length;"), this.emitLine("for(var " + i + "=0; " + i + " < " + s + ".length; " + i + "++) {"), this.emitLine("var " + n + " = " + s + "[" + i + "];"), this.emitLine('frame.set("' + e.name.value + '", ' + n + ");"), this.emitLoopBindings(e, s, i, r), this.withScopedSyntax(function () {
this.compile(e.body, t)
}), this.emitLine("}");
this.emitLine("}"), e.else_ && (this.emitLine("if (!" + r + ") {"), this.compile(e.else_, t), this.emitLine("}")), this.emitLine("frame = frame.pop();")
},
_compileAsyncLoop: function (e, t, n) {
var i = this.tmpid(), s = this.tmpid(), o = this.tmpid(), l = n ? "asyncAll" : "asyncEach";
if (t = t.push(), this.emitLine("frame = frame.push();"), this.emit("var " + o + " = "), this._compileExpression(e.arr, t), this.emitLine(";"), e.name instanceof a.Array) this.emit("runtime." + l + "(" + o + ", " + e.name.children.length + ", function("), r.each(e.name.children, function (e) {
this.emit(e.value + ",")
}, this), this.emit(i + "," + s + ",next) {"), r.each(e.name.children, function (e) {
var n = e.value;
t.set(n, n), this.emitLine('frame.set("' + n + '", ' + n + ");")
}, this); else {
var c = e.name.value;
this.emitLine("runtime." + l + "(" + o + ", 1, function(" + c + ", " + i + ", " + s + ",next) {"), this.emitLine('frame.set("' + c + '", ' + c + ");"), t.set(c, c)
}
this.emitLoopBindings(e, o, i, s), this.withScopedSyntax(function () {
var r;
n && (r = this.tmpid(), this.pushBufferId(r)), this.compile(e.body, t), this.emitLine("next(" + i + (r ? "," + r : "") + ");"), n && this.popBufferId()
});
var h = this.tmpid();
this.emitLine("}, " + this.makeCallback(h)), this.addScopeLevel(), n && this.emitLine(this.buffer + " += " + h + ";"), e.else_ && (this.emitLine("if (!" + o + ".length) {"), this.compile(e.else_, t), this.emitLine("}")), this.emitLine("frame = frame.pop();")
},
compileAsyncEach: function (e, t) {
this._compileAsyncLoop(e, t)
},
compileAsyncAll: function (e, t) {
this._compileAsyncLoop(e, t, !0)
},
_compileMacro: function (e, t) {
var n = [], i = null, s = "macro_" + this.tmpid();
r.each(e.args.children, function (t, r) {
r === e.args.children.length - 1 && t instanceof a.Dict ? i = t : (this.assertType(t, a.Symbol), n.push(t))
}, this);
var o = r.map(n, function (e) {
return "l_" + e.value
});
o.push("kwargs");
var l = r.map(n, function (e) {
return '"' + e.value + '"'
}), c = r.map(i && i.children || [], function (e) {
return '"' + e.key.value + '"'
});
t = t.push(), this.emitLines("var " + s + " = runtime.makeMacro(", "[" + l.join(", ") + "], ", "[" + c.join(", ") + "], ", "function (" + o.join(", ") + ") {", "frame = frame.push(true);", "kwargs = kwargs || {};", 'if (kwargs.hasOwnProperty("caller")) {', 'frame.set("caller", kwargs.caller); }'), r.each(n, function (e) {
this.emitLine('frame.set("' + e.value + '", l_' + e.value + ");"), t.set(e.value, "l_" + e.value)
}, this), i && r.each(i.children, function (e) {
var n = e.key.value;
this.emit('frame.set("' + n + '", kwargs.hasOwnProperty("' + n + '") ? kwargs["' + n + '"] : '), this._compileExpression(e.value, t), this.emitLine(");")
}, this);
var h = this.tmpid();
return this.pushBufferId(h), this.withScopedSyntax(function () {
this.compile(e.body, t)
}), t = t.pop(), this.emitLine("frame = frame.pop();"), this.emitLine("return new runtime.SafeString(" + h + ");"), this.emitLine("});"), this.popBufferId(), s
},
compileMacro: function (e, t) {
var n = this._compileMacro(e, t), i = e.name.value;
t.set(i, n), t.parent ? this.emitLine('frame.set("' + i + '", ' + n + ");") : ("_" !== e.name.value.charAt(0) && this.emitLine('context.addExport("' + i + '");'), this.emitLine('context.setVariable("' + i + '", ' + n + ");"))
},
compileCaller: function (e, t) {
this.emit("(function (){");
var n = this._compileMacro(e, t);
this.emit("return " + n + ";})()")
},
compileImport: function (e, t) {
var n = this.tmpid(), i = e.target.value;
this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", false, " + this._templateName() + ", false, " + this.makeCallback(n)), this.addScopeLevel(), this.emitLine(n + ".getExported(" + (e.withContext ? "context.getVariables(), frame, " : "") + this.makeCallback(n)), this.addScopeLevel(), t.set(i, n), t.parent ? this.emitLine('frame.set("' + i + '", ' + n + ");") : this.emitLine('context.setVariable("' + i + '", ' + n + ");")
},
compileFromImport: function (e, t) {
var n = this.tmpid();
this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", false, " + this._templateName() + ", false, " + this.makeCallback(n)), this.addScopeLevel(), this.emitLine(n + ".getExported(" + (e.withContext ? "context.getVariables(), frame, " : "") + this.makeCallback(n)), this.addScopeLevel(), r.each(e.names.children, function (e) {
var i, r, s = this.tmpid();
e instanceof a.Pair ? (i = e.key.value, r = e.value.value) : (i = e.value, r = i), this.emitLine("if(" + n + '.hasOwnProperty("' + i + '")) {'), this.emitLine("var " + s + " = " + n + "." + i + ";"), this.emitLine("} else {"), this.emitLine("cb(new Error(\"cannot import '" + i + "'\")); return;"), this.emitLine("}"), t.set(r, s), t.parent ? this.emitLine('frame.set("' + r + '", ' + s + ");") : this.emitLine('context.setVariable("' + r + '", ' + s + ");")
}, this)
},
compileBlock: function (e) {
var t = this.tmpid();
this.inBlock || this.emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '), this.emit('context.getBlock("' + e.name.value + '")'), this.inBlock || this.emit(")"), this.emitLine("(env, context, frame, runtime, " + this.makeCallback(t)), this.emitLine(this.buffer + " += " + t + ";"), this.addScopeLevel()
},
compileSuper: function (e, t) {
var n = e.blockName.value, i = e.symbol.value;
this.emitLine('context.getSuper(env, "' + n + '", b_' + n + ", frame, runtime, " + this.makeCallback(i)), this.emitLine(i + " = runtime.markSafe(" + i + ");"), this.addScopeLevel(), t.set(i, i)
},
compileExtends: function (e, t) {
var n = this.tmpid();
this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", true, " + this._templateName() + ", false, " + this.makeCallback("_parentTemplate")), this.emitLine("parentTemplate = _parentTemplate"), this.emitLine("for(var " + n + " in parentTemplate.blocks) {"), this.emitLine("context.addBlock(" + n + ", parentTemplate.blocks[" + n + "]);"), this.emitLine("}"), this.addScopeLevel()
},
compileInclude: function (e, t) {
var n = this.tmpid(), i = this.tmpid();
this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", false, " + this._templateName() + ", " + e.ignoreMissing + ", " + this.makeCallback(n)), this.addScopeLevel(), this.emitLine(n + ".render(context.getVariables(), frame, " + this.makeCallback(i)), this.emitLine(this.buffer + " += " + i), this.addScopeLevel()
},
compileTemplateData: function (e, t) {
this.compileLiteral(e, t)
},
compileCapture: function (e, t) {
this.emitLine("(function() {"), this.emitLine('var output = "";'), this.withScopedSyntax(function () {
this.compile(e.body, t)
}), this.emitLine("return output;"), this.emitLine("})()")
},
compileOutput: function (e, t) {
for (var n = e.children, i = 0, r = n.length; r > i; i++) n[i] instanceof a.TemplateData ? n[i].value && (this.emit(this.buffer + " += "), this.compileLiteral(n[i], t), this.emitLine(";")) : (this.emit(this.buffer + " += runtime.suppressValue("), this.throwOnUndefined && this.emit("runtime.ensureDefined("), this.compile(n[i], t), this.throwOnUndefined && this.emit("," + e.lineno + "," + e.colno + ")"), this.emit(", env.opts.autoescape);\n"))
},
compileRoot: function (e, t) {
t && this.fail("compileRoot: root node can't have frame"), t = new c, this.emitFuncBegin("root"), this.emitLine("var parentTemplate = null;"), this._compileChildren(e, t), this.emitLine("if(parentTemplate) {"), this.emitLine("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"), this.emitLine("} else {"), this.emitLine("cb(null, " + this.buffer + ");"), this.emitLine("}"), this.emitFuncEnd(!0), this.inBlock = !0;
var n, i, r, s = [], o = e.findAll(a.Block);
for (n = 0; n < o.length; n++) {
if (r = o[n], i = r.name.value, -1 !== s.indexOf(i)) throw new Error('Block "' + i + '" defined more than once.');
s.push(i), this.emitFuncBegin("b_" + i);
var l = new c;
this.compile(r.body, l), this.emitFuncEnd()
}
for (this.emitLine("return {"), n = 0; n < o.length; n++) r = o[n], i = "b_" + r.name.value, this.emitLine(i + ": " + i + ",");
this.emitLine("root: root\n};")
},
compile: function (e, t) {
var n = this["compile" + e.typename];
n ? n.call(this, e, t) : this.fail("compile: Cannot compile node: " + e.typename, e.lineno, e.colno)
},
getCode: function () {
return this.codebuf.join("")
}
});
e.exports = {
compile: function (e, t, n, i, r) {
var a = new u(i, r.throwOnUndefined);
if (n && n.length) for (var l = 0; l < n.length; l++) "preprocess" in n[l] && (e = n[l].preprocess(e, i));
return a.compile(o.transform(s.parse(e, n, r), t, i)), a.getCode()
}, Compiler: u
}
}, function (e, t, n) {
"use strict";
var i = n(9), r = n(10), s = n(6), o = n(1), a = s.extend({
init: function (e) {
this.tokens = e, this.peeked = null, this.breakOnBlocks = null, this.dropLeadingWhitespace = !1, this.extensions = []
}, nextToken: function (e) {
var t;
if (this.peeked) {
if (e || this.peeked.type !== i.TOKEN_WHITESPACE) return t = this.peeked, this.peeked = null, t;
this.peeked = null
}
if (t = this.tokens.nextToken(), !e) for (; t && t.type === i.TOKEN_WHITESPACE;) t = this.tokens.nextToken();
return t
}, peekToken: function () {
return this.peeked = this.peeked || this.nextToken(), this.peeked
}, pushToken: function (e) {
if (this.peeked) throw new Error("pushToken: can only push one token on between reads");
this.peeked = e
}, fail: function (e, t, n) {
if ((void 0 === t || void 0 === n) && this.peekToken()) {
var i = this.peekToken();
t = i.lineno, n = i.colno
}
throw void 0 !== t && (t += 1), void 0 !== n && (n += 1), new o.TemplateError(e, t, n)
}, skip: function (e) {
var t = this.nextToken();
return t && t.type === e ? !0 : (this.pushToken(t), !1)
}, expect: function (e) {
var t = this.nextToken();
return t.type !== e && this.fail("expected " + e + ", got " + t.type, t.lineno, t.colno), t
}, skipValue: function (e, t) {
var n = this.nextToken();
return n && n.type === e && n.value === t ? !0 : (this.pushToken(n), !1)
}, skipSymbol: function (e) {
return this.skipValue(i.TOKEN_SYMBOL, e)
}, advanceAfterBlockEnd: function (e) {
var t;
return e || (t = this.peekToken(), t || this.fail("unexpected end of file"), t.type !== i.TOKEN_SYMBOL && this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"), e = this.nextToken().value), t = this.nextToken(), t && t.type === i.TOKEN_BLOCK_END ? "-" === t.value.charAt(0) && (this.dropLeadingWhitespace = !0) : this.fail("expected block end in " + e + " statement"), t
}, advanceAfterVariableEnd: function () {
this.skip(i.TOKEN_VARIABLE_END) || this.fail("expected variable end")
}, parseFor: function () {
var e, t, n = this.peekToken();
this.skipSymbol("for") ? (e = new r.For(n.lineno, n.colno), t = "endfor") : this.skipSymbol("asyncEach") ? (e = new r.AsyncEach(n.lineno, n.colno), t = "endeach") : this.skipSymbol("asyncAll") ? (e = new r.AsyncAll(n.lineno, n.colno),
t = "endall") : this.fail("parseFor: expected for{Async}", n.lineno, n.colno), e.name = this.parsePrimary(), e.name instanceof r.Symbol || this.fail("parseFor: variable name expected for loop");
var s = this.peekToken().type;
if (s === i.TOKEN_COMMA) {
var o = e.name;
for (e.name = new r.Array(o.lineno, o.colno), e.name.addChild(o); this.skip(i.TOKEN_COMMA);) {
var a = this.parsePrimary();
e.name.addChild(a)
}
}
return this.skipSymbol("in") || this.fail('parseFor: expected "in" keyword for loop', n.lineno, n.colno), e.arr = this.parseExpression(), this.advanceAfterBlockEnd(n.value), e.body = this.parseUntilBlocks(t, "else"), this.skipSymbol("else") && (this.advanceAfterBlockEnd("else"), e.else_ = this.parseUntilBlocks(t)), this.advanceAfterBlockEnd(), e
}, parseMacro: function () {
var e = this.peekToken();
this.skipSymbol("macro") || this.fail("expected macro");
var t = this.parsePrimary(!0), n = this.parseSignature(), i = new r.Macro(e.lineno, e.colno, t, n);
return this.advanceAfterBlockEnd(e.value), i.body = this.parseUntilBlocks("endmacro"), this.advanceAfterBlockEnd(), i
}, parseCall: function () {
var e = this.peekToken();
this.skipSymbol("call") || this.fail("expected call");
var t = this.parseSignature(!0) || new r.NodeList, n = this.parsePrimary();
this.advanceAfterBlockEnd(e.value);
var i = this.parseUntilBlocks("endcall");
this.advanceAfterBlockEnd();
var s = new r.Symbol(e.lineno, e.colno, "caller"), o = new r.Caller(e.lineno, e.colno, s, t, i),
a = n.args.children;
a[a.length - 1] instanceof r.KeywordArgs || a.push(new r.KeywordArgs);
var l = a[a.length - 1];
return l.addChild(new r.Pair(e.lineno, e.colno, s, o)), new r.Output(e.lineno, e.colno, [n])
}, parseWithContext: function () {
var e = this.peekToken(), t = null;
return this.skipSymbol("with") ? t = !0 : this.skipSymbol("without") && (t = !1), null !== t && (this.skipSymbol("context") || this.fail("parseFrom: expected context after with/without", e.lineno, e.colno)), t
}, parseImport: function () {
var e = this.peekToken();
this.skipSymbol("import") || this.fail("parseImport: expected import", e.lineno, e.colno);
var t = this.parseExpression();
this.skipSymbol("as") || this.fail('parseImport: expected "as" keyword', e.lineno, e.colno);
var n = this.parsePrimary(), i = this.parseWithContext(), s = new r.Import(e.lineno, e.colno, t, n, i);
return this.advanceAfterBlockEnd(e.value), s
}, parseFrom: function () {
var e = this.peekToken();
this.skipSymbol("from") || this.fail("parseFrom: expected from");
var t = this.parsePrimary();
this.skipSymbol("import") || this.fail("parseFrom: expected import", e.lineno, e.colno);
for (var n, s = new r.NodeList; ;) {
var o = this.peekToken();
if (o.type === i.TOKEN_BLOCK_END) {
s.children.length || this.fail("parseFrom: Expected at least one import name", e.lineno, e.colno), "-" === o.value.charAt(0) && (this.dropLeadingWhitespace = !0), this.nextToken();
break
}
s.children.length > 0 && !this.skip(i.TOKEN_COMMA) && this.fail("parseFrom: expected comma", e.lineno, e.colno);
var a = this.parsePrimary();
if ("_" === a.value.charAt(0) && this.fail("parseFrom: names starting with an underscore cannot be imported", a.lineno, a.colno), this.skipSymbol("as")) {
var l = this.parsePrimary();
s.addChild(new r.Pair(a.lineno, a.colno, a, l))
} else s.addChild(a);
n = this.parseWithContext()
}
return new r.FromImport(e.lineno, e.colno, t, s, n)
}, parseBlock: function () {
var e = this.peekToken();
this.skipSymbol("block") || this.fail("parseBlock: expected block", e.lineno, e.colno);
var t = new r.Block(e.lineno, e.colno);
t.name = this.parsePrimary(), t.name instanceof r.Symbol || this.fail("parseBlock: variable name expected", e.lineno, e.colno), this.advanceAfterBlockEnd(e.value), t.body = this.parseUntilBlocks("endblock"), this.skipSymbol("endblock"), this.skipSymbol(t.name.value);
var n = this.peekToken();
return n || this.fail("parseBlock: expected endblock, got end of file"), this.advanceAfterBlockEnd(n.value), t
}, parseExtends: function () {
var e = "extends", t = this.peekToken();
this.skipSymbol(e) || this.fail("parseTemplateRef: expected " + e);
var n = new r.Extends(t.lineno, t.colno);
return n.template = this.parseExpression(), this.advanceAfterBlockEnd(t.value), n
}, parseInclude: function () {
var e = "include", t = this.peekToken();
this.skipSymbol(e) || this.fail("parseInclude: expected " + e);
var n = new r.Include(t.lineno, t.colno);
return n.template = this.parseExpression(), this.skipSymbol("ignore") && this.skipSymbol("missing") && (n.ignoreMissing = !0), this.advanceAfterBlockEnd(t.value), n
}, parseIf: function () {
var e, t = this.peekToken();
this.skipSymbol("if") || this.skipSymbol("elif") ? e = new r.If(t.lineno, t.colno) : this.skipSymbol("ifAsync") ? e = new r.IfAsync(t.lineno, t.colno) : this.fail("parseIf: expected if or elif", t.lineno, t.colno), e.cond = this.parseExpression(), this.advanceAfterBlockEnd(t.value), e.body = this.parseUntilBlocks("elif", "else", "endif");
var n = this.peekToken();
switch (n && n.value) {
case"elif":
e.else_ = this.parseIf();
break;
case"else":
this.advanceAfterBlockEnd(), e.else_ = this.parseUntilBlocks("endif"), this.advanceAfterBlockEnd();
break;
case"endif":
e.else_ = null, this.advanceAfterBlockEnd();
break;
default:
this.fail("parseIf: expected elif, else, or endif, got end of file")
}
return e
}, parseSet: function () {
var e = this.peekToken();
this.skipSymbol("set") || this.fail("parseSet: expected set", e.lineno, e.colno);
for (var t, n = new r.Set(e.lineno, e.colno, []); (t = this.parsePrimary()) && (n.targets.push(t), this.skip(i.TOKEN_COMMA));) ;
return this.skipValue(i.TOKEN_OPERATOR, "=") ? (n.value = this.parseExpression(), this.advanceAfterBlockEnd(e.value)) : this.skip(i.TOKEN_BLOCK_END) ? (n.body = new r.Capture(e.lineno, e.colno, this.parseUntilBlocks("endset")), n.value = null, this.advanceAfterBlockEnd()) : this.fail("parseSet: expected = or block end in set tag", e.lineno, e.colno), n
}, parseStatement: function () {
var e, t = this.peekToken();
if (t.type !== i.TOKEN_SYMBOL && this.fail("tag name expected", t.lineno, t.colno), this.breakOnBlocks && -1 !== o.indexOf(this.breakOnBlocks, t.value)) return null;
switch (t.value) {
case"raw":
return this.parseRaw();
case"if":
case"ifAsync":
return this.parseIf();
case"for":
case"asyncEach":
case"asyncAll":
return this.parseFor();
case"block":
return this.parseBlock();
case"extends":
return this.parseExtends();
case"include":
return this.parseInclude();
case"set":
return this.parseSet();
case"macro":
return this.parseMacro();
case"call":
return this.parseCall();
case"import":
return this.parseImport();
case"from":
return this.parseFrom();
case"filter":
return this.parseFilterStatement();
default:
if (this.extensions.length) for (var n = 0; n < this.extensions.length; n++) {
var s = this.extensions[n];
if (-1 !== o.indexOf(s.tags || [], t.value)) return s.parse(this, r, i)
}
this.fail("unknown block tag: " + t.value, t.lineno, t.colno)
}
return e
}, parseRaw: function () {
for (var e = /([\s\S]*?){%\s*(raw|endraw)\s*(?=%})%}/, t = 1, n = "", i = null, s = this.advanceAfterBlockEnd(); (i = this.tokens._extractRegex(e)) && t > 0;) {
var o = i[0], a = i[1], l = i[2];
"raw" === l ? t += 1 : "endraw" === l && (t -= 1), 0 === t ? (n += a, this.tokens.backN(o.length - a.length)) : n += o
}
return new r.Output(s.lineno, s.colno, [new r.TemplateData(s.lineno, s.colno, n)])
}, parsePostfix: function (e) {
for (var t, n = this.peekToken(); n;) {
if (n.type === i.TOKEN_LEFT_PAREN) e = new r.FunCall(n.lineno, n.colno, e, this.parseSignature()); else if (n.type === i.TOKEN_LEFT_BRACKET) t = this.parseAggregate(), t.children.length > 1 && this.fail("invalid index"), e = new r.LookupVal(n.lineno, n.colno, e, t.children[0]); else {
if (n.type !== i.TOKEN_OPERATOR || "." !== n.value) break;
this.nextToken();
var s = this.nextToken();
s.type !== i.TOKEN_SYMBOL && this.fail("expected name as lookup value, got " + s.value, s.lineno, s.colno), t = new r.Literal(s.lineno, s.colno, s.value), e = new r.LookupVal(n.lineno, n.colno, e, t)
}
n = this.peekToken()
}
return e
}, parseExpression: function () {
var e = this.parseInlineIf();
return e
}, parseInlineIf: function () {
var e = this.parseOr();
if (this.skipSymbol("if")) {
var t = this.parseOr(), n = e;
e = new r.InlineIf(e.lineno, e.colno), e.body = n, e.cond = t, this.skipSymbol("else") ? e.else_ = this.parseOr() : e.else_ = null
}
return e
}, parseOr: function () {
for (var e = this.parseAnd(); this.skipSymbol("or");) {
var t = this.parseAnd();
e = new r.Or(e.lineno, e.colno, e, t)
}
return e
}, parseAnd: function () {
for (var e = this.parseNot(); this.skipSymbol("and");) {
var t = this.parseNot();
e = new r.And(e.lineno, e.colno, e, t)
}
return e
}, parseNot: function () {
var e = this.peekToken();
return this.skipSymbol("not") ? new r.Not(e.lineno, e.colno, this.parseNot()) : this.parseIn()
}, parseIn: function () {
for (var e = this.parseCompare(); ;) {
var t = this.nextToken();
if (!t) break;
var n = t.type === i.TOKEN_SYMBOL && "not" === t.value;
if (n || this.pushToken(t), !this.skipSymbol("in")) {
n && this.pushToken(t);
break
}
var s = this.parseCompare();
e = new r.In(e.lineno, e.colno, e, s), n && (e = new r.Not(e.lineno, e.colno, e))
}
return e
}, parseCompare: function () {
for (var e = ["==", "!=", "<", ">", "<=", ">="], t = this.parseConcat(), n = []; ;) {
var i = this.nextToken();
if (!i) break;
if (-1 === o.indexOf(e, i.value)) {
this.pushToken(i);
break
}
n.push(new r.CompareOperand(i.lineno, i.colno, this.parseConcat(), i.value))
}
return n.length ? new r.Compare(n[0].lineno, n[0].colno, t, n) : t
}, parseConcat: function () {
for (var e = this.parseAdd(); this.skipValue(i.TOKEN_TILDE, "~");) {
var t = this.parseAdd();
e = new r.Concat(e.lineno, e.colno, e, t)
}
return e
}, parseAdd: function () {
for (var e = this.parseSub(); this.skipValue(i.TOKEN_OPERATOR, "+");) {
var t = this.parseSub();
e = new r.Add(e.lineno, e.colno, e, t)
}
return e
}, parseSub: function () {
for (var e = this.parseMul(); this.skipValue(i.TOKEN_OPERATOR, "-");) {
var t = this.parseMul();
e = new r.Sub(e.lineno, e.colno, e, t)
}
return e
}, parseMul: function () {
for (var e = this.parseDiv(); this.skipValue(i.TOKEN_OPERATOR, "*");) {
var t = this.parseDiv();
e = new r.Mul(e.lineno, e.colno, e, t)
}
return e
}, parseDiv: function () {
for (var e = this.parseFloorDiv(); this.skipValue(i.TOKEN_OPERATOR, "/");) {
var t = this.parseFloorDiv();
e = new r.Div(e.lineno, e.colno, e, t)
}
return e
}, parseFloorDiv: function () {
for (var e = this.parseMod(); this.skipValue(i.TOKEN_OPERATOR, "//");) {
var t = this.parseMod();
e = new r.FloorDiv(e.lineno, e.colno, e, t)
}
return e
}, parseMod: function () {
for (var e = this.parsePow(); this.skipValue(i.TOKEN_OPERATOR, "%");) {
var t = this.parsePow();
e = new r.Mod(e.lineno, e.colno, e, t)
}
return e
}, parsePow: function () {
for (var e = this.parseUnary(); this.skipValue(i.TOKEN_OPERATOR, "**");) {
var t = this.parseUnary();
e = new r.Pow(e.lineno, e.colno, e, t)
}
return e
}, parseUnary: function (e) {
var t, n = this.peekToken();
return t = this.skipValue(i.TOKEN_OPERATOR, "-") ? new r.Neg(n.lineno, n.colno, this.parseUnary(!0)) : this.skipValue(i.TOKEN_OPERATOR, "+") ? new r.Pos(n.lineno, n.colno, this.parseUnary(!0)) : this.parsePrimary(), e || (t = this.parseFilter(t)), t
}, parsePrimary: function (e) {
var t, n = this.nextToken(), s = null;
return n ? n.type === i.TOKEN_STRING ? t = n.value : n.type === i.TOKEN_INT ? t = parseInt(n.value, 10) : n.type === i.TOKEN_FLOAT ? t = parseFloat(n.value) : n.type === i.TOKEN_BOOLEAN ? "true" === n.value ? t = !0 : "false" === n.value ? t = !1 : this.fail("invalid boolean: " + n.value, n.lineno, n.colno) : n.type === i.TOKEN_NONE ? t = null : n.type === i.TOKEN_REGEX && (t = new RegExp(n.value.body, n.value.flags)) : this.fail("expected expression, got end of file"), void 0 !== t ? s = new r.Literal(n.lineno, n.colno, t) : n.type === i.TOKEN_SYMBOL ? (s = new r.Symbol(n.lineno, n.colno, n.value), e || (s = this.parsePostfix(s))) : (this.pushToken(n), s = this.parseAggregate()), s ? s : void this.fail("unexpected token: " + n.value, n.lineno, n.colno)
}, parseFilterName: function () {
for (var e = this.expect(i.TOKEN_SYMBOL), t = e.value; this.skipValue(i.TOKEN_OPERATOR, ".");) t += "." + this.expect(i.TOKEN_SYMBOL).value;
return new r.Symbol(e.lineno, e.colno, t)
}, parseFilterArgs: function (e) {
if (this.peekToken().type === i.TOKEN_LEFT_PAREN) {
var t = this.parsePostfix(e);
return t.args.children
}
return []
}, parseFilter: function (e) {
for (; this.skip(i.TOKEN_PIPE);) {
var t = this.parseFilterName();
e = new r.Filter(t.lineno, t.colno, t, new r.NodeList(t.lineno, t.colno, [e].concat(this.parseFilterArgs(e))))
}
return e
}, parseFilterStatement: function () {
var e = this.peekToken();
this.skipSymbol("filter") || this.fail("parseFilterStatement: expected filter");
var t = this.parseFilterName(), n = this.parseFilterArgs(t);
this.advanceAfterBlockEnd(e.value);
var i = new r.Capture(t.lineno, t.colno, this.parseUntilBlocks("endfilter"));
this.advanceAfterBlockEnd();
var s = new r.Filter(t.lineno, t.colno, t, new r.NodeList(t.lineno, t.colno, [i].concat(n)));
return new r.Output(t.lineno, t.colno, [s])
}, parseAggregate: function () {
var e, t = this.nextToken();
switch (t.type) {
case i.TOKEN_LEFT_PAREN:
e = new r.Group(t.lineno, t.colno);
break;
case i.TOKEN_LEFT_BRACKET:
e = new r.Array(t.lineno, t.colno);
break;
case i.TOKEN_LEFT_CURLY:
e = new r.Dict(t.lineno, t.colno);
break;
default:
return null
}
for (; ;) {
var n = this.peekToken().type;
if (n === i.TOKEN_RIGHT_PAREN || n === i.TOKEN_RIGHT_BRACKET || n === i.TOKEN_RIGHT_CURLY) {
this.nextToken();
break
}
if (e.children.length > 0 && (this.skip(i.TOKEN_COMMA) || this.fail("parseAggregate: expected comma after expression", t.lineno, t.colno)), e instanceof r.Dict) {
var s = this.parsePrimary();
this.skip(i.TOKEN_COLON) || this.fail("parseAggregate: expected colon after dict key", t.lineno, t.colno);
var o = this.parseExpression();
e.addChild(new r.Pair(s.lineno, s.colno, s, o))
} else {
var a = this.parseExpression();
e.addChild(a)
}
}
return e
}, parseSignature: function (e, t) {
var n = this.peekToken();
if (!t && n.type !== i.TOKEN_LEFT_PAREN) {
if (e) return null;
this.fail("expected arguments", n.lineno, n.colno)
}
n.type === i.TOKEN_LEFT_PAREN && (n = this.nextToken());
for (var s = new r.NodeList(n.lineno, n.colno), o = new r.KeywordArgs(n.lineno, n.colno), a = !1; ;) {
if (n = this.peekToken(), !t && n.type === i.TOKEN_RIGHT_PAREN) {
this.nextToken();
break
}
if (t && n.type === i.TOKEN_BLOCK_END) break;
if (a && !this.skip(i.TOKEN_COMMA)) this.fail("parseSignature: expected comma after expression", n.lineno, n.colno); else {
var l = this.parseExpression();
this.skipValue(i.TOKEN_OPERATOR, "=") ? o.addChild(new r.Pair(l.lineno, l.colno, l, this.parseExpression())) : s.addChild(l)
}
a = !0
}
return o.children.length && s.addChild(o), s
}, parseUntilBlocks: function () {
var e = this.breakOnBlocks;
this.breakOnBlocks = o.toArray(arguments);
var t = this.parse();
return this.breakOnBlocks = e, t
}, parseNodes: function () {
for (var e, t = []; e = this.nextToken();) if (e.type === i.TOKEN_DATA) {
var n = e.value, s = this.peekToken(), o = s && s.value;
this.dropLeadingWhitespace && (n = n.replace(/^\s*/, ""), this.dropLeadingWhitespace = !1), s && (s.type === i.TOKEN_BLOCK_START && "-" === o.charAt(o.length - 1) || s.type === i.TOKEN_COMMENT && "-" === o.charAt(this.tokens.tags.COMMENT_START.length)) && (n = n.replace(/\s*$/, "")), t.push(new r.Output(e.lineno, e.colno, [new r.TemplateData(e.lineno, e.colno, n)]))
} else if (e.type === i.TOKEN_BLOCK_START) {
this.dropLeadingWhitespace = !1;
var a = this.parseStatement();
if (!a) break;
t.push(a)
} else if (e.type === i.TOKEN_VARIABLE_START) {
var l = this.parseExpression();
this.advanceAfterVariableEnd(), this.dropLeadingWhitespace = !1, t.push(new r.Output(e.lineno, e.colno, [l]))
} else e.type === i.TOKEN_COMMENT ? this.dropLeadingWhitespace = "-" === e.value.charAt(e.value.length - this.tokens.tags.COMMENT_END.length - 1) : this.fail("Unexpected token at top-level: " + e.type, e.lineno, e.colno);
return t
}, parse: function () {
return new r.NodeList(0, 0, this.parseNodes())
}, parseAsRoot: function () {
return new r.Root(0, 0, this.parseNodes())
}
});
e.exports = {
parse: function (e, t, n) {
var r = new a(i.lex(e, n));
return void 0 !== t && (r.extensions = t), r.parseAsRoot()
}
}
}, function (e, t, n) {
"use strict";
function i(e, t, n, i) {
return {type: e, value: t, lineno: n, colno: i}
}
function r(e, t) {
this.str = e, this.index = 0, this.len = e.length, this.lineno = 0, this.colno = 0, this.in_code = !1, t = t || {};
var n = t.tags || {};
this.tags = {
BLOCK_START: n.blockStart || c,
BLOCK_END: n.blockEnd || h,
VARIABLE_START: n.variableStart || u,
VARIABLE_END: n.variableEnd || p,
COMMENT_START: n.commentStart || f,
COMMENT_END: n.commentEnd || m
}, this.trimBlocks = !!t.trimBlocks, this.lstripBlocks = !!t.lstripBlocks
}
var s = n(1), o = " \n \r ", a = "()[]{}%*-+~/#,:|.<>=!", l = "0123456789", c = "{%", h = "%}", u = "{{",
p = "}}", f = "{#", m = "#}", d = "string", v = "whitespace", g = "data", y = "block-start", k = "block-end",
x = "variable-start", b = "variable-end", E = "comment", w = "left-paren", T = "right-paren",
L = "left-bracket", O = "right-bracket", _ = "left-curly", A = "right-curly", S = "operator", N = "comma",
C = "colon", B = "tilde", F = "pipe", K = "int", R = "float", I = "boolean", M = "none", P = "symbol",
D = "special", V = "regex";
r.prototype.nextToken = function () {
var e, t = this.lineno, n = this.colno;
if (this.in_code) {
var r = this.current();
if (this.is_finished()) return null;
if ('"' === r || "'" === r) return i(d, this.parseString(r), t, n);
if (e = this._extract(o)) return i(v, e, t, n);
if ((e = this._extractString(this.tags.BLOCK_END)) || (e = this._extractString("-" + this.tags.BLOCK_END))) return this.in_code = !1, this.trimBlocks && (r = this.current(), "\n" === r ? this.forward() : "\r" === r && (this.forward(), r = this.current(), "\n" === r ? this.forward() : this.back())), i(k, e, t, n);
if (e = this._extractString(this.tags.VARIABLE_END)) return this.in_code = !1, i(b, e, t, n);
if ("r" === r && "/" === this.str.charAt(this.index + 1)) {
this.forwardN(2);
for (var c = ""; !this.is_finished();) {
if ("/" === this.current() && "\\" !== this.previous()) {
this.forward();
break
}
c += this.current(), this.forward()
}
for (var h = ["g", "i", "m", "y"], u = ""; !this.is_finished();) {
var p = -1 !== h.indexOf(this.current());
if (!p) break;
u += this.current(), this.forward()
}
return i(V, {body: c, flags: u}, t, n)
}
if (-1 !== a.indexOf(r)) {
this.forward();
var f, m = ["==", "!=", "<=", ">=", "//", "**"], D = r + this.current();
switch (-1 !== s.indexOf(m, D) && (this.forward(), r = D), r) {
case"(":
f = w;
break;
case")":
f = T;
break;
case"[":
f = L;
break;
case"]":
f = O;
break;
case"{":
f = _;
break;
case"}":
f = A;
break;
case",":
f = N;
break;
case":":
f = C;
break;
case"~":
f = B;
break;
case"|":
f = F;
break;
default:
f = S
}
return i(f, r, t, n)
}
if (e = this._extractUntil(o + a), e.match(/^[-+]?[0-9]+$/)) {
if ("." === this.current()) {
this.forward();
var j = this._extract(l);
return i(R, e + "." + j, t, n)
}
return i(K, e, t, n)
}
if (e.match(/^(true|false)$/)) return i(I, e, t, n);
if ("none" === e) return i(M, e, t, n);
if (e) return i(P, e, t, n);
throw new Error("Unexpected value while parsing: " + e)
}
var U = this.tags.BLOCK_START.charAt(0) + this.tags.VARIABLE_START.charAt(0) + this.tags.COMMENT_START.charAt(0) + this.tags.COMMENT_END.charAt(0);
if (this.is_finished()) return null;
if ((e = this._extractString(this.tags.BLOCK_START + "-")) || (e = this._extractString(this.tags.BLOCK_START))) return this.in_code = !0, i(y, e, t, n);
if (e = this._extractString(this.tags.VARIABLE_START)) return this.in_code = !0, i(x, e, t, n);
e = "";
var W, G = !1;
for (this._matches(this.tags.COMMENT_START) && (G = !0, e = this._extractString(this.tags.COMMENT_START)); null !== (W = this._extractUntil(U));) {
if (e += W, (this._matches(this.tags.BLOCK_START) || this._matches(this.tags.VARIABLE_START) || this._matches(this.tags.COMMENT_START)) && !G) {
if (this.lstripBlocks && this._matches(this.tags.BLOCK_START) && this.colno > 0 && this.colno <= e.length) {
var Y = e.slice(-this.colno);
if (/^\s+$/.test(Y) && (e = e.slice(0, -this.colno), !e.length)) return this.nextToken()
}
break
}
if (this._matches(this.tags.COMMENT_END)) {
if (!G) throw new Error("unexpected end of comment");
e += this._extractString(this.tags.COMMENT_END);
break
}
e += this.current(), this.forward()
}
if (null === W && G) throw new Error("expected end of comment, got end of file");
return i(G ? E : g, e, t, n)
}, r.prototype.parseString = function (e) {
this.forward();
for (var t = ""; !this.is_finished() && this.current() !== e;) {
var n = this.current();
if ("\\" === n) {
switch (this.forward(), this.current()) {
case"n":
t += "\n";
break;
case"t":
t += " ";
break;
case"r":
t += "\r";
break;
default:
t += this.current()
}
this.forward()
} else t += n, this.forward()
}
return this.forward(), t
}, r.prototype._matches = function (e) {
if (this.index + e.length > this.len) return null;
var t = this.str.slice(this.index, this.index + e.length);
return t === e
}, r.prototype._extractString = function (e) {
return this._matches(e) ? (this.index += e.length, e) : null
}, r.prototype._extractUntil = function (e) {
return this._extractMatching(!0, e || "")
}, r.prototype._extract = function (e) {
return this._extractMatching(!1, e)
}, r.prototype._extractMatching = function (e, t) {
if (this.is_finished()) return null;
var n = t.indexOf(this.current());
if (e && -1 === n || !e && -1 !== n) {
var i = this.current();
this.forward();
for (var r = t.indexOf(this.current()); (e && -1 === r || !e && -1 !== r) && !this.is_finished();) i += this.current(), this.forward(), r = t.indexOf(this.current());
return i
}
return ""
}, r.prototype._extractRegex = function (e) {
var t = this.currentStr().match(e);
return t ? (this.forwardN(t[0].length), t) : null
}, r.prototype.is_finished = function () {
return this.index >= this.len
}, r.prototype.forwardN = function (e) {
for (var t = 0; e > t; t++) this.forward()
}, r.prototype.forward = function () {
this.index++, "\n" === this.previous() ? (this.lineno++, this.colno = 0) : this.colno++
}, r.prototype.backN = function (e) {
for (var t = 0; e > t; t++) this.back()
}, r.prototype.back = function () {
if (this.index--, "\n" === this.current()) {
this.lineno--;
var e = this.src.lastIndexOf("\n", this.index - 1);
-1 === e ? this.colno = this.index : this.colno = this.index - e
} else this.colno--
}, r.prototype.current = function () {
return this.is_finished() ? "" : this.str.charAt(this.index)
}, r.prototype.currentStr = function () {
return this.is_finished() ? "" : this.str.substr(this.index)
}, r.prototype.previous = function () {
return this.str.charAt(this.index - 1)
}, e.exports = {
lex: function (e, t) {
return new r(e, t)
},
TOKEN_STRING: d,
TOKEN_WHITESPACE: v,
TOKEN_DATA: g,
TOKEN_BLOCK_START: y,
TOKEN_BLOCK_END: k,
TOKEN_VARIABLE_START: x,
TOKEN_VARIABLE_END: b,
TOKEN_COMMENT: E,
TOKEN_LEFT_PAREN: w,
TOKEN_RIGHT_PAREN: T,
TOKEN_LEFT_BRACKET: L,
TOKEN_RIGHT_BRACKET: O,
TOKEN_LEFT_CURLY: _,
TOKEN_RIGHT_CURLY: A,
TOKEN_OPERATOR: S,
TOKEN_COMMA: N,
TOKEN_COLON: C,
TOKEN_TILDE: B,
TOKEN_PIPE: F,
TOKEN_INT: K,
TOKEN_FLOAT: R,
TOKEN_BOOLEAN: I,
TOKEN_NONE: M,
TOKEN_SYMBOL: P,
TOKEN_SPECIAL: D,
TOKEN_REGEX: V
}
}, function (e, t, n) {
(function (t) {
"use strict";
function i(e, t, n) {
e instanceof t && n.push(e), e instanceof a && e.findAll(t, n)
}
function r(e, n) {
function i(e, n, i) {
for (var r = e.split("\n"), s = 0; s < r.length; s++) {
if (r[s] && (i && s > 0 || !i)) for (var o = 0; n > o; o++) t.stdout.write(" ");
s === r.length - 1 ? t.stdout.write(r[s]) : t.stdout.write(r[s] + "\n")
}
}
if (n = n || 0, i(e.typename + ": ", n), e instanceof c) i("\n"), s.each(e.children, function (e) {
r(e, n + 2)
}); else if (e instanceof se) i(e.extName + "." + e.prop), i("\n"), e.args && r(e.args, n + 2), e.contentArgs && s.each(e.contentArgs, function (e) {
r(e, n + 2)
}); else {
var o = null, l = null;
if (e.iterFields(function (e, t) {
e instanceof a ? (o = o || {}, o[t] = e) : (l = l || {}, l[t] = e)
}), l ? i(JSON.stringify(l, null, 2) + "\n", null, !0) : i("\n"), o) for (var h in o) r(o[h], n + 2)
}
}
var s = n(1), o = n(6), a = o.extend("Node", {
init: function (e, t) {
this.lineno = e, this.colno = t;
for (var n = this.fields, i = 0, r = n.length; r > i; i++) {
var s = n[i], o = arguments[i + 2];
void 0 === o && (o = null), this[s] = o
}
}, findAll: function (e, t) {
t = t || [];
var n, r;
if (this instanceof c) {
var s = this.children;
for (n = 0, r = s.length; r > n; n++) i(s[n], e, t)
} else {
var o = this.fields;
for (n = 0, r = o.length; r > n; n++) i(this[o[n]], e, t)
}
return t
}, iterFields: function (e) {
s.each(this.fields, function (t) {
e(this[t], t)
}, this)
}
}), l = a.extend("Value", {fields: ["value"]}), c = a.extend("NodeList", {
fields: ["children"], init: function (e, t, n) {
this.parent(e, t, n || [])
}, addChild: function (e) {
this.children.push(e)
}
}), h = c.extend("Root"), u = l.extend("Literal"), p = l.extend("Symbol"), f = c.extend("Group"),
m = c.extend("Array"), d = a.extend("Pair", {fields: ["key", "value"]}), v = c.extend("Dict"),
g = a.extend("LookupVal", {fields: ["target", "val"]}),
y = a.extend("If", {fields: ["cond", "body", "else_"]}), k = y.extend("IfAsync"),
x = a.extend("InlineIf", {fields: ["cond", "body", "else_"]}),
b = a.extend("For", {fields: ["arr", "name", "body", "else_"]}), E = b.extend("AsyncEach"),
w = b.extend("AsyncAll"), T = a.extend("Macro", {fields: ["name", "args", "body"]}), L = T.extend("Caller"),
O = a.extend("Import", {fields: ["template", "target", "withContext"]}), _ = a.extend("FromImport", {
fields: ["template", "names", "withContext"], init: function (e, t, n, i, r) {
this.parent(e, t, n, i || new c, r)
}
}), A = a.extend("FunCall", {fields: ["name", "args"]}), S = A.extend("Filter"),
N = S.extend("FilterAsync", {fields: ["name", "args", "symbol"]}), C = v.extend("KeywordArgs"),
B = a.extend("Block", {fields: ["name", "body"]}), F = a.extend("Super", {fields: ["blockName", "symbol"]}),
K = a.extend("TemplateRef", {fields: ["template"]}), R = K.extend("Extends"),
I = a.extend("Include", {fields: ["template", "ignoreMissing"]}),
M = a.extend("Set", {fields: ["targets", "value"]}), P = c.extend("Output"),
D = a.extend("Capture", {fields: ["body"]}), V = u.extend("TemplateData"),
j = a.extend("UnaryOp", {fields: ["target"]}), U = a.extend("BinOp", {fields: ["left", "right"]}),
W = U.extend("In"), G = U.extend("Or"), Y = U.extend("And"), H = j.extend("Not"), $ = U.extend("Add"),
z = U.extend("Concat"), X = U.extend("Sub"), q = U.extend("Mul"), J = U.extend("Div"),
Q = U.extend("FloorDiv"), Z = U.extend("Mod"), ee = U.extend("Pow"), te = j.extend("Neg"),
ne = j.extend("Pos"), ie = a.extend("Compare", {fields: ["expr", "ops"]}),
re = a.extend("CompareOperand", {fields: ["expr", "type"]}), se = a.extend("CallExtension", {
fields: ["extName", "prop", "args", "contentArgs"],
init: function (e, t, n, i) {
this.extName = e._name || e, this.prop = t, this.args = n || new c, this.contentArgs = i || [], this.autoescape = e.autoescape
}
}), oe = se.extend("CallExtensionAsync");
e.exports = {
Node: a,
Root: h,
NodeList: c,
Value: l,
Literal: u,
Symbol: p,
Group: f,
Array: m,
Pair: d,
Dict: v,
Output: P,
Capture: D,
TemplateData: V,
If: y,
IfAsync: k,
InlineIf: x,
For: b,
AsyncEach: E,
AsyncAll: w,
Macro: T,
Caller: L,
Import: O,
FromImport: _,
FunCall: A,
Filter: S,
FilterAsync: N,
KeywordArgs: C,
Block: B,
Super: F,
Extends: R,
Include: I,
Set: M,
LookupVal: g,
BinOp: U,
In: W,
Or: G,
And: Y,
Not: H,
Add: $,
Concat: z,
Sub: X,
Mul: q,
Div: J,
FloorDiv: Q,
Mod: Z,
Pow: ee,
Neg: te,
Pos: ne,
Compare: ie,
CompareOperand: re,
CallExtension: se,
CallExtensionAsync: oe,
printNodes: r
}
}).call(t, n(3))
}, function (e, t, n) {
"use strict";
function i() {
return "hole_" + d++
}
function r(e, t) {
for (var n = null, i = 0; i < e.length; i++) {
var r = t(e[i]);
r !== e[i] && (n || (n = e.slice()), n[i] = r)
}
return n || e
}
function s(e, t, n) {
if (!(e instanceof f.Node)) return e;
if (!n) {
var i = t(e);
if (i && i !== e) return i
}
if (e instanceof f.NodeList) {
var o = r(e.children, function (e) {
return s(e, t, n)
});
o !== e.children && (e = new f[e.typename](e.lineno, e.colno, o))
} else if (e instanceof f.CallExtension) {
var a = s(e.args, t, n), l = r(e.contentArgs, function (e) {
return s(e, t, n)
});
(a !== e.args || l !== e.contentArgs) && (e = new f[e.typename](e.extName, e.prop, a, l))
} else {
var c = e.fields.map(function (t) {
return e[t]
}), h = r(c, function (e) {
return s(e, t, n)
});
h !== c && (e = new f[e.typename](e.lineno, e.colno), h.forEach(function (t, n) {
e[e.fields[n]] = t
}))
}
return n ? t(e) || e : e
}
function o(e, t) {
return s(e, t, !0)
}
function a(e, t, n) {
var r = [], s = o(n ? e[n] : e, function (e) {
if (e instanceof f.Block) return e;
if (e instanceof f.Filter && -1 !== m.indexOf(t, e.name.value) || e instanceof f.CallExtensionAsync) {
var n = new f.Symbol(e.lineno, e.colno, i());
return r.push(new f.FilterAsync(e.lineno, e.colno, e.name, e.args, n)), n
}
});
return n ? e[n] = s : e = s, r.length ? (r.push(e), new f.NodeList(e.lineno, e.colno, r)) : e
}
function l(e, t) {
return o(e, function (e) {
return e instanceof f.Output ? a(e, t) : e instanceof f.Set ? a(e, t, "value") : e instanceof f.For ? a(e, t, "arr") : e instanceof f.If ? a(e, t, "cond") : e instanceof f.CallExtension ? a(e, t, "args") : void 0
})
}
function c(e) {
return s(e, function (e) {
if (e instanceof f.Block) {
var t = !1, n = i();
e.body = s(e.body, function (e) {
return e instanceof f.FunCall && "super" === e.name.value ? (t = !0, new f.Symbol(e.lineno, e.colno, n)) : void 0
}), t && e.body.children.unshift(new f.Super(0, 0, e.name, new f.Symbol(0, 0, n)))
}
})
}
function h(e) {
return o(e, function (e) {
if (e instanceof f.If || e instanceof f.For) {
var t = !1;
if (s(e, function (e) {
return e instanceof f.FilterAsync || e instanceof f.IfAsync || e instanceof f.AsyncEach || e instanceof f.AsyncAll || e instanceof f.CallExtensionAsync ? (t = !0, e) : void 0
}), t) {
if (e instanceof f.If) return new f.IfAsync(e.lineno, e.colno, e.cond, e.body, e.else_);
if (e instanceof f.For) return new f.AsyncEach(e.lineno, e.colno, e.arr, e.name, e.body, e.else_)
}
}
})
}
function u(e, t) {
return h(c(l(e, t)))
}
function p(e, t) {
return u(e, t || [])
}
var f = n(10), m = n(1), d = 0;
e.exports = {transform: p}
}, function (e, t, n) {
"use strict";
function i(e, t, n) {
return function () {
var i, r, a = o(arguments), l = s(arguments);
if (a > e.length) {
i = Array.prototype.slice.call(arguments, 0, e.length);
var c = Array.prototype.slice.call(arguments, i.length, a);
for (r = 0; r < c.length; r++) r < t.length && (l[t[r]] = c[r]);
i.push(l)
} else if (a < e.length) {
for (i = Array.prototype.slice.call(arguments, 0, a), r = a; r < e.length; r++) {
var h = e[r];
i.push(l[h]), delete l[h]
}
i.push(l)
} else i = arguments;
return n.apply(this, i)
}
}
function r(e) {
return e.__keywords = !0, e
}
function s(e) {
var t = e.length;
if (t) {
var n = e[t - 1];
if (n && n.hasOwnProperty("__keywords")) return n
}
return {}
}
function o(e) {
var t = e.length;
if (0 === t) return 0;
var n = e[t - 1];
return n && n.hasOwnProperty("__keywords") ? t - 1 : t
}
function a(e) {
return "string" != typeof e ? e : (this.val = e, void (this.length = e.length))
}
function l(e, t) {
return e instanceof a ? new a(t) : t.toString()
}
function c(e) {
var t = typeof e;
return "string" === t ? new a(e) : "function" !== t ? e : function () {
var t = e.apply(this, arguments);
return "string" == typeof t ? new a(t) : t
}
}
function h(e, t) {
return e = void 0 !== e && null !== e ? e : "", t && "string" == typeof e && (e = y.escape(e)), e
}
function u(e, t, n) {
if (null === e || void 0 === e) throw new y.TemplateError("attempted to output null or undefined value", t + 1, n + 1);
return e
}
function p(e, t) {
return e = e || {}, "function" == typeof e[t] ? function () {
return e[t].apply(e, arguments)
} : e[t]
}
function f(e, t, n, i) {
if (!e) throw new Error("Unable to call `" + t + "`, which is undefined or falsey");
if ("function" != typeof e) throw new Error("Unable to call `" + t + "`, which is not a function");
return e.apply(n, i)
}
function m(e, t, n) {
var i = t.lookup(n);
return void 0 !== i && null !== i ? i : e.lookup(n)
}
function d(e, t, n) {
return e.lineno ? e : new y.TemplateError(e, t, n)
}
function v(e, t, n, i) {
if (y.isArray(e)) {
var r = e.length;
y.asyncIter(e, function (e, i, s) {
switch (t) {
case 1:
n(e, i, r, s);
break;
case 2:
n(e[0], e[1], i, r, s);
break;
case 3:
n(e[0], e[1], e[2], i, r, s);
break;
default:
e.push(i, s), n.apply(this, e)
}
}, i)
} else y.asyncFor(e, function (e, t, i, r, s) {
n(e, t, i, r, s)
}, i)
}
function g(e, t, n, i) {
function r(e, t) {
l++, a[e] = t, l === s && i(null, a.join(""))
}
var s, o, a, l = 0;
if (y.isArray(e)) if (s = e.length, a = new Array(s), 0 === s) i(null, ""); else for (o = 0; o < e.length; o++) {
var c = e[o];
switch (t) {
case 1:
n(c, o, s, r);
break;
case 2:
n(c[0], c[1], o, s, r);
break;
case 3:
n(c[0], c[1], c[2], o, s, r);
break;
default:
c.push(o, r), n.apply(this, c)
}
} else {
var h = y.keys(e);
if (s = h.length, a = new Array(s), 0 === s) i(null, ""); else for (o = 0; o < h.length; o++) {
var u = h[o];
n(u, e[u], o, s, r)
}
}
}
var y = n(1), k = n(6), x = k.extend({
init: function (e, t) {
this.variables = {}, this.parent = e, this.topLevel = !1, this.isolateWrites = t
}, set: function (e, t, n) {
var i = e.split("."), r = this.variables, s = this;
if (n && (s = this.resolve(i[0], !0))) return void s.set(e, t);
for (var o = 0; o < i.length - 1; o++) {
var a = i[o];
r[a] || (r[a] = {}), r = r[a]
}
r[i[i.length - 1]] = t
}, get: function (e) {
var t = this.variables[e];
return void 0 !== t && null !== t ? t : null
}, lookup: function (e) {
var t = this.parent, n = this.variables[e];
return void 0 !== n && null !== n ? n : t && t.lookup(e)
}, resolve: function (e, t) {
var n = t && this.isolateWrites ? void 0 : this.parent, i = this.variables[e];
return void 0 !== i && null !== i ? this : n && n.resolve(e)
}, push: function (e) {
return new x(this, e)
}, pop: function () {
return this.parent
}
});
a.prototype = Object.create(String.prototype, {
length: {
writable: !0,
configurable: !0,
value: 0
}
}), a.prototype.valueOf = function () {
return this.val
}, a.prototype.toString = function () {
return this.val
}, e.exports = {
Frame: x,
makeMacro: i,
makeKeywordArgs: r,
numArgs: o,
suppressValue: h,
ensureDefined: u,
memberLookup: p,
contextOrFrameLookup: m,
callWrap: f,
handleError: d,
isArray: y.isArray,
keys: y.keys,
SafeString: a,
copySafeness: l,
markSafe: c,
asyncEach: v,
asyncAll: g,
inOperator: y.inOperator
}
}, function (e, t, n) {
"use strict";
function i(e, t) {
return null === e || void 0 === e || e === !1 ? t : e
}
var r = n(1), s = n(12), o = {
abs: function (e) {
return Math.abs(e)
}, batch: function (e, t, n) {
var i, r = [], s = [];
for (i = 0; i < e.length; i++) i % t === 0 && s.length && (r.push(s), s = []), s.push(e[i]);
if (s.length) {
if (n) for (i = s.length; t > i; i++) s.push(n);
r.push(s)
}
return r
}, capitalize: function (e) {
e = i(e, "");
var t = e.toLowerCase();
return s.copySafeness(e, t.charAt(0).toUpperCase() + t.slice(1))
}, center: function (e, t) {
if (e = i(e, ""), t = t || 80, e.length >= t) return e;
var n = t - e.length, o = r.repeat(" ", n / 2 - n % 2), a = r.repeat(" ", n / 2);
return s.copySafeness(e, o + e + a)
}, "default": function (e, t, n) {
return n ? e ? e : t : void 0 !== e ? e : t
}, dictsort: function (e, t, n) {
if (!r.isObject(e)) throw new r.TemplateError("dictsort filter: val must be an object");
var i = [];
for (var s in e) i.push([s, e[s]]);
var o;
if (void 0 === n || "key" === n) o = 0; else {
if ("value" !== n) throw new r.TemplateError("dictsort filter: You can only sort by either key or value");
o = 1
}
return i.sort(function (e, n) {
var i = e[o], s = n[o];
return t || (r.isString(i) && (i = i.toUpperCase()), r.isString(s) && (s = s.toUpperCase())), i > s ? 1 : i === s ? 0 : -1
}), i
}, dump: function (e) {
return JSON.stringify(e)
}, escape: function (e) {
return "string" == typeof e ? s.markSafe(r.escape(e)) : e
}, safe: function (e) {
return s.markSafe(e)
}, first: function (e) {
return e[0]
}, groupby: function (e, t) {
return r.groupBy(e, t)
}, indent: function (e, t, n) {
if (e = i(e, ""), "" === e) return "";
t = t || 4;
for (var o = "", a = e.split("\n"), l = r.repeat(" ", t), c = 0; c < a.length; c++) o += 0 !== c || n ? l + a[c] + "\n" : a[c] + "\n";
return s.copySafeness(e, o)
}, join: function (e, t, n) {
return t = t || "", n && (e = r.map(e, function (e) {
return e[n]
})), e.join(t)
}, last: function (e) {
return e[e.length - 1]
}, length: function (e) {
var t = i(e, "");
return void 0 !== t ? "function" == typeof Map && t instanceof Map || "function" == typeof Set && t instanceof Set ? t.size : t.length : 0
}, list: function (e) {
if (r.isString(e)) return e.split("");
if (r.isObject(e)) {
var t = [];
if (Object.keys) t = Object.keys(e); else for (var n in e) t.push(n);
return r.map(t, function (t) {
return {key: t, value: e[t]}
})
}
if (r.isArray(e)) return e;
throw new r.TemplateError("list filter: type not iterable")
}, lower: function (e) {
return e = i(e, ""), e.toLowerCase()
}, random: function (e) {
return e[Math.floor(Math.random() * e.length)]
}, rejectattr: function (e, t) {
return e.filter(function (e) {
return !e[t]
})
}, selectattr: function (e, t) {
return e.filter(function (e) {
return !!e[t]
})
}, replace: function (e, t, n, i) {
var r = e;
if (t instanceof RegExp) return e.replace(t, n);
"undefined" == typeof i && (i = -1);
var o = "";
if ("number" == typeof t) t += ""; else if ("string" != typeof t) return e;
if ("number" == typeof e && (e += ""), "string" != typeof e && !(e instanceof s.SafeString)) return e;
if ("" === t) return o = n + e.split("").join(n) + n, s.copySafeness(e, o);
var a = e.indexOf(t);
if (0 === i || -1 === a) return e;
for (var l = 0, c = 0; a > -1 && (-1 === i || i > c);) o += e.substring(l, a) + n, l = a + t.length, c++, a = e.indexOf(t, l);
return l < e.length && (o += e.substring(l)), s.copySafeness(r, o)
}, reverse: function (e) {
var t;
return t = r.isString(e) ? o.list(e) : r.map(e, function (e) {
return e
}), t.reverse(), r.isString(e) ? s.copySafeness(e, t.join("")) : t
}, round: function (e, t, n) {
t = t || 0;
var i, r = Math.pow(10, t);
return i = "ceil" === n ? Math.ceil : "floor" === n ? Math.floor : Math.round, i(e * r) / r
}, slice: function (e, t, n) {
for (var i = Math.floor(e.length / t), r = e.length % t, s = 0, o = [], a = 0; t > a; a++) {
var l = s + a * i;
r > a && s++;
var c = s + (a + 1) * i, h = e.slice(l, c);
n && a >= r && h.push(n), o.push(h)
}
return o
}, sum: function (e, t, n) {
var i = 0;
"number" == typeof n && (i += n), t && (e = r.map(e, function (e) {
return e[t]
}));
for (var s = 0; s < e.length; s++) i += e[s];
return i
}, sort: s.makeMacro(["value", "reverse", "case_sensitive", "attribute"], [], function (e, t, n, i) {
return e = r.map(e, function (e) {
return e
}), e.sort(function (e, s) {
var o, a;
return i ? (o = e[i], a = s[i]) : (o = e, a = s), !n && r.isString(o) && r.isString(a) && (o = o.toLowerCase(), a = a.toLowerCase()), a > o ? t ? 1 : -1 : o > a ? t ? -1 : 1 : 0
}), e
}), string: function (e) {
return s.copySafeness(e, e)
}, striptags: function (e, t) {
e = i(e, ""), t = t || !1;
var n = /<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi, r = o.trim(e.replace(n, "")), a = "";
return a = t ? r.replace(/^ +| +$/gm, "").replace(/ +/g, " ").replace(/(\r\n)/g, "\n").replace(/\n\n\n+/g, "\n\n") : r.replace(/\s+/gi, " "), s.copySafeness(e, a)
}, title: function (e) {
e = i(e, "");
for (var t = e.split(" "), n = 0; n < t.length; n++) t[n] = o.capitalize(t[n]);
return s.copySafeness(e, t.join(" "))
}, trim: function (e) {
return s.copySafeness(e, e.replace(/^\s*|\s*$/g, ""))
}, truncate: function (e, t, n, r) {
var o = e;
if (e = i(e, ""), t = t || 255, e.length <= t) return e;
if (n) e = e.substring(0, t); else {
var a = e.lastIndexOf(" ", t);
-1 === a && (a = t), e = e.substring(0, a)
}
return e += void 0 !== r && null !== r ? r : "...", s.copySafeness(o, e)
}, upper: function (e) {
return e = i(e, ""), e.toUpperCase()
}, urlencode: function (e) {
var t = encodeURIComponent;
if (r.isString(e)) return t(e);
var n;
if (r.isArray(e)) n = e.map(function (e) {
return t(e[0]) + "=" + t(e[1])
}); else {
n = [];
for (var i in e) e.hasOwnProperty(i) && n.push(t(i) + "=" + t(e[i]))
}
return n.join("&")
}, urlize: function (e, t, n) {
isNaN(t) && (t = 1 / 0);
var i = n === !0 ? ' rel="nofollow"' : "", r = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/,
s = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i, o = /^https?:\/\/.*$/, a = /^www\./,
l = /\.(?:org|net|com)(?:\:|\/|$)/, c = e.split(/(\s+)/).filter(function (e) {
return e && e.length
}).map(function (e) {
var n = e.match(r), c = n && n[1] || e;
return o.test(c) ? '<a href="' + c + '"' + i + ">" + c.substr(0, t) + "</a>" : a.test(c) ? '<a href="http://' + c + '"' + i + ">" + c.substr(0, t) + "</a>" : s.test(c) ? '<a href="mailto:' + c + '">' + c + "</a>" : l.test(c) ? '<a href="http://' + c + '"' + i + ">" + c.substr(0, t) + "</a>" : e
});
return c.join("")
}, wordcount: function (e) {
e = i(e, "");
var t = e ? e.match(/\w+/g) : null;
return t ? t.length : null
}, "float": function (e, t) {
var n = parseFloat(e);
return isNaN(n) ? t : n
}, "int": function (e, t) {
var n = parseInt(e, 10);
return isNaN(n) ? t : n
}
};
o.d = o["default"], o.e = o.escape, e.exports = o
}, function (e, t, n) {
"use strict";
var i = n(15), r = n(16), s = i.extend({
init: function (e, t) {
this.baseURL = e || ".", t = t || {}, this.useCache = !!t.useCache, this.async = !!t.async
}, resolve: function (e, t) {
throw new Error("relative templates not support in the browser yet")
}, getSource: function (e, t) {
var n, i = this.useCache;
return this.fetch(this.baseURL + "/" + e, function (r, s) {
if (r) if (t) t(r.content); else {
if (404 !== r.status) throw r.content;
n = null
} else n = {src: s, path: e, noCache: !i}, t && t(null, n)
}), n
}, fetch: function (e, t) {
var n, i = !0;
window.XMLHttpRequest ? n = new XMLHttpRequest : window.ActiveXObject && (n = new ActiveXObject("Microsoft.XMLHTTP")), n.onreadystatechange = function () {
4 === n.readyState && i && (i = !1, 0 === n.status || 200 === n.status ? t(null, n.responseText) : t({
status: n.status,
content: n.responseText
}))
}, e += (-1 === e.indexOf("?") ? "?" : "&") + "s=" + (new Date).getTime(), n.open("GET", e, this.async), n.send()
}
});
e.exports = {WebLoader: s, PrecompiledLoader: r}
}, function (e, t, n) {
"use strict";
var i = n(3), r = n(6), s = n(1), o = r.extend({
on: function (e, t) {
this.listeners = this.listeners || {}, this.listeners[e] = this.listeners[e] || [], this.listeners[e].push(t)
}, emit: function (e) {
var t = Array.prototype.slice.call(arguments, 1);
this.listeners && this.listeners[e] && s.each(this.listeners[e], function (e) {
e.apply(null, t)
})
}, resolve: function (e, t) {
return i.resolve(i.dirname(e), t)
}, isRelative: function (e) {
return 0 === e.indexOf("./") || 0 === e.indexOf("../")
}
});
e.exports = o
}, function (e, t, n) {
"use strict";
var i = n(15), r = i.extend({
init: function (e) {
this.precompiled = e || {}
}, getSource: function (e) {
return this.precompiled[e] ? {src: {type: "code", obj: this.precompiled[e]}, path: e} : null
}
});
e.exports = r
}, function (e, t) {
"use strict";
function n(e) {
var t = -1;
return {
current: null, reset: function () {
t = -1, this.current = null
}, next: function () {
return t++, t >= e.length && (t = 0), this.current = e[t], this.current
}
}
}
function i(e) {
e = e || ",";
var t = !0;
return function () {
var n = t ? "" : e;
return t = !1, n
}
}
function r() {
return {
range: function (e, t, n) {
"undefined" == typeof t ? (t = e, e = 0, n = 1) : n || (n = 1);
var i, r = [];
if (n > 0) for (i = e; t > i; i += n) r.push(i); else for (i = e; i > t; i += n) r.push(i);
return r
}, cycler: function () {
return n(Array.prototype.slice.call(arguments))
}, joiner: function (e) {
return i(e)
}
}
}
e.exports = r
}, function (e, t) {
function n() {
"use strict";
var e = this.runtime, t = this.lib, n = e.contextOrFrameLookup;
e.contextOrFrameLookup = function (e, t, i) {
var r = n.apply(this, arguments);
if (void 0 === r) switch (i) {
case"True":
return !0;
case"False":
return !1;
case"None":
return null
}
return r
};
var i = e.memberLookup, r = {
pop: function (e) {
if (void 0 === e) return this.pop();
if (e >= this.length || 0 > e) throw new Error("KeyError");
return this.splice(e, 1)
}, remove: function (e) {
for (var t = 0; t < this.length; t++) if (this[t] === e) return this.splice(t, 1);
throw new Error("ValueError")
}, count: function (e) {
for (var t = 0, n = 0; n < this.length; n++) this[n] === e && t++;
return t
}, index: function (e) {
var t;
if (-1 === (t = this.indexOf(e))) throw new Error("ValueError");
return t
}, find: function (e) {
return this.indexOf(e)
}, insert: function (e, t) {
return this.splice(e, 0, t)
}
}, s = {
items: function () {
var e = [];
for (var t in this) e.push([t, this[t]]);
return e
}, values: function () {
var e = [];
for (var t in this) e.push(this[t]);
return e
}, keys: function () {
var e = [];
for (var t in this) e.push(t);
return e
}, get: function (e, t) {
var n = this[e];
return void 0 === n && (n = t), n
}, has_key: function (e) {
return this.hasOwnProperty(e)
}, pop: function (e, t) {
var n = this[e];
if (void 0 === n && void 0 !== t) n = t; else {
if (void 0 === n) throw new Error("KeyError");
delete this[e]
}
return n
}, popitem: function () {
for (var e in this) {
var t = this[e];
return delete this[e], [e, t]
}
throw new Error("KeyError")
}, setdefault: function (e, t) {
return e in this ? this[e] : (void 0 === t && (t = null), this[e] = t)
}, update: function (e) {
for (var t in e) this[t] = e[t];
return null
}
};
s.iteritems = s.items, s.itervalues = s.values, s.iterkeys = s.keys, e.memberLookup = function (e, n, o) {
return e = e || {}, t.isArray(e) && r.hasOwnProperty(n) ? function () {
return r[n].apply(e, arguments)
} : t.isObject(e) && s.hasOwnProperty(n) ? function () {
return s[n].apply(e, arguments)
} : i.apply(this, arguments)
}
}
e.exports = n
}]);