diff --git a/api/index.html b/api/index.html
index a9ac85134..019fef0a8 100644
--- a/api/index.html
+++ b/api/index.html
@@ -192,6 +192,7 @@
 Bruno Carvalho 💻 |
 傅鹏 💻 |
+  Joel Hamilton 💻 |
diff --git a/filters/abs.html b/filters/abs.html
index dbf26222f..602028659 100644
--- a/filters/abs.html
+++ b/filters/abs.html
@@ -117,7 +117,7 @@
diff --git a/filters/append.html b/filters/append.html
index e41d99211..93e059ab8 100644
--- a/filters/append.html
+++ b/filters/append.html
@@ -113,7 +113,7 @@ website.com/index.html<
diff --git a/filters/at_least.html b/filters/at_least.html
index aa02390fe..2a4b1dcb5 100644
--- a/filters/at_least.html
+++ b/filters/at_least.html
@@ -110,7 +110,7 @@
diff --git a/filters/at_most.html b/filters/at_most.html
index f1658ed90..a40e25746 100644
--- a/filters/at_most.html
+++ b/filters/at_most.html
@@ -110,7 +110,7 @@
diff --git a/filters/capitalize.html b/filters/capitalize.html
index 2d5597ac0..cab72c096 100644
--- a/filters/capitalize.html
+++ b/filters/capitalize.html
@@ -111,7 +111,7 @@
diff --git a/filters/ceil.html b/filters/ceil.html
index f3f28e748..6f9161e23 100644
--- a/filters/ceil.html
+++ b/filters/ceil.html
@@ -123,7 +123,7 @@
diff --git a/filters/compact.html b/filters/compact.html
index ef8bac798..e42207a09 100644
--- a/filters/compact.html
+++ b/filters/compact.html
@@ -130,7 +130,7 @@
diff --git a/filters/concat.html b/filters/concat.html
index 1ce899c91..0810bd92e 100644
--- a/filters/concat.html
+++ b/filters/concat.html
@@ -137,7 +137,7 @@
diff --git a/filters/date.html b/filters/date.html
index c2bb15c0f..f4b223772 100644
--- a/filters/date.html
+++ b/filters/date.html
@@ -156,7 +156,7 @@ Last updated on:  |
 |
 |
+  |
diff --git a/js/liquid.browser.min.js b/js/liquid.browser.min.js
index 03e161d9d..dc357014f 100644
--- a/js/liquid.browser.min.js
+++ b/js/liquid.browser.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).liquidjs={})}(this,function(l){"use strict";var M=function(e,t){return(M=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(e,t){e.__proto__=t}:function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}))(e,t)};function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}M(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var T=function(){return(T=Object.assign||function(e){for(var t,r=1,n=arguments.length;ra[0]&&t[1]=e.length?void 0:e)&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function d(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,s=r.call(e),o=[];try{for(;(void 0===t||0> ":" ",r=W(String(e),String(o).length),t="".concat(t).concat(r,"| "),r=e===n?"\n"+W("^",i+t.length):"";return t+s[e-1]+r}).join("\n")),enumerable:!1}),this.message=(e=this.message,(t=this.token).file&&(e+=", file:".concat(t.file)),t=d(t.getPosition(),2),r=t[0],t=t[1],e+=", line:".concat(r,", col:").concat(t)),this.stack=this.message+"\n"+this.context+"\n"+this.stack,this.originalError&&(this.stack+="\nFrom "+this.originalError.stack)},re.is=function(e){return"LiquidError"===(null==e?void 0:e[ee])},re);function re(e,t){var r=X.call(this,"string"==typeof e?e:e.message)||this;return r.context="","string"!=typeof e&&Object.defineProperty(r,"originalError",{value:e,enumerable:!1}),Object.defineProperty(r,"token",{value:t,enumerable:!1}),Object.defineProperty(r,ee,{value:"LiquidError",enumerable:!1}),r}s(se,ne=te);var ne,ie=se;function se(e,t){e=ne.call(this,e,t)||this;return e.name="TokenizationError",ne.prototype.update.call(e),e}s(ue,oe=te);var oe,ae=ue;function ue(e,t){t=oe.call(this,e,t)||this;return t.name="ParseError",t.message=e.message,oe.prototype.update.call(t),t}s(he,ce=te),he.is=function(e){return"RenderError"===e.name};var ce,le=he;function he(e,t){t=ce.call(this,e,t.token)||this;return t.name="RenderError",t.message=e.message,ce.prototype.update.call(t),t}s(de,pe=te);var pe,fe=de;function de(e,t){t=pe.call(this,e,t)||this;return t.name="UndefinedVariableError",t.message=e.message,pe.prototype.update.call(t),t}s(ye,ve=Error);var ve,ge=ye;function ye(e){var t=ve.call(this,"undefined variable: ".concat(e))||this;return t.name="InternalUndefinedVariableError",t.variableName=e,t}s(we,me=Error);var me,be=we;function we(e){var t=me.call(this,e)||this;return t.name="AssertionError",t.message=e+"",t}var p=[0,0,0,0,0,0,0,0,0,20,4,4,4,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,2,8,0,0,0,0,8,0,0,0,64,0,65,0,0,33,33,33,33,33,33,33,33,33,33,0,0,2,2,2,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0],ke=1,Te=4,xe=16;function Oe(e){e=e.charCodeAt(0);return 128<=e?!p[e]:p[e]&ke}function _(e,t){if(!e)throw t="function"==typeof t?t():t||"expect ".concat(e," to be true"),new be(t)}p[160]=p[5760]=p[6158]=p[8192]=p[8193]=p[8194]=p[8195]=p[8196]=p[8197]=p[8198]=p[8199]=p[8200]=p[8201]=p[8202]=p[8232]=p[8233]=p[8239]=p[8287]=p[12288]=Te,p[8220]=p[8221]=128;s(ze,_e=o),ze.prototype.equals=function(e){return h(y(e))},ze.prototype.gt=function(){return!1},ze.prototype.geq=function(){return!1},ze.prototype.lt=function(){return!1},ze.prototype.leq=function(){return!1},ze.prototype.valueOf=function(){return null};var _e,r=ze;function ze(){return null!==_e&&_e.apply(this,arguments)||this}s(n,Se=o),n.prototype.equals=function(e){return!(e instanceof n||(u(e=y(e))||g(e)?0!==e.length:!$(e)||0!==Object.keys(e).length))},n.prototype.gt=function(){return!1},n.prototype.geq=function(){return!1},n.prototype.lt=function(){return!1},n.prototype.leq=function(){return!1},n.prototype.valueOf=function(){return""};var Se,Re=n;function n(){return null!==Se&&Se.apply(this,arguments)||this}s(qe,Fe=Re),qe.prototype.equals=function(e){return!1===e||!!h(y(e))||(u(e)?/^\s*$/.test(e):Fe.prototype.equals.call(this,e))};var Fe,i=qe;function qe(){return null!==Fe&&Fe.apply(this,arguments)||this}s(m,Le=o),m.prototype.next=function(){this.i++},m.prototype.index0=function(){return this.i},m.prototype.index=function(){return this.i+1},m.prototype.first=function(){return 0===this.i},m.prototype.last=function(){return this.i===this.length-1},m.prototype.rindex=function(){return this.length-this.i},m.prototype.rindex0=function(){return this.length-this.i-1},m.prototype.valueOf=function(){return JSON.stringify(this)};var Le,Ee=m;function m(e,t,r){var n=Le.call(this)||this;return n.i=0,n.length=e,n.name="".concat(r,"-").concat(t),n}s(je,De=o),je.prototype.super=function(){return this.superBlockRender()};var De,Ne=je;function je(e){void 0===e&&(e=function(){return""});var t=De.call(this)||this;return t.superBlockRender=e,t}function b(e){return e&&c(e.equals)}var r=new r,Me={true:!0,false:!1,nil:r,null:r,empty:new Re,blank:new i};function Pe(e){var t,r,n={};try{for(var i=O(Object.entries(e)),s=i.next();!s.done;s=i.next()){for(var o=d(s.value,2),a=o[0],u=o[1],c=n,l=0;l":2,"<":2,">=":2,"<=":2,contains:2,not:1,and:0,or:0},Tt={"==":0,"!=":0,">":0,"<":0,">=":0,"<=":0,contains:0,not:1,and:0,or:0},xt=(s(Ot,wt=e),Ot.prototype.getPrecedence=function(){var e=this.getText();return e in kt?kt[e]:1},Ot);function Ot(e,t,r,n){var i=wt.call(this,l.TokenKind.Operator,e,t,r,n)||this;return i.input=e,i.begin=t,i.end=r,i.file=n,i.operator=i.getText(),i}s(St,_t=e);var _t,zt=St;function St(e,t,r,n,i,s){r=_t.call(this,l.TokenKind.PropertyAccess,r,n,i,s)||this;return r.variable=e,r.props=t,r}s(qt,Rt=e);var Rt,Ft=qt;function qt(e,t,r,n,i,s){r=Rt.call(this,l.TokenKind.Filter,r,n,i,s)||this;return r.name=e,r.args=t,r}s(Dt,Lt=e);var Lt,Et=Dt;function Dt(e,t,r,n,i,s){var o=Lt.call(this,l.TokenKind.Hash,e,t,r,s)||this;return o.input=e,o.begin=t,o.end=r,o.name=n,o.value=i,o.file=s,o}var Nt=/[\da-fA-F]/,jt=/[0-7]/,Mt={b:"\b",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v"};function Pt(e){e=e.charCodeAt(0);return 97<=e?e-87:65<=e?e-55:e-48}s(It,Vt=e);var Vt,At=It;function It(e,t,r,n){var i=Vt.call(this,l.TokenKind.Quoted,e,t,r,n)||this;return i.input=e,i.begin=t,i.end=r,i.file=n,i.content=function(e){for(var t="",r=1;rs.getPrecedence()?[4,r.pop()]:[3,5];case 4:return e.sent(),[3,3];case 5:return r.push(s),[3,8];case 6:return[4,s];case 7:e.sent(),e.label=8;case 8:return i=n.next(),[3,2];case 9:return[3,12];case 10:return o=e.sent(),o={error:o},[3,12];case 11:try{i&&!i.done&&(a=n.return)&&a.call(n)}finally{if(o)throw o.error}return[7];case 12:return r.length?[4,r.pop()]:[3,14];case 13:return e.sent(),[3,12];case 14:return[2]}})}(e)),!1)}function R(t,r,n){return void 0===n&&(n=!1),x(this,function(e){switch(e.label){case 0:return t?"content"in t?[2,t.content]:Jr(t)?[4,function(t,r,n){var i,s,o,a,u,c,l,h,p,f;return x(this,function(e){switch(e.label){case 0:return i=[],[4,R(t.variable,r,n)];case 1:s=e.sent(),e.label=2;case 2:e.trys.push([2,7,8,9]),o=O(t.props),a=o.next(),e.label=3;case 3:return a.done?[3,6]:(l=a.value,c=(u=i).push,[4,R(l,r,!1)]);case 4:c.apply(u,[e.sent()]),e.label=5;case 5:return a=o.next(),[3,3];case 6:return[3,9];case 7:return l=e.sent(),p={error:l},[3,9];case 8:try{a&&!a.done&&(f=o.return)&&f.call(o)}finally{if(p)throw p.error}return[7];case 9:return(e.trys.push([9,14,,15]),t.variable)?[4,r._getFromScope(s,i)]:[3,11];case 10:return[2,e.sent()];case 11:return[4,r._get(i)];case 12:return[2,e.sent()];case 13:return[3,15];case 14:if(h=e.sent(),n&&"InternalUndefinedVariableError"===h.name)return[2,null];throw new fe(h,t);case 15:return[2]}})}(t,r,n)]:[3,2]:[2];case 1:return[2,e.sent()];case 2:return Zr(t)?[4,function(t,r){var n,i;return x(this,function(e){switch(e.label){case 0:return[4,R(t.lhs,r)];case 1:return n=e.sent(),[4,R(t.rhs,r)];case 2:return i=e.sent(),[2,Q(+n,+i+1)]}})}(t,r)]:[3,4];case 3:return[2,e.sent()];case 4:return[2]}})}function sr(e){return e.content}function or(e,t){return!ar(e,t)}function ar(e,t){return t.opts.jsTruthy?!e:!1===e||null==e}Re={"==":ur,"!=":function(e,t){return!ur(e,t)},">":function(e,t){return b(e)?e.gt(t):b(t)?t.lt(e):y(e)>y(t)},"<":function(e,t){return b(e)?e.lt(t):b(t)?t.gt(e):y(e)=":function(e,t){return b(e)?e.geq(t):b(t)?t.leq(e):y(e)>=y(t)},"<=":function(e,t){return b(e)?e.leq(t):b(t)?t.geq(e):y(e)<=y(t)},contains:function(e,t){return g(e=y(e))?e.some(function(e){return ur(e,t)}):!!u(e)&&-1this.limit&&this.remove(this.tail.prev.key)},hr);function hr(e,t){void 0===t&&(t=0),this.limit=e,this.size=t,this.cache={},this.head=new cr("HEAD",null,null,null),this.tail=new cr("TAIL",null,null,null),this.head.next=this.tail,this.tail.prev=this.head}function pr(e,t){var r=document.createElement("base"),e=(r.href=e,document.getElementsByTagName("head")[0]),n=(e.insertBefore(r,e.firstChild),document.createElement("a")),t=(n.href=t,n.href);return e.removeChild(r),t}i=Object.freeze({__proto__:null,resolve:function(e,t,i){return e.length&&"/"!==U(e)&&(e+="/"),pr(e,t).replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/,function(e,t,r){var n=r.split("/").pop();return/\.\w+$/.test(n)?e:t+r+i})},readFile:function(n){return a(this,void 0,void 0,function(){return x(this,function(e){return[2,new Promise(function(e,t){var r=new XMLHttpRequest;r.onload=function(){200<=r.status&&r.status<300?e(r.responseText):t(new Error(r.statusText))},r.onerror=function(){t(new Error("An error occurred whilst receiving the response."))},r.open("GET",n),r.send()})]})})},readFileSync:function(e){var t=new XMLHttpRequest;if(t.open("GET",e,!1),t.send(),t.status<200||300<=t.status)throw new Error(t.statusText);return t.responseText},exists:function(e){return a(this,void 0,void 0,function(){return x(this,function(e){return[2,!0]})})},existsSync:function(e){return!0},dirname:function(e){return pr(e,".")},sep:"/"});function fr(e,t){return void 0===t&&(t=0),JSON.stringify(e,null,t)}var r={raw:!0,handler:J},dr={"&":"&","<":"<",">":">",'"':""","'":"'"},vr={"&":"&","<":"<",">":">",""":'"',"'":"'"};function gr(e){return f(e).replace(/&|<|>|"|'/g,function(e){return dr[e]})}var yr=Object.freeze({__proto__:null,escape:gr,escape_once:function(e){return gr((e=f(e),f(e).replace(/&(amp|lt|gt|#34|#39);/g,function(e){return vr[e]})))},newline_to_br:function(e){return f(e).replace(/\r?\n/gm,"
\n")},strip_html:function(e){return f(e).replace(/