Comparing version 5.0.1 to 5.0.2
@@ -1,1 +0,1 @@ | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Liquid=e()}}(function(){return function e(t,r,n){function s(o,u){if(!r[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[o]={exports:{}};t[o][0].call(l.exports,function(e){var r=t[o][1][e];return s(r||e)},l,l.exports,e,t,r,n)}return r[o].exports}for(var i="function"==typeof require&&require,o=0;o<n.length;o++)s(n[o]);return s}({1:[function(e,t,r){"use strict";function n(e){return i(e).replace(/&|<|>|"|'/g,function(e){return f[e]})}function s(e){var t=(e+"").split(".");return t.length>1?t[1].length:0}function i(e){return e+""}function o(e){return function(t,r){var n=function(e,t){return Math.max(s(e),s(t))}(t,r);return e(t,r).toFixed(n)}}function u(e){return c.forOwn(h,function(t,r){return e.registerFilter(r,t)})}var a=e("./src/util/strftime.js"),c=e("./src/util/underscore.js"),l=e("./src/syntax.js").isTruthy,f={"&":"&","<":"<",">":">",'"':""","'":"'"},p={"&":"&","<":"<",">":">",""":'"',"'":"'"},h={abs:function(e){return Math.abs(e)},append:function(e,t){return e+t},capitalize:function(e){return i(e).charAt(0).toUpperCase()+e.slice(1)},ceil:function(e){return Math.ceil(e)},concat:function(e,t){return Array.prototype.concat.call(e,t)},date:function(e,t){var r=e;return"now"===e?r=new Date:c.isString(e)&&(r=new Date(e)),function(e){return e instanceof Date&&!isNaN(e.getTime())}(r)?a(r,t):e},default:function(e,t){return l(e)?e:t},divided_by:function(e,t){return e/t},downcase:function(e){return e.toLowerCase()},escape:n,escape_once:function(e){return n(function(e){return i(e).replace(/&(amp|lt|gt|#34|#39);/g,function(e){return p[e]})}(e))},first:function(e){return e[0]},floor:function(e){return Math.floor(e)},join:function(e,t){return e.join(t)},last:function(e){return e[e.length-1]},lstrip:function(e){return i(e).replace(/^\s+/,"")},map:function(e,t){return e.map(function(e){return e[t]})},minus:o(function(e,t){return e-t}),modulo:o(function(e,t){return e%t}),newline_to_br:function(e){return e.replace(/\n/g,"<br />")},plus:o(function(e,t){return Number(e)+Number(t)}),prepend:function(e,t){return t+e},remove:function(e,t){return e.split(t).join("")},remove_first:function(e,t){return e.replace(t,"")},replace:function(e,t,r){return i(e).split(t).join(r)},replace_first:function(e,t,r){return i(e).replace(t,r)},reverse:function(e){return e.reverse()},round:function(e,t){var r=Math.pow(10,t||0);return Math.round(e*r,t)/r},rstrip:function(e){return i(e).replace(/\s+$/,"")},size:function(e){return e.length},slice:function(e,t,r){return e.substr(t,void 0===r?1:r)},sort:function(e,t){return e.sort(t)},split:function(e,t){return i(e).split(t)},strip:function(e){return i(e).trim()},strip_html:function(e){return i(e).replace(/<script.*?<\/script>|<!--.*?-->|<style.*?<\/style>|<.*?>/g,"")},strip_newlines:function(e){return i(e).replace(/\n/g,"")},times:function(e,t){return e*t},truncate:function(e,t,r){return e=i(e),r=void 0===r?"...":r,t=t||16,e.length<=t?e:e.substr(0,t-r.length)+r},truncatewords:function(e,t,r){void 0===r&&(r="...");var n=e.split(" "),s=n.slice(0,t).join(" ");return n.length>t&&(s+=r),s},uniq:function(e){var t={};return(e||[]).filter(function(e){return!t.hasOwnProperty(e)&&(t[e]=!0,!0)})},upcase:function(e){return i(e).toUpperCase()},url_encode:encodeURIComponent};u.filters=h,t.exports=u},{"./src/syntax.js":12,"./src/util/strftime.js":19,"./src/util/underscore.js":20}],2:[function(e,t,r){"use strict";function n(e){(e=i.assign({root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_value_right:!1,trim_value_left:!1,greedy:!0,strict_filters:!1,strict_variables:!1},e)).root=function(e){return Array.isArray(e)?e:i.isString(e)?[e]:[]}(e.root);var t=Object.create(b);return t.init(g(),d(e),e),t}var s=e("./src/scope"),i=e("./src/util/underscore.js"),o=e("./src/util/assert.js"),u=e("./src/tokenizer.js"),a=e("./src/util/fs.js").statFileAsync,c=e("./src/util/fs.js").readFileAsync,l=e("path"),f=e("./src/util/url.js"),p=e("./src/render.js"),h=e("./src/lexical.js"),g=e("./src/tag.js"),d=e("./src/filter.js"),v=e("./src/parser"),m=e("./src/syntax.js"),y=e("./tags"),j=e("./filters"),x=e("./src/util/promise.js").anySeries,w=e("./src/util/error.js"),b={init:function(e,t,r){return r.cache&&(this.cache={}),this.options=r,this.tag=e,this.filter=t,this.parser=v(e,t),this.renderer=p(),y(this),j(this),this},parse:function(e,t){var r=u.parse(e,t,this.options);return this.parser.parse(r)},render:function(e,t,r){r=i.assign({},this.options,r);var n=s.factory(t,r);return this.renderer.renderTemplates(e,n)},parseAndRender:function(e,t,r){var n=this;return Promise.resolve().then(function(){return n.parse(e)}).then(function(e){return n.render(e,t,r)})},renderFile:function(e,t,r){var n=this;return r=i.assign({},r),this.getTemplate(e,r.root).then(function(e){return n.render(e,t,r)})},evalValue:function(e,t){var r=this.parser.parseValue(e.trim());return this.renderer.evalValue(r,t)},registerFilter:function(e,t){return this.filter.register(e,t)},registerTag:function(e,t){return this.tag.register(e,t)},lookup:function(e,t){t=this.options.root.concat(t||[]);var r=(t=i.uniq(t)).map(function(t){return l.resolve(t,e)});return x(r,function(e){return a(e).then(function(){return e})}).catch(function(r){throw r.message=r.code+": Failed to lookup "+e+" in: "+t,r})},getTemplate:function(e,t){return"undefined"==typeof XMLHttpRequest?this.getTemplateFromFile(e,t):this.getTemplateFromUrl(e,t)},getTemplateFromFile:function(e,t){var r=this;return l.extname(e)||(e+=this.options.extname),this.lookup(e,t).then(function(e){if(r.options.cache){var t=r.cache[e];return t?Promise.resolve(t):c(e).then(function(e){return r.parse(e)}).then(function(t){return r.cache[e]=t})}return c(e).then(function(t){return r.parse(t,e)})})},getTemplateFromUrl:function(e,t){var r,n=this;if(f.valid(e)?r=e:(f.extname(e)||(e+=this.options.extname),r=f.resolve(t||this.options.root,e)),this.options.cache){var s=this.cache[e];if(s)return Promise.resolve(s)}return new Promise(function(t,s){var i=new XMLHttpRequest;i.onload=function(){if(i.status>=200&&i.status<300){var r=n.parse(i.responseText);n.options.cache&&(n.cache[e]=r),t(r)}else s(new Error(i.statusText))},i.onerror=function(){s(new Error("An error occurred whilst sending the response."))},i.open("GET",r),i.send()})},express:function(e){e=e||{};var t=this;return function(r,n,s){o(Array.isArray(this.root)||i.isString(this.root),"illegal views root, are you using express.js?"),e.root=this.root,t.renderFile(r,n,e).then(function(e){return s(null,e)}).catch(function(e){return s(e)})}}};n.lexical=h,n.isTruthy=m.isTruthy,n.isFalsy=m.isFalsy,n.evalExp=m.evalExp,n.evalValue=m.evalValue,n.Types={ParseError:w.ParseError,TokenizationEroor:w.TokenizationError,RenderBreakError:w.RenderBreakError,AssertionError:w.AssertionError},t.exports=n},{"./filters":1,"./src/filter.js":6,"./src/lexical.js":7,"./src/parser":9,"./src/render.js":10,"./src/scope":11,"./src/syntax.js":12,"./src/tag.js":13,"./src/tokenizer.js":14,"./src/util/assert.js":15,"./src/util/error.js":16,"./src/util/fs.js":17,"./src/util/promise.js":18,"./src/util/underscore.js":20,"./src/util/url.js":21,"./tags":33,path:4}],3:[function(e,t,r){"use strict"},{}],4:[function(e,t,r){"use strict"},{}],5:[function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,s){"object"===(void 0===r?"undefined":n(r))?t.exports=s():e.resolveUrl=s()}(void 0,function(){return function(){var e=arguments.length;if(0===e)throw new Error("resolveUrl requires at least one argument; got none.");var t=document.createElement("base");if(t.href=arguments[0],1===e)return t.href;var r=document.getElementsByTagName("head")[0];r.insertBefore(t,r.firstChild);for(var n,s=document.createElement("a"),i=1;i<e;i++)s.href=arguments[i],n=s.href,t.href=n;return r.removeChild(t),n}})},{}],6:[function(e,t,r){"use strict";var n=e("./lexical.js"),s=e("./syntax.js"),i=e("./util/assert.js"),o=e("./util/underscore.js"),u=new RegExp(""+n.value.source,"g");t.exports=function(e){e=o.assign({},e);var t={},r={render:function(e,t){var r=this.args.map(function(e){return s.evalValue(e,t)});return r.unshift(e),this.filter.apply(null,r)},parse:function(r){var s=n.filterLine.exec(r);i(s,"illegal filter: "+r);var o=s[1],a=s[2]||"",c=t[o];if("function"!=typeof c){if(e.strict_filters)throw new TypeError("undefined filter: "+o);return this.name=o,this.filter=function(e){return e},this.args=[],this}for(var l=[];s=u.exec(a.trim());){var f=s[0],p=new RegExp(f+"\\s*:","g").exec(s.input);p&&p.index===s.index?l.push("'"+f+"'"):l.push(f)}return this.name=o,this.filter=c,this.args=l,this}};return{construct:function(e){return Object.create(r).parse(e)},register:function(e,r){t[e]=r},clear:function(){t={}}}}},{"./lexical.js":7,"./syntax.js":12,"./util/assert.js":15,"./util/underscore.js":20}],7:[function(e,t,r){"use strict";var n=new RegExp(/'[^']*'/.source+"|"+/"[^"]*"/.source),s=new RegExp("(?:"+n.source+"|[^'\"])*"),i=/-?\d+/,o=/-?\d+\.?\d*|\.?\d+/,u=/true|false/,a=/[\w-]+/,c=new RegExp("\\[(?:"+n.source+"|[\\w-\\.]+)\\]"),l=new RegExp("(?:"+n.source+"|"+u.source+"|"+o.source+")"),f=new RegExp(a.source+"(?:\\."+a.source+"|"+c.source+")*"),p=new RegExp("(?:"+f.source+"|"+o.source+")"),h=new RegExp("\\("+p.source+"\\.\\."+p.source+"\\)"),g=new RegExp("\\(("+p.source+")\\.\\.("+p.source+")\\)"),d=new RegExp("(?:"+f.source+"|"+l.source+"|"+h.source+")"),v=new RegExp("(?:"+a.source+")\\s*:\\s*(?:"+d.source+")"),m=new RegExp("("+a.source+")\\s*:\\s*("+d.source+")","g"),y=new RegExp("^\\s*("+a.source+")\\s*([\\s\\S]*)\\s*$"),j=new RegExp("^"+l.source+"$","i"),x=new RegExp("^"+f.source+"$"),w=new RegExp("^"+o.source+"$"),b=new RegExp("^"+u.source+"$","i"),E=new RegExp("^"+n.source+"$"),T=new RegExp("^"+g.source+"$"),S=new RegExp("^"+i.source+"$"),k=new RegExp("(?:"+a.source+"\\s*:\\s*)?"+d.source),R=new RegExp(k.source+"(\\s*,\\s*"+k.source+")*"),O=new RegExp(a.source+"(?:\\s*:\\s*"+R.source+")?","g"),_=new RegExp("("+a.source+")(?:\\s*:\\s*("+R.source+"))?"),M=new RegExp("^"+_.source+"$");t.exports={quoted:n,number:o,bool:u,literal:l,filter:O,integer:i,hash:v,hashCapture:m,range:h,rangeCapture:g,identifier:a,value:d,quoteBalanced:s,operators:[/\s+or\s+/,/\s+and\s+/,/==|!=|<=|>=|<|>|\s+contains\s+/],quotedLine:E,numberLine:w,boolLine:b,rangeLine:T,literalLine:j,filterLine:M,tagLine:y,isLiteral:function(e){return j.test(e)},isVariable:function(e){return x.test(e)},parseLiteral:function(e){var t=e.match(w);if(t)return Number(e);if(t=e.match(b))return"true"===e.toLowerCase();if(t=e.match(E))return e.slice(1,-1);throw new TypeError("cannot parse '"+e+"' as literal")},isRange:function(e){return T.test(e)},matchValue:function(e){return d.exec(e)},isInteger:function(e){return S.test(e)}}},{}],8:[function(e,t,r){"use strict";t.exports=function(e){return{"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},">":function(e,t){return null!==e&&null!==t&&e>t},"<":function(e,t){return null!==e&&null!==t&&e<t},">=":function(e,t){return null!==e&&null!==t&&e>=t},"<=":function(e,t){return null!==e&&null!==t&&e<=t},contains:function(e,t){return!!e&&("function"==typeof e.indexOf&&e.indexOf(t)>-1)},and:function(t,r){return e(t)&&e(r)},or:function(t,r){return e(t)||e(r)}}}},{}],9:[function(e,t,r){"use strict";var n=e("./lexical.js"),s=e("./util/error.js").ParseError,i=e("./util/assert.js");t.exports=function(e,t){function r(e,t){try{var r=null;return r="tag"===e.type?o(e,t):"value"===e.type?u(e.value):e,r.token=e,r}catch(t){throw new s(t,e)}}function o(t,r){return"continue"===t.name||"break"===t.name?t:e.construct(t,r)}function u(e){var r=n.matchValue(e);i(r,"illegal value string: "+e);var s=r[0];e=e.substr(r.index+r[0].length);for(var o=[];r=n.filter.exec(e);)o.push([r[0].trim()]);return{type:"value",initial:s,filters:o.map(function(e){return t.construct(e)})}}var a={init:function(e){return this.tokens=e,this.handlers={},this},on:function(e,t){return this.handlers[e]=t,this},trigger:function(e,t){var r=this.handlers[e];if("function"==typeof r)return r(t),!0},start:function(){this.trigger("start");for(var e;!this.stopRequested&&(e=this.tokens.shift());)if(!(this.trigger("token",e)||"tag"===e.type&&this.trigger("tag:"+e.name,e))){var t=r(e,this.tokens);this.trigger("template",t)}return this.stopRequested||this.trigger("end"),this},stop:function(){return this.stopRequested=!0,this}};return{parse:function(e){for(var t,n=[];t=e.shift();)n.push(r(t,e));return n},parseTag:o,parseStream:function(e){return Object.create(a).init(e)},parseValue:u}}},{"./lexical.js":7,"./util/assert.js":15,"./util/error.js":16}],10:[function(e,t,r){"use strict";var n=e("./syntax.js"),s=e("./util/promise.js").mapSeries,i=e("./util/error.js").RenderBreakError,o=e("./util/error.js").RenderError,u=e("./util/assert.js"),a={renderTemplates:function(e,t){function r(e){var r=this;return"tag"===e.type?this.renderTag(e,t).then(function(e){return void 0===e?"":e}):"value"===e.type?Promise.resolve().then(function(){return r.evalValue(e,t)}).then(function(e){return void 0===e?"":function(e){return"string"==typeof e?e:JSON.stringify(e)}(e)}):Promise.resolve(e.value)}var n=this;u(t,"unable to evalTemplates: scope undefined");var a="";return s(e,function(e){return r.call(n,e).then(function(e){return a+=e}).catch(function(t){if(t instanceof i)throw t.resolvedHTML=a,t;throw new o(t,e)})}).then(function(){return a})},renderTag:function(e,t){return"continue"===e.name?Promise.reject(new i("continue")):"break"===e.name?Promise.reject(new i("break")):e.render(t)},evalValue:function(e,t){return u(t,"unable to evalValue: scope undefined"),e.filters.reduce(function(e,r){return r.render(e,t)},n.evalExp(e.initial,t))}};t.exports=function(){return Object.create(a)}},{"./syntax.js":12,"./util/assert.js":15,"./util/error.js":16,"./util/promise.js":18}],11:[function(e,t,r){"use strict";var n=e("./util/underscore.js"),s=e("./lexical.js"),i=e("./util/assert.js"),o={getAll:function(){for(var e={},t=this.scopes.length-1;t>=0;t--)n.assign(e,this.scopes[t]);return e},get:function(e){try{return this.getPropertyByPath(this.scopes,e)}catch(e){if(!/undefined variable/.test(e.message)||this.opts.strict_variables)throw e}},set:function(e,t){return function(e,t,r){for(var s=(t+"").replace(/\[/g,".").replace(/\]/g,"").split("."),i=0;i<s.length;i++){var o=s[i];if(!n.isObject(e))return;if(i===s.length-1)return e[o]=r;void 0===e[o]&&(e[o]={}),e=e[o]}}(this.findScopeFor(e),e,t),this},push:function(e){return i(e,"trying to push "+e+" into scopes"),this.scopes.push(e)},pop:function(){return this.scopes.pop()},findScopeFor:function(e){for(var t=this.scopes.length-1;t>=0&&!(e in this.scopes[t]);)t--;return t<0&&(t=this.scopes.length-1),this.scopes[t]},unshift:function(e){return i(e,"trying to push "+e+" into scopes"),this.scopes.unshift(e)},shift:function(){return this.scopes.shift()},getPropertyByPath:function(e,t){var r=this.propertyAccessSeq(t+"");if(!r.length)throw new TypeError("undefined variable: "+t);var s=r.shift(),i=function(e,t){for(var r=t.length-1;r>-1;r--){var n=t[r];if(n.hasOwnProperty(e))return n[e]}throw new TypeError("undefined variable: "+e)}(s,e);if(n.isNil(i))throw new TypeError("undefined variable: "+s);for(;r.length;)if(s=r.shift(),i=function(e,t){return"size"===e&&(n.isArray(t)||n.isString(t))?t.length:t[e]}(s,i),n.isNil(i))throw new TypeError("undefined variable: "+s);return i},propertyAccessSeq:function(e){function t(){o.length&&n.push(o),o=""}for(var r,n=[],o="",u=0;u<e.length;)switch(e[u]){case"[":t();var a=e[u+1];/['"]/.test(a)?(r=e.indexOf(a,u+2),i(-1!==r,"unbalanced "+a+": "+e),o=e.slice(u+2,r),t(),u=r+2):(r=function(e,t){for(var r=1,n=t;n<e.length;n++)if("["===e[n]&&r++,"]"===e[n]&&0==--r)return n;return-1}(e,u+1),i(-1!==r,"unbalanced []: "+e),o=e.slice(u+1,r),s.isInteger(o)||(o=this.get(o)),t(),u=r+1);break;case".":t(),u++;break;default:o+=e[u],u++}return t(),n}};r.factory=function(e,t){var r=Object.create(o);return r.opts=n.assign({dynamicPartials:!0,strict_variables:!1,strict_filters:!1,blocks:{},root:[]},t),r.scopes=[e||{}],r}},{"./lexical.js":7,"./util/assert.js":15,"./util/underscore.js":20}],12:[function(e,t,r){"use strict";function n(e,t){c(t,"unable to evalExp: scope undefined");for(var r,i=a.operators,o=0;o<i.length;o++){var l=i[o],f=new RegExp("^("+a.quoteBalanced.source+")("+l.source+")("+a.quoteBalanced.source+")$");if(r=e.match(f)){var p=n(r[1],t);return(0,u[r[2].trim()])(p,n(r[3],t))}}if(r=e.match(a.rangeLine)){for(var h=s(r[1],t),g=s(r[2],t),d=[],v=h;v<=g;v++)d.push(v);return d}return s(e,t)}function s(e,t){if(e=e&&e.trim()){if(a.isLiteral(e))return a.parseLiteral(e);if(a.isVariable(e))return t.get(e);throw new TypeError("cannot eval '"+e+"' as value")}}function i(e){return!o(e)}function o(e){return!1===e||void 0===e||null===e}var u=e("./operators.js")(i),a=e("./lexical.js"),c=e("../src/util/assert.js");t.exports={evalExp:n,evalValue:s,isTruthy:i,isFalsy:o}},{"../src/util/assert.js":15,"./lexical.js":7,"./operators.js":8}],13:[function(e,t,r){"use strict";var n=e("./lexical.js"),s=e("./syntax.js"),i=e("./util/assert.js");t.exports=function(){var e={},t={render:function(e){var t=function(e,t){var r,i={};for(n.hashCapture.lastIndex=0;r=n.hashCapture.exec(e);){var o=r[1],u=r[2];i[o]=s.evalValue(u,t)}return i}(this.token.args,e),r=this.tagImpl;return"function"!=typeof r.render?Promise.resolve(""):Promise.resolve().then(function(){return r.render(e,t)})},parse:function(t,r){this.type="tag",this.token=t,this.name=t.name;var n=e[this.name];i(n,"tag "+this.name+" not found"),this.tagImpl=Object.create(n),this.tagImpl.parse&&this.tagImpl.parse(t,r)}};return{construct:function(e,r){var n=Object.create(t);return n.parse(e,r),n},register:function(t,r){e[t]=r},clear:function(){e={}}}}},{"./lexical.js":7,"./syntax.js":12,"./util/assert.js":15}],14:[function(e,t,r){"use strict";var n=e("./lexical.js"),s=e("./util/error.js").TokenizationError,i=e("./util/underscore.js"),o=e("./whitespace-ctrl.js"),u=e("./util/assert.js");r.parse=function(e,t,r){function a(t,r){var n=e.slice(t,r);return f=i.last(n.split("\n")).length,{type:"html",raw:n,value:n}}u(i.isString(e),"illegal input");for(var c,l=/({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g,f=0,p=function(e){var t=0,r=-1;return{get:function(n){var s=e.slice(r+1,n).split("\n");return t+=s.length-1,r=n,t+1}}}(e),h=0,g=[];c=l.exec(e);h=l.lastIndex)c.index>h&&g.push(a(h,c.index)),g.push(c[1]?function(r,i,o){var u=i.match(n.tagLine),a={type:"tag",indent:f,line:p.get(o),trim_left:"{%-"===r.slice(0,3),trim_right:"-%}"===r.slice(-3),raw:r,value:i,input:e,file:t};if(!u)throw new s("illegal tag syntax",a);return a.name=u[1],a.args=u[2],a}(c[1],c[2].trim(),c.index):function(r,n,s){return{type:"value",line:p.get(s),trim_left:"{{-"===r.slice(0,3),trim_right:"-}}"===r.slice(-3),raw:r,value:n,input:e,file:t}}(c[3],c[4].trim(),c.index));return e.length>h&&g.push(a(h,e.length)),o(g,r),g},r.whiteSpaceCtrl=o},{"./lexical.js":7,"./util/assert.js":15,"./util/error.js":16,"./util/underscore.js":20,"./whitespace-ctrl.js":22}],15:[function(e,t,r){"use strict";var n=e("./error.js").AssertionError;t.exports=function(e,t){if(!e)throw t=t||"expect "+e+" to be true",new n(t)}},{"./error.js":16}],16:[function(e,t,r){"use strict";function n(){this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}function s(e,t){n.call(this),this.input=t.input,this.line=t.line,this.file=t.file;var r=function(e,t){var r=e.split("\n"),n=Math.max(t-2,1),s=Math.min(t+3,r.length);return l.range(n,s+1).map(function(e){return[e===t?">> ":" ",function(e,t){var r=(t+"").length,n=e+"";return Array(r-n.length).join(" ")+n}(e,s),"| ",r[e-1]].join("")}).join("\n")}(t.input,t.line);this.message=function(e,t){e=e||"",t.file&&(e+=", file:"+t.file);t.line&&(e+=", line:"+t.line);return e}(e.message,t),this.stack=r+"\n"+(this.stack||this.message)+(e.stack?"\nFrom "+e.stack:"")}function i(e,t){s.call(this,{message:e},t)}function o(e,t){l.assign(this,e),this.originalError=e,s.call(this,e,t)}function u(e,t){if(e instanceof u)return e;l.assign(this,e),this.originalError=e,s.call(this,e,t.token)}function a(e){n.call(this),this.message=e+""}function c(e){n.call(this),this.message=e+""}var l=e("./underscore.js");(i.prototype=Object.create(Error.prototype)).constructor=i,(o.prototype=Object.create(Error.prototype)).constructor=o,(u.prototype=Object.create(Error.prototype)).constructor=u,(a.prototype=Object.create(Error.prototype)).constructor=a,(c.prototype=Object.create(Error.prototype)).constructor=c,t.exports={TokenizationError:i,ParseError:o,RenderBreakError:a,AssertionError:c,RenderError:u}},{"./underscore.js":20}],17:[function(e,t,r){"use strict";var n=e("fs");t.exports={readFileAsync:function(e){return new Promise(function(t,r){n.readFile(e,"utf8",function(e,n){e?r(e):t(n)})})},statFileAsync:function(e){return new Promise(function(t,r){n.stat(e,function(e,n){return e?r(e):t(n)})})}}},{fs:3}],18:[function(e,t,r){"use strict";r.anySeries=function(e,t){var r=Promise.reject(new Error("init"));return e.forEach(function(n,s){r=r.catch(function(r){return t(n,s,e)})}),r},r.mapSeries=function(e,t){var r=Promise.resolve("init"),n=[];return e.forEach(function(s,i){r=r.then(function(){return t(s,i,e)}).then(function(e){return n.push(e)})}),r.then(function(){return n})}},{}],19:[function(e,t,r){"use strict";var n=["January","February","March","April","May","June","July","August","September","October","November","December"],s=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],i=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],u={1:"st",2:"nd",3:"rd",default:"th"},a={daysInMonth:function(e){return[31,a.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31]},getDayOfYear:function(e){for(var t=0,r=0;r<e.getMonth();++r)t+=a.daysInMonth(e)[r];return t+e.getDate()},getWeekOfYear:function(e,t){var r=this.getDayOfYear(e)+(t-e.getDay()),n=7-new Date(e.getFullYear(),0,1).getDay()+t;return c.pad(Math.floor((r-n)/7)+1,2)},isLeapYear:function(e){var t=e.getFullYear();return!(0!=(3&t)||!(t%100||t%400==0&&t))},getSuffix:function(e){var t=e.getDate().toString(),r=parseInt(t.slice(-1));return u[r]||u.default},century:function(e){return parseInt(e.getFullYear().toString().substring(0,2),10)}},c={pad:function(e,t,r){r||(r="0");for(var n=e.toString(),s=t-n.length;s-- >0;)n=r+n;return n}},l={a:function(e){return o[e.getDay()]},A:function(e){return i[e.getDay()]},b:function(e){return s[e.getMonth()]},B:function(e){return n[e.getMonth()]},c:function(e){return e.toLocaleString()},C:function(e){return a.century(e)},d:function(e){return c.pad(e.getDate(),2)},e:function(e){return c.pad(e.getDate(),2," ")},H:function(e){return c.pad(e.getHours(),2)},I:function(e){return c.pad(e.getHours()%12||12,2)},j:function(e){return c.pad(a.getDayOfYear(e),3)},k:function(e){return c.pad(e.getHours(),2," ")},l:function(e){return c.pad(e.getHours()%12||12,2," ")},L:function(e){return c.pad(e.getMilliseconds(),3)},m:function(e){return c.pad(e.getMonth()+1,2)},M:function(e){return c.pad(e.getMinutes(),2)},p:function(e){return e.getHours()<12?"AM":"PM"},P:function(e){return e.getHours()<12?"am":"pm"},q:function(e){return a.getSuffix(e)},s:function(e){return Math.round(e.valueOf()/1e3)},S:function(e){return c.pad(e.getSeconds(),2)},u:function(e){return e.getDay()||7},U:function(e){return a.getWeekOfYear(e,0)},w:function(e){return e.getDay()},W:function(e){return a.getWeekOfYear(e,1)},x:function(e){return e.toLocaleDateString()},X:function(e){return e.toLocaleTimeString()},y:function(e){return e.getFullYear().toString().substring(2,4)},Y:function(e){return e.getFullYear()},z:function(e){var t=e.getTimezoneOffset()/60*100;return(t>0?"-":"+")+c.pad(Math.abs(t),4)},"%":function(){return"%"}};l.h=l.b,l.N=l.L;t.exports=function(e,t){for(var r="",n=t;;){var s=/%./g,i=s.exec(n);if(!i)return r+n;r+=n.slice(0,s.lastIndex-2),n=n.slice(s.lastIndex);var o=i[0].charAt(1),u=l[o];r+=u?u.call(this,e):"%"+o}}},{}],20:[function(e,t,r){"use strict";function n(e,t){e=e||{};for(var r in e)if(e.hasOwnProperty(r)&&!1===t(e[r],r,e))break;return e}function s(e){var t=void 0===e?"undefined":i(e);return null!=e&&("object"===t||"function"===t)}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.prototype.toString;r.isString=function(e){return e instanceof String||"string"==typeof e},r.isObject=s,r.isArray=function(e){return"[object Array]"===o.call(e)},r.isNil=function(e){return null===e||void 0===e},r.isError=function(e){return"Error"===Object.prototype.toString.call(e).substr(-6,5)||"string"==typeof e.message&&"string"==typeof e.name},r.range=function(e,t,r){1===arguments.length&&(t=e,e=0),r=r||1;for(var n=[],s=e;s<t;s+=r)n.push(s);return n},r.last=function(e){return e[e.length-1]},r.forOwn=n,r.assign=function(e){return e=s(e)?e:{},Array.prototype.slice.call(arguments,1).forEach(function(t){!function(e,t){n(t,function(t,r){e[r]=t})}(e,t)}),e},r.uniq=function(e){for(var t={},r=[],n=0,s=e.length;n<s;++n)t.hasOwnProperty(e[n])||(r.push(e[n]),t[e[n]]=1);return r}},{}],21:[function(e,t,r){"use strict";var n=e("resolve-url"),s=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/,i=/^(?:\w+:)?\/\/([^\s.]+\.\S{2}|localhost[:?\d]*)\S*$/;r.extname=function(e){return s.exec(e).slice(1)[3]},r.valid=function(e){return i.test(e)},r.resolve=function(e,t){return"[object Array]"===Object.prototype.toString.call(e)&&(e=e[0]),e&&"/"!==e.charAt(e.length-1)&&(e+="/"),n(e,t)}},{"resolve-url":5}],22:[function(e,t,r){"use strict";var n=e("./util/underscore.js");t.exports=function(e,t){t=n.assign({greedy:!0},t);var r=!1;e.forEach(function(n,s){(function(e,t,r){return!t&&("tag"===e.type?e.trim_left||r.trim_tag_left:"value"===e.type?e.trim_left||r.trim_value_left:void 0)})(n,r,t)&&function(e,t){if(e&&"html"===e.type){var r=t?/\s+$/g:/[\t\r ]*$/g;e.value=e.value.replace(r,"")}}(e[s-1],t.greedy),"tag"===n.type&&"raw"===n.name&&(r=!0),"tag"===n.type&&"endraw"===n.name&&(r=!1),function(e,t,r){return!t&&("tag"===e.type?e.trim_right||r.trim_tag_right:"value"===e.type?e.trim_right||r.trim_value_right:void 0)}(n,r,t)&&function(e,t){if(e&&"html"===e.type){var r=t?/^\s+/g:/^[\t\r ]*\n?/g;e.value=e.value.replace(r,"")}}(e[s+1],t.greedy)})}},{"./util/underscore.js":20}],23:[function(e,t,r){"use strict";var n=e("..").lexical,s=new RegExp("("+n.identifier.source+")\\s*=(.*)"),i=e("../src/util/assert.js");t.exports=function(e){e.registerTag("assign",{parse:function(e){var t=e.args.match(s);i(t,"illegal token "+e.raw),this.key=t[1],this.value=t[2]},render:function(t){return t.set(this.key,e.evalValue(this.value,t)),Promise.resolve("")}})}},{"..":2,"../src/util/assert.js":15}],24:[function(e,t,r){"use strict";var n=e("..").lexical,s=new RegExp("("+n.identifier.source+")"),i=e("../src/util/assert.js");t.exports=function(e){e.registerTag("capture",{parse:function(t,r){var n=this,o=t.args.match(s);i(o,t.args+" not valid identifier"),this.variable=o[1],this.templates=[];var u=e.parser.parseStream(r);u.on("tag:endcapture",function(e){return u.stop()}).on("template",function(e){return n.templates.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")}),u.start()},render:function(t,r){var n=this;return e.renderer.renderTemplates(this.templates,t).then(function(e){t.set(n.variable,e)})}})}},{"..":2,"../src/util/assert.js":15}],25:[function(e,t,r){"use strict";var n=e("..");t.exports=function(e){e.registerTag("case",{parse:function(t,r){var n=this;this.cond=t.args,this.cases=[],this.elseTemplates=[];var s=[],i=e.parser.parseStream(r).on("tag:when",function(e){n.cases.push({val:e.args,templates:s=[]})}).on("tag:else",function(){return s=n.elseTemplates}).on("tag:endcase",function(e){return i.stop()}).on("template",function(e){return s.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t,r){for(var s=0;s<this.cases.length;s++){var i=this.cases[s];if(n.evalExp(i.val,t)===n.evalExp(this.cond,t))return e.renderer.renderTemplates(i.templates,t)}return e.renderer.renderTemplates(this.elseTemplates,t)}})}},{"..":2}],26:[function(e,t,r){"use strict";t.exports=function(e){e.registerTag("comment",{parse:function(t,r){var n=e.parser.parseStream(r);n.on("token",function(e){"endcomment"===e.name&&n.stop()}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")}),n.start()}})}},{}],27:[function(e,t,r){"use strict";var n=e(".."),s=n.lexical,i=new RegExp("^(?:("+s.value.source+")\\s*:\\s*)?(.*)$"),o=new RegExp(s.value.source,"g"),u=e("../src/util/assert.js");t.exports=function(e){e.registerTag("cycle",{parse:function(e,t){var r=i.exec(e.args);u(r,"illegal tag: "+e.raw),this.group=r[1]||"";var n=r[2];for(this.candidates=[];r=o.exec(n);)this.candidates.push(r[0]);u(this.candidates.length,"empty candidates: "+e.raw)},render:function(e,t){var r="cycle:"+n.evalValue(this.group,e)+":"+this.candidates.join(","),s=e.opts.groups=e.opts.groups||{},i=s[r];void 0===i&&(i=s[r]=0);var o=this.candidates[i];return i=(i+1)%this.candidates.length,s[r]=i,Promise.resolve(n.evalValue(o,e))}})}},{"..":2,"../src/util/assert.js":15}],28:[function(e,t,r){"use strict";var n=e("..").lexical,s=e("../src/util/assert.js");t.exports=function(e){e.registerTag("decrement",{parse:function(e){var t=e.args.match(n.identifier);s(t,"illegal identifier "+e.args),this.variable=t[0]},render:function(e,t){var r=e.get(this.variable);"number"!=typeof r&&(r=0),e.set(this.variable,r-1)}})}},{"..":2,"../src/util/assert.js":15}],29:[function(e,t,r){"use strict";var n=e(".."),s=n.lexical,i=e("../src/util/promise.js").mapSeries,o=e("../src/util/underscore.js"),u=n.Types.RenderBreakError,a=e("../src/util/assert.js"),c=new RegExp("^("+s.identifier.source+")\\s+in\\s+("+s.value.source+")(?:\\s+"+s.hash.source+")*(?:\\s+(reversed))?(?:\\s+"+s.hash.source+")*$");t.exports=function(e){e.registerTag("for",{parse:function(t,r){var n=this,s=c.exec(t.args);a(s,"illegal tag: "+t.raw),this.variable=s[1],this.collection=s[2],this.reversed=!!s[3],this.templates=[],this.elseTemplates=[];var i,o=e.parser.parseStream(r).on("start",function(){return i=n.templates}).on("tag:else",function(){return i=n.elseTemplates}).on("tag:endfor",function(){return o.stop()}).on("template",function(e){return i.push(e)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});o.start()},render:function(t,r){var s=this,a=n.evalExp(this.collection,t);if(Array.isArray(a)||(o.isString(a)&&a.length>0?a=[a]:o.isObject(a)&&(a=Object.keys(a).map(function(e){return[e,a[e]]}))),!Array.isArray(a)||!a.length)return e.renderer.renderTemplates(this.elseTemplates,t);var c=r.offset||0,l=void 0===r.limit?a.length:r.limit;a=a.slice(c,c+l),this.reversed&&a.reverse();var f=a.map(function(e,t){var r={};return r[s.variable]=e,r.forloop={first:0===t,index:t+1,index0:t,last:t===a.length-1,length:a.length,rindex:a.length-t,rindex0:a.length-t-1},r}),p="";return i(f,function(r){return Promise.resolve().then(function(){return t.push(r)}).then(function(){return e.renderer.renderTemplates(s.templates,t)}).then(function(e){return p+=e}).catch(function(e){if(!(e instanceof u&&(p+=e.resolvedHTML,"continue"===e.message)))throw e}).then(function(){return t.pop()})}).catch(function(e){if(!(e instanceof u&&"break"===e.message))throw e}).then(function(){return p})}})}},{"..":2,"../src/util/assert.js":15,"../src/util/promise.js":18,"../src/util/underscore.js":20}],30:[function(e,t,r){"use strict";var n=e("..");t.exports=function(e){e.registerTag("if",{parse:function(t,r){var n=this;this.branches=[],this.elseTemplates=[];var s,i=e.parser.parseStream(r).on("start",function(){return n.branches.push({cond:t.args,templates:s=[]})}).on("tag:elsif",function(e){n.branches.push({cond:e.args,templates:s=[]})}).on("tag:else",function(){return s=n.elseTemplates}).on("tag:endif",function(e){return i.stop()}).on("template",function(e){return s.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t,r){for(var s=0;s<this.branches.length;s++){var i=this.branches[s],o=n.evalExp(i.cond,t);if(n.isTruthy(o))return e.renderer.renderTemplates(i.templates,t)}return e.renderer.renderTemplates(this.elseTemplates,t)}})}},{"..":2}],31:[function(e,t,r){"use strict";var n=e(".."),s=n.lexical,i=new RegExp("with\\s+("+s.value.source+")"),o=/[^\s,]+/,u=e("../src/util/assert.js");t.exports=function(e){e.registerTag("include",{parse:function(e){var t=o.exec(e.args);t&&(this.staticValue=t[0]),(t=s.value.exec(e.args))&&(this.value=t[0]),(t=i.exec(e.args))&&(this.with=t[1])},render:function(t,r){var s=t.opts.dynamicPartials?n.evalValue(this.value,t):this.staticValue;u(s,"cannot include with empty filename");var i=t.opts.blocks,o=t.opts.blockMode;return t.opts.blocks={},t.opts.blockMode="output",this.with&&(r[s]=n.evalValue(this.with,t)),e.getTemplate(s,t.opts.root).then(function(n){return t.push(r),e.renderer.renderTemplates(n,t)}).then(function(e){return t.pop(),t.opts.blocks=i,t.opts.blockMode=o,e})}})}},{"..":2,"../src/util/assert.js":15}],32:[function(e,t,r){"use strict";var n=e(".."),s=e("../src/util/assert.js"),i=n.lexical;t.exports=function(e){e.registerTag("increment",{parse:function(e){var t=e.args.match(i.identifier);s(t,"illegal identifier "+e.args),this.variable=t[0]},render:function(e,t){var r=e.get(this.variable);"number"!=typeof r&&(r=0),e.set(this.variable,r+1)}})}},{"..":2,"../src/util/assert.js":15}],33:[function(e,t,r){"use strict";t.exports=function(t){e("./assign.js")(t),e("./capture.js")(t),e("./case.js")(t),e("./comment.js")(t),e("./cycle.js")(t),e("./decrement.js")(t),e("./for.js")(t),e("./if.js")(t),e("./include.js")(t),e("./increment.js")(t),e("./layout.js")(t),e("./raw.js")(t),e("./tablerow.js")(t),e("./unless.js")(t)}},{"./assign.js":23,"./capture.js":24,"./case.js":25,"./comment.js":26,"./cycle.js":27,"./decrement.js":28,"./for.js":29,"./if.js":30,"./include.js":31,"./increment.js":32,"./layout.js":34,"./raw.js":35,"./tablerow.js":36,"./unless.js":37}],34:[function(e,t,r){"use strict";var n=e(".."),s=n.lexical,i=e("../src/util/assert.js"),o=/\S+/;t.exports=function(e){e.registerTag("layout",{parse:function(t,r){var n=o.exec(t.args);n&&(this.staticLayout=n[0]),(n=s.value.exec(t.args))&&(this.layout=n[0]),this.tpls=e.parser.parse(r)},render:function(t,r){var s=t.opts.dynamicPartials?n.evalValue(this.layout,t):this.staticLayout;return i(s,"cannot apply layout with empty filename"),t.opts.blockMode="store",e.renderer.renderTemplates(this.tpls,t).then(function(r){return void 0===t.opts.blocks[""]&&(t.opts.blocks[""]=r),e.getTemplate(s,t.opts.root)}).then(function(n){return t.push(r),t.opts.blockMode="output",e.renderer.renderTemplates(n,t)}).then(function(e){return t.pop(),e})}}),e.registerTag("block",{parse:function(t,r){var n=this,s=/\w+/.exec(t.args);this.block=s?s[0]:"",this.tpls=[];var i=e.parser.parseStream(r).on("tag:endblock",function(){return i.stop()}).on("template",function(e){return n.tpls.push(e)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t){var r=this;return Promise.resolve(t.opts.blocks[this.block]).then(function(n){return void 0===n?e.renderer.renderTemplates(r.tpls,t):n}).then(function(e){return"store"===t.opts.blockMode?(t.opts.blocks[r.block]=e,""):e})}})}},{"..":2,"../src/util/assert.js":15}],35:[function(e,t,r){"use strict";t.exports=function(e){e.registerTag("raw",{parse:function(t,r){var n=this;this.tokens=[];var s=e.parser.parseStream(r);s.on("token",function(e){"endraw"===e.name?s.stop():n.tokens.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")}),s.start()},render:function(e,t){var r=this.tokens.map(function(e){return e.raw}).join("");return Promise.resolve(r)}})}},{}],36:[function(e,t,r){"use strict";var n=e(".."),s=e("../src/util/promise.js").mapSeries,i=n.lexical,o=e("../src/util/assert.js"),u=new RegExp("^("+i.identifier.source+")\\s+in\\s+("+i.value.source+")(?:\\s+"+i.hash.source+")*$");t.exports=function(e){e.registerTag("tablerow",{parse:function(t,r){var n=this,s=u.exec(t.args);o(s,"illegal tag: "+t.raw),this.variable=s[1],this.collection=s[2],this.templates=[];var i,a=e.parser.parseStream(r).on("start",function(){return i=n.templates}).on("tag:endtablerow",function(e){return a.stop()}).on("template",function(e){return i.push(e)}).on("end",function(){throw new Error("tag "+t.raw+" not closed")});a.start()},render:function(t,r){var i,o,u=this,a=n.evalExp(this.collection,t)||[],c="",l=r.offset||0,f=void 0===r.limit?a.length:r.limit,p=r.cols;a=a.slice(l,l+f),p||(p=a.length);var h=[];return a.some(function(e,t){var r={};r[u.variable]=e,h.push(r)}),s(h,function(r,n){return i=Math.floor(n/p)+1,1===(o=n%p+1)&&(1!==i&&(c+="</tr>"),c+='<tr class="row'+i+'">'),c+='<td class="col'+o+'">',t.push(r),e.renderer.renderTemplates(u.templates,t).then(function(e){return t.pop(r),c+=e,c+="</td>"})}).then(function(){return i>0&&(c+="</tr>"),c})}})}},{"..":2,"../src/util/assert.js":15,"../src/util/promise.js":18}],37:[function(e,t,r){"use strict";var n=e("..");t.exports=function(e){e.registerTag("unless",{parse:function(t,r){var n=this;this.templates=[],this.elseTemplates=[];var s,i=e.parser.parseStream(r).on("start",function(e){s=n.templates,n.cond=t.args}).on("tag:else",function(){return s=n.elseTemplates}).on("tag:endunless",function(e){return i.stop()}).on("template",function(e){return s.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});i.start()},render:function(t,r){var s=n.evalExp(this.cond,t);return n.isFalsy(s)?e.renderer.renderTemplates(this.templates,t):e.renderer.renderTemplates(this.elseTemplates,t)}})}},{"..":2}]},{},[2])(2)}); | ||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Liquid=e()}}(function(){return function i(o,u,a){function c(t,e){if(!u[t]){if(!o[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(l)return l(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var s=u[t]={exports:{}};o[t][0].call(s.exports,function(e){return c(o[t][1][e]||e)},s,s.exports,i,o,u,a)}return u[t].exports}for(var l="function"==typeof require&&require,e=0;e<a.length;e++)c(a[e]);return c}({1:[function(e,t,r){"use strict";var s=e("./src/util/strftime.js"),i=e("./src/util/underscore.js"),n=e("./src/syntax.js").isTruthy,o={"&":"&","<":"<",">":">",'"':""","'":"'"},u={"&":"&","<":"<",">":">",""":'"',"'":"'"},a={abs:function(e){return Math.abs(e)},append:function(e,t){return e+t},capitalize:function(e){return f(e).charAt(0).toUpperCase()+e.slice(1)},ceil:function(e){return Math.ceil(e)},concat:function(e,t){return Array.prototype.concat.call(e,t)},date:function(e,t){var r,n=e;return"now"===e?n=new Date:i.isString(e)&&(n=new Date(e)),(r=n)instanceof Date&&!isNaN(r.getTime())?s(n,t):e},default:function(e,t){return n(e)?e:t},divided_by:function(e,t){return e/t},downcase:function(e){return e.toLowerCase()},escape:c,escape_once:function(e){return c(f(e).replace(/&(amp|lt|gt|#34|#39);/g,function(e){return u[e]}))},first:function(e){return e[0]},floor:function(e){return Math.floor(e)},join:function(e,t){return e.join(t)},last:function(e){return i.last(e)},lstrip:function(e){return f(e).replace(/^\s+/,"")},map:function(e,t){return e.map(function(e){return e[t]})},minus:p(function(e,t){return e-t}),modulo:p(function(e,t){return e%t}),newline_to_br:function(e){return e.replace(/\n/g,"<br />")},plus:p(function(e,t){return Number(e)+Number(t)}),prepend:function(e,t){return t+e},remove:function(e,t){return e.split(t).join("")},remove_first:function(e,t){return e.replace(t,"")},replace:function(e,t,r){return f(e).split(t).join(r)},replace_first:function(e,t,r){return f(e).replace(t,r)},reverse:function(e){return e.reverse()},round:function(e,t){var r=Math.pow(10,t||0);return Math.round(e*r,t)/r},rstrip:function(e){return f(e).replace(/\s+$/,"")},size:function(e){return e.length},slice:function(e,t,r){return e.substr(t,void 0===r?1:r)},sort:function(e,t){return e.sort(t)},split:function(e,t){return f(e).split(t)},strip:function(e){return f(e).trim()},strip_html:function(e){return f(e).replace(/<script.*?<\/script>|<!--.*?-->|<style.*?<\/style>|<.*?>/g,"")},strip_newlines:function(e){return f(e).replace(/\n/g,"")},times:function(e,t){return e*t},truncate:function(e,t,r){return r=void 0===r?"...":r,t=t||16,(e=f(e)).length<=t?e:e.substr(0,t-r.length)+r},truncatewords:function(e,t,r){void 0===r&&(r="...");var n=e.split(" "),s=n.slice(0,t).join(" ");return n.length>t&&(s+=r),s},uniq:function(e){var t={};return(e||[]).filter(function(e){return!t.hasOwnProperty(e)&&(t[e]=!0)})},upcase:function(e){return f(e).toUpperCase()},url_encode:encodeURIComponent};function c(e){return f(e).replace(/&|<|>|"|'/g,function(e){return o[e]})}function l(e){var t=(e+"").split(".");return 1<t.length?t[1].length:0}function f(e){return e+""}function p(i){return function(e,t){var r,n,s=(r=e,n=t,Math.max(l(r),l(n)));return i(e,t).toFixed(s)}}function h(r){return i.forOwn(a,function(e,t){return r.registerFilter(t,e)})}h.filters=a,t.exports=h},{"./src/syntax.js":12,"./src/util/strftime.js":19,"./src/util/underscore.js":20}],2:[function(e,t,r){"use strict";var s=e("./src/scope"),i=e("./src/util/underscore.js"),o=e("./src/util/assert.js"),n=e("./src/tokenizer.js"),u=e("./src/util/fs.js").statFileAsync,a=e("./src/util/fs.js").readFileAsync,c=e("path"),l=e("./src/util/url.js"),f=e("./src/render.js"),p=e("./src/lexical.js"),h=e("./src/tag.js"),g=e("./src/filter.js"),d=e("./src/parser"),v=e("./src/syntax.js"),m=e("./tags"),y=e("./filters"),j=e("./src/util/promise.js").anySeries,x=e("./src/util/error.js"),w={init:function(e,t,r){return r.cache&&(this.cache={}),this.options=r,this.tag=e,this.filter=t,this.parser=d(e,t),this.renderer=f(),m(this),y(this),this},parse:function(e,t){var r=n.parse(e,t,this.options);return this.parser.parse(r)},render:function(e,t,r){r=i.assign({},this.options,r);var n=s.factory(t,r);return this.renderer.renderTemplates(e,n)},parseAndRender:function(e,t,r){var n=this;return Promise.resolve().then(function(){return n.parse(e)}).then(function(e){return n.render(e,t,r)})},renderFile:function(e,t,r){var n=this;return r=i.assign({},r),this.getTemplate(e,r.root).then(function(e){return n.render(e,t,r)})},evalValue:function(e,t){var r=this.parser.parseValue(e.trim());return this.renderer.evalValue(r,t)},registerFilter:function(e,t){return this.filter.register(e,t)},registerTag:function(e,t){return this.tag.register(e,t)},lookup:function(t,r){r=this.options.root.concat(r||[]);var e=(r=i.uniq(r)).map(function(e){return c.resolve(e,t)});return j(e,function(e){return u(e).then(function(){return e})}).catch(function(e){throw e.message=e.code+": Failed to lookup "+t+" in: "+r,e})},getTemplate:function(e,t){return"undefined"==typeof XMLHttpRequest?this.getTemplateFromFile(e,t):this.getTemplateFromUrl(e,t)},getTemplateFromFile:function(e,t){var r=this;return c.extname(e)||(e+=this.options.extname),this.lookup(e,t).then(function(t){if(r.options.cache){var e=r.cache[t];return e?Promise.resolve(e):a(t).then(function(e){return r.parse(e)}).then(function(e){return r.cache[t]=e})}return a(t).then(function(e){return r.parse(e,t)})})},getTemplateFromUrl:function(s,e){var i,o=this;if(l.valid(s)?i=s:(l.extname(s)||(s+=this.options.extname),i=l.resolve(e||this.options.root,s)),this.options.cache){var t=this.cache[s];if(t)return Promise.resolve(t)}return new Promise(function(t,r){var n=new XMLHttpRequest;n.onload=function(){if(200<=n.status&&n.status<300){var e=o.parse(n.responseText);o.options.cache&&(o.cache[s]=e),t(e)}else r(new Error(n.statusText))},n.onerror=function(){r(new Error("An error occurred whilst sending the response."))},n.open("GET",i),n.send()})},express:function(n){n=n||{};var s=this;return function(e,t,r){o(Array.isArray(this.root)||i.isString(this.root),"illegal views root, are you using express.js?"),n.root=this.root,s.renderFile(e,t,n).then(function(e){return r(null,e)}).catch(function(e){return r(e)})}}};function b(e){var t;(e=i.assign({root:["."],cache:!1,extname:"",dynamicPartials:!0,trim_tag_right:!1,trim_tag_left:!1,trim_value_right:!1,trim_value_left:!1,greedy:!0,strict_filters:!1,strict_variables:!1},e)).root=(t=e.root,Array.isArray(t)?t:i.isString(t)?[t]:[]);var r=Object.create(w);return r.init(h(),g(e),e),r}b.lexical=p,b.isTruthy=v.isTruthy,b.isFalsy=v.isFalsy,b.evalExp=v.evalExp,b.evalValue=v.evalValue,b.Types={ParseError:x.ParseError,TokenizationEroor:x.TokenizationError,RenderBreakError:x.RenderBreakError,AssertionError:x.AssertionError},t.exports=b},{"./filters":1,"./src/filter.js":6,"./src/lexical.js":7,"./src/parser":9,"./src/render.js":10,"./src/scope":11,"./src/syntax.js":12,"./src/tag.js":13,"./src/tokenizer.js":14,"./src/util/assert.js":15,"./src/util/error.js":16,"./src/util/fs.js":17,"./src/util/promise.js":18,"./src/util/underscore.js":20,"./src/util/url.js":21,"./tags":33,path:4}],3:[function(e,t,r){},{}],4:[function(e,t,r){},{}],5:[function(e,t,r){"use strict";var n,s,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};s=function(){return function(){var e=arguments.length;if(0===e)throw new Error("resolveUrl requires at least one argument; got none.");var t=document.createElement("base");if(t.href=arguments[0],1===e)return t.href;var r=document.getElementsByTagName("head")[0];r.insertBefore(t,r.firstChild);for(var n,s=document.createElement("a"),i=1;i<e;i++)s.href=arguments[i],n=s.href,t.href=n;return r.removeChild(t),n}},"object"===((n=void 0)===r?"undefined":i(r))?t.exports=s():n.resolveUrl=s()},{}],6:[function(e,t,r){"use strict";var l=e("./lexical.js"),n=e("./syntax.js"),f=e("./util/assert.js"),s=e("./util/underscore.js"),p=new RegExp(""+l.value.source,"g");t.exports=function(a){a=s.assign({},a);var c={},t={render:function(e,t){var r=this.args.map(function(e){return n.evalValue(e,t)});return r.unshift(e),this.filter.apply(null,r)},parse:function(e){var t=l.filterLine.exec(e);f(t,"illegal filter: "+e);var r=t[1],n=t[2]||"",s=c[r];if("function"!=typeof s){if(a.strict_filters)throw new TypeError("undefined filter: "+r);return this.name=r,this.filter=function(e){return e},this.args=[],this}for(var i=[];t=p.exec(n.trim());){var o=t[0],u=new RegExp(o+"\\s*:","g").exec(t.input);u&&u.index===t.index?i.push("'"+o+"'"):i.push(o)}return this.name=r,this.filter=s,this.args=i,this}};return{construct:function(e){return Object.create(t).parse(e)},register:function(e,t){c[e]=t},clear:function(){c={}}}}},{"./lexical.js":7,"./syntax.js":12,"./util/assert.js":15,"./util/underscore.js":20}],7:[function(e,t,r){"use strict";var n=new RegExp(/'[^']*'/.source+"|"+/"[^"]*"/.source),s=new RegExp("(?:"+n.source+"|[^'\"])*"),i=/-?\d+/,o=/-?\d+\.?\d*|\.?\d+/,u=/true|false/,a=/[\w-]+[?]?/,c=new RegExp("\\[(?:"+n.source+"|[\\w-\\.]+)\\]"),l=new RegExp("(?:"+n.source+"|"+u.source+"|"+o.source+")"),f=new RegExp(a.source+"(?:\\."+a.source+"|"+c.source+")*"),p=new RegExp("(?:"+f.source+"|"+o.source+")"),h=new RegExp("\\("+p.source+"\\.\\."+p.source+"\\)"),g=new RegExp("\\(("+p.source+")\\.\\.("+p.source+")\\)"),d=new RegExp("(?:"+f.source+"|"+l.source+"|"+h.source+")"),v=new RegExp("(?:"+a.source+")\\s*:\\s*(?:"+d.source+")"),m=new RegExp("("+a.source+")\\s*:\\s*("+d.source+")","g"),y=new RegExp("^\\s*("+a.source+")\\s*([\\s\\S]*)\\s*$"),j=new RegExp("^"+l.source+"$","i"),x=new RegExp("^"+f.source+"$"),w=new RegExp("^"+o.source+"$"),b=new RegExp("^"+u.source+"$","i"),E=new RegExp("^"+n.source+"$"),T=new RegExp("^"+g.source+"$"),S=new RegExp("^"+i.source+"$"),k=new RegExp("(?:"+a.source+"\\s*:\\s*)?"+d.source),O=new RegExp(k.source+"(\\s*,\\s*"+k.source+")*"),R=new RegExp(a.source+"(?:\\s*:\\s*"+O.source+")?","g"),A=new RegExp("("+a.source+")(?:\\s*:\\s*("+O.source+"))?"),_=new RegExp("^"+A.source+"$");t.exports={quoted:n,number:o,bool:u,literal:l,filter:R,integer:i,hash:v,hashCapture:m,range:h,rangeCapture:g,identifier:a,value:d,quoteBalanced:s,operators:[/\s+or\s+/,/\s+and\s+/,/==|!=|<=|>=|<|>|\s+contains\s+/],quotedLine:E,numberLine:w,boolLine:b,rangeLine:T,literalLine:j,filterLine:_,tagLine:y,isLiteral:function(e){return j.test(e)},isVariable:function(e){return x.test(e)},parseLiteral:function(e){var t=e.match(w);if(t)return Number(e);if(t=e.match(b))return"true"===e.toLowerCase();if(t=e.match(E))return e.slice(1,-1);throw new TypeError("cannot parse '"+e+"' as literal")},isRange:function(e){return T.test(e)},matchValue:function(e){return d.exec(e)},isInteger:function(e){return S.test(e)}}},{}],8:[function(e,t,r){"use strict";t.exports=function(r){return{"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},">":function(e,t){return null!==e&&null!==t&&t<e},"<":function(e,t){return null!==e&&null!==t&&e<t},">=":function(e,t){return null!==e&&null!==t&&t<=e},"<=":function(e,t){return null!==e&&null!==t&&e<=t},contains:function(e,t){return!!e&&("function"==typeof e.indexOf&&-1<e.indexOf(t))},and:function(e,t){return r(e)&&r(t)},or:function(e,t){return r(e)||r(t)}}}},{}],9:[function(e,t,r){"use strict";var u=e("./lexical.js"),a=e("./util/error.js").ParseError,c=e("./util/assert.js");t.exports=function(r,s){var t={init:function(e){return this.tokens=e,this.handlers={},this},on:function(e,t){return this.handlers[e]=t,this},trigger:function(e,t){var r=this.handlers[e];if("function"==typeof r)return r(t),!0},start:function(){var e;for(this.trigger("start");!this.stopRequested&&(e=this.tokens.shift());)if(!(this.trigger("token",e)||"tag"===e.type&&this.trigger("tag:"+e.name,e))){var t=n(e,this.tokens);this.trigger("template",t)}return this.stopRequested||this.trigger("end"),this},stop:function(){return this.stopRequested=!0,this}};function n(t,e){try{var r=null;return(r="tag"===t.type?i(t,e):"value"===t.type?o(t.value):t).token=t,r}catch(e){throw new a(e,t)}}function i(e,t){return"continue"===e.name||"break"===e.name?e:r.construct(e,t)}function o(e){var t=u.matchValue(e);c(t,"illegal value string: "+e);var r=t[0];e=e.substr(t.index+t[0].length);for(var n=[];t=u.filter.exec(e);)n.push([t[0].trim()]);return{type:"value",initial:r,filters:n.map(function(e){return s.construct(e)})}}return{parse:function(e){for(var t,r=[];t=e.shift();)r.push(n(t,e));return r},parseTag:i,parseStream:function(e){return Object.create(t).init(e)},parseValue:o}}},{"./lexical.js":7,"./util/assert.js":15,"./util/error.js":16}],10:[function(e,t,r){"use strict";var n=e("./syntax.js"),i=e("./util/promise.js").mapSeries,o=e("./util/error.js").RenderBreakError,u=e("./util/error.js").RenderError,a=e("./util/assert.js"),s={renderTemplates:function(e,r){var n=this;a(r,"unable to evalTemplates: scope undefined");var s="";return i(e,function(t){return function(e){var t=this;return"tag"===e.type?this.renderTag(e,r).then(function(e){return void 0===e?"":e}):"value"===e.type?Promise.resolve().then(function(){return t.evalValue(e,r)}).then(function(e){return void 0===e?"":"string"==typeof(t=e)?t:JSON.stringify(t);var t}):Promise.resolve(e.value)}.call(n,t).then(function(e){return s+=e}).catch(function(e){if(e instanceof o)throw e.resolvedHTML=s,e;throw new u(e,t)})}).then(function(){return s})},renderTag:function(e,t){return"continue"===e.name?Promise.reject(new o("continue")):"break"===e.name?Promise.reject(new o("break")):e.render(t)},evalValue:function(e,r){return a(r,"unable to evalValue: scope undefined"),e.filters.reduce(function(e,t){return t.render(e,r)},n.evalExp(e.initial,r))}};t.exports=function(){return Object.create(s)}},{"./syntax.js":12,"./util/assert.js":15,"./util/error.js":16,"./util/promise.js":18}],11:[function(e,t,r){"use strict";var i=e("./util/underscore.js"),u=e("./lexical.js"),a=e("./util/assert.js"),n={getAll:function(){return this.contexts.reduce(function(e,t){return Object.assign(e,t)},Object.create(null))},get:function(e){var r=this,t=this.propertyAccessSeq(e),n=this.findContextFor(t[0])||i.last(this.contexts);return t.reduce(function(e,t){return r.readProperty(e,t)},n)},set:function(e,r){var n=this.propertyAccessSeq(e),s=this.findContextFor(n[0])||i.last(this.contexts);n.some(function(e,t){return!i.isObject(s)||(t===n.length-1?(s[e]=r,!0):(void 0===s[e]&&(s[e]={}),void(s=s[e])))})},unshift:function(e){return this.contexts.unshift(e)},push:function(e){return this.contexts.push(e)},pop:function(t){if(!arguments.length)return this.contexts.pop();var e=this.contexts.findIndex(function(e){return e===t});if(-1===e)throw new TypeError("scope not found, cannot pop");return this.contexts.splice(e,1)[0]},findContextFor:function(e,t){t=t||function(){return!0};for(var r=this.contexts.length-1;0<=r;r--){var n=this.contexts[r];if(t(n)&&e in n)return n}return null},readProperty:function(e,t){var r=void 0;if(r="size"===t&&(i.isArray(e)||i.isString(e))?e.length:i.isNil(e)?void 0:e[t],i.isNil(r)&&this.opts.strict_variables)throw new TypeError("undefined variable: "+t);return r},propertyAccessSeq:function(e){e=String(e);for(var t=[],r="",n=void 0,s=0;s<e.length;)switch(e[s]){case"[":o();var i=e[s+1];/['"]/.test(i)?(n=e.indexOf(i,s+2),a(-1!==n,"unbalanced "+i+": "+e),r=e.slice(s+2,n),o(),s=n+2):(n=c(e,s+1),a(-1!==n,"unbalanced []: "+e),r=e.slice(s+1,n),u.isInteger(r)||(r=this.get(r)),o(),s=n+1);break;case".":o(),s++;break;default:r+=e[s],s++}if(o(),!t.length)throw new TypeError('invalid path:"'+e+'"');return t;function o(){r.length&&t.push(r),r=""}}};function c(e,t){for(var r=1,n=t;n<e.length;n++)if("["===e[n]&&r++,"]"===e[n]&&0===--r)return n;return-1}r.factory=function(e,t){var r=Object.create(n);return r.opts=i.assign({dynamicPartials:!0,strict_variables:!1,strict_filters:!1,blocks:{},root:[]},t),r.contexts=[e||{}],r},r.types={AssignScope:Object.create(null),CaptureScope:Object.create(null),IncrementScope:Object.create(null),DecrementScope:Object.create(null)}},{"./lexical.js":7,"./util/assert.js":15,"./util/underscore.js":20}],12:[function(e,t,r){"use strict";var h=e("./operators.js")(n),g=e("./lexical.js"),d=e("../src/util/assert.js");function v(e,t){if(e=e&&e.trim()){if(g.isLiteral(e))return g.parseLiteral(e);if(g.isVariable(e))return t.get(e);throw new TypeError("cannot eval '"+e+"' as value")}}function n(e){return!s(e)}function s(e){return!1===e||null==e}t.exports={evalExp:function e(t,r){d(r,"unable to evalExp: scope undefined");for(var n,s=g.operators,i=0;i<s.length;i++){var o=s[i],u=new RegExp("^("+g.quoteBalanced.source+")("+o.source+")("+g.quoteBalanced.source+")$");if(n=t.match(u)){var a=e(n[1],r);return(0,h[n[2].trim()])(a,e(n[3],r))}}if(n=t.match(g.rangeLine)){for(var c=v(n[1],r),l=v(n[2],r),f=[],p=c;p<=l;p++)f.push(p);return f}return v(t,r)},evalValue:v,isTruthy:n,isFalsy:s}},{"../src/util/assert.js":15,"./lexical.js":7,"./operators.js":8}],13:[function(e,t,r){"use strict";var o=e("./lexical.js"),u=e("./syntax.js"),i=e("./util/assert.js");t.exports=function(){var n={},s={render:function(e){var t=function(e,t){var r={},n=void 0;for(o.hashCapture.lastIndex=0;n=o.hashCapture.exec(e);){var s=n[1],i=n[2];r[s]=u.evalValue(i,t)}return r}(this.token.args,e),r=this.tagImpl;return"function"!=typeof r.render?Promise.resolve(""):Promise.resolve().then(function(){return r.render(e,t)})},parse:function(e,t){this.type="tag",this.token=e,this.name=e.name;var r=n[this.name];i(r,"tag "+this.name+" not found"),this.tagImpl=Object.create(r),this.tagImpl.parse&&this.tagImpl.parse(e,t)}};return{construct:function(e,t){var r=Object.create(s);return r.parse(e,t),r},register:function(e,t){n[e]=t},clear:function(){n={}}}}},{"./lexical.js":7,"./syntax.js":12,"./util/assert.js":15}],14:[function(e,t,r){"use strict";var m=e("./lexical.js"),y=e("./util/error.js").TokenizationError,j=e("./util/underscore.js"),x=e("./whitespace-ctrl.js"),w=e("./util/assert.js");r.parse=function(i,o,e){w(j.isString(i),"illegal input");for(var r,n,s,t,u,a,c,l=/({%-?([\s\S]*?)-?%})|({{-?([\s\S]*?)-?}})/g,f=0,p=(r=i,n=0,s=-1,{get:function(e){var t=r.slice(s+1,e).split("\n");return n+=t.length-1,s=e,n+1}}),h=0,g=[];t=l.exec(i);h=l.lastIndex)t.index>h&&g.push(v(h,t.index)),g.push(t[1]?d(t[1],t[2].trim(),t.index):(u=t[3],a=t[4].trim(),c=t.index,{type:"value",line:p.get(c),trim_left:"{{-"===u.slice(0,3),trim_right:"-}}"===u.slice(-3),raw:u,value:a,input:i,file:o}));return i.length>h&&g.push(v(h,i.length)),x(g,e),g;function d(e,t,r){var n=t.match(m.tagLine),s={type:"tag",indent:f,line:p.get(r),trim_left:"{%-"===e.slice(0,3),trim_right:"-%}"===e.slice(-3),raw:e,value:t,input:i,file:o};if(!n)throw new y("illegal tag syntax",s);return s.name=n[1],s.args=n[2],s}function v(e,t){var r=i.slice(e,t);return f=j.last(r.split("\n")).length,{type:"html",raw:r,value:r}}},r.whiteSpaceCtrl=x},{"./lexical.js":7,"./util/assert.js":15,"./util/error.js":16,"./util/underscore.js":20,"./whitespace-ctrl.js":22}],15:[function(e,t,r){"use strict";var n=e("./error.js").AssertionError;t.exports=function(e,t){if(!e)throw new n(t=t||"expect "+e+" to be true")}},{"./error.js":16}],16:[function(e,t,r){"use strict";var a=e("./underscore.js");function c(){this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}function n(e,t){c.call(this),this.input=t.input,this.line=t.line,this.file=t.file;var r,s,i,n,o,u=(r=t.input,s=t.line,i=r.split("\n"),n=Math.max(s-2,1),o=Math.min(s+3,i.length),a.range(n,o+1).map(function(e){return[e===s?">> ":" ",(t=e,r=o,n=t+"",Array((r+"").length-n.length).join(" ")+n),"| ",i[e-1]].join("");var t,r,n}).join("\n"));this.message=function(e,t){e=e||"",t.file&&(e+=", file:"+t.file);t.line&&(e+=", line:"+t.line);return e}(e.message,t),this.stack=u+"\n"+(this.stack||this.message)+(e.stack?"\nFrom "+e.stack:"")}function s(e,t){n.call(this,{message:e},t)}function i(e,t){a.assign(this,e),this.originalError=e,n.call(this,e,t)}function o(e,t){if(e instanceof o)return e;a.assign(this,e),this.originalError=e,n.call(this,e,t.token)}function u(e){c.call(this),this.message=e+""}function l(e){c.call(this),this.message=e+""}(s.prototype=Object.create(Error.prototype)).constructor=s,(i.prototype=Object.create(Error.prototype)).constructor=i,(o.prototype=Object.create(Error.prototype)).constructor=o,(u.prototype=Object.create(Error.prototype)).constructor=u,(l.prototype=Object.create(Error.prototype)).constructor=l,t.exports={TokenizationError:s,ParseError:i,RenderBreakError:u,AssertionError:l,RenderError:o}},{"./underscore.js":20}],17:[function(e,t,r){"use strict";var s=e("fs");t.exports={readFileAsync:function(e){return new Promise(function(r,n){s.readFile(e,"utf8",function(e,t){e?n(e):r(t)})})},statFileAsync:function(e){return new Promise(function(r,n){s.stat(e,function(e,t){return e?n(e):r(t)})})}}},{fs:3}],18:[function(e,t,r){"use strict";r.anySeries=function(n,s){var e=Promise.reject(new Error("init"));return n.forEach(function(t,r){e=e.catch(function(e){return s(t,r,n)})}),e},r.mapSeries=function(r,n){var s=Promise.resolve("init"),i=[];return r.forEach(function(e,t){s=s.then(function(){return n(e,t,r)}).then(function(e){return i.push(e)})}),s.then(function(){return i})}},{}],19:[function(e,t,r){"use strict";var n=["January","February","March","April","May","June","July","August","September","October","November","December"],s=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],i=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],u={1:"st",2:"nd",3:"rd",default:"th"},a={daysInMonth:function(e){return[31,a.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31]},getDayOfYear:function(e){for(var t=0,r=0;r<e.getMonth();++r)t+=a.daysInMonth(e)[r];return t+e.getDate()},getWeekOfYear:function(e,t){var r=this.getDayOfYear(e)+(t-e.getDay()),n=7-new Date(e.getFullYear(),0,1).getDay()+t;return c.pad(Math.floor((r-n)/7)+1,2)},isLeapYear:function(e){var t=e.getFullYear();return!(0!=(3&t)||!(t%100||t%400==0&&t))},getSuffix:function(e){var t=e.getDate().toString(),r=parseInt(t.slice(-1));return u[r]||u.default},century:function(e){return parseInt(e.getFullYear().toString().substring(0,2),10)}},c={pad:function(e,t,r){r||(r="0");for(var n=e.toString(),s=t-n.length;0<s--;)n=r+n;return n}},l={a:function(e){return o[e.getDay()]},A:function(e){return i[e.getDay()]},b:function(e){return s[e.getMonth()]},B:function(e){return n[e.getMonth()]},c:function(e){return e.toLocaleString()},C:function(e){return a.century(e)},d:function(e){return c.pad(e.getDate(),2)},e:function(e){return c.pad(e.getDate(),2," ")},H:function(e){return c.pad(e.getHours(),2)},I:function(e){return c.pad(e.getHours()%12||12,2)},j:function(e){return c.pad(a.getDayOfYear(e),3)},k:function(e){return c.pad(e.getHours(),2," ")},l:function(e){return c.pad(e.getHours()%12||12,2," ")},L:function(e){return c.pad(e.getMilliseconds(),3)},m:function(e){return c.pad(e.getMonth()+1,2)},M:function(e){return c.pad(e.getMinutes(),2)},p:function(e){return e.getHours()<12?"AM":"PM"},P:function(e){return e.getHours()<12?"am":"pm"},q:function(e){return a.getSuffix(e)},s:function(e){return Math.round(e.valueOf()/1e3)},S:function(e){return c.pad(e.getSeconds(),2)},u:function(e){return e.getDay()||7},U:function(e){return a.getWeekOfYear(e,0)},w:function(e){return e.getDay()},W:function(e){return a.getWeekOfYear(e,1)},x:function(e){return e.toLocaleDateString()},X:function(e){return e.toLocaleTimeString()},y:function(e){return e.getFullYear().toString().substring(2,4)},Y:function(e){return e.getFullYear()},z:function(e){var t=e.getTimezoneOffset()/60*100;return(0<t?"-":"+")+c.pad(Math.abs(t),4)},"%":function(){return"%"}};l.h=l.b,l.N=l.L;t.exports=function(e,t){for(var r="",n=t;;){var s=/%./g,i=s.exec(n);if(!i)return r+n;r+=n.slice(0,s.lastIndex-2),n=n.slice(s.lastIndex);var o=i[0].charAt(1),u=l[o];r+=u?u.call(this,e):"%"+o}}},{}],20:[function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=Object.prototype.toString;function i(e){var t=void 0===e?"undefined":n(e);return null!=e&&("object"===t||"function"===t)}r.isString=function(e){return e instanceof String||"string"==typeof e},r.isObject=i,r.isArray=function(e){return"[object Array]"===s.call(e)},r.isNil=function(e){return null==e},r.isError=function(e){return"Error"===Object.prototype.toString.call(e).substr(-6,5)||"string"==typeof e.message&&"string"==typeof e.name},r.range=function(e,t,r){1===arguments.length&&(t=e,e=0),r=r||1;for(var n=[],s=e;s<t;s+=r)n.push(s);return n},r.last=function(e){return e[e.length-1]},r.forOwn=function(e,t){for(var r in e=e||{})if(e.hasOwnProperty(r)&&!1===t(e[r],r,e))break;return e},r.assign=function(t){return t=i(t)?t:{},Array.prototype.slice.call(arguments,1).forEach(function(e){return Object.assign(t,e)}),t},r.uniq=function(e){for(var t={},r=[],n=0,s=e.length;n<s;++n)t.hasOwnProperty(e[n])||(r.push(e[n]),t[e[n]]=1);return r}},{}],21:[function(e,t,r){"use strict";var n=e("resolve-url"),s=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/,i=/^(?:\w+:)?\/\/([^\s.]+\.\S{2}|localhost[:?\d]*)\S*$/,o=e("./underscore");r.extname=function(e){return s.exec(e).slice(1)[3]},r.valid=function(e){return i.test(e)},r.resolve=function(e,t){return"[object Array]"===Object.prototype.toString.call(e)&&(e=e[0]),e&&"/"!==o.last(e)&&(e+="/"),n(e,t)}},{"./underscore":20,"resolve-url":5}],22:[function(e,t,r){"use strict";var n=e("./util/underscore.js");t.exports=function(o,u){u=n.assign({greedy:!0},u);var a=!1;o.forEach(function(e,t){var r,n,s,i;s=e,i=u,!a&&("tag"===s.type?s.trim_left||i.trim_tag_left:"value"===s.type?s.trim_left||i.trim_value_left:void 0)&&function(e,t){if(e&&"html"===e.type){var r=t?/\s+$/g:/[\t\r ]*$/g;e.value=e.value.replace(r,"")}}(o[t-1],u.greedy),"tag"===e.type&&"raw"===e.name&&(a=!0),"tag"===e.type&&"endraw"===e.name&&(a=!1),r=e,n=u,!a&&("tag"===r.type?r.trim_right||n.trim_tag_right:"value"===r.type?r.trim_right||n.trim_value_right:void 0)&&function(e,t){if(e&&"html"===e.type){var r=t?/^\s+/g:/^[\t\r ]*\n?/g;e.value=e.value.replace(r,"")}}(o[t+1],u.greedy)})}},{"./util/underscore.js":20}],23:[function(e,t,r){"use strict";var n=e("..").lexical,s=new RegExp("("+n.identifier.source+")\\s*=(.*)"),i=e("../src/util/assert.js"),o=e("../src/scope").types;t.exports=function(r){r.registerTag("assign",{parse:function(e){var t=e.args.match(s);i(t,"illegal token "+e.raw),this.key=t[1],this.value=t[2]},render:function(e){var t=Object.create(o.AssignScope);return t[this.key]=r.evalValue(this.value,e),e.push(t),Promise.resolve("")}})}},{"..":2,"../src/scope":11,"../src/util/assert.js":15}],24:[function(e,t,r){"use strict";var n=e("..").lexical,o=new RegExp("("+n.identifier.source+")"),u=e("../src/util/assert.js"),s=e("../src/scope.js").types;t.exports=function(i){i.registerTag("capture",{parse:function(t,e){var r=this,n=t.args.match(o);u(n,t.args+" not valid identifier"),this.variable=n[1],this.templates=[];var s=i.parser.parseStream(e);s.on("tag:endcapture",function(e){return s.stop()}).on("template",function(e){return r.templates.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")}),s.start()},render:function(r,e){var n=this;return i.renderer.renderTemplates(this.templates,r).then(function(e){var t=Object.create(s.CaptureScope);t[n.variable]=e,r.push(t)})}})}},{"..":2,"../src/scope.js":11,"../src/util/assert.js":15}],25:[function(e,t,r){"use strict";var s=e("..");t.exports=function(i){i.registerTag("case",{parse:function(t,e){var r=this;this.cond=t.args,this.cases=[],this.elseTemplates=[];var n=[],s=i.parser.parseStream(e).on("tag:when",function(e){r.cases.push({val:e.args,templates:n=[]})}).on("tag:else",function(){return n=r.elseTemplates}).on("tag:endcase",function(e){return s.stop()}).on("template",function(e){return n.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});s.start()},render:function(e,t){for(var r=0;r<this.cases.length;r++){var n=this.cases[r];if(s.evalExp(n.val,e)===s.evalExp(this.cond,e))return i.renderer.renderTemplates(n.templates,e)}return i.renderer.renderTemplates(this.elseTemplates,e)}})}},{"..":2}],26:[function(e,t,r){"use strict";t.exports=function(n){n.registerTag("comment",{parse:function(t,e){var r=n.parser.parseStream(e);r.on("token",function(e){"endcomment"===e.name&&r.stop()}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")}),r.start()}})}},{}],27:[function(e,t,r){"use strict";var o=e(".."),n=o.lexical,s=new RegExp("^(?:("+n.value.source+")\\s*:\\s*)?(.*)$"),i=new RegExp(n.value.source,"g"),u=e("../src/util/assert.js");t.exports=function(e){e.registerTag("cycle",{parse:function(e,t){var r=s.exec(e.args);u(r,"illegal tag: "+e.raw),this.group=r[1]||"";var n=r[2];for(this.candidates=[];r=i.exec(n);)this.candidates.push(r[0]);u(this.candidates.length,"empty candidates: "+e.raw)},render:function(e,t){var r="cycle:"+o.evalValue(this.group,e)+":"+this.candidates.join(","),n=e.opts.groups=e.opts.groups||{},s=n[r];void 0===s&&(s=n[r]=0);var i=this.candidates[s];return s=(s+1)%this.candidates.length,n[r]=s,Promise.resolve(o.evalValue(i,e))}})}},{"..":2,"../src/util/assert.js":15}],28:[function(e,t,r){"use strict";var n=e("..").lexical,s=e("../src/util/assert.js"),i=e("../src/scope").types;t.exports=function(e){e.registerTag("decrement",{parse:function(e){var t=e.args.match(n.identifier);s(t,"illegal identifier "+e.args),this.variable=t[0]},render:function(e,t){var r=e.findContextFor(this.variable,function(e){return Object.getPrototypeOf(e)!==i.CaptureScope&&Object.getPrototypeOf(e)!==i.AssignScope});return r||(r=Object.create(i.DecrementScope),e.unshift(r)),"number"!=typeof r[this.variable]&&(r[this.variable]=0),--r[this.variable]}})}},{"..":2,"../src/scope":11,"../src/util/assert.js":15}],29:[function(e,t,r){"use strict";var c=e(".."),n=c.lexical,l=e("../src/util/promise.js").mapSeries,f=e("../src/util/underscore.js"),p=c.Types.RenderBreakError,o=e("../src/util/assert.js"),u=new RegExp("^("+n.identifier.source+")\\s+in\\s+("+n.value.source+")(?:\\s+"+n.hash.source+")*(?:\\s+(reversed))?(?:\\s+"+n.hash.source+")*$");t.exports=function(a){a.registerTag("for",{parse:function(e,t){var r,n=this,s=u.exec(e.args);o(s,"illegal tag: "+e.raw),this.variable=s[1],this.collection=s[2],this.reversed=!!s[3],this.templates=[],this.elseTemplates=[];var i=a.parser.parseStream(t).on("start",function(){return r=n.templates}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endfor",function(){return i.stop()}).on("template",function(e){return r.push(e)}).on("end",function(){throw new Error("tag "+e.raw+" not closed")});i.start()},render:function(t,e){var n=this,s=c.evalExp(this.collection,t);if(Array.isArray(s)||(f.isString(s)&&0<s.length?s=[s]:f.isObject(s)&&(s=Object.keys(s).map(function(e){return[e,s[e]]}))),!Array.isArray(s)||!s.length)return a.renderer.renderTemplates(this.elseTemplates,t);var r=e.offset||0,i=void 0===e.limit?s.length:e.limit;s=s.slice(r,r+i),this.reversed&&s.reverse();var o=s.map(function(e,t){var r={};return r[n.variable]=e,r.forloop={first:0===t,index:t+1,index0:t,last:t===s.length-1,length:s.length,rindex:s.length-t,rindex0:s.length-t-1},r}),u="";return l(o,function(e){return Promise.resolve().then(function(){return t.push(e)}).then(function(){return a.renderer.renderTemplates(n.templates,t)}).then(function(e){return u+=e}).catch(function(e){if(!(e instanceof p&&(u+=e.resolvedHTML,"continue"===e.message)))throw e}).then(function(){return t.pop(e)})}).catch(function(e){if(!(e instanceof p&&"break"===e.message))throw e}).then(function(){return u})}})}},{"..":2,"../src/util/assert.js":15,"../src/util/promise.js":18,"../src/util/underscore.js":20}],30:[function(e,t,r){"use strict";var o=e("..");t.exports=function(i){i.registerTag("if",{parse:function(t,e){var r,n=this;this.branches=[],this.elseTemplates=[];var s=i.parser.parseStream(e).on("start",function(){return n.branches.push({cond:t.args,templates:r=[]})}).on("tag:elsif",function(e){n.branches.push({cond:e.args,templates:r=[]})}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endif",function(e){return s.stop()}).on("template",function(e){return r.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});s.start()},render:function(e,t){for(var r=0;r<this.branches.length;r++){var n=this.branches[r],s=o.evalExp(n.cond,e);if(o.isTruthy(s))return i.renderer.renderTemplates(n.templates,e)}return i.renderer.renderTemplates(this.elseTemplates,e)}})}},{"..":2}],31:[function(e,t,r){"use strict";var o=e(".."),n=o.lexical,s=new RegExp("with\\s+("+n.value.source+")"),u=/[^\s,]+/,a=e("../src/util/assert.js");t.exports=function(i){i.registerTag("include",{parse:function(e){var t=u.exec(e.args);t&&(this.staticValue=t[0]),(t=n.value.exec(e.args))&&(this.value=t[0]),(t=s.exec(e.args))&&(this.with=t[1])},render:function(t,r){var e=t.opts.dynamicPartials?o.evalValue(this.value,t):this.staticValue;a(e,"cannot include with empty filename");var n=t.opts.blocks,s=t.opts.blockMode;return t.opts.blocks={},t.opts.blockMode="output",this.with&&(r[e]=o.evalValue(this.with,t)),i.getTemplate(e,t.opts.root).then(function(e){return t.push(r),i.renderer.renderTemplates(e,t)}).then(function(e){return t.pop(r),t.opts.blocks=n,t.opts.blockMode=s,e})}})}},{"..":2,"../src/util/assert.js":15}],32:[function(e,t,r){"use strict";var n=e(".."),s=e("../src/util/assert.js"),i=n.lexical,o=e("../src/scope").types;t.exports=function(e){e.registerTag("increment",{parse:function(e){var t=e.args.match(i.identifier);s(t,"illegal identifier "+e.args),this.variable=t[0]},render:function(e,t){var r=e.findContextFor(this.variable,function(e){return Object.getPrototypeOf(e)!==o.CaptureScope&&Object.getPrototypeOf(e)!==o.AssignScope});r||(r=Object.create(o.IncrementScope),e.unshift(r)),"number"!=typeof r[this.variable]&&(r[this.variable]=0);var n=r[this.variable];return r[this.variable]++,n}})}},{"..":2,"../src/scope":11,"../src/util/assert.js":15}],33:[function(t,e,r){"use strict";e.exports=function(e){t("./assign.js")(e),t("./capture.js")(e),t("./case.js")(e),t("./comment.js")(e),t("./cycle.js")(e),t("./decrement.js")(e),t("./for.js")(e),t("./if.js")(e),t("./include.js")(e),t("./increment.js")(e),t("./layout.js")(e),t("./raw.js")(e),t("./tablerow.js")(e),t("./unless.js")(e)}},{"./assign.js":23,"./capture.js":24,"./case.js":25,"./comment.js":26,"./cycle.js":27,"./decrement.js":28,"./for.js":29,"./if.js":30,"./include.js":31,"./increment.js":32,"./layout.js":34,"./raw.js":35,"./tablerow.js":36,"./unless.js":37}],34:[function(e,t,r){"use strict";var s=e(".."),n=s.lexical,o=e("../src/util/assert.js"),u=/\S+/;t.exports=function(i){i.registerTag("layout",{parse:function(e,t){var r=u.exec(e.args);r&&(this.staticLayout=r[0]),(r=n.value.exec(e.args))&&(this.layout=r[0]),this.tpls=i.parser.parse(t)},render:function(t,r){var n=t.opts.dynamicPartials?s.evalValue(this.layout,t):this.staticLayout;return o(n,"cannot apply layout with empty filename"),t.opts.blockMode="store",i.renderer.renderTemplates(this.tpls,t).then(function(e){return void 0===t.opts.blocks[""]&&(t.opts.blocks[""]=e),i.getTemplate(n,t.opts.root)}).then(function(e){return t.push(r),t.opts.blockMode="output",i.renderer.renderTemplates(e,t)}).then(function(e){return t.pop(r),e})}}),i.registerTag("block",{parse:function(e,t){var r=this,n=/\w+/.exec(e.args);this.block=n?n[0]:"",this.tpls=[];var s=i.parser.parseStream(t).on("tag:endblock",function(){return s.stop()}).on("template",function(e){return r.tpls.push(e)}).on("end",function(){throw new Error("tag "+e.raw+" not closed")});s.start()},render:function(t){var r=this;return Promise.resolve(t.opts.blocks[this.block]).then(function(e){return void 0===e?i.renderer.renderTemplates(r.tpls,t):e}).then(function(e){return"store"===t.opts.blockMode?(t.opts.blocks[r.block]=e,""):e})}})}},{"..":2,"../src/util/assert.js":15}],35:[function(e,t,r){"use strict";t.exports=function(s){s.registerTag("raw",{parse:function(e,t){var r=this;this.tokens=[];var n=s.parser.parseStream(t);n.on("token",function(e){"endraw"===e.name?n.stop():r.tokens.push(e)}).on("end",function(){throw new Error("tag "+e.raw+" not closed")}),n.start()},render:function(e,t){return this.tokens.map(function(e){return e.raw}).join("")}})}},{}],36:[function(e,t,r){"use strict";var p=e(".."),h=e("../src/util/promise.js").mapSeries,n=p.lexical,o=e("../src/util/assert.js"),u=new RegExp("^("+n.identifier.source+")\\s+in\\s+("+n.value.source+")(?:\\s+"+n.hash.source+")*$");t.exports=function(f){f.registerTag("tablerow",{parse:function(e,t){var r,n=this,s=u.exec(e.args);o(s,"illegal tag: "+e.raw),this.variable=s[1],this.collection=s[2],this.templates=[];var i=f.parser.parseStream(t).on("start",function(){return r=n.templates}).on("tag:endtablerow",function(e){return i.stop()}).on("template",function(e){return r.push(e)}).on("end",function(){throw new Error("tag "+e.raw+" not closed")});i.start()},render:function(r,e){var n,s,i=this,t=p.evalExp(this.collection,r)||[],o="",u=e.offset||0,a=void 0===e.limit?t.length:e.limit,c=e.cols;t=t.slice(u,u+a),c||(c=t.length);var l=t.map(function(e,t){var r={};return r[i.variable]=e,r});return h(l,function(t,e){return n=Math.floor(e/c)+1,1===(s=e%c+1)&&(1!==n&&(o+="</tr>"),o+='<tr class="row'+n+'">'),o+='<td class="col'+s+'">',r.push(t),f.renderer.renderTemplates(i.templates,r).then(function(e){return r.pop(t),o+=e,o+="</td>"})}).then(function(){return 0<n&&(o+="</tr>"),o})}})}},{"..":2,"../src/util/assert.js":15,"../src/util/promise.js":18}],37:[function(e,t,r){"use strict";var n=e("..");t.exports=function(i){i.registerTag("unless",{parse:function(t,e){var r,n=this;this.templates=[],this.elseTemplates=[];var s=i.parser.parseStream(e).on("start",function(e){r=n.templates,n.cond=t.args}).on("tag:else",function(){return r=n.elseTemplates}).on("tag:endunless",function(e){return s.stop()}).on("template",function(e){return r.push(e)}).on("end",function(e){throw new Error("tag "+t.raw+" not closed")});s.start()},render:function(e,t){var r=n.evalExp(this.cond,e);return n.isFalsy(r)?i.renderer.renderTemplates(this.templates,e):i.renderer.renderTemplates(this.elseTemplates,e)}})}},{"..":2}]},{},[2])(2)}); |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const strftime = require('./src/util/strftime.js') | ||
@@ -5,3 +6,3 @@ const _ = require('./src/util/underscore.js') | ||
var escapeMap = { | ||
let escapeMap = { | ||
'&': '&', | ||
@@ -13,3 +14,3 @@ '<': '<', | ||
} | ||
var unescapeMap = { | ||
let unescapeMap = { | ||
'&': '&', | ||
@@ -22,3 +23,3 @@ '<': '<', | ||
var filters = { | ||
let filters = { | ||
'abs': v => Math.abs(v), | ||
@@ -30,3 +31,3 @@ 'append': (v, arg) => v + arg, | ||
'date': (v, arg) => { | ||
var date = v | ||
let date = v | ||
if (v === 'now') { | ||
@@ -48,3 +49,3 @@ date = new Date() | ||
'join': (v, arg) => v.join(arg), | ||
'last': v => v[v.length - 1], | ||
'last': v => _.last(v), | ||
'lstrip': v => stringify(v).replace(/^\s+/, ''), | ||
@@ -64,3 +65,3 @@ 'map': (arr, arg) => arr.map(v => v[arg]), | ||
'round': (v, arg) => { | ||
var amp = Math.pow(10, arg || 0) | ||
let amp = Math.pow(10, arg || 0) | ||
return Math.round(v * amp, arg) / amp | ||
@@ -87,4 +88,4 @@ }, | ||
if (o === undefined) o = '...' | ||
var arr = v.split(' ') | ||
var ret = arr.slice(0, l).join(' ') | ||
let arr = v.split(' ') | ||
let ret = arr.slice(0, l).join(' ') | ||
if (arr.length > l) ret += o | ||
@@ -94,3 +95,3 @@ return ret | ||
'uniq': function (arr) { | ||
var u = {} | ||
let u = {} | ||
return (arr || []).filter(val => { | ||
@@ -117,3 +118,3 @@ if (u.hasOwnProperty(val)) { | ||
function getFixed (v) { | ||
var p = (v + '').split('.') | ||
let p = (v + '').split('.') | ||
return (p.length > 1) ? p[1].length : 0 | ||
@@ -132,3 +133,3 @@ } | ||
return (l, r) => { | ||
var f = getMaxFixed(l, r) | ||
let f = getMaxFixed(l, r) | ||
return cb(l, r).toFixed(f) | ||
@@ -135,0 +136,0 @@ } |
{ | ||
"name": "liquidjs", | ||
"version": "5.0.1", | ||
"version": "5.0.2", | ||
"description": "Liquid template engine by pure JavaScript: compatible to shopify, easy to extend.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -13,3 +13,3 @@ // quote related | ||
// peoperty access | ||
var identifier = /[\w-]+/ | ||
var identifier = /[\w-]+[?]?/ | ||
var subscript = new RegExp(`\\[(?:${quoted.source}|[\\w-\\.]+)\\]`) | ||
@@ -16,0 +16,0 @@ var literal = new RegExp(`(?:${quoted.source}|${bool.source}|${number.source})`) |
164
src/scope.js
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const _ = require('./util/underscore.js') | ||
@@ -7,65 +8,66 @@ const lexical = require('./lexical.js') | ||
getAll: function () { | ||
var ctx = {} | ||
for (var i = this.scopes.length - 1; i >= 0; i--) { | ||
_.assign(ctx, this.scopes[i]) | ||
} | ||
return ctx | ||
return this.contexts.reduce((ctx, val) => Object.assign(ctx, val), Object.create(null)) | ||
}, | ||
get: function (str) { | ||
try { | ||
return this.getPropertyByPath(this.scopes, str) | ||
} catch (e) { | ||
if (!/undefined variable/.test(e.message) || this.opts.strict_variables) { | ||
throw e | ||
get: function (path) { | ||
let paths = this.propertyAccessSeq(path) | ||
let scope = this.findContextFor(paths[0]) || _.last(this.contexts) | ||
return paths.reduce((value, key) => this.readProperty(value, key), scope) | ||
}, | ||
set: function (path, v) { | ||
let paths = this.propertyAccessSeq(path) | ||
let scope = this.findContextFor(paths[0]) || _.last(this.contexts) | ||
paths.some((key, i) => { | ||
if (!_.isObject(scope)) { | ||
return true | ||
} | ||
} | ||
if (i === paths.length - 1) { | ||
scope[key] = v | ||
return true | ||
} | ||
if (undefined === scope[key]) { | ||
scope[key] = {} | ||
} | ||
scope = scope[key] | ||
}) | ||
}, | ||
set: function (k, v) { | ||
var scope = this.findScopeFor(k) | ||
setPropertyByPath(scope, k, v) | ||
return this | ||
unshift: function (ctx) { | ||
return this.contexts.unshift(ctx) | ||
}, | ||
push: function (ctx) { | ||
assert(ctx, `trying to push ${ctx} into scopes`) | ||
return this.scopes.push(ctx) | ||
return this.contexts.push(ctx) | ||
}, | ||
pop: function () { | ||
return this.scopes.pop() | ||
}, | ||
findScopeFor: function (key) { | ||
var i = this.scopes.length - 1 | ||
while (i >= 0 && !(key in this.scopes[i])) { | ||
i-- | ||
pop: function (ctx) { | ||
if (!arguments.length) { | ||
return this.contexts.pop() | ||
} | ||
if (i < 0) { | ||
i = this.scopes.length - 1 | ||
let i = this.contexts.findIndex(scope => scope === ctx) | ||
if (i === -1) { | ||
throw new TypeError('scope not found, cannot pop') | ||
} | ||
return this.scopes[i] | ||
return this.contexts.splice(i, 1)[0] | ||
}, | ||
unshift: function (ctx) { | ||
assert(ctx, `trying to push ${ctx} into scopes`) | ||
return this.scopes.unshift(ctx) | ||
findContextFor: function (key, filter) { | ||
filter = filter || (() => true) | ||
for (let i = this.contexts.length - 1; i >= 0; i--) { | ||
let candidate = this.contexts[i] | ||
if (!filter(candidate)) continue | ||
if (key in candidate) { | ||
return candidate | ||
} | ||
} | ||
return null | ||
}, | ||
shift: function () { | ||
return this.scopes.shift() | ||
}, | ||
getPropertyByPath: function (scopes, path) { | ||
var paths = this.propertyAccessSeq(path + '') | ||
if (!paths.length) { | ||
throw new TypeError('undefined variable: ' + path) | ||
readProperty: function (obj, key) { | ||
let val | ||
if (key === 'size' && (_.isArray(obj) || _.isString(obj))) { | ||
val = obj.length | ||
} else if (_.isNil(obj)) { | ||
val = undefined | ||
} else { | ||
val = obj[key] | ||
} | ||
var key = paths.shift() | ||
var value = getValueFromScopes(key, scopes) | ||
if (_.isNil(value)) { | ||
throw new TypeError('undefined variable: ' + key) | ||
if (_.isNil(val) && this.opts.strict_variables) { | ||
throw new TypeError(`undefined variable: ${key}`) | ||
} | ||
while (paths.length) { | ||
key = paths.shift() | ||
value = getValueFromParent(key, value) | ||
if (_.isNil(value)) { | ||
throw new TypeError('undefined variable: ' + key) | ||
} | ||
} | ||
return value | ||
return val | ||
}, | ||
@@ -82,6 +84,7 @@ | ||
propertyAccessSeq: function (str) { | ||
var seq = [] | ||
var name = '' | ||
var j | ||
var i = 0 | ||
str = String(str) | ||
let seq = [] | ||
let name = '' | ||
let j | ||
let i = 0 | ||
while (i < str.length) { | ||
@@ -92,3 +95,3 @@ switch (str[i]) { | ||
var delemiter = str[i + 1] | ||
let delemiter = str[i + 1] | ||
if (/['"]/.test(delemiter)) { // foo["bar"] | ||
@@ -121,2 +124,6 @@ j = str.indexOf(delemiter, i + 2) | ||
push() | ||
if (!seq.length) { | ||
throw new TypeError(`invalid path:"${str}"`) | ||
} | ||
return seq | ||
@@ -131,38 +138,2 @@ | ||
function setPropertyByPath (obj, path, val) { | ||
var paths = (path + '').replace(/\[/g, '.').replace(/\]/g, '').split('.') | ||
for (var i = 0; i < paths.length; i++) { | ||
var key = paths[i] | ||
if (!_.isObject(obj)) { | ||
// cannot set property of non-object | ||
return | ||
} | ||
// for end point | ||
if (i === paths.length - 1) { | ||
return (obj[key] = val) | ||
} | ||
// if path not exist | ||
if (undefined === obj[key]) { | ||
obj[key] = {} | ||
} | ||
obj = obj[key] | ||
} | ||
} | ||
function getValueFromParent (key, value) { | ||
return (key === 'size' && (_.isArray(value) || _.isString(value))) | ||
? value.length | ||
: value[key] | ||
} | ||
function getValueFromScopes (key, scopes) { | ||
for (var i = scopes.length - 1; i > -1; i--) { | ||
var scope = scopes[i] | ||
if (scope.hasOwnProperty(key)) { | ||
return scope[key] | ||
} | ||
} | ||
throw new TypeError('undefined variable: ' + key) | ||
} | ||
function matchRightBracket (str, begin) { | ||
@@ -194,4 +165,11 @@ var stack = 1 // count of '[' - count of ']' | ||
scope.opts = _.assign(defaultOptions, opts) | ||
scope.scopes = [ctx || {}] | ||
scope.contexts = [ctx || {}] | ||
return scope | ||
} | ||
exports.types = { | ||
AssignScope: Object.create(null), | ||
CaptureScope: Object.create(null), | ||
IncrementScope: Object.create(null), | ||
DecrementScope: Object.create(null) | ||
} |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const lexical = require('./lexical.js') | ||
@@ -6,8 +7,8 @@ const Syntax = require('./syntax.js') | ||
function hash (markup, scope) { | ||
var obj = {} | ||
var match | ||
let obj = {} | ||
let match | ||
lexical.hashCapture.lastIndex = 0 | ||
while ((match = lexical.hashCapture.exec(markup))) { | ||
var k = match[1] | ||
var v = match[2] | ||
let k = match[1] | ||
let v = match[2] | ||
obj[k] = Syntax.evalValue(v, scope) | ||
@@ -19,8 +20,8 @@ } | ||
module.exports = function () { | ||
var tagImpls = {} | ||
let tagImpls = {} | ||
var _tagInstance = { | ||
let _tagInstance = { | ||
render: function (scope) { | ||
var obj = hash(this.token.args, scope) | ||
var impl = this.tagImpl | ||
let obj = hash(this.token.args, scope) | ||
let impl = this.tagImpl | ||
if (typeof impl.render !== 'function') { | ||
@@ -36,3 +37,3 @@ return Promise.resolve('') | ||
var tagImpl = tagImpls[this.name] | ||
let tagImpl = tagImpls[this.name] | ||
assert(tagImpl, `tag ${this.name} not found`) | ||
@@ -51,3 +52,3 @@ this.tagImpl = Object.create(tagImpl) | ||
function construct (token, tokens) { | ||
var instance = Object.create(_tagInstance) | ||
let instance = Object.create(_tagInstance) | ||
instance.parse(token, tokens) | ||
@@ -54,0 +55,0 @@ return instance |
@@ -60,15 +60,6 @@ const toStr = Object.prototype.toString | ||
var srcs = Array.prototype.slice.call(arguments, 1) | ||
srcs.forEach(function (src) { | ||
_assignBinary(object, src) | ||
}) | ||
srcs.forEach((src) => Object.assign(object, src)) | ||
return object | ||
} | ||
function _assignBinary (dst, src) { | ||
forOwn(src, function (v, k) { | ||
dst[k] = v | ||
}) | ||
return dst | ||
} | ||
function last (arr) { | ||
@@ -75,0 +66,0 @@ return arr[arr.length - 1] |
const resolve = require('resolve-url') | ||
const splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/ | ||
const urlRe = /^(?:\w+:)?\/\/([^\s.]+\.\S{2}|localhost[:?\d]*)\S*$/ | ||
const _ = require('./underscore') | ||
@@ -19,3 +20,3 @@ // https://github.com/jinder/path/blob/master/path.js#L567 | ||
} | ||
if (root && root.charAt(root.length - 1) !== '/') { | ||
if (root && _.last(root) !== '/') { | ||
root += '/' | ||
@@ -22,0 +23,0 @@ } |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const Liquid = require('..') | ||
@@ -5,2 +6,3 @@ const lexical = Liquid.lexical | ||
const assert = require('../src/util/assert.js') | ||
const types = require('../src/scope').types | ||
@@ -10,3 +12,3 @@ module.exports = function (liquid) { | ||
parse: function (token) { | ||
var match = token.args.match(re) | ||
let match = token.args.match(re) | ||
assert(match, `illegal token ${token.raw}`) | ||
@@ -17,3 +19,5 @@ this.key = match[1] | ||
render: function (scope) { | ||
scope.set(this.key, liquid.evalValue(this.value, scope)) | ||
let ctx = Object.create(types.AssignScope) | ||
ctx[this.key] = liquid.evalValue(this.value, scope) | ||
scope.push(ctx) | ||
return Promise.resolve('') | ||
@@ -20,0 +24,0 @@ } |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const Liquid = require('..') | ||
@@ -5,2 +6,3 @@ const lexical = Liquid.lexical | ||
const assert = require('../src/util/assert.js') | ||
const types = require('../src/scope.js').types | ||
@@ -27,3 +29,5 @@ module.exports = function (liquid) { | ||
.then((html) => { | ||
scope.set(this.variable, html) | ||
let ctx = Object.create(types.CaptureScope) | ||
ctx[this.variable] = html | ||
scope.push(ctx) | ||
}) | ||
@@ -30,0 +34,0 @@ } |
@@ -0,4 +1,6 @@ | ||
'use strict' | ||
const Liquid = require('..') | ||
const lexical = Liquid.lexical | ||
const assert = require('../src/util/assert.js') | ||
const types = require('../src/scope').types | ||
@@ -13,7 +15,19 @@ module.exports = function (liquid) { | ||
render: function (scope, hash) { | ||
var v = scope.get(this.variable) | ||
if (typeof v !== 'number') v = 0 | ||
scope.set(this.variable, v - 1) | ||
let context = scope.findContextFor( | ||
this.variable, | ||
ctx => { | ||
return Object.getPrototypeOf(ctx) !== types.CaptureScope && | ||
Object.getPrototypeOf(ctx) !== types.AssignScope | ||
} | ||
) | ||
if (!context) { | ||
context = Object.create(types.DecrementScope) | ||
scope.unshift(context) | ||
} | ||
if (typeof context[this.variable] !== 'number') { | ||
context[this.variable] = 0 | ||
} | ||
return --context[this.variable] | ||
} | ||
}) | ||
} |
@@ -87,3 +87,3 @@ const Liquid = require('..') | ||
}) | ||
.then(() => scope.pop()) | ||
.then(() => scope.pop(context)) | ||
}).catch((e) => { | ||
@@ -90,0 +90,0 @@ if (e instanceof RenderBreakError && e.message === 'break') { |
@@ -45,3 +45,3 @@ const Liquid = require('..') | ||
.then((html) => { | ||
scope.pop() | ||
scope.pop(hash) | ||
scope.opts.blocks = originBlocks | ||
@@ -48,0 +48,0 @@ scope.opts.blockMode = originBlockMode |
@@ -0,4 +1,6 @@ | ||
'use strict' | ||
const Liquid = require('..') | ||
const assert = require('../src/util/assert.js') | ||
const lexical = Liquid.lexical | ||
const types = require('../src/scope').types | ||
@@ -8,3 +10,3 @@ module.exports = function (liquid) { | ||
parse: function (token) { | ||
var match = token.args.match(lexical.identifier) | ||
let match = token.args.match(lexical.identifier) | ||
assert(match, `illegal identifier ${token.args}`) | ||
@@ -14,7 +16,21 @@ this.variable = match[0] | ||
render: function (scope, hash) { | ||
var v = scope.get(this.variable) | ||
if (typeof v !== 'number') v = 0 | ||
scope.set(this.variable, v + 1) | ||
let context = scope.findContextFor( | ||
this.variable, | ||
ctx => { | ||
return Object.getPrototypeOf(ctx) !== types.CaptureScope && | ||
Object.getPrototypeOf(ctx) !== types.AssignScope | ||
} | ||
) | ||
if (!context) { | ||
context = Object.create(types.IncrementScope) | ||
scope.unshift(context) | ||
} | ||
if (typeof context[this.variable] !== 'number') { | ||
context[this.variable] = 0 | ||
} | ||
let val = context[this.variable] | ||
context[this.variable]++ | ||
return val | ||
} | ||
}) | ||
} |
@@ -41,3 +41,2 @@ const Liquid = require('..') | ||
.then(templates => { | ||
// push the hash | ||
scope.push(hash) | ||
@@ -47,5 +46,4 @@ scope.opts.blockMode = 'output' | ||
}) | ||
// pop the hash | ||
.then(partial => { | ||
scope.pop() | ||
scope.pop(hash) | ||
return partial | ||
@@ -52,0 +50,0 @@ }) |
@@ -12,3 +12,3 @@ module.exports = function (liquid) { | ||
}) | ||
.on('end', x => { | ||
.on('end', () => { | ||
throw new Error(`tag ${tagToken.raw} not closed`) | ||
@@ -19,6 +19,5 @@ }) | ||
render: function (scope, hash) { | ||
var tokens = this.tokens.map(token => token.raw).join('') | ||
return Promise.resolve(tokens) | ||
return this.tokens.map(token => token.raw).join('') | ||
} | ||
}) | ||
} |
@@ -46,7 +46,6 @@ const Liquid = require('..') | ||
if (!cols) cols = collection.length | ||
var contexts = [] | ||
collection.some((item, i) => { | ||
var contexts = collection.map((item, i) => { | ||
var ctx = {} | ||
ctx[this.variable] = item | ||
contexts.push(ctx) | ||
return ctx | ||
}) | ||
@@ -53,0 +52,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
852958
9894
0