b0b02c40 by 任超

chore:文件夹的变动

1 parent 27211328
Showing 92 changed files with 0 additions and 17807 deletions
No preview for this file type
This diff could not be displayed because it is too large.
1 /*! Amaze UI v2.7.2 ~ IE8 Fucker | by Amaze UI Team | (c) 2016 AllMobilize, Inc. | Licensed under MIT | 2016-08-17T16:17:24+0800 */
2 !function(e,t){"use strict";"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.returnExports=t()}(this,function(){var e,t,n=Array,r=n.prototype,o=Object,i=o.prototype,a=Function,c=a.prototype,s=String,u=s.prototype,l=Number,f=l.prototype,p=r.slice,h=r.splice,d=r.push,y=r.unshift,g=r.concat,v=r.join,b=c.call,m=c.apply,w=Math.max,O=Math.min,T=i.toString,j="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,x=Function.prototype.toString,E=/^\s*class /,S=function(e){try{var t=x.call(e),n=t.replace(/\/\/.*\n/g,""),r=n.replace(/\/\*[.\s\S]*\*\//g,""),o=r.replace(/\n/gm," ").replace(/ {2}/g," ");return E.test(o)}catch(i){return!1}},D=function(e){try{return!S(e)&&(x.call(e),!0)}catch(t){return!1}},_="[object Function]",M="[object GeneratorFunction]",e=function(e){if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if(j)return D(e);if(S(e))return!1;var t=T.call(e);return t===_||t===M},P=RegExp.prototype.exec,I=function(e){try{return P.call(e),!0}catch(t){return!1}},C="[object RegExp]";t=function(e){return"object"==typeof e&&(j?I(e):T.call(e)===C)};var F,N=String.prototype.valueOf,k=function(e){try{return N.call(e),!0}catch(t){return!1}},z="[object String]";F=function(e){return"string"==typeof e||"object"==typeof e&&(j?k(e):T.call(e)===z)};var R=o.defineProperty&&function(){try{var e={};o.defineProperty(e,"x",{enumerable:!1,value:e});for(var t in e)return!1;return e.x===e}catch(n){return!1}}(),$=function(e){var t;return t=R?function(e,t,n,r){!r&&t in e||o.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:n})}:function(e,t,n,r){!r&&t in e||(e[t]=n)},function(n,r,o){for(var i in r)e.call(r,i)&&t(n,i,r[i],o)}}(i.hasOwnProperty),U=function(e){var t=typeof e;return null===e||"object"!==t&&"function"!==t},A=l.isNaN||function(e){return e!==e},L={ToInteger:function(e){var t=+e;return A(t)?t=0:0!==t&&t!==1/0&&t!==-(1/0)&&(t=(t>0||-1)*Math.floor(Math.abs(t))),t},ToPrimitive:function(t){var n,r,o;if(U(t))return t;if(r=t.valueOf,e(r)&&(n=r.call(t),U(n)))return n;if(o=t.toString,e(o)&&(n=o.call(t),U(n)))return n;throw new TypeError},ToObject:function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return o(e)},ToUint32:function(e){return e>>>0}},X=function(){};$(c,{bind:function(t){var n=this;if(!e(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var r,i=p.call(arguments,1),c=function(){if(this instanceof r){var e=m.call(n,this,g.call(i,p.call(arguments)));return o(e)===e?e:this}return m.call(n,t,g.call(i,p.call(arguments)))},s=w(0,n.length-i.length),u=[],l=0;l<s;l++)d.call(u,"$"+l);return r=a("binder","return function ("+v.call(u,",")+"){ return binder.apply(this, arguments); }")(c),n.prototype&&(X.prototype=n.prototype,r.prototype=new X,X.prototype=null),r}});var B=b.bind(i.hasOwnProperty),G=b.bind(i.toString),J=b.bind(p),q=m.bind(p),Z=b.bind(u.slice),H=b.bind(u.split),W=b.bind(u.indexOf),Y=b.bind(d),Q=b.bind(i.propertyIsEnumerable),V=b.bind(r.sort),K=n.isArray||function(e){return"[object Array]"===G(e)},ee=1!==[].unshift(0);$(r,{unshift:function(){return y.apply(this,arguments),this.length}},ee),$(n,{isArray:K});var te=o("a"),ne="a"!==te[0]||!(0 in te),re=function(e){var t=!0,n=!0,r=!1;if(e)try{e.call("foo",function(e,n,r){"object"!=typeof r&&(t=!1)}),e.call([1],function(){"use strict";n="string"==typeof this},"x")}catch(o){r=!0}return!!e&&!r&&t&&n};$(r,{forEach:function(t){var n,r=L.ToObject(this),o=ne&&F(this)?H(this,""):r,i=-1,a=L.ToUint32(o.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++i<a;)i in o&&("undefined"==typeof n?t(o[i],i,r):t.call(n,o[i],i,r))}},!re(r.forEach)),$(r,{map:function(t){var r,o=L.ToObject(this),i=ne&&F(this)?H(this,""):o,a=L.ToUint32(i.length),c=n(a);if(arguments.length>1&&(r=arguments[1]),!e(t))throw new TypeError("Array.prototype.map callback must be a function");for(var s=0;s<a;s++)s in i&&("undefined"==typeof r?c[s]=t(i[s],s,o):c[s]=t.call(r,i[s],s,o));return c}},!re(r.map)),$(r,{filter:function(t){var n,r,o=L.ToObject(this),i=ne&&F(this)?H(this,""):o,a=L.ToUint32(i.length),c=[];if(arguments.length>1&&(r=arguments[1]),!e(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var s=0;s<a;s++)s in i&&(n=i[s],("undefined"==typeof r?t(n,s,o):t.call(r,n,s,o))&&Y(c,n));return c}},!re(r.filter)),$(r,{every:function(t){var n,r=L.ToObject(this),o=ne&&F(this)?H(this,""):r,i=L.ToUint32(o.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.every callback must be a function");for(var a=0;a<i;a++)if(a in o&&!("undefined"==typeof n?t(o[a],a,r):t.call(n,o[a],a,r)))return!1;return!0}},!re(r.every)),$(r,{some:function(t){var n,r=L.ToObject(this),o=ne&&F(this)?H(this,""):r,i=L.ToUint32(o.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.some callback must be a function");for(var a=0;a<i;a++)if(a in o&&("undefined"==typeof n?t(o[a],a,r):t.call(n,o[a],a,r)))return!0;return!1}},!re(r.some));var oe=!1;r.reduce&&(oe="object"==typeof r.reduce.call("es5",function(e,t,n,r){return r})),$(r,{reduce:function(t){var n=L.ToObject(this),r=ne&&F(this)?H(this,""):n,o=L.ToUint32(r.length);if(!e(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===o&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var i,a=0;if(arguments.length>=2)i=arguments[1];else for(;;){if(a in r){i=r[a++];break}if(++a>=o)throw new TypeError("reduce of empty array with no initial value")}for(;a<o;a++)a in r&&(i=t(i,r[a],a,n));return i}},!oe);var ie=!1;r.reduceRight&&(ie="object"==typeof r.reduceRight.call("es5",function(e,t,n,r){return r})),$(r,{reduceRight:function(t){var n=L.ToObject(this),r=ne&&F(this)?H(this,""):n,o=L.ToUint32(r.length);if(!e(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===o&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var i,a=o-1;if(arguments.length>=2)i=arguments[1];else for(;;){if(a in r){i=r[a--];break}if(--a<0)throw new TypeError("reduceRight of empty array with no initial value")}if(a<0)return i;do a in r&&(i=t(i,r[a],a,n));while(a--);return i}},!ie);var ae=r.indexOf&&[0,1].indexOf(1,2)!==-1;$(r,{indexOf:function(e){var t=ne&&F(this)?H(this,""):L.ToObject(this),n=L.ToUint32(t.length);if(0===n)return-1;var r=0;for(arguments.length>1&&(r=L.ToInteger(arguments[1])),r=r>=0?r:w(0,n+r);r<n;r++)if(r in t&&t[r]===e)return r;return-1}},ae);var ce=r.lastIndexOf&&[0,1].lastIndexOf(0,-3)!==-1;$(r,{lastIndexOf:function(e){var t=ne&&F(this)?H(this,""):L.ToObject(this),n=L.ToUint32(t.length);if(0===n)return-1;var r=n-1;for(arguments.length>1&&(r=O(r,L.ToInteger(arguments[1]))),r=r>=0?r:n-Math.abs(r);r>=0;r--)if(r in t&&e===t[r])return r;return-1}},ce);var se=function(){var e=[1,2],t=e.splice();return 2===e.length&&K(t)&&0===t.length}();$(r,{splice:function(e,t){return 0===arguments.length?[]:h.apply(this,arguments)}},!se);var ue=function(){var e={};return r.splice.call(e,0,0,1),1===e.length}();$(r,{splice:function(e,t){if(0===arguments.length)return[];var n=arguments;return this.length=w(L.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof t&&(n=J(arguments),n.length<2?Y(n,this.length-e):n[1]=L.ToInteger(t)),h.apply(this,n)}},!ue);var le=function(){var e=new n(1e5);return e[8]="x",e.splice(1,1),7===e.indexOf("x")}(),fe=function(){var e=256,t=[];return t[e]="a",t.splice(e+1,0,"b"),"a"===t[e]}();$(r,{splice:function(e,t){for(var n,r=L.ToObject(this),o=[],i=L.ToUint32(r.length),a=L.ToInteger(e),c=a<0?w(i+a,0):O(a,i),u=O(w(L.ToInteger(t),0),i-c),l=0;l<u;)n=s(c+l),B(r,n)&&(o[l]=r[n]),l+=1;var f,p=J(arguments,2),h=p.length;if(h<u){l=c;for(var d=i-u;l<d;)n=s(l+u),f=s(l+h),B(r,n)?r[f]=r[n]:delete r[f],l+=1;l=i;for(var y=i-u+h;l>y;)delete r[l-1],l-=1}else if(h>u)for(l=i-u;l>c;)n=s(l+u-1),f=s(l+h-1),B(r,n)?r[f]=r[n]:delete r[f],l-=1;l=c;for(var g=0;g<p.length;++g)r[l]=p[g],l+=1;return r.length=i-u+h,o}},!le||!fe);var pe,he=r.join;try{pe="1,2,3"!==Array.prototype.join.call("123",",")}catch(de){pe=!0}pe&&$(r,{join:function(e){var t="undefined"==typeof e?",":e;return he.call(F(this)?H(this,""):this,t)}},pe);var ye="1,2"!==[1,2].join(void 0);ye&&$(r,{join:function(e){var t="undefined"==typeof e?",":e;return he.call(this,t)}},ye);var ge=function(e){for(var t=L.ToObject(this),n=L.ToUint32(t.length),r=0;r<arguments.length;)t[n+r]=arguments[r],r+=1;return t.length=n+r,n+r},ve=function(){var e={},t=Array.prototype.push.call(e,void 0);return 1!==t||1!==e.length||"undefined"!=typeof e[0]||!B(e,0)}();$(r,{push:function(e){return K(this)?d.apply(this,arguments):ge.apply(this,arguments)}},ve);var be=function(){var e=[],t=e.push(void 0);return 1!==t||1!==e.length||"undefined"!=typeof e[0]||!B(e,0)}();$(r,{push:ge},be),$(r,{slice:function(e,t){var n=F(this)?H(this,""):this;return q(n,arguments)}},ne);var me=function(){try{return[1,2].sort(null),[1,2].sort({}),!0}catch(e){}return!1}(),we=function(){try{return[1,2].sort(/a/),!1}catch(e){}return!0}(),Oe=function(){try{return[1,2].sort(void 0),!0}catch(e){}return!1}();$(r,{sort:function(t){if("undefined"==typeof t)return V(this);if(!e(t))throw new TypeError("Array.prototype.sort callback must be a function");return V(this,t)}},me||!Oe||!we);var Te=!{toString:null}.propertyIsEnumerable("toString"),je=function(){}.propertyIsEnumerable("prototype"),xe=!B("x","0"),Ee=function(e){var t=e.constructor;return t&&t.prototype===e},Se={$window:!0,$console:!0,$parent:!0,$self:!0,$frame:!0,$frames:!0,$frameElement:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$external:!0},De=function(){if("undefined"==typeof window)return!1;for(var e in window)try{!Se["$"+e]&&B(window,e)&&null!==window[e]&&"object"==typeof window[e]&&Ee(window[e])}catch(t){return!0}return!1}(),_e=function(e){if("undefined"==typeof window||!De)return Ee(e);try{return Ee(e)}catch(t){return!1}},Me=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Pe=Me.length,Ie=function(e){return"[object Arguments]"===G(e)},Ce=function(t){return null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&!K(t)&&e(t.callee)},Fe=Ie(arguments)?Ie:Ce;$(o,{keys:function(t){var n=e(t),r=Fe(t),o=null!==t&&"object"==typeof t,i=o&&F(t);if(!o&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var a=[],c=je&&n;if(i&&xe||r)for(var u=0;u<t.length;++u)Y(a,s(u));if(!r)for(var l in t)c&&"prototype"===l||!B(t,l)||Y(a,s(l));if(Te)for(var f=_e(t),p=0;p<Pe;p++){var h=Me[p];f&&"constructor"===h||!B(t,h)||Y(a,h)}return a}});var Ne=o.keys&&function(){return 2===o.keys(arguments).length}(1,2),ke=o.keys&&function(){var e=o.keys(arguments);return 1!==arguments.length||1!==e.length||1!==e[0]}(1),ze=o.keys;$(o,{keys:function(e){return ze(Fe(e)?J(e):e)}},!Ne||ke);var Re,$e,Ue=0!==new Date((-0xc782b5b342b24)).getUTCMonth(),Ae=new Date((-0x55d318d56a724)),Le=new Date(14496624e5),Xe="Mon, 01 Jan -45875 11:59:59 GMT"!==Ae.toUTCString(),Be=Ae.getTimezoneOffset();Be<-720?(Re="Tue Jan 02 -45875"!==Ae.toDateString(),$e=!/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/.test(Le.toString())):(Re="Mon Jan 01 -45875"!==Ae.toDateString(),$e=!/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/.test(Le.toString()));var Ge=b.bind(Date.prototype.getFullYear),Je=b.bind(Date.prototype.getMonth),qe=b.bind(Date.prototype.getDate),Ze=b.bind(Date.prototype.getUTCFullYear),He=b.bind(Date.prototype.getUTCMonth),We=b.bind(Date.prototype.getUTCDate),Ye=b.bind(Date.prototype.getUTCDay),Qe=b.bind(Date.prototype.getUTCHours),Ve=b.bind(Date.prototype.getUTCMinutes),Ke=b.bind(Date.prototype.getUTCSeconds),et=b.bind(Date.prototype.getUTCMilliseconds),tt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],nt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],rt=function(e,t){return qe(new Date(t,e,0))};$(Date.prototype,{getFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ge(this);return e<0&&Je(this)>11?e+1:e},getMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ge(this),t=Je(this);return e<0&&t>11?0:t},getDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ge(this),t=Je(this),n=qe(this);if(e<0&&t>11){if(12===t)return n;var r=rt(0,e+1);return r-n+1}return n},getUTCFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ze(this);return e<0&&He(this)>11?e+1:e},getUTCMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ze(this),t=He(this);return e<0&&t>11?0:t},getUTCDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ze(this),t=He(this),n=We(this);if(e<0&&t>11){if(12===t)return n;var r=rt(0,e+1);return r-n+1}return n}},Ue),$(Date.prototype,{toUTCString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=Ye(this),t=We(this),n=He(this),r=Ze(this),o=Qe(this),i=Ve(this),a=Ke(this);return tt[e]+", "+(t<10?"0"+t:t)+" "+nt[n]+" "+r+" "+(o<10?"0"+o:o)+":"+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)+" GMT"}},Ue||Xe),$(Date.prototype,{toDateString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=this.getDay(),t=this.getDate(),n=this.getMonth(),r=this.getFullYear();return tt[e]+" "+nt[n]+" "+(t<10?"0"+t:t)+" "+r}},Ue||Re),(Ue||$e)&&(Date.prototype.toString=function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var e=this.getDay(),t=this.getDate(),n=this.getMonth(),r=this.getFullYear(),o=this.getHours(),i=this.getMinutes(),a=this.getSeconds(),c=this.getTimezoneOffset(),s=Math.floor(Math.abs(c)/60),u=Math.floor(Math.abs(c)%60);return tt[e]+" "+nt[n]+" "+(t<10?"0"+t:t)+" "+r+" "+(o<10?"0"+o:o)+":"+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)+" GMT"+(c>0?"-":"+")+(s<10?"0"+s:s)+(u<10?"0"+u:u)},R&&o.defineProperty(Date.prototype,"toString",{configurable:!0,enumerable:!1,writable:!0}));var ot=-621987552e5,it="-000001",at=Date.prototype.toISOString&&new Date(ot).toISOString().indexOf(it)===-1,ct=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date((-1)).toISOString(),st=b.bind(Date.prototype.getTime);$(Date.prototype,{toISOString:function(){if(!isFinite(this)||!isFinite(st(this)))throw new RangeError("Date.prototype.toISOString called on non-finite value.");var e=Ze(this),t=He(this);e+=Math.floor(t/12),t=(t%12+12)%12;var n=[t+1,We(this),Qe(this),Ve(this),Ke(this)];e=(e<0?"-":e>9999?"+":"")+Z("00000"+Math.abs(e),0<=e&&e<=9999?-4:-6);for(var r=0;r<n.length;++r)n[r]=Z("00"+n[r],-2);return e+"-"+J(n,0,2).join("-")+"T"+J(n,2).join(":")+"."+Z("000"+et(this),-3)+"Z"}},at||ct);var ut=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&new Date(ot).toJSON().indexOf(it)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(e){return!1}}();ut||(Date.prototype.toJSON=function(t){var n=o(this),r=L.ToPrimitive(n);if("number"==typeof r&&!isFinite(r))return null;var i=n.toISOString;if(!e(i))throw new TypeError("toISOString property is not callable");return i.call(n)});var lt=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),ft=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),pt=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(pt||ft||!lt){var ht=Math.pow(2,31)-1,dt=A(new Date(1970,0,1,0,0,0,ht+1).getTime());Date=function(e){var t=function(n,r,o,i,a,c,u){var l,f=arguments.length;if(this instanceof e){var p=c,h=u;if(dt&&f>=7&&u>ht){var d=Math.floor(u/ht)*ht,y=Math.floor(d/1e3);p+=y,h-=1e3*y}l=1===f&&s(n)===n?new e(t.parse(n)):f>=7?new e(n,r,o,i,a,p,h):f>=6?new e(n,r,o,i,a,p):f>=5?new e(n,r,o,i,a):f>=4?new e(n,r,o,i):f>=3?new e(n,r,o):f>=2?new e(n,r):f>=1?new e(n instanceof e?+n:n):new e}else l=e.apply(this,arguments);return U(l)||$(l,{constructor:t},!0),l},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),r=[0,31,59,90,120,151,181,212,243,273,304,334,365],o=function(e,t){var n=t>1?1:0;return r[t]+Math.floor((e-1969+n)/4)-Math.floor((e-1901+n)/100)+Math.floor((e-1601+n)/400)+365*(e-1970)},i=function(t){var n=0,r=t;if(dt&&r>ht){var o=Math.floor(r/ht)*ht,i=Math.floor(o/1e3);n+=i,r-=1e3*i}return l(new e(1970,0,1,0,0,n,r))};for(var a in e)B(e,a)&&(t[a]=e[a]);$(t,{now:e.now,UTC:e.UTC},!0),t.prototype=e.prototype,$(t.prototype,{constructor:t},!0);var c=function(t){var r=n.exec(t);if(r){var a,c=l(r[1]),s=l(r[2]||1)-1,u=l(r[3]||1)-1,f=l(r[4]||0),p=l(r[5]||0),h=l(r[6]||0),d=Math.floor(1e3*l(r[7]||0)),y=Boolean(r[4]&&!r[8]),g="-"===r[9]?1:-1,v=l(r[10]||0),b=l(r[11]||0),m=p>0||h>0||d>0;return f<(m?24:25)&&p<60&&h<60&&d<1e3&&s>-1&&s<12&&v<24&&b<60&&u>-1&&u<o(c,s+1)-o(c,s)&&(a=60*(24*(o(c,s)+u)+f+v*g),a=1e3*(60*(a+p+b*g)+h)+d,y&&(a=i(a)),-864e13<=a&&a<=864e13)?a:NaN}return e.parse.apply(this,arguments)};return $(t,{parse:c}),t}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var yt=f.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0)),gt={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(e,t){for(var n=-1,r=t;++n<gt.size;)r+=e*gt.data[n],gt.data[n]=r%gt.base,r=Math.floor(r/gt.base)},divide:function(e){for(var t=gt.size,n=0;--t>=0;)n+=gt.data[t],gt.data[t]=Math.floor(n/e),n=n%e*gt.base},numToString:function(){for(var e=gt.size,t="";--e>=0;)if(""!==t||0===e||0!==gt.data[e]){var n=s(gt.data[e]);""===t?t=n:t+=Z("0000000",0,7-n.length)+n}return t},pow:function zt(e,t,n){return 0===t?n:t%2===1?zt(e,t-1,n*e):zt(e*e,t/2,n)},log:function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}},vt=function(e){var t,n,r,o,i,a,c,u;if(t=l(e),t=A(t)?0:Math.floor(t),t<0||t>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=l(this),A(n))return"NaN";if(n<=-1e21||n>=1e21)return s(n);if(r="",n<0&&(r="-",n=-n),o="0",n>1e-21)if(i=gt.log(n*gt.pow(2,69,1))-69,a=i<0?n*gt.pow(2,-i,1):n/gt.pow(2,i,1),a*=4503599627370496,i=52-i,i>0){for(gt.multiply(0,a),c=t;c>=7;)gt.multiply(1e7,0),c-=7;for(gt.multiply(gt.pow(10,c,1),0),c=i-1;c>=23;)gt.divide(1<<23),c-=23;gt.divide(1<<c),gt.multiply(1,1),gt.divide(2),o=gt.numToString()}else gt.multiply(0,a),gt.multiply(1<<-i,0),o=gt.numToString()+Z("0.00000000000000000000",2,2+t);return t>0?(u=o.length,o=u<=t?r+Z("0.0000000000000000000",0,t-u+2)+o:r+Z(o,0,u-t)+"."+Z(o,u-t)):o=r+o,o};$(f,{toFixed:vt},yt);var bt=function(){try{return"1"===1..toPrecision(void 0)}catch(e){return!0}}(),mt=f.toPrecision;$(f,{toPrecision:function(e){return"undefined"==typeof e?mt.call(this):mt.call(this,e)}},bt),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var e="undefined"==typeof/()??/.exec("")[1],n=Math.pow(2,32)-1;u.split=function(r,o){var i=String(this);if("undefined"==typeof r&&0===o)return[];if(!t(r))return H(this,r,o);var a,c,s,u,l=[],f=(r.ignoreCase?"i":"")+(r.multiline?"m":"")+(r.unicode?"u":"")+(r.sticky?"y":""),p=0,h=new RegExp(r.source,f+"g");e||(a=new RegExp("^"+h.source+"$(?!\\s)",f));var y="undefined"==typeof o?n:L.ToUint32(o);for(c=h.exec(i);c&&(s=c.index+c[0].length,!(s>p&&(Y(l,Z(i,p,c.index)),!e&&c.length>1&&c[0].replace(a,function(){for(var e=1;e<arguments.length-2;e++)"undefined"==typeof arguments[e]&&(c[e]=void 0)}),c.length>1&&c.index<i.length&&d.apply(l,J(c,1)),u=c[0].length,p=s,l.length>=y)));)h.lastIndex===c.index&&h.lastIndex++,c=h.exec(i);return p===i.length?!u&&h.test("")||Y(l,""):Y(l,Z(i,p)),l.length>y?J(l,0,y):l}}():"0".split(void 0,0).length&&(u.split=function(e,t){return"undefined"==typeof e&&0===t?[]:H(this,e,t)});var wt=u.replace,Ot=function(){var e=[];return"x".replace(/x(.)?/g,function(t,n){Y(e,n)}),1===e.length&&"undefined"==typeof e[0]}();Ot||(u.replace=function(n,r){var o=e(r),i=t(n)&&/\)[*?]/.test(n.source);if(o&&i){var a=function(e){var t=arguments.length,o=n.lastIndex;n.lastIndex=0;var i=n.exec(e)||[];return n.lastIndex=o,Y(i,arguments[t-2],arguments[t-1]),r.apply(this,i)};return wt.call(this,n,a)}return wt.call(this,n,r)});var Tt=u.substr,jt="".substr&&"b"!=="0b".substr(-1);$(u,{substr:function(e,t){var n=e;return e<0&&(n=w(this.length+e,0)),Tt.call(this,n,t)}},jt);var xt="\t\n\x0B\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff",Et="\u200b",St="["+xt+"]",Dt=new RegExp("^"+St+St+"*"),_t=new RegExp(St+St+"*$"),Mt=u.trim&&(xt.trim()||!Et.trim());$(u,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return s(this).replace(Dt,"").replace(_t,"")}},Mt);var Pt=b.bind(String.prototype.trim),It=u.lastIndexOf&&"abc\u3042\u3044".lastIndexOf("\u3042\u3044",2)!==-1;$(u,{lastIndexOf:function(e){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var t=s(this),n=s(e),r=arguments.length>1?l(arguments[1]):NaN,o=A(r)?1/0:L.ToInteger(r),i=O(w(o,0),t.length),a=n.length,c=i+a;c>0;){c=w(0,c-a);var u=W(Z(t,c,i+a),n);if(u!==-1)return c+u}return-1}},It);var Ct=u.lastIndexOf;if($(u,{lastIndexOf:function(e){return Ct.apply(this,arguments)}},1!==u.lastIndexOf.length),8===parseInt(xt+"08")&&22===parseInt(xt+"0x16")||(parseInt=function(e){var t=/^[\-+]?0[xX]/;return function(n,r){var o=Pt(n),i=l(r)||(t.test(o)?16:10);return e(o,i)}}(parseInt)),1/parseFloat("-0")!==-(1/0)&&(parseFloat=function(e){return function(t){var n=Pt(t),r=e(n);return 0===r&&"-"===Z(n,0,1)?-0:r}}(parseFloat)),"RangeError: test"!==String(new RangeError("test"))){var Ft=function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var e=this.name;"undefined"==typeof e?e="Error":"string"!=typeof e&&(e=s(e));var t=this.message;return"undefined"==typeof t?t="":"string"!=typeof t&&(t=s(t)),e?t?e+": "+t:e:t};Error.prototype.toString=Ft}if(R){var Nt=function(e,t){if(Q(e,t)){var n=Object.getOwnPropertyDescriptor(e,t);n.enumerable=!1,Object.defineProperty(e,t,n)}};Nt(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),Nt(Error.prototype,"name")}if("/a/gim"!==String(/a/gim)){var kt=function(){var e="/"+this.source+"/";return this.global&&(e+="g"),this.ignoreCase&&(e+="i"),this.multiline&&(e+="m"),e};RegExp.prototype.toString=kt}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.returnExports=t()}(this,function(){var e,t,n,r,o=Function.call,i=Object.prototype,a=o.bind(i.hasOwnProperty),c=o.bind(i.propertyIsEnumerable),s=o.bind(i.toString),u=a(i,"__defineGetter__");u&&(e=o.bind(i.__defineGetter__),t=o.bind(i.__defineSetter__),n=o.bind(i.__lookupGetter__),r=o.bind(i.__lookupSetter__)),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){var t=e.__proto__;return t||null===t?t:"[object Function]"===s(e.constructor)?e.constructor.prototype:e instanceof Object?i:null});var l=function(e){try{return e.sentinel=0,0===Object.getOwnPropertyDescriptor(e,"sentinel").value}catch(t){return!1}};if(Object.defineProperty){var f=l({}),p="undefined"==typeof document||l(document.createElement("div"));if(!p||!f)var h=Object.getOwnPropertyDescriptor}if(!Object.getOwnPropertyDescriptor||h){var d="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(d+e);if(h)try{return h.call(Object,e,t)}catch(o){}var s;if(!a(e,t))return s;if(s={enumerable:c(e,t),configurable:!0},u){var l=e.__proto__,f=e!==i;f&&(e.__proto__=i);var p=n(e,t),y=r(e,t);if(f&&(e.__proto__=l),p||y)return p&&(s.get=p),y&&(s.set=y),s}return s.value=e[t],s.writable=!0,s}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),!Object.create){var y,g=!({__proto__:null}instanceof Object),v=function(){if(!document.domain)return!1;try{return!!new ActiveXObject("htmlfile")}catch(e){return!1}},b=function(){var e,t;return t=new ActiveXObject("htmlfile"),t.write("<script></script>"),t.close(),e=t.parentWindow.Object.prototype,t=null,e},m=function(){var e,t=document.createElement("iframe"),n=document.body||document.documentElement;return t.style.display="none",n.appendChild(t),t.src="javascript:",e=t.contentWindow.Object.prototype,n.removeChild(t),t=null,e};y=g||"undefined"==typeof document?function(){return{__proto__:null}}:function(){var e=v()?b():m();delete e.constructor,delete e.hasOwnProperty,delete e.propertyIsEnumerable,delete e.isPrototypeOf,delete e.toLocaleString,delete e.toString,delete e.valueOf;var t=function(){};return t.prototype=e,y=function(){return new t},new t},Object.create=function(e,t){var n,r=function(){};if(null===e)n=y();else{if("object"!=typeof e&&"function"!=typeof e)throw new TypeError("Object prototype may only be an Object or null");r.prototype=e,n=new r,n.__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n}}var w=function(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){return!1}};if(Object.defineProperty){var O=w({}),T="undefined"==typeof document||w(document.createElement("div"));if(!O||!T)var j=Object.defineProperty,x=Object.defineProperties}if(!Object.defineProperty||j){var E="Property description must be an object: ",S="Object.defineProperty called on non-object: ",D="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(o,a,c){if("object"!=typeof o&&"function"!=typeof o||null===o)throw new TypeError(S+o);if("object"!=typeof c&&"function"!=typeof c||null===c)throw new TypeError(E+c);if(j)try{return j.call(Object,o,a,c)}catch(s){}if("value"in c)if(u&&(n(o,a)||r(o,a))){var l=o.__proto__;o.__proto__=i,delete o[a],o[a]=c.value,o.__proto__=l}else o[a]=c.value;else{if(!u&&("get"in c||"set"in c))throw new TypeError(D);"get"in c&&e(o,a,c.get),"set"in c&&t(o,a,c.set)}return o}}Object.defineProperties&&!x||(Object.defineProperties=function(e,t){if(x)try{return x.call(Object,e,t)}catch(n){}return Object.keys(t).forEach(function(n){"__proto__"!==n&&Object.defineProperty(e,n,t[n])}),e}),Object.seal||(Object.seal=function(e){if(Object(e)!==e)throw new TypeError("Object.seal can only be called on Objects.");return e}),Object.freeze||(Object.freeze=function(e){if(Object(e)!==e)throw new TypeError("Object.freeze can only be called on Objects.");return e});try{Object.freeze(function(){})}catch(_){Object.freeze=function(e){return function(t){return"function"==typeof t?t:e(t)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(e){if(Object(e)!==e)throw new TypeError("Object.preventExtensions can only be called on Objects.");return e}),Object.isSealed||(Object.isSealed=function(e){if(Object(e)!==e)throw new TypeError("Object.isSealed can only be called on Objects.");return!1}),Object.isFrozen||(Object.isFrozen=function(e){if(Object(e)!==e)throw new TypeError("Object.isFrozen can only be called on Objects.");return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)!==e)throw new TypeError("Object.isExtensible can only be called on Objects.");for(var t="";a(e,t);)t+="?";e[t]=!0;var n=a(e,t);return delete e[t],n})}),function(e){"use strict";e.console=e.console||{};for(var t,n,r=e.console,o={},i=function(){},a="memory".split(","),c="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=a.pop();)r[t]||(r[t]=o);for(;n=c.pop();)"function"!=typeof r[n]&&(r[n]=i)}("undefined"==typeof window?this:window),!window.addEventListener&&function(e,t,n,r,o,i,a){e[r]=t[r]=n[r]=function(e,t){var n=this;a.unshift([n,e,t,function(e){e.currentTarget=n,e.preventDefault=function(){e.returnValue=!1},e.stopPropagation=function(){e.cancelBubble=!0},e.target=e.srcElement||n,t.call(n,e)}]),this.attachEvent("on"+e,a[0][3])},e[o]=t[o]=n[o]=function(e,t){for(var n,r=0;n=a[r];++r)if(n[0]==this&&n[1]==e&&n[2]==t)return this.detachEvent("on"+e,a.splice(r,1)[0][3])},e[i]=t[i]=n[i]=function(e){return this.fireEvent("on"+e.type,e)}}(Window.prototype,HTMLDocument.prototype,Element.prototype,"addEventListener","removeEventListener","dispatchEvent",[]),function(e,t){"use strict";var n=function(){var e=document.createElement("div");return e.style.cssText="font-size: 1rem;",/rem/.test(e.style.fontSize)},r=function(){for(var e=document.getElementsByTagName("link"),t=[],n=0;n<e.length;n++)"stylesheet"===e[n].rel.toLowerCase()&&null===e[n].getAttribute("data-norem")&&t.push(e[n].href);return t},o=function(){for(var e=0;e<h.length;e++)l(h[e],i)},i=function(e,t){if(v.push(e.responseText),b.push(t),b.length===h.length){for(var n=0;n<b.length;n++)a(v[n],b[n]);(h=d.slice(0)).length>0?(b=[],v=[],d=[],o()):c()}},a=function(e,t){for(var n,r=f(e).replace(/\/\*[\s\S]*?\*\//g,""),o=/[\w\d\s\-\/\\\[\]:,.'"*()<>+~%#^$_=|@]+\{[\w\d\s\-\/\\%#:!;,.'"*()]+\d*\.?\d+rem[\w\d\s\-\/\\%#:!;,.'"*()]*\}/g,i=r.match(o),a=/\d*\.?\d+rem/g,c=r.match(a),s=/(.*\/)/,u=s.exec(t)[0],l=/@import (?:url\()?['"]?([^'\)"]*)['"]?\)?[^;]*/gm;null!==(n=l.exec(e));)0===n[1].indexOf("/")?d.push(n[1]):d.push(u+n[1]);null!==i&&0!==i.length&&(y=y.concat(i),g=g.concat(c))},c=function(){for(var e=/[\w\d\s\-\/\\%#:,.'"*()]+\d*\.?\d+rem[\w\d\s\-\/\\%#:!,.'"*()]*[;}]/g,t=0;t<y.length;t++){p+=y[t].substr(0,y[t].indexOf("{")+1);for(var n=y[t].match(e),r=0;r<n.length;r++)p+=n[r],r===n.length-1&&"}"!==p[p.length-1]&&(p+="\n}")}s()},s=function(){for(var e=0;e<g.length;e++)m[e]=Math.round(parseFloat(g[e].substr(0,g[e].length-3)*w))+"px";u()},u=function(){for(var e=0;e<m.length;e++)m[e]&&(p=p.replace(g[e],m[e]));var t=document.createElement("style");t.setAttribute("type","text/css"),t.id="remReplace",document.getElementsByTagName("head")[0].appendChild(t),t.styleSheet?t.styleSheet.cssText=p:t.appendChild(document.createTextNode(p))},l=function(t,n){try{var r=e.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP")||new ActiveXObject("Msxml2.XMLHTTP"):new XMLHttpRequest;r.open("GET",t,!0),r.onreadystatechange=function(){4===r.readyState&&n(r,t)},r.send(null)}catch(o){if(e.XDomainRequest){var i=new XDomainRequest;i.open("get",t),i.onload=function(){n(i,t)},i.onerror=function(){return!1},i.send()}}},f=function(t){return e.matchMedia||e.msMatchMedia||(t=t.replace(/@media[\s\S]*?\}\s*\}/g,"")),t};if(!n()){var p="",h=r(),d=[],y=[],g=[],v=[],b=[],m=[],w="";w=function(){var e,t=document,n=t.documentElement,r=t.body||t.createElement("body"),o=!t.body,i=t.createElement("div"),a=r.style.fontSize;return o&&n.appendChild(r),i.style.cssText="width:1em; position:absolute; visibility:hidden; padding: 0;",r.style.fontSize="1em",r.appendChild(i),e=i.offsetWidth,o?n.removeChild(r):(r.removeChild(i),r.style.fontSize=a),e}(),o()}}(window),!function(e){"use strict";e.matchMedia=e.matchMedia||function(e){var t,n=e.documentElement,r=n.firstElementChild||n.firstChild,o=e.createElement("body"),i=e.createElement("div");return i.id="mq-test-1",i.style.cssText="position:absolute;top:-100em",o.style.background="none",o.appendChild(i),function(e){return i.innerHTML='&shy;<style media="'+e+'"> #mq-test-1 { width: 42px; }</style>',n.insertBefore(o,r),t=42===i.offsetWidth,n.removeChild(o),{matches:t,media:e}}}(e.document)}(this),function(e){"use strict";function t(){O(!0)}var n={};e.respond=n,n.update=function(){};var r=[],o=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t;
3 }}(),i=function(e,t){var n=o();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))},a=function(e){return e.replace(n.regex.minmaxwh,"").match(n.regex.other)};if(n.ajax=i,n.queue=r,n.unsupportedmq=a,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^\/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var c,s,u,l=e.document,f=l.documentElement,p=[],h=[],d=[],y={},g=30,v=l.getElementsByTagName("head")[0]||f,b=l.getElementsByTagName("base")[0],m=v.getElementsByTagName("link"),w=function(){var e,t=l.createElement("div"),n=l.body,r=f.style.fontSize,o=n&&n.style.fontSize,i=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=i=l.createElement("body"),n.style.background="none"),f.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),i&&f.insertBefore(n,f.firstChild),e=t.offsetWidth,i?f.removeChild(n):n.removeChild(t),f.style.fontSize=r,o&&(n.style.fontSize=o),e=u=parseFloat(e)},O=function(t){var n="clientWidth",r=f[n],o="CSS1Compat"===l.compatMode&&r||l.body[n]||r,i={},a=m[m.length-1],y=(new Date).getTime();if(t&&c&&g>y-c)return e.clearTimeout(s),void(s=e.setTimeout(O,g));c=y;for(var b in p)if(p.hasOwnProperty(b)){var T=p[b],j=T.minw,x=T.maxw,E=null===j,S=null===x,D="em";j&&(j=parseFloat(j)*(j.indexOf(D)>-1?u||w():1)),x&&(x=parseFloat(x)*(x.indexOf(D)>-1?u||w():1)),T.hasquery&&(E&&S||!(E||o>=j)||!(S||x>=o))||(i[T.media]||(i[T.media]=[]),i[T.media].push(h[T.rules]))}for(var _ in d)d.hasOwnProperty(_)&&d[_]&&d[_].parentNode===v&&v.removeChild(d[_]);d.length=0;for(var M in i)if(i.hasOwnProperty(M)){var P=l.createElement("style"),I=i[M].join("\n");P.type="text/css",P.media=M,v.insertBefore(P,a.nextSibling),P.styleSheet?P.styleSheet.cssText=I:P.appendChild(l.createTextNode(I)),d.push(P)}},T=function(e,t,r){var o=e.replace(n.regex.comments,"").replace(n.regex.keyframes,"").match(n.regex.media),i=o&&o.length||0;t=t.substring(0,t.lastIndexOf("/"));var c=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!i&&r;t.length&&(t+="/"),s&&(i=1);for(var u=0;i>u;u++){var l,f,d,y;s?(l=r,h.push(c(e))):(l=o[u].match(n.regex.findStyles)&&RegExp.$1,h.push(RegExp.$2&&c(RegExp.$2))),d=l.split(","),y=d.length;for(var g=0;y>g;g++)f=d[g],a(f)||p.push({media:f.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:h.length-1,hasquery:f.indexOf("(")>-1,minw:f.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:f.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}O()},j=function(){if(r.length){var t=r.shift();i(t.href,function(n){T(n,t.href,t.media),y[t.href]=!0,e.setTimeout(function(){j()},0)})}},x=function(){for(var t=0;t<m.length;t++){var n=m[t],o=n.href,i=n.media,a=n.rel&&"stylesheet"===n.rel.toLowerCase();o&&a&&!y[o]&&(n.styleSheet&&n.styleSheet.rawCssText?(T(n.styleSheet.rawCssText,o,i),y[o]=!0):(!/^([a-zA-Z:]*\/\/)/.test(o)&&!b||o.replace(RegExp.$1,"").split("/")[0]===e.location.host)&&("//"===o.substring(0,2)&&(o=e.location.protocol+o),r.push({href:o,media:i})))}j()};x(),n.update=x,n.getEmValue=w,e.addEventListener?e.addEventListener("resize",t,!1):e.attachEvent&&e.attachEvent("onresize",t)}}(this);
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 /*! Amaze UI v2.7.2 ~ Handlebars helper | by Amaze UI Team | (c) 2016 AllMobilize, Inc. | Licensed under MIT | 2016-08-17T16:17:24+0800 */
2 (function(undefined) {
3 'use strict';
4
5 var registerIfCondHelper = function(hbs) {
6 hbs.registerHelper('ifCond', function(v1, operator, v2, options) {
7 switch (operator) {
8 case '==':
9 return (v1 == v2) ? options.fn(this) : options.inverse(this);
10 break;
11 case '===':
12 return (v1 === v2) ? options.fn(this) : options.inverse(this);
13 break;
14 case '<':
15 return (v1 < v2) ? options.fn(this) : options.inverse(this);
16 break;
17 case '<=':
18 return (v1 <= v2) ? options.fn(this) : options.inverse(this);
19 break;
20 case '>':
21 return (v1 > v2) ? options.fn(this) : options.inverse(this);
22 break;
23 case '>=':
24 return (v1 >= v2) ? options.fn(this) : options.inverse(this);
25 break;
26 default:
27 return options.inverse(this);
28 break;
29 }
30 return options.inverse(this);
31 });
32 };
33
34 if (typeof module !== 'undefined' && module.exports) {
35 module.exports = registerIfCondHelper;
36 }
37
38 this.Handlebars && registerIfCondHelper(this.Handlebars);
39 }).call(this);
40
41 (function(undefined){
42 'use strict';
43
44 var registerAMUIPartials = function(hbs) {
45 hbs.registerPartial('accordion', "{{#this}}\n <section data-am-widget=\"accordion\" class=\"am-accordion {{#if theme}}am-accordion-{{theme}}{{else}}am-accordion-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"{{#if id}} id=\"{{id}}\"{{/if}} data-am-accordion='{ {{#if options.multiple}}\"multiple\": true{{/if}} }'>\n {{#each content}}\n <dl class=\"am-accordion-item{{#if active}} am-active{{/if}}{{#if disabled}} am-disabled{{/if}}\">\n <dt class=\"am-accordion-title\">\n {{{title}}}\n </dt>\n <dd class=\"am-accordion-bd am-collapse {{#if active}}am-in{{/if}}\">\n <!-- 规避 Collapase 处理有 padding 的折叠内容计算计算有误问题, 加一个容器 -->\n <div class=\"am-accordion-content\">\n {{{content}}}\n </div>\n </dd>\n </dl>\n {{/each}}\n </section>\n{{/this}}\n");
46
47 hbs.registerPartial('divider', "{{#this}}\n <hr data-am-widget=\"divider\" style=\"{{#if options.width}}width:{{{options.width}}};{{/if}}{{#if options.height}}height:{{{options.height}}};{{/if}}\" class=\"am-divider {{#if theme}}am-divider-{{theme}}{{else}}am-divider-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"{{#if id}} id=\"{{id}}\"{{/if}} />\n{{/this}}\n");
48
49 hbs.registerPartial('duoshuo', "{{#this}}\n <div data-am-widget=\"duoshuo\" class=\"am-duoshuo{{#if theme}} am-duoshuo-{{theme}}{{else}} am-duoshuo-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"{{#if id}} id=\"{{id}}\"{{/if}} {{#if options.shortName}}data-ds-short-name=\"{{options.shortName}}\"{{/if}}>\n <div class=\"ds-thread\" {{#if content}}{{#each content}}{{#ifCond @key '==' 'threadKey'}} data-thread-key=\"{{this}}\"{{else}} data-{{@key}}=\"{{this}}\"{{/ifCond}}{{/each}}{{/if}}>\n </div>\n </div>\n{{/this}}");
50
51 hbs.registerPartial('figure', "{{#this}}\n <figure data-am-widget=\"figure\" class=\"am am-figure {{#if theme}}am-figure-{{theme}}{{else}}am-figure-default{{/if}} {{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" {{#if id}}\n id=\"{{id}}\"{{/if}} data-am-figure=\"{ {{#if options.zoomAble}} pureview: '{{options.zoomAble}}'{{/if}} }\">\n {{#if content.link}}<a href=\"{{content.link}}\" title=\"{{content.figcaption}}\" class=\"{{className}}\">{{/if}}\n\n {{#if options.figcaptionPosition}}\n {{#ifCond options.figcaptionPosition '==' 'top'}}\n {{#if content.figcaption}}\n <figcaption class=\"am-figure-capition-top\">\n {{content.figcaption}}\n </figcaption>\n {{/if}}\n {{/ifCond}}\n {{/if}}\n\n {{#if content.img}}\n <img src=\"{{content.img}}\" {{#if content.rel}}data-rel=\"{{content.rel}}\"{{/if}} alt=\"{{#if content.imgAlt}}{{content.imgAlt}}{{else}}{{content.figcaption}}{{/if}}\"/>\n {{/if}}\n {{#if options.figcaptionPosition}}\n {{#ifCond options.figcaptionPosition '==' 'bottom'}}\n {{#if content.figcaption}}\n <figcaption class=\"am-figure-capition-btm\">\n {{content.figcaption}}\n </figcaption>\n {{/if}}\n {{/ifCond}}\n {{else}}\n {{#if content.figcaption}}\n <figcaption class=\"am-figure-capition-btm\">\n {{content.figcaption}}\n </figcaption>\n {{/if}}\n {{/if}}\n\n {{#if content.link}}</a>{{/if}}\n </figure>\n{{/this}}\n");
52
53 hbs.registerPartial('footer', "{{#this}}\n <footer data-am-widget=\"footer\"\n class=\"am-footer {{#if theme}}am-footer-{{theme}}{{else}}am-footer-default {{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n {{#if id}}id=\"{{id}}\"{{/if}} data-am-footer=\"{ {{#if options.addToHS}}addToHS: 1{{/if}} }\">\n <div class=\"am-footer-switch\">\n <span class=\"{{#if options.modal}}am-footer-ysp{{/if}}\" data-rel=\"mobile\"\n data-am-modal=\"{target: '#am-switch-mode'}\">\n {{#unless content.switchName}}\n {{#ifCond content.lang '==' 'en'}}\n Mobile\n {{else}}\n 云适配版\n {{/ifCond}}\n {{else}}\n {{content.switchName}}\n {{/unless}}\n </span>\n <span class=\"am-footer-divider\"> | </span>\n <a id=\"godesktop\" data-rel=\"desktop\" class=\"am-footer-desktop\" href=\"javascript:\">\n {{#ifCond content.lang '==' 'en'}}\n Desktop\n {{else}}\n 电脑版\n {{/ifCond}}\n </a>\n </div>\n <div class=\"am-footer-miscs {{#if options.textPosition}}am-text-left{{/if}}\">\n\n {{#if options.techSupportCo}}\n {{#ifCond content.lang '==' 'en'}}\n <p>Supported by {{#if options.techSupportSite}}<a href=\"{{options.techSupportSite}}\"\n title=\"{{options.techSupportCo}}\"\n target=\"_blank\"> class=\"{{className}}\"{{{options.techSupportCo}}}</a>{{else}}{{{options.techSupportCo}}}{{/if}}\n .</p>\n {{else}}\n <p>由 {{#if options.techSupportSite}}<a href=\"{{options.techSupportSite}}\" title=\"{{options.techSupportCo}}\"\n target=\"_blank\" class=\"{{techSupportClassName}}\">{{{options.techSupportCo}}}</a>{{else}}{{{options.techSupportCo}}}{{/if}}\n 提供技术支持</p>\n {{/ifCond}}\n {{/if}}\n {{#each content.companyInfo}}\n <p>{{{detail}}}</p>\n {{/each}}\n </div>\n </footer>\n\n <div id=\"am-footer-modal\"\n class=\"am-modal am-modal-no-btn am-switch-mode-m {{#if theme}}am-switch-mode-m-{{theme}}{{/if}}\">\n <div class=\"am-modal-dialog\">\n <div class=\"am-modal-hd am-modal-footer-hd\">\n <a href=\"javascript:void(0)\" data-dismiss=\"modal\" class=\"am-close am-close-spin {{className}}\" data-am-modal-close>&times;</a>\n </div>\n <div class=\"am-modal-bd\">\n {{#ifCond content.lang '==' 'en'}}\n You are visiting\n {{else}}\n 您正在浏览的是\n {{/ifCond}}\n\n <span class=\"am-switch-mode-owner\">\n {{#if content.owner}}\n {{content.owner}}\n {{else}}\n 云适配\n {{/if}}\n </span>\n\n <span class=\"am-switch-mode-slogan\">\n {{#if content.slogan}}\n {{{content.slogan}}}\n {{else}}\n {{#ifCond content.lang '==' 'en'}}\n mobilized version for your device.\n {{else}}\n 为您当前手机订制的移动网站。\n {{/ifCond}}\n {{/if}}\n </span>\n </div>\n </div>\n </div>\n{{/this}}\n");
54
55 hbs.registerPartial('gallery', "{{#this}}\n <ul data-am-widget=\"gallery\" class=\"am-gallery{{#if options.cols}} am-avg-sm-{{options.cols}}{{else}} am-avg-sm-2{{/if}}\n am-avg-md-3 am-avg-lg-4 {{#if\n theme}}am-gallery-{{theme}}{{else}}am-gallery-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" data-am-gallery=\"{ {{#if options.gallery}}pureview: true{{/if}} }\" {{#if id}}id=\"{{id}}\"{{/if}}>\n {{#each content}}\n <li>\n <div class=\"am-gallery-item\">\n {{#if link}}\n <a href=\"{{link}}\" class=\"{{className}}\">\n {{#if img}}<img src=\"{{img}}\" {{#if rel}}data-rel=\"{{rel}}\"{{/if}} alt=\"{{title}}\"/>{{/if}}\n {{#if title}}\n <h3 class=\"am-gallery-title\">{{{title}}}</h3>\n {{/if}}\n {{#if desc}}\n <div class=\"am-gallery-desc\">{{{desc}}}</div>\n {{/if}}\n </a>\n {{else}}\n {{#if img}}<img src=\"{{img}}\" {{#if rel}}data-rel=\"{{rel}}\"{{/if}} alt=\"{{title}}\"/>{{/if}}\n {{#if title}}\n <h3 class=\"am-gallery-title\">{{{title}}}</h3>\n {{/if}}\n {{#if desc}}\n <div class=\"am-gallery-desc\">{{{desc}}}</div>\n {{/if}}\n {{/if}}\n </div>\n </li>\n {{/each}}\n </ul>\n{{/this}}\n");
56
57 hbs.registerPartial('gotop', "{{#this}}\n <div data-am-widget=\"gotop\" class=\"am-gotop {{#if theme}}am-gotop-{{theme}}{{else}}am-gotop-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" {{#if id}}id=\"{{id}}\"{{/if}}>\n <a href=\"#top\" title=\"{{content.title}}\">\n {{#if content.title}}\n <span class=\"am-gotop-title\">{{content.title}}</span>\n {{/if}}\n {{#if content.customIcon}}\n <img class=\"am-gotop-icon-custom\" src=\"{{content.customIcon}}\" />\n {{else}}\n {{#if content.icon}}\n <i class=\"am-gotop-icon am-icon-{{content.icon}}\"></i>\n {{else}}\n <i class=\"am-gotop-icon am-icon-chevron-up\"></i>\n {{/if}}\n {{/if}}\n </a>\n </div>\n{{/this}}\n");
58
59 hbs.registerPartial('header', "{{#this}}\n <header data-am-widget=\"header\"\n class=\"am-header{{#if theme}} am-header-{{theme}}{{else}} am-header-default{{/if}}{{#if options.fixed}} am-header-fixed{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"{{#if id}}\n id=\"{{id}}\"{{/if}}>\n {{#if content.left}}\n <div class=\"am-header-left am-header-nav\">\n {{#each content.left}}\n <a href=\"{{link}}\" class=\"{{className}}\">\n {{#if title}}\n <span class=\"am-header-nav-title\">\n {{title}}\n </span>\n {{/if}}\n\n {{# if customIcon}}\n <img class=\"am-header-icon-custom\" src=\"{{customIcon}}\" alt=\"\"/>\n {{else}}\n {{#if icon}}\n <i class=\"am-header-icon am-icon-{{icon}}\"></i>\n {{/if}}\n {{/if}}\n </a>\n {{/each}}\n </div>\n {{/if}}\n\n {{#if content.title}}\n <h1 class=\"am-header-title\">\n {{#if content.link}}\n <a href=\"{{content.link}}\" class=\"{{content.className}}\">\n {{{content.title}}}\n </a>\n {{else}}\n {{{content.title}}}\n {{/if}}\n </h1>\n {{/if}}\n\n {{#if content.right}}\n <div class=\"am-header-right am-header-nav\">\n {{#each content.right}}\n <a href=\"{{link}}\" class=\"{{className}}\">\n {{#if title}}\n <span class=\"am-header-nav-title\">\n {{title}}\n </span>\n {{/if}}\n\n {{# if customIcon}}\n <img class=\"am-header-icon-custom\" src=\"{{customIcon}}\" alt=\"\"/>\n {{else}}\n {{#if icon}}\n <i class=\"am-header-icon am-icon-{{icon}}\"></i>\n {{/if}}\n {{/if}}\n </a>\n {{/each}}\n </div>\n {{/if}}\n </header>\n{{/this}}\n");
60
61 hbs.registerPartial('intro', "{{#this }}\n <div data-am-widget=\"intro\"\n class=\"am-intro am-cf {{#if theme}}am-intro-{{theme}}{{else}}am-intro-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n {{#if id}}id=\"{{id}}\"{{/if}}>\n {{#if content.title}}\n <div class=\"am-intro-hd\">\n <h2 class=\"am-intro-title\">{{{content.title}}}</h2>\n {{#if content.more.link}}\n {{#ifCond options.position '==' 'top'}}\n <a class=\"am-intro-more am-intro-more-top {{content.more.className}}\" href=\"{{content.more.link}}\">{{content.more.title}}</a>\n {{/ifCond}}\n {{/if}}\n </div>\n {{/if}}\n\n <div class=\"am-g am-intro-bd\">\n {{#if content.left}}\n <div\n class=\"am-intro-left {{#if options.leftCols}}am-u-sm-{{options.leftCols}}{{/if}}\">{{{content.left}}}</div>\n {{/if}}\n {{#if content.right}}\n <div\n class=\"am-intro-right {{#if options.rightCols}}am-u-sm-{{options.rightCols}}{{/if}}\">{{{content.right}}}</div>\n {{/if}}\n </div>\n {{#ifCond options.position '==' 'bottom'}}\n <div class=\"am-intro-more-bottom\">\n <a class=\"am-btn am-btn-default {{content.more.className}}\"\n href=\"{{content.more.link}}\">{{content.more.title}}</a>\n </div>\n {{/ifCond}}\n </div>\n{{/this}}\n");
62
63 hbs.registerPartial('list_news', "{{#this}}\n <div data-am-widget=\"list_news\" class=\"am-list-news{{#if theme}} am-list-news-{{theme}}{{else}} am-list-news-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" {{#if id}}id=\"{{id}}\"{{/if}}>\n <!--列表标题-->\n {{#if content.header.title}}\n <div class=\"am-list-news-hd am-cf\">\n {{#if content.header.link}} <!--带更多链接-->\n <a href=\"{{content.header.link}}\" class=\"{{content.header.className}}\">\n <h2>{{{content.header.title}}}</h2>\n {{#ifCond content.header.morePosition '==' 'top'}}\n <span class=\"am-list-news-more am-fr\">{{{content.header.moreText}}}</span>\n {{/ifCond}}\n </a>\n {{else}} <!--不带更多链接-->\n <h2>{{{content.header.title}}}</h2>\n {{/if}}\n </div>\n {{/if}}\n\n <div class=\"am-list-news-bd\">\n <ul class=\"am-list\">\n {{#ifCond options.type '==' 'thumb'}}\n {{#ifCond options.thumbPosition '==' 'top'}} <!--缩略图在标题上方-->\n {{#each content.main}}\n <li class=\"am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-top{{/if}}\">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if img}}\n <div class=\"am-list-thumb am-u-sm-12\">\n <a href=\"{{link}}\" class=\"{{className}}\">\n <img src=\"{{img}}\" alt=\"{{title}}\"/>\n </a>\n {{#if thumbAddition}}\n <div class=\"am-list-thumb-addon\">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n\n <div class=\"{{#if img}}{{/if}} am-list-main\">\n {{#if title}}\n <h3 class=\"am-list-item-hd\"><a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a></h3>\n {{/if}}\n\n {{#if date}}\n <span class=\"am-list-date\">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class=\"am-list-item-text\">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class=\"am-list-news-addon\">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition '==' 'bottom-left'}} <!--缩略图在标题下方居左-->\n {{#each content.main}}\n <li class=\"am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-bottom-left{{/if}}\">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if title}}\n <h3 class=\"am-list-item-hd\"><a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a></h3>\n {{/if}}\n {{#if img}}\n <div class=\"am-u-sm-4 am-list-thumb\">\n <a href=\"{{link}}\" class=\"{{className}}\">\n <img src=\"{{img}}\" alt=\"{{title}}\"/>\n </a>\n {{#if thumbAddition}}\n <div class=\"am-list-thumb-addon\">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n\n <div class=\"{{#if img}} am-u-sm-8 {{/if}} am-list-main\">\n {{#if date}}\n <span class=\"am-list-date\">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class=\"am-list-item-text\">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class=\"am-list-news-addon\">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition '==' 'bottom-right'}} <!--缩略图在标题下方居右-->\n {{#each content.main}}\n <li class=\"am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-bottom-right{{/if}}\">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if title}}\n <h3 class=\"am-list-item-hd\"><a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a></h3>\n {{/if}}\n\n <div class=\"{{#if img}} am-u-sm-8{{/if}} am-list-main\">\n {{#if date}}\n <span class=\"am-list-date\">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class=\"am-list-item-text\">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class=\"am-list-news-addon\">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n {{#if img}}\n <div class=\"am-list-thumb am-u-sm-4\">\n <a href=\"{{link}}\" class=\"{{className}}\">\n <img src=\"{{img}}\" alt=\"{{title}}\"/>\n </a>\n {{#if thumbAddition}}\n <div class=\"am-list-thumb-addon\">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition '==' 'left'}} <!--缩略图在标题左边-->\n {{#each content.main}}\n <li class=\"am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-left{{/if}}\">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if img}}\n <div class=\"am-u-sm-4 am-list-thumb\">\n <a href=\"{{link}}\" class=\"{{className}}\">\n <img src=\"{{img}}\" alt=\"{{title}}\"/>\n </a>\n {{#if thumbAddition}}\n <div class=\"am-list-thumb-addon\">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n\n <div class=\"{{#if img}} am-u-sm-8{{/if}} am-list-main\">\n {{#if title}}\n <h3 class=\"am-list-item-hd\"><a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a></h3>\n {{/if}}\n {{#if date}}\n <span class=\"am-list-date\">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class=\"am-list-item-text\">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class=\"am-list-news-addon\">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition '==' 'right'}} <!--缩略图在标题右边-->\n {{#each content.main}}\n <li class=\"am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-right{{/if}}\">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n <div class=\"{{#if img}} am-u-sm-8{{/if}} am-list-main\">\n {{#if title}}\n <h3 class=\"am-list-item-hd\"><a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a></h3>\n {{/if}}\n\n {{#if date}}\n <span class=\"am-list-date\">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class=\"am-list-item-text\">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class=\"am-list-news-addon\">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n {{#if img}}\n <div class=\"am-u-sm-4 am-list-thumb\">\n <a href=\"{{link}}\" class=\"{{className}}\">\n <img src=\"{{img}}\" alt=\"{{title}}\"/>\n </a>\n {{#if thumbAddition}}\n <div class=\"am-list-thumb-addon\">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{else}}{{!--不带缩略图--}}\n {{#each content.main}}\n <li class=\"am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed{{/if}}\">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if title}}\n <a href=\"{{link}}\" class=\"am-list-item-hd {{className}}\">{{{title}}}</a>\n {{/if}}\n\n {{#if date}}\n <span class=\"am-list-date\">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class=\"am-list-item-text\">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class=\"am-list-news-addon\">{{{mainAddition}}}</div>\n {{/if}}\n </li>\n {{/each}}\n {{/ifCond}}\n </ul>\n </div>\n\n {{#ifCond content.header.morePosition '==' 'bottom'}}<!--更多在底部-->\n {{#if content.header.link}}\n <div class=\"am-list-news-ft\">\n <a class=\"am-list-news-more am-btn am-btn-default {{content.header.className}}\" href=\"{{content.header.link}}\">{{{content.header.moreText}}}</a>\n </div>\n {{/if}}\n {{/ifCond}}\n </div>\n{{/this}}\n");
64
65 hbs.registerPartial('map', "{{#this}}\n <div data-am-widget=\"map\" class=\"am-map {{#if theme}}am-map-{{theme}}{{else}}am-map-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n data-name=\"{{options.name}}\" data-address=\"{{options.address}}\" data-longitude=\"{{options.longitude}}\" data-latitude=\"{{options.latitude}}\" data-scaleControl=\"{{options.scaleControl}}\" data-zoomControl=\"{{options.zoomControl}}\" data-setZoom=\"{{options.setZoom}}\" data-icon=\"{{options.icon}}\">\n <div id=\"bd-map\"></div>\n </div>\n{{/this}}");
66
67 hbs.registerPartial('mechat', "{{#this}}\n <section data-am-widget=\"mechat\" class=\"am-mechat{{#if theme}} am-mechat-{{theme}}{{else}} am-mechat-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" {{#if id}} id=\"{{id}}\" {{/if}} {{#if options.unitid}}data-am-mechat-unitid=\"{{options.unitid}}\"{{/if}}>\n <div id=\"mechat\"></div>\n </section>\n{{/this}}");
68
69 hbs.registerPartial('menu', "{{#this}}\n <nav data-am-widget=\"menu\" class=\"am-menu {{#if theme}} am-menu-{{theme}}{{else}} am-menu-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" {{options.dataset}} {{#if id}}id=\"{{id}}\"{{/if}}\n {{#ifCond theme '==' 'dropdown1'}} data-am-menu-collapse{{/ifCond}}\n {{#ifCond theme '==' 'dropdown2'}} data-am-menu-collapse{{/ifCond}}\n {{#ifCond theme '==' 'slide1'}} data-am-menu-collapse{{/ifCond}}\n {{#ifCond theme '==' 'offcanvas1'}} data-am-menu-offcanvas{{/ifCond}}\n {{#ifCond theme '==' 'offcanvas2'}} data-am-menu-offcanvas{{/ifCond}}> {{!-- 与模板深耦合,与 JS 浅耦合 --}}\n <a href=\"javascript: void(0)\" class=\"am-menu-toggle\">\n {{#if options.toggleTitle}}\n <span class=\"am-menu-toggle-title\">{{options.toggleTitle}}</span>\n {{/if}}\n {{#if options.toggleCustomIcon}}\n <img src=\"{{options.toggleCustomIcon}}\" alt=\"Menu Toggle\"/>\n {{else}}\n {{#if options.toggleIcon}}\n <i class=\"am-menu-toggle-icon am-icon-{{options.toggleIcon}}\"></i>\n {{else}}\n <i class=\"am-menu-toggle-icon am-icon-bars\"></i>\n {{/if}}\n {{/if}}\n </a>\n\n {{!-- offCanvas menu Wrap --}}\n {{!-- 问题:方便用户,但是与主题名称(类名)耦合过深 --}}\n {{#ifCond theme '==' 'offcanvas1'}}\n <div class=\"am-offcanvas\" {{#if options.closeOffCanvasOnclick}}data-dismiss-on=\"click\"{{/if}}>\n <div class=\"am-offcanvas-bar{{#if options.offCanvasFlip}} am-offcanvas-bar-flip{{/if}}\">\n {{/ifCond}}\n {{#ifCond theme '==' 'offcanvas2'}}\n <div class=\"am-offcanvas\">\n <div class=\"am-offcanvas-bar{{#if options.offCanvasFlip}} am-offcanvas-bar-flip{{/if}}\">\n {{/ifCond}}\n\n {{#if content}}\n <ul class=\"am-menu-nav {{#if options.cols}}am-avg-sm-{{options\n .cols}}{{else}}am-avg-sm-1{{/if}}{{#ifCond theme '==' 'dropdown1'}} am-collapse{{/ifCond}}{{#ifCond theme\n '==' 'dropdown2'}} am-collapse{{/ifCond}}{{#ifCond theme\n '==' 'slide1'}} am-collapse{{/ifCond}}\">\n {{#each content}}\n <li class=\"{{#if subMenu}}am-parent{{/if}}{{#if className}} {{className}}{{/if}}\">\n <a href=\"{{link}}\" class=\"{{className}}\" {{#if target}}target=\"{{target}}\" {{/if}}>{{{title}}}</a>\n {{#if subMenu}}\n <ul class=\"am-menu-sub am-collapse {{#if subCols}} am-avg-sm-{{subCols}}{{else}}\n am-avg-sm-1{{/if}} {{subMenuClassName}}\">\n {{#each subMenu}}\n <li class=\"{{#if subMenu}} am-parent{{/if}}{{#if className}} {{className}}{{/if}}\">\n <a href=\"{{link}}\" class=\"{{className}}\" {{#if target}}target=\"{{target}}\" {{/if}}>{{{title}}}</a>\n </li>\n {{/each}}\n {{!-- 显示进入栏目链接 --}}\n {{#if channelLink}}\n <li class=\"am-menu-nav-channel\"><a href=\"{{link}}\" class=\"{{className}}\" title=\"{{title}}\">{{{channelLink}}}</a></li>\n {{/if}}\n </ul>\n {{/if}}\n </li>\n {{/each}}\n </ul>\n {{/if}}\n\n {{#ifCond theme '==' 'offcanvas1'}}\n </div>\n </div>\n {{/ifCond}}\n {{#ifCond theme '==' 'offcanvas2'}}\n </div>\n </div>\n {{/ifCond}}\n {{!-- 不要问我为什么这样写,我也不想这样 --}}\n </nav>\n{{/this}}\n");
70
71 hbs.registerPartial('navbar', "{{#this}}\n <div data-am-widget=\"navbar\" class=\"am-navbar am-cf {{#if theme}}am-navbar-{{theme}}{{else}}am-navbar-default{{/if}} {{#if options.iconPosition}}am-navbar-inline{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n id=\"{{id}}\">\n {{#if content}}\n <ul class=\"am-navbar-nav am-cf {{#if options.cols}}am-avg-sm-{{options.cols}}{{/if}}\">\n {{#each content}}\n <li {{{dataApi}}}>\n <a href=\"{{link}}\" class=\"{{className}}\">\n {{#if customIcon}}\n <img src=\"{{customIcon}}\" alt=\"{{title}}\"/>\n {{else}}\n {{#if icon}}\n <span class=\"am-icon-{{icon}}\"></span>\n {{/if}}\n {{/if}}\n {{#if title}}\n <span class=\"am-navbar-label\">{{title}}</span>\n {{/if}}\n </a>\n </li>\n {{/each}}\n </ul>\n {{/if}}\n </div>\n{{/this}}\n");
72
73 hbs.registerPartial('pagination', "{{#this}}\n <ul data-am-widget=\"pagination\"\n class=\"am-pagination {{#if theme}}am-pagination-{{theme}}{{else}}am-pagination-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n {{#if id}}id=\"{{id}}\"{{/if}}>\n\n {{#if content.firstTitle}}\n <li class=\"am-pagination-first {{content.firstClassName}}\">\n <a href=\"{{content.firstLink}}\" class=\"{{content.firstClassName}}\">{{{content.firstTitle}}}</a>\n </li>\n {{/if}}\n\n {{#if content.prevTitle}}\n <li class=\"am-pagination-prev {{content.prevClassName}}\">\n <a href=\"{{content.prevLink}}\" class=\"{{content.prevClassName}}\">{{{content.prevTitle}}}</a>\n </li>\n {{/if}}\n\n {{! 移除 options.select,根据主题来判断结构,无奈 handlebars 逻辑处理...}}\n\n {{#if content.page}}\n {{#ifCond theme '==' 'select'}}\n <li class=\"am-pagination-select\">\n <select>\n {{#each content.page}}\n <option value=\"{{link}}\" class=\"{{className}}\">{{title}}{{#if ../content.total}}\n / {{../../content.total}}{{/if}}\n </option>\n {{/each}}\n </select>\n </li>\n {{else}}\n {{#ifCond theme '==' 'one'}}\n <li class=\"am-pagination-select\">\n <select>\n {{#each content.page}}\n {{content.total}}\n <option value=\"{{link}}\" class=\"{{className}}\">{{title}}{{#if ../content.total}}\n / {{../../content.total}}{{/if}}\n </option>\n {{/each}}\n </select>\n </li>\n {{else}}\n {{#each content.page}}\n <li class=\"{{className}}\">\n <a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a>\n </li>\n {{/each}}\n {{/ifCond}}\n {{/ifCond}}\n\n {{/if}}\n\n {{#if content.nextTitle}}\n <li class=\"am-pagination-next {{content.nextClassName}}\">\n <a href=\"{{content.nextLink}}\" class=\"{{content.nextClassName}}\">{{{content.nextTitle}}}</a>\n </li>\n {{/if}}\n\n {{#if content.lastTitle}}\n <li class=\"am-pagination-last {{content.lastClassName}}\">\n <a href=\"{{content.lastLink}}\" class=\"{{content.lastClassName}}\">{{{content.lastTitle}}}</a>\n </li>\n {{/if}}\n </ul>\n{{/this}}\n");
74
75 hbs.registerPartial('paragraph', "{{#this}}\n <article data-am-widget=\"paragraph\"\n class=\"am-paragraph {{#if theme}}am-paragraph-{{theme}}{{else}}am-paragraph-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n {{#if id}}id=\"{{id}}\"{{/if}}\n data-am-paragraph=\"{ {{#if options.tableScrollable}}tableScrollable: true,{{/if}} {{#if options.imgLightbox}}pureview: true{{/if}} }\">\n\n {{#if content}}\n {{{ content.content }}}\n {{/if}}\n </article>\n{{/this}}\n");
76
77 hbs.registerPartial('slider', "{{#this}}\n <div data-am-widget=\"slider\" class=\"am-slider {{#if theme}}am-slider-{{theme}}{{else}}am-slider-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" data-am-slider='{{sliderConfig}}' {{#if id}}id=\"{{id}}\"{{/if}}>\n <ul class=\"am-slides\">\n {{#each content}}\n <li{{#if thumb}} data-thumb=\"{{thumb}}\"{{/if}}>\n {{#if link}}\n <a href=\"{{link}}\" class=\"{{className}}\">\n {{/if}}\n {{#if img}}\n \t<img src=\"{{img}}\">\n {{/if}}\n {{#if desc}}\n <div class=\"am-slider-desc\">{{{desc}}}</div>\n {{/if}}\n {{#if link}}</a>{{/if}} {{!--/end link--}}\n </li>\n {{/each}}\n </ul>\n</div>\n{{/this}}");
78
79 hbs.registerPartial('tabs', "{{#this}}\n <div data-am-widget=\"tabs\"\n class=\"am-tabs{{#if theme}} am-tabs-{{theme}}{{else}} am-tabs-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"\n {{#if id}}id=\"{{id}}\"{{/if}} {{#if options.noSwipe}}data-am-tabs-noswipe=\"1\"{{/if}}>\n {{#if content}}\n <ul class=\"am-tabs-nav am-cf\">\n {{#each content}}\n <li class=\"{{#if active}}am-active{{/if}}\"><a href=\"[data-tab-panel-{{@index}}]\">{{{title}}}</a></li>\n {{/each}}\n </ul>\n <div class=\"am-tabs-bd\">\n {{#each content}}\n <div data-tab-panel-{{@index}} class=\"am-tab-panel {{#if active}}am-active{{/if}}\">\n {{{content}}}\n </div>\n {{/each}}\n </div>\n {{/if}}\n </div>\n{{/this}}\n");
80
81 hbs.registerPartial('titlebar', "{{#this}}\n<div data-am-widget=\"titlebar\" class=\"am-titlebar {{#if theme}}am-titlebar-{{theme}}{{else}}am-titlebar-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\" {{#if id}}id=\"{{id}}\"{{/if}}>\n {{#if content.title}}\n <h2 class=\"am-titlebar-title {{#unless content.link}}{{content.className}}{{/unless}}\">\n {{#if content.link}}\n <a href=\"{{content.link}}\" class=\"{{content.className}}\">{{{content.title}}}</a>\n {{else}}\n {{{content.title}}}\n {{/if}}\n </h2>\n {{/if}}\n\n {{#if content.nav}}\n <nav class=\"am-titlebar-nav\">\n {{#each content.nav}}\n <a href=\"{{link}}\" class=\"{{className}}\">{{{title}}}</a>\n {{/each}}\n </nav>\n {{/if}}\n</div>\n{{/this}}\n");
82
83 hbs.registerPartial('wechatpay', "{{#this}}\n <div data-am-widget=\"wechatpay\" class=\"am-wechatpay{{#if theme}} am-wechatpay-{{theme}}{{else}} am-wechatpay-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}\"{{#if id}} id=\"{{id}}\"{{/if}} data-wechat-pay=\"{ {{#each content.order}} {{@key}}: '{{this}}',{{/each}} }\">\n <button type=\"button\" class=\"am-btn am-btn-primary am-btn-block am-wechatpay-btn\">\n {{#if content.title}}\n {{content.title}}\n {{else}}\n 微信支付\n {{/if}}\n </button>\n </div>\n{{/this}}\n");
84
85 };
86
87 if (typeof module !== 'undefined' && module.exports) {
88 module.exports = registerAMUIPartials;
89 }
90
91 this.Handlebars && registerAMUIPartials(this.Handlebars);
92 }).call(this);
1 /*! Amaze UI v2.7.2 ~ Handlebars helper | by Amaze UI Team | (c) 2016 AllMobilize, Inc. | Licensed under MIT | 2016-08-17T16:17:24+0800 */
2 (function(i){"use strict";var n=function(i){i.registerHelper("ifCond",function(i,n,t,a){switch(n){case"==":return i==t?a.fn(this):a.inverse(this);case"===":return i===t?a.fn(this):a.inverse(this);case"<":return i<t?a.fn(this):a.inverse(this);case"<=":return i<=t?a.fn(this):a.inverse(this);case">":return i>t?a.fn(this):a.inverse(this);case">=":return i>=t?a.fn(this):a.inverse(this);default:return a.inverse(this)}return a.inverse(this)})};"undefined"!=typeof module&&module.exports&&(module.exports=n),this.Handlebars&&n(this.Handlebars)}).call(this),function(i){"use strict";var n=function(i){i.registerPartial("accordion",'{{#this}}\n <section data-am-widget="accordion" class="am-accordion {{#if theme}}am-accordion-{{theme}}{{else}}am-accordion-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"{{#if id}} id="{{id}}"{{/if}} data-am-accordion=\'{ {{#if options.multiple}}"multiple": true{{/if}} }\'>\n {{#each content}}\n <dl class="am-accordion-item{{#if active}} am-active{{/if}}{{#if disabled}} am-disabled{{/if}}">\n <dt class="am-accordion-title">\n {{{title}}}\n </dt>\n <dd class="am-accordion-bd am-collapse {{#if active}}am-in{{/if}}">\n <!-- 规避 Collapase 处理有 padding 的折叠内容计算计算有误问题, 加一个容器 -->\n <div class="am-accordion-content">\n {{{content}}}\n </div>\n </dd>\n </dl>\n {{/each}}\n </section>\n{{/this}}\n'),i.registerPartial("divider",'{{#this}}\n <hr data-am-widget="divider" style="{{#if options.width}}width:{{{options.width}}};{{/if}}{{#if options.height}}height:{{{options.height}}};{{/if}}" class="am-divider {{#if theme}}am-divider-{{theme}}{{else}}am-divider-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"{{#if id}} id="{{id}}"{{/if}} />\n{{/this}}\n'),i.registerPartial("duoshuo",'{{#this}}\n <div data-am-widget="duoshuo" class="am-duoshuo{{#if theme}} am-duoshuo-{{theme}}{{else}} am-duoshuo-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"{{#if id}} id="{{id}}"{{/if}} {{#if options.shortName}}data-ds-short-name="{{options.shortName}}"{{/if}}>\n <div class="ds-thread" {{#if content}}{{#each content}}{{#ifCond @key \'==\' \'threadKey\'}} data-thread-key="{{this}}"{{else}} data-{{@key}}="{{this}}"{{/ifCond}}{{/each}}{{/if}}>\n </div>\n </div>\n{{/this}}'),i.registerPartial("figure",'{{#this}}\n <figure data-am-widget="figure" class="am am-figure {{#if theme}}am-figure-{{theme}}{{else}}am-figure-default{{/if}} {{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{#if id}}\n id="{{id}}"{{/if}} data-am-figure="{ {{#if options.zoomAble}} pureview: \'{{options.zoomAble}}\'{{/if}} }">\n {{#if content.link}}<a href="{{content.link}}" title="{{content.figcaption}}" class="{{className}}">{{/if}}\n\n {{#if options.figcaptionPosition}}\n {{#ifCond options.figcaptionPosition \'==\' \'top\'}}\n {{#if content.figcaption}}\n <figcaption class="am-figure-capition-top">\n {{content.figcaption}}\n </figcaption>\n {{/if}}\n {{/ifCond}}\n {{/if}}\n\n {{#if content.img}}\n <img src="{{content.img}}" {{#if content.rel}}data-rel="{{content.rel}}"{{/if}} alt="{{#if content.imgAlt}}{{content.imgAlt}}{{else}}{{content.figcaption}}{{/if}}"/>\n {{/if}}\n {{#if options.figcaptionPosition}}\n {{#ifCond options.figcaptionPosition \'==\' \'bottom\'}}\n {{#if content.figcaption}}\n <figcaption class="am-figure-capition-btm">\n {{content.figcaption}}\n </figcaption>\n {{/if}}\n {{/ifCond}}\n {{else}}\n {{#if content.figcaption}}\n <figcaption class="am-figure-capition-btm">\n {{content.figcaption}}\n </figcaption>\n {{/if}}\n {{/if}}\n\n {{#if content.link}}</a>{{/if}}\n </figure>\n{{/this}}\n'),i.registerPartial("footer",'{{#this}}\n <footer data-am-widget="footer"\n class="am-footer {{#if theme}}am-footer-{{theme}}{{else}}am-footer-default {{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n {{#if id}}id="{{id}}"{{/if}} data-am-footer="{ {{#if options.addToHS}}addToHS: 1{{/if}} }">\n <div class="am-footer-switch">\n <span class="{{#if options.modal}}am-footer-ysp{{/if}}" data-rel="mobile"\n data-am-modal="{target: \'#am-switch-mode\'}">\n {{#unless content.switchName}}\n {{#ifCond content.lang \'==\' \'en\'}}\n Mobile\n {{else}}\n 云适配版\n {{/ifCond}}\n {{else}}\n {{content.switchName}}\n {{/unless}}\n </span>\n <span class="am-footer-divider"> | </span>\n <a id="godesktop" data-rel="desktop" class="am-footer-desktop" href="javascript:">\n {{#ifCond content.lang \'==\' \'en\'}}\n Desktop\n {{else}}\n 电脑版\n {{/ifCond}}\n </a>\n </div>\n <div class="am-footer-miscs {{#if options.textPosition}}am-text-left{{/if}}">\n\n {{#if options.techSupportCo}}\n {{#ifCond content.lang \'==\' \'en\'}}\n <p>Supported by {{#if options.techSupportSite}}<a href="{{options.techSupportSite}}"\n title="{{options.techSupportCo}}"\n target="_blank"> class="{{className}}"{{{options.techSupportCo}}}</a>{{else}}{{{options.techSupportCo}}}{{/if}}\n .</p>\n {{else}}\n <p>由 {{#if options.techSupportSite}}<a href="{{options.techSupportSite}}" title="{{options.techSupportCo}}"\n target="_blank" class="{{techSupportClassName}}">{{{options.techSupportCo}}}</a>{{else}}{{{options.techSupportCo}}}{{/if}}\n 提供技术支持</p>\n {{/ifCond}}\n {{/if}}\n {{#each content.companyInfo}}\n <p>{{{detail}}}</p>\n {{/each}}\n </div>\n </footer>\n\n <div id="am-footer-modal"\n class="am-modal am-modal-no-btn am-switch-mode-m {{#if theme}}am-switch-mode-m-{{theme}}{{/if}}">\n <div class="am-modal-dialog">\n <div class="am-modal-hd am-modal-footer-hd">\n <a href="javascript:void(0)" data-dismiss="modal" class="am-close am-close-spin {{className}}" data-am-modal-close>&times;</a>\n </div>\n <div class="am-modal-bd">\n {{#ifCond content.lang \'==\' \'en\'}}\n You are visiting\n {{else}}\n 您正在浏览的是\n {{/ifCond}}\n\n <span class="am-switch-mode-owner">\n {{#if content.owner}}\n {{content.owner}}\n {{else}}\n 云适配\n {{/if}}\n </span>\n\n <span class="am-switch-mode-slogan">\n {{#if content.slogan}}\n {{{content.slogan}}}\n {{else}}\n {{#ifCond content.lang \'==\' \'en\'}}\n mobilized version for your device.\n {{else}}\n 为您当前手机订制的移动网站。\n {{/ifCond}}\n {{/if}}\n </span>\n </div>\n </div>\n </div>\n{{/this}}\n'),i.registerPartial("gallery",'{{#this}}\n <ul data-am-widget="gallery" class="am-gallery{{#if options.cols}} am-avg-sm-{{options.cols}}{{else}} am-avg-sm-2{{/if}}\n am-avg-md-3 am-avg-lg-4 {{#if\n theme}}am-gallery-{{theme}}{{else}}am-gallery-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" data-am-gallery="{ {{#if options.gallery}}pureview: true{{/if}} }" {{#if id}}id="{{id}}"{{/if}}>\n {{#each content}}\n <li>\n <div class="am-gallery-item">\n {{#if link}}\n <a href="{{link}}" class="{{className}}">\n {{#if img}}<img src="{{img}}" {{#if rel}}data-rel="{{rel}}"{{/if}} alt="{{title}}"/>{{/if}}\n {{#if title}}\n <h3 class="am-gallery-title">{{{title}}}</h3>\n {{/if}}\n {{#if desc}}\n <div class="am-gallery-desc">{{{desc}}}</div>\n {{/if}}\n </a>\n {{else}}\n {{#if img}}<img src="{{img}}" {{#if rel}}data-rel="{{rel}}"{{/if}} alt="{{title}}"/>{{/if}}\n {{#if title}}\n <h3 class="am-gallery-title">{{{title}}}</h3>\n {{/if}}\n {{#if desc}}\n <div class="am-gallery-desc">{{{desc}}}</div>\n {{/if}}\n {{/if}}\n </div>\n </li>\n {{/each}}\n </ul>\n{{/this}}\n'),i.registerPartial("gotop",'{{#this}}\n <div data-am-widget="gotop" class="am-gotop {{#if theme}}am-gotop-{{theme}}{{else}}am-gotop-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{#if id}}id="{{id}}"{{/if}}>\n <a href="#top" title="{{content.title}}">\n {{#if content.title}}\n <span class="am-gotop-title">{{content.title}}</span>\n {{/if}}\n {{#if content.customIcon}}\n <img class="am-gotop-icon-custom" src="{{content.customIcon}}" />\n {{else}}\n {{#if content.icon}}\n <i class="am-gotop-icon am-icon-{{content.icon}}"></i>\n {{else}}\n <i class="am-gotop-icon am-icon-chevron-up"></i>\n {{/if}}\n {{/if}}\n </a>\n </div>\n{{/this}}\n'),i.registerPartial("header",'{{#this}}\n <header data-am-widget="header"\n class="am-header{{#if theme}} am-header-{{theme}}{{else}} am-header-default{{/if}}{{#if options.fixed}} am-header-fixed{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"{{#if id}}\n id="{{id}}"{{/if}}>\n {{#if content.left}}\n <div class="am-header-left am-header-nav">\n {{#each content.left}}\n <a href="{{link}}" class="{{className}}">\n {{#if title}}\n <span class="am-header-nav-title">\n {{title}}\n </span>\n {{/if}}\n\n {{# if customIcon}}\n <img class="am-header-icon-custom" src="{{customIcon}}" alt=""/>\n {{else}}\n {{#if icon}}\n <i class="am-header-icon am-icon-{{icon}}"></i>\n {{/if}}\n {{/if}}\n </a>\n {{/each}}\n </div>\n {{/if}}\n\n {{#if content.title}}\n <h1 class="am-header-title">\n {{#if content.link}}\n <a href="{{content.link}}" class="{{content.className}}">\n {{{content.title}}}\n </a>\n {{else}}\n {{{content.title}}}\n {{/if}}\n </h1>\n {{/if}}\n\n {{#if content.right}}\n <div class="am-header-right am-header-nav">\n {{#each content.right}}\n <a href="{{link}}" class="{{className}}">\n {{#if title}}\n <span class="am-header-nav-title">\n {{title}}\n </span>\n {{/if}}\n\n {{# if customIcon}}\n <img class="am-header-icon-custom" src="{{customIcon}}" alt=""/>\n {{else}}\n {{#if icon}}\n <i class="am-header-icon am-icon-{{icon}}"></i>\n {{/if}}\n {{/if}}\n </a>\n {{/each}}\n </div>\n {{/if}}\n </header>\n{{/this}}\n'),i.registerPartial("intro",'{{#this }}\n <div data-am-widget="intro"\n class="am-intro am-cf {{#if theme}}am-intro-{{theme}}{{else}}am-intro-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n {{#if id}}id="{{id}}"{{/if}}>\n {{#if content.title}}\n <div class="am-intro-hd">\n <h2 class="am-intro-title">{{{content.title}}}</h2>\n {{#if content.more.link}}\n {{#ifCond options.position \'==\' \'top\'}}\n <a class="am-intro-more am-intro-more-top {{content.more.className}}" href="{{content.more.link}}">{{content.more.title}}</a>\n {{/ifCond}}\n {{/if}}\n </div>\n {{/if}}\n\n <div class="am-g am-intro-bd">\n {{#if content.left}}\n <div\n class="am-intro-left {{#if options.leftCols}}am-u-sm-{{options.leftCols}}{{/if}}">{{{content.left}}}</div>\n {{/if}}\n {{#if content.right}}\n <div\n class="am-intro-right {{#if options.rightCols}}am-u-sm-{{options.rightCols}}{{/if}}">{{{content.right}}}</div>\n {{/if}}\n </div>\n {{#ifCond options.position \'==\' \'bottom\'}}\n <div class="am-intro-more-bottom">\n <a class="am-btn am-btn-default {{content.more.className}}"\n href="{{content.more.link}}">{{content.more.title}}</a>\n </div>\n {{/ifCond}}\n </div>\n{{/this}}\n'),i.registerPartial("list_news",'{{#this}}\n <div data-am-widget="list_news" class="am-list-news{{#if theme}} am-list-news-{{theme}}{{else}} am-list-news-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{#if id}}id="{{id}}"{{/if}}>\n <!--列表标题-->\n {{#if content.header.title}}\n <div class="am-list-news-hd am-cf">\n {{#if content.header.link}} <!--带更多链接-->\n <a href="{{content.header.link}}" class="{{content.header.className}}">\n <h2>{{{content.header.title}}}</h2>\n {{#ifCond content.header.morePosition \'==\' \'top\'}}\n <span class="am-list-news-more am-fr">{{{content.header.moreText}}}</span>\n {{/ifCond}}\n </a>\n {{else}} <!--不带更多链接-->\n <h2>{{{content.header.title}}}</h2>\n {{/if}}\n </div>\n {{/if}}\n\n <div class="am-list-news-bd">\n <ul class="am-list">\n {{#ifCond options.type \'==\' \'thumb\'}}\n {{#ifCond options.thumbPosition \'==\' \'top\'}} <!--缩略图在标题上方-->\n {{#each content.main}}\n <li class="am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-top{{/if}}">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if img}}\n <div class="am-list-thumb am-u-sm-12">\n <a href="{{link}}" class="{{className}}">\n <img src="{{img}}" alt="{{title}}"/>\n </a>\n {{#if thumbAddition}}\n <div class="am-list-thumb-addon">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n\n <div class="{{#if img}}{{/if}} am-list-main">\n {{#if title}}\n <h3 class="am-list-item-hd"><a href="{{link}}" class="{{className}}">{{{title}}}</a></h3>\n {{/if}}\n\n {{#if date}}\n <span class="am-list-date">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class="am-list-item-text">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class="am-list-news-addon">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition \'==\' \'bottom-left\'}} <!--缩略图在标题下方居左-->\n {{#each content.main}}\n <li class="am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-bottom-left{{/if}}">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if title}}\n <h3 class="am-list-item-hd"><a href="{{link}}" class="{{className}}">{{{title}}}</a></h3>\n {{/if}}\n {{#if img}}\n <div class="am-u-sm-4 am-list-thumb">\n <a href="{{link}}" class="{{className}}">\n <img src="{{img}}" alt="{{title}}"/>\n </a>\n {{#if thumbAddition}}\n <div class="am-list-thumb-addon">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n\n <div class="{{#if img}} am-u-sm-8 {{/if}} am-list-main">\n {{#if date}}\n <span class="am-list-date">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class="am-list-item-text">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class="am-list-news-addon">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition \'==\' \'bottom-right\'}} <!--缩略图在标题下方居右-->\n {{#each content.main}}\n <li class="am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-bottom-right{{/if}}">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if title}}\n <h3 class="am-list-item-hd"><a href="{{link}}" class="{{className}}">{{{title}}}</a></h3>\n {{/if}}\n\n <div class="{{#if img}} am-u-sm-8{{/if}} am-list-main">\n {{#if date}}\n <span class="am-list-date">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class="am-list-item-text">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class="am-list-news-addon">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n {{#if img}}\n <div class="am-list-thumb am-u-sm-4">\n <a href="{{link}}" class="{{className}}">\n <img src="{{img}}" alt="{{title}}"/>\n </a>\n {{#if thumbAddition}}\n <div class="am-list-thumb-addon">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition \'==\' \'left\'}} <!--缩略图在标题左边-->\n {{#each content.main}}\n <li class="am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-left{{/if}}">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if img}}\n <div class="am-u-sm-4 am-list-thumb">\n <a href="{{link}}" class="{{className}}">\n <img src="{{img}}" alt="{{title}}"/>\n </a>\n {{#if thumbAddition}}\n <div class="am-list-thumb-addon">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n\n <div class="{{#if img}} am-u-sm-8{{/if}} am-list-main">\n {{#if title}}\n <h3 class="am-list-item-hd"><a href="{{link}}" class="{{className}}">{{{title}}}</a></h3>\n {{/if}}\n {{#if date}}\n <span class="am-list-date">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class="am-list-item-text">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class="am-list-news-addon">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{#ifCond options.thumbPosition \'==\' \'right\'}} <!--缩略图在标题右边-->\n {{#each content.main}}\n <li class="am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed am-list-item-thumb-right{{/if}}">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n <div class="{{#if img}} am-u-sm-8{{/if}} am-list-main">\n {{#if title}}\n <h3 class="am-list-item-hd"><a href="{{link}}" class="{{className}}">{{{title}}}</a></h3>\n {{/if}}\n\n {{#if date}}\n <span class="am-list-date">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class="am-list-item-text">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class="am-list-news-addon">{{{mainAddition}}}</div>\n {{/if}}\n </div>\n {{#if img}}\n <div class="am-u-sm-4 am-list-thumb">\n <a href="{{link}}" class="{{className}}">\n <img src="{{img}}" alt="{{title}}"/>\n </a>\n {{#if thumbAddition}}\n <div class="am-list-thumb-addon">{{{thumbAddition}}}</div>\n {{/if}}\n </div>\n {{/if}}\n </li>\n {{/each}}\n {{/ifCond}}\n\n {{else}}{{!--不带缩略图--}}\n {{#each content.main}}\n <li class="am-g{{#if date}} am-list-item-dated{{/if}}{{#if desc}} am-list-item-desced{{/if}}{{#if img}} am-list-item-thumbed{{/if}}">\n {{!--\n am-list-item-dated - 带日期\n am-list-item-desced - 带描述\n am-list-item-thumbed - 带缩略图的\n --}}\n {{#if title}}\n <a href="{{link}}" class="am-list-item-hd {{className}}">{{{title}}}</a>\n {{/if}}\n\n {{#if date}}\n <span class="am-list-date">{{date}}</span>\n {{/if}}\n\n {{#if desc}}\n <div class="am-list-item-text">{{{desc}}}</div>\n {{/if}}\n\n {{#if mainAddition}}\n <div class="am-list-news-addon">{{{mainAddition}}}</div>\n {{/if}}\n </li>\n {{/each}}\n {{/ifCond}}\n </ul>\n </div>\n\n {{#ifCond content.header.morePosition \'==\' \'bottom\'}}<!--更多在底部-->\n {{#if content.header.link}}\n <div class="am-list-news-ft">\n <a class="am-list-news-more am-btn am-btn-default {{content.header.className}}" href="{{content.header.link}}">{{{content.header.moreText}}}</a>\n </div>\n {{/if}}\n {{/ifCond}}\n </div>\n{{/this}}\n'),i.registerPartial("map",'{{#this}}\n <div data-am-widget="map" class="am-map {{#if theme}}am-map-{{theme}}{{else}}am-map-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n data-name="{{options.name}}" data-address="{{options.address}}" data-longitude="{{options.longitude}}" data-latitude="{{options.latitude}}" data-scaleControl="{{options.scaleControl}}" data-zoomControl="{{options.zoomControl}}" data-setZoom="{{options.setZoom}}" data-icon="{{options.icon}}">\n <div id="bd-map"></div>\n </div>\n{{/this}}'),i.registerPartial("mechat",'{{#this}}\n <section data-am-widget="mechat" class="am-mechat{{#if theme}} am-mechat-{{theme}}{{else}} am-mechat-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{#if id}} id="{{id}}" {{/if}} {{#if options.unitid}}data-am-mechat-unitid="{{options.unitid}}"{{/if}}>\n <div id="mechat"></div>\n </section>\n{{/this}}'),i.registerPartial("menu",'{{#this}}\n <nav data-am-widget="menu" class="am-menu {{#if theme}} am-menu-{{theme}}{{else}} am-menu-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{options.dataset}} {{#if id}}id="{{id}}"{{/if}}\n {{#ifCond theme \'==\' \'dropdown1\'}} data-am-menu-collapse{{/ifCond}}\n {{#ifCond theme \'==\' \'dropdown2\'}} data-am-menu-collapse{{/ifCond}}\n {{#ifCond theme \'==\' \'slide1\'}} data-am-menu-collapse{{/ifCond}}\n {{#ifCond theme \'==\' \'offcanvas1\'}} data-am-menu-offcanvas{{/ifCond}}\n {{#ifCond theme \'==\' \'offcanvas2\'}} data-am-menu-offcanvas{{/ifCond}}> {{!-- 与模板深耦合,与 JS 浅耦合 --}}\n <a href="javascript: void(0)" class="am-menu-toggle">\n {{#if options.toggleTitle}}\n <span class="am-menu-toggle-title">{{options.toggleTitle}}</span>\n {{/if}}\n {{#if options.toggleCustomIcon}}\n <img src="{{options.toggleCustomIcon}}" alt="Menu Toggle"/>\n {{else}}\n {{#if options.toggleIcon}}\n <i class="am-menu-toggle-icon am-icon-{{options.toggleIcon}}"></i>\n {{else}}\n <i class="am-menu-toggle-icon am-icon-bars"></i>\n {{/if}}\n {{/if}}\n </a>\n\n {{!-- offCanvas menu Wrap --}}\n {{!-- 问题:方便用户,但是与主题名称(类名)耦合过深 --}}\n {{#ifCond theme \'==\' \'offcanvas1\'}}\n <div class="am-offcanvas" {{#if options.closeOffCanvasOnclick}}data-dismiss-on="click"{{/if}}>\n <div class="am-offcanvas-bar{{#if options.offCanvasFlip}} am-offcanvas-bar-flip{{/if}}">\n {{/ifCond}}\n {{#ifCond theme \'==\' \'offcanvas2\'}}\n <div class="am-offcanvas">\n <div class="am-offcanvas-bar{{#if options.offCanvasFlip}} am-offcanvas-bar-flip{{/if}}">\n {{/ifCond}}\n\n {{#if content}}\n <ul class="am-menu-nav {{#if options.cols}}am-avg-sm-{{options\n .cols}}{{else}}am-avg-sm-1{{/if}}{{#ifCond theme \'==\' \'dropdown1\'}} am-collapse{{/ifCond}}{{#ifCond theme\n \'==\' \'dropdown2\'}} am-collapse{{/ifCond}}{{#ifCond theme\n \'==\' \'slide1\'}} am-collapse{{/ifCond}}">\n {{#each content}}\n <li class="{{#if subMenu}}am-parent{{/if}}{{#if className}} {{className}}{{/if}}">\n <a href="{{link}}" class="{{className}}" {{#if target}}target="{{target}}" {{/if}}>{{{title}}}</a>\n {{#if subMenu}}\n <ul class="am-menu-sub am-collapse {{#if subCols}} am-avg-sm-{{subCols}}{{else}}\n am-avg-sm-1{{/if}} {{subMenuClassName}}">\n {{#each subMenu}}\n <li class="{{#if subMenu}} am-parent{{/if}}{{#if className}} {{className}}{{/if}}">\n <a href="{{link}}" class="{{className}}" {{#if target}}target="{{target}}" {{/if}}>{{{title}}}</a>\n </li>\n {{/each}}\n {{!-- 显示进入栏目链接 --}}\n {{#if channelLink}}\n <li class="am-menu-nav-channel"><a href="{{link}}" class="{{className}}" title="{{title}}">{{{channelLink}}}</a></li>\n {{/if}}\n </ul>\n {{/if}}\n </li>\n {{/each}}\n </ul>\n {{/if}}\n\n {{#ifCond theme \'==\' \'offcanvas1\'}}\n </div>\n </div>\n {{/ifCond}}\n {{#ifCond theme \'==\' \'offcanvas2\'}}\n </div>\n </div>\n {{/ifCond}}\n {{!-- 不要问我为什么这样写,我也不想这样 --}}\n </nav>\n{{/this}}\n'),i.registerPartial("navbar",'{{#this}}\n <div data-am-widget="navbar" class="am-navbar am-cf {{#if theme}}am-navbar-{{theme}}{{else}}am-navbar-default{{/if}} {{#if options.iconPosition}}am-navbar-inline{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n id="{{id}}">\n {{#if content}}\n <ul class="am-navbar-nav am-cf {{#if options.cols}}am-avg-sm-{{options.cols}}{{/if}}">\n {{#each content}}\n <li {{{dataApi}}}>\n <a href="{{link}}" class="{{className}}">\n {{#if customIcon}}\n <img src="{{customIcon}}" alt="{{title}}"/>\n {{else}}\n {{#if icon}}\n <span class="am-icon-{{icon}}"></span>\n {{/if}}\n {{/if}}\n {{#if title}}\n <span class="am-navbar-label">{{title}}</span>\n {{/if}}\n </a>\n </li>\n {{/each}}\n </ul>\n {{/if}}\n </div>\n{{/this}}\n'),i.registerPartial("pagination",'{{#this}}\n <ul data-am-widget="pagination"\n class="am-pagination {{#if theme}}am-pagination-{{theme}}{{else}}am-pagination-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n {{#if id}}id="{{id}}"{{/if}}>\n\n {{#if content.firstTitle}}\n <li class="am-pagination-first {{content.firstClassName}}">\n <a href="{{content.firstLink}}" class="{{content.firstClassName}}">{{{content.firstTitle}}}</a>\n </li>\n {{/if}}\n\n {{#if content.prevTitle}}\n <li class="am-pagination-prev {{content.prevClassName}}">\n <a href="{{content.prevLink}}" class="{{content.prevClassName}}">{{{content.prevTitle}}}</a>\n </li>\n {{/if}}\n\n {{! 移除 options.select,根据主题来判断结构,无奈 handlebars 逻辑处理...}}\n\n {{#if content.page}}\n {{#ifCond theme \'==\' \'select\'}}\n <li class="am-pagination-select">\n <select>\n {{#each content.page}}\n <option value="{{link}}" class="{{className}}">{{title}}{{#if ../content.total}}\n / {{../../content.total}}{{/if}}\n </option>\n {{/each}}\n </select>\n </li>\n {{else}}\n {{#ifCond theme \'==\' \'one\'}}\n <li class="am-pagination-select">\n <select>\n {{#each content.page}}\n {{content.total}}\n <option value="{{link}}" class="{{className}}">{{title}}{{#if ../content.total}}\n / {{../../content.total}}{{/if}}\n </option>\n {{/each}}\n </select>\n </li>\n {{else}}\n {{#each content.page}}\n <li class="{{className}}">\n <a href="{{link}}" class="{{className}}">{{{title}}}</a>\n </li>\n {{/each}}\n {{/ifCond}}\n {{/ifCond}}\n\n {{/if}}\n\n {{#if content.nextTitle}}\n <li class="am-pagination-next {{content.nextClassName}}">\n <a href="{{content.nextLink}}" class="{{content.nextClassName}}">{{{content.nextTitle}}}</a>\n </li>\n {{/if}}\n\n {{#if content.lastTitle}}\n <li class="am-pagination-last {{content.lastClassName}}">\n <a href="{{content.lastLink}}" class="{{content.lastClassName}}">{{{content.lastTitle}}}</a>\n </li>\n {{/if}}\n </ul>\n{{/this}}\n'),i.registerPartial("paragraph",'{{#this}}\n <article data-am-widget="paragraph"\n class="am-paragraph {{#if theme}}am-paragraph-{{theme}}{{else}}am-paragraph-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n {{#if id}}id="{{id}}"{{/if}}\n data-am-paragraph="{ {{#if options.tableScrollable}}tableScrollable: true,{{/if}} {{#if options.imgLightbox}}pureview: true{{/if}} }">\n\n {{#if content}}\n {{{ content.content }}}\n {{/if}}\n </article>\n{{/this}}\n'),i.registerPartial("slider",'{{#this}}\n <div data-am-widget="slider" class="am-slider {{#if theme}}am-slider-{{theme}}{{else}}am-slider-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" data-am-slider=\'{{sliderConfig}}\' {{#if id}}id="{{id}}"{{/if}}>\n <ul class="am-slides">\n {{#each content}}\n <li{{#if thumb}} data-thumb="{{thumb}}"{{/if}}>\n {{#if link}}\n <a href="{{link}}" class="{{className}}">\n {{/if}}\n {{#if img}}\n \t<img src="{{img}}">\n {{/if}}\n {{#if desc}}\n <div class="am-slider-desc">{{{desc}}}</div>\n {{/if}}\n {{#if link}}</a>{{/if}} {{!--/end link--}}\n </li>\n {{/each}}\n </ul>\n</div>\n{{/this}}'),i.registerPartial("tabs",'{{#this}}\n <div data-am-widget="tabs"\n class="am-tabs{{#if theme}} am-tabs-{{theme}}{{else}} am-tabs-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"\n {{#if id}}id="{{id}}"{{/if}} {{#if options.noSwipe}}data-am-tabs-noswipe="1"{{/if}}>\n {{#if content}}\n <ul class="am-tabs-nav am-cf">\n {{#each content}}\n <li class="{{#if active}}am-active{{/if}}"><a href="[data-tab-panel-{{@index}}]">{{{title}}}</a></li>\n {{/each}}\n </ul>\n <div class="am-tabs-bd">\n {{#each content}}\n <div data-tab-panel-{{@index}} class="am-tab-panel {{#if active}}am-active{{/if}}">\n {{{content}}}\n </div>\n {{/each}}\n </div>\n {{/if}}\n </div>\n{{/this}}\n'),i.registerPartial("titlebar",'{{#this}}\n<div data-am-widget="titlebar" class="am-titlebar {{#if theme}}am-titlebar-{{theme}}{{else}}am-titlebar-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{#if id}}id="{{id}}"{{/if}}>\n {{#if content.title}}\n <h2 class="am-titlebar-title {{#unless content.link}}{{content.className}}{{/unless}}">\n {{#if content.link}}\n <a href="{{content.link}}" class="{{content.className}}">{{{content.title}}}</a>\n {{else}}\n {{{content.title}}}\n {{/if}}\n </h2>\n {{/if}}\n\n {{#if content.nav}}\n <nav class="am-titlebar-nav">\n {{#each content.nav}}\n <a href="{{link}}" class="{{className}}">{{{title}}}</a>\n {{/each}}\n </nav>\n {{/if}}\n</div>\n{{/this}}\n'),
3 i.registerPartial("wechatpay",'{{#this}}\n <div data-am-widget="wechatpay" class="am-wechatpay{{#if theme}} am-wechatpay-{{theme}}{{else}} am-wechatpay-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}"{{#if id}} id="{{id}}"{{/if}} data-wechat-pay="{ {{#each content.order}} {{@key}}: \'{{this}}\',{{/each}} }">\n <button type="button" class="am-btn am-btn-primary am-btn-block am-wechatpay-btn">\n {{#if content.title}}\n {{content.title}}\n {{else}}\n 微信支付\n {{/if}}\n </button>\n </div>\n{{/this}}\n')};"undefined"!=typeof module&&module.exports&&(module.exports=n),this.Handlebars&&n(this.Handlebars)}.call(this);
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 define(['exports', 'module', './handlebars.runtime', './handlebars/compiler/ast', './handlebars/compiler/base', './handlebars/compiler/compiler', './handlebars/compiler/javascript-compiler', './handlebars/compiler/visitor', './handlebars/no-conflict'], function (exports, module, _handlebarsRuntime, _handlebarsCompilerAst, _handlebarsCompilerBase, _handlebarsCompilerCompiler, _handlebarsCompilerJavascriptCompiler, _handlebarsCompilerVisitor, _handlebarsNoConflict) {
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _runtime = _interopRequireDefault(_handlebarsRuntime);
9
10 // Compiler imports
11
12 var _AST = _interopRequireDefault(_handlebarsCompilerAst);
13
14 var _JavaScriptCompiler = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
15
16 var _Visitor = _interopRequireDefault(_handlebarsCompilerVisitor);
17
18 var _noConflict = _interopRequireDefault(_handlebarsNoConflict);
19
20 var _create = _runtime['default'].create;
21 function create() {
22 var hb = _create();
23
24 hb.compile = function (input, options) {
25 return _handlebarsCompilerCompiler.compile(input, options, hb);
26 };
27 hb.precompile = function (input, options) {
28 return _handlebarsCompilerCompiler.precompile(input, options, hb);
29 };
30
31 hb.AST = _AST['default'];
32 hb.Compiler = _handlebarsCompilerCompiler.Compiler;
33 hb.JavaScriptCompiler = _JavaScriptCompiler['default'];
34 hb.Parser = _handlebarsCompilerBase.parser;
35 hb.parse = _handlebarsCompilerBase.parse;
36
37 return hb;
38 }
39
40 var inst = create();
41 inst.create = create;
42
43 _noConflict['default'](inst);
44
45 inst.Visitor = _Visitor['default'];
46
47 inst['default'] = inst;
48
49 module.exports = inst;
50 });
51 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxNQUFJLE9BQU8sR0FBRyxvQkFBUSxNQUFNLENBQUM7QUFDN0IsV0FBUyxNQUFNLEdBQUc7QUFDaEIsUUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLE1BQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLGFBQU8sNEJBWFEsT0FBTyxDQVdQLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDcEMsQ0FBQztBQUNGLE1BQUUsQ0FBQyxVQUFVLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLGFBQU8sNEJBZGlCLFVBQVUsQ0FjaEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN2QyxDQUFDOztBQUVGLE1BQUUsQ0FBQyxHQUFHLGtCQUFNLENBQUM7QUFDYixNQUFFLENBQUMsUUFBUSwrQkFsQkosUUFBUSxBQWtCTyxDQUFDO0FBQ3ZCLE1BQUUsQ0FBQyxrQkFBa0IsaUNBQXFCLENBQUM7QUFDM0MsTUFBRSxDQUFDLE1BQU0sMkJBckJGLE1BQU0sQUFxQkssQ0FBQztBQUNuQixNQUFFLENBQUMsS0FBSywyQkF0QmlCLEtBQUssQUFzQmQsQ0FBQzs7QUFFakIsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxPQUFPLHNCQUFVLENBQUM7O0FBRXZCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7IHBhcnNlciBhcyBQYXJzZXIsIHBhcnNlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UnO1xuaW1wb3J0IHsgQ29tcGlsZXIsIGNvbXBpbGUsIHByZWNvbXBpbGUgfSBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvY29tcGlsZXInO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvamF2YXNjcmlwdC1jb21waWxlcic7XG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvdmlzaXRvcic7XG5cbmltcG9ydCBub0NvbmZsaWN0IGZyb20gJy4vaGFuZGxlYmFycy9uby1jb25mbGljdCc7XG5cbmxldCBfY3JlYXRlID0gcnVudGltZS5jcmVhdGU7XG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IF9jcmVhdGUoKTtcblxuICBoYi5jb21waWxlID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tcGlsZShpbnB1dCwgb3B0aW9ucywgaGIpO1xuICB9O1xuICBoYi5wcmVjb21waWxlID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgaGIpO1xuICB9O1xuXG4gIGhiLkFTVCA9IEFTVDtcbiAgaGIuQ29tcGlsZXIgPSBDb21waWxlcjtcbiAgaGIuSmF2YVNjcmlwdENvbXBpbGVyID0gSmF2YVNjcmlwdENvbXBpbGVyO1xuICBoYi5QYXJzZXIgPSBQYXJzZXI7XG4gIGhiLnBhcnNlID0gcGFyc2U7XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3QuVmlzaXRvciA9IFZpc2l0b3I7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=
1 define(['exports', 'module', './handlebars/base', './handlebars/safe-string', './handlebars/exception', './handlebars/utils', './handlebars/runtime', './handlebars/no-conflict'], function (exports, module, _handlebarsBase, _handlebarsSafeString, _handlebarsException, _handlebarsUtils, _handlebarsRuntime, _handlebarsNoConflict) {
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 // Each of these augment the Handlebars object. No need to setup here.
9 // (This is done to easily share code between commonjs and browse envs)
10
11 var _SafeString = _interopRequireDefault(_handlebarsSafeString);
12
13 var _Exception = _interopRequireDefault(_handlebarsException);
14
15 var _noConflict = _interopRequireDefault(_handlebarsNoConflict);
16
17 // For compatibility and usage outside of module systems, make the Handlebars object a namespace
18 function create() {
19 var hb = new _handlebarsBase.HandlebarsEnvironment();
20
21 _handlebarsUtils.extend(hb, _handlebarsBase);
22 hb.SafeString = _SafeString['default'];
23 hb.Exception = _Exception['default'];
24 hb.Utils = _handlebarsUtils;
25 hb.escapeExpression = _handlebarsUtils.escapeExpression;
26
27 hb.VM = _handlebarsRuntime;
28 hb.template = function (spec) {
29 return _handlebarsRuntime.template(spec, hb);
30 };
31
32 return hb;
33 }
34
35 var inst = create();
36 inst.create = create;
37
38 _noConflict['default'](inst);
39
40 inst['default'] = inst;
41
42 module.exports = inst;
43 });
44 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxXQUFTLE1BQU0sR0FBRztBQUNoQixRQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLHFCQUFNLE1BQU0sQ0FBQyxFQUFFLGtCQUFPLENBQUM7QUFDdkIsTUFBRSxDQUFDLFVBQVUseUJBQWEsQ0FBQztBQUMzQixNQUFFLENBQUMsU0FBUyx3QkFBWSxDQUFDO0FBQ3pCLE1BQUUsQ0FBQyxLQUFLLG1CQUFRLENBQUM7QUFDakIsTUFBRSxDQUFDLGdCQUFnQixHQUFHLGlCQUFNLGdCQUFnQixDQUFDOztBQUU3QyxNQUFFLENBQUMsRUFBRSxxQkFBVSxDQUFDO0FBQ2hCLE1BQUUsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0IsYUFBTyxtQkFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0FBRUYsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2hhbmRsZWJhcnMvYmFzZSc7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG5pbXBvcnQgU2FmZVN0cmluZyBmcm9tICcuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vaGFuZGxlYmFycy91dGlscyc7XG5pbXBvcnQgKiBhcyBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy9ydW50aW1lJztcblxuaW1wb3J0IG5vQ29uZmxpY3QgZnJvbSAnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0JztcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19
1 define(['exports', './utils', './exception', './helpers', './decorators', './logger'], function (exports, _utils, _exception, _helpers, _decorators, _logger) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.HandlebarsEnvironment = HandlebarsEnvironment;
6 // istanbul ignore next
7
8 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
9
10 var _Exception = _interopRequireDefault(_exception);
11
12 var _logger2 = _interopRequireDefault(_logger);
13
14 var VERSION = '4.0.10';
15 exports.VERSION = VERSION;
16 var COMPILER_REVISION = 7;
17
18 exports.COMPILER_REVISION = COMPILER_REVISION;
19 var REVISION_CHANGES = {
20 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
21 2: '== 1.0.0-rc.3',
22 3: '== 1.0.0-rc.4',
23 4: '== 1.x.x',
24 5: '== 2.0.0-alpha.x',
25 6: '>= 2.0.0-beta.1',
26 7: '>= 4.0.0'
27 };
28
29 exports.REVISION_CHANGES = REVISION_CHANGES;
30 var objectType = '[object Object]';
31
32 function HandlebarsEnvironment(helpers, partials, decorators) {
33 this.helpers = helpers || {};
34 this.partials = partials || {};
35 this.decorators = decorators || {};
36
37 _helpers.registerDefaultHelpers(this);
38 _decorators.registerDefaultDecorators(this);
39 }
40
41 HandlebarsEnvironment.prototype = {
42 constructor: HandlebarsEnvironment,
43
44 logger: _logger2['default'],
45 log: _logger2['default'].log,
46
47 registerHelper: function registerHelper(name, fn) {
48 if (_utils.toString.call(name) === objectType) {
49 if (fn) {
50 throw new _Exception['default']('Arg not supported with multiple helpers');
51 }
52 _utils.extend(this.helpers, name);
53 } else {
54 this.helpers[name] = fn;
55 }
56 },
57 unregisterHelper: function unregisterHelper(name) {
58 delete this.helpers[name];
59 },
60
61 registerPartial: function registerPartial(name, partial) {
62 if (_utils.toString.call(name) === objectType) {
63 _utils.extend(this.partials, name);
64 } else {
65 if (typeof partial === 'undefined') {
66 throw new _Exception['default']('Attempting to register a partial called "' + name + '" as undefined');
67 }
68 this.partials[name] = partial;
69 }
70 },
71 unregisterPartial: function unregisterPartial(name) {
72 delete this.partials[name];
73 },
74
75 registerDecorator: function registerDecorator(name, fn) {
76 if (_utils.toString.call(name) === objectType) {
77 if (fn) {
78 throw new _Exception['default']('Arg not supported with multiple decorators');
79 }
80 _utils.extend(this.decorators, name);
81 } else {
82 this.decorators[name] = fn;
83 }
84 },
85 unregisterDecorator: function unregisterDecorator(name) {
86 delete this.decorators[name];
87 }
88 };
89
90 var log = _logger2['default'].log;
91
92 exports.log = log;
93 exports.createFrame = _utils.createFrame;
94 exports.logger = _logger2['default'];
95 });
96 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU1PLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQzs7QUFDekIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixNQUFNLGdCQUFnQixHQUFHO0FBQzlCLEtBQUMsRUFBRSxhQUFhO0FBQ2hCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxVQUFVO0FBQ2IsS0FBQyxFQUFFLGtCQUFrQjtBQUNyQixLQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEtBQUMsRUFBRSxVQUFVO0dBQ2QsQ0FBQzs7O0FBRUYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFdBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsUUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLFFBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGFBeEJNLHNCQUFzQixDQXdCTCxJQUFJLENBQUMsQ0FBQztBQUM3QixnQkF4Qk0seUJBQXlCLENBd0JMLElBQUksQ0FBQyxDQUFDO0dBQ2pDOztBQUVELHVCQUFxQixDQUFDLFNBQVMsR0FBRztBQUNoQyxlQUFXLEVBQUUscUJBQXFCOztBQUVsQyxVQUFNLHFCQUFRO0FBQ2QsT0FBRyxFQUFFLG9CQUFPLEdBQUc7O0FBRWYsa0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLFVBQUksT0FyQ3FCLFFBQVEsQ0FxQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsWUFBSSxFQUFFLEVBQUU7QUFBRSxnQkFBTSwwQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQUU7QUFDM0UsZUF2Q2UsTUFBTSxDQXVDZCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07QUFDTCxZQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUN6QjtLQUNGO0FBQ0Qsb0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQjs7QUFFRCxtQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsVUFBSSxPQWpEcUIsUUFBUSxDQWlEcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxlQWxEZSxNQUFNLENBa0RkLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDN0IsTUFBTTtBQUNMLFlBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGdCQUFNLHdFQUEwRCxJQUFJLG9CQUFpQixDQUFDO1NBQ3ZGO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDL0I7S0FDRjtBQUNELHFCQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxhQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUI7O0FBRUQscUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxVQUFJLE9BL0RxQixRQUFRLENBK0RwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFlBQUksRUFBRSxFQUFFO0FBQUUsZ0JBQU0sMEJBQWMsNENBQTRDLENBQUMsQ0FBQztTQUFFO0FBQzlFLGVBakVlLE1BQU0sQ0FpRWQsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMvQixNQUFNO0FBQ0wsWUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDNUI7S0FDRjtBQUNELHVCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxhQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDOztBQUVLLE1BQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1VBRXBCLFdBQVcsVUE3RVgsV0FBVztVQTZFRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUZyYW1lLCBleHRlbmQsIHRvU3RyaW5nfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHRIZWxwZXJzfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xMCc7XG5leHBvcnQgY29uc3QgQ09NUElMRVJfUkVWSVNJT04gPSA3O1xuXG5leHBvcnQgY29uc3QgUkVWSVNJT05fQ0hBTkdFUyA9IHtcbiAgMTogJzw9IDEuMC5yYy4yJywgLy8gMS4wLnJjLjIgaXMgYWN0dWFsbHkgcmV2MiBidXQgZG9lc24ndCByZXBvcnQgaXRcbiAgMjogJz09IDEuMC4wLXJjLjMnLFxuICAzOiAnPT0gMS4wLjAtcmMuNCcsXG4gIDQ6ICc9PSAxLngueCcsXG4gIDU6ICc9PSAyLjAuMC1hbHBoYS54JyxcbiAgNjogJz49IDIuMC4wLWJldGEuMScsXG4gIDc6ICc+PSA0LjAuMCdcbn07XG5cbmNvbnN0IG9iamVjdFR5cGUgPSAnW29iamVjdCBPYmplY3RdJztcblxuZXhwb3J0IGZ1bmN0aW9uIEhhbmRsZWJhcnNFbnZpcm9ubWVudChoZWxwZXJzLCBwYXJ0aWFscywgZGVjb3JhdG9ycykge1xuICB0aGlzLmhlbHBlcnMgPSBoZWxwZXJzIHx8IHt9O1xuICB0aGlzLnBhcnRpYWxzID0gcGFydGlhbHMgfHwge307XG4gIHRoaXMuZGVjb3JhdG9ycyA9IGRlY29yYXRvcnMgfHwge307XG5cbiAgcmVnaXN0ZXJEZWZhdWx0SGVscGVycyh0aGlzKTtcbiAgcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyh0aGlzKTtcbn1cblxuSGFuZGxlYmFyc0Vudmlyb25tZW50LnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEhhbmRsZWJhcnNFbnZpcm9ubWVudCxcblxuICBsb2dnZXI6IGxvZ2dlcixcbiAgbG9nOiBsb2dnZXIubG9nLFxuXG4gIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1lLCBmbikge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBpZiAoZm4pIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBoZWxwZXJzJyk7IH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGApO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJ0aWFsc1tuYW1lXSA9IHBhcnRpYWw7XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLnBhcnRpYWxzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbihuYW1lLCBmbikge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBpZiAoZm4pIHsgdGhyb3cgbmV3IEV4Y2VwdGlvbignQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBkZWNvcmF0b3JzJyk7IH1cbiAgICAgIGV4dGVuZCh0aGlzLmRlY29yYXRvcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5kZWNvcmF0b3JzW25hbWVdO1xuICB9XG59O1xuXG5leHBvcnQgbGV0IGxvZyA9IGxvZ2dlci5sb2c7XG5cbmV4cG9ydCB7Y3JlYXRlRnJhbWUsIGxvZ2dlcn07XG4iXX0=
1 define(['exports', 'module'], function (exports, module) {
2 'use strict';
3
4 var AST = {
5 // Public API used to evaluate derived attributes regarding AST nodes
6 helpers: {
7 // a mustache is definitely a helper if:
8 // * it is an eligible helper, and
9 // * it has at least one parameter or hash segment
10 helperExpression: function helperExpression(node) {
11 return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);
12 },
13
14 scopedId: function scopedId(path) {
15 return (/^\.|this\b/.test(path.original)
16 );
17 },
18
19 // an ID is simple if it only has one part, and that part is not
20 // `..` or `this`.
21 simpleId: function simpleId(path) {
22 return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;
23 }
24 }
25 };
26
27 // Must be exported as an object rather than the root of the module as the jison lexer
28 // must modify the object to operate properly.
29 module.exports = AST;
30 });
31 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFJLEdBQUcsR0FBRzs7QUFFUixXQUFPLEVBQUU7Ozs7QUFJUCxzQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsZUFBTyxBQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUM3QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQSxJQUNuRSxDQUFDLEVBQUUsQUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFLLElBQUksQ0FBQyxJQUFJLENBQUEsQUFBQyxBQUFDLENBQUM7T0FDaEU7O0FBRUQsY0FBUSxFQUFFLGtCQUFTLElBQUksRUFBRTtBQUN2QixlQUFPLEFBQUMsYUFBWSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1VBQUM7T0FDM0M7Ozs7QUFJRCxjQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzlFO0tBQ0Y7R0FDRixDQUFDOzs7O21CQUthLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJylcbiAgICAgICAgICB8fCAoKG5vZGUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpXG4gICAgICAgICAgICAmJiAhISgobm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXMubGVuZ3RoKSB8fCBub2RlLmhhc2gpKTtcbiAgICB9LFxuXG4gICAgc2NvcGVkSWQ6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiAoL15cXC58dGhpc1xcYi8pLnRlc3QocGF0aC5vcmlnaW5hbCk7XG4gICAgfSxcblxuICAgIC8vIGFuIElEIGlzIHNpbXBsZSBpZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3RcbiAgICAvLyBgLi5gIG9yIGB0aGlzYC5cbiAgICBzaW1wbGVJZDogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgucGFydHMubGVuZ3RoID09PSAxICYmICFBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSAmJiAhcGF0aC5kZXB0aDtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXJcbi8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS5cbmV4cG9ydCBkZWZhdWx0IEFTVDtcbiJdfQ==
1 define(['exports', './parser', './whitespace-control', './helpers', '../utils'], function (exports, _parser, _whitespaceControl, _helpers, _utils) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.parse = parse;
6 // istanbul ignore next
7
8 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
9
10 var _parser2 = _interopRequireDefault(_parser);
11
12 var _WhitespaceControl = _interopRequireDefault(_whitespaceControl);
13
14 exports.parser = _parser2['default'];
15
16 var yy = {};
17 _utils.extend(yy, _helpers);
18
19 function parse(input, options) {
20 // Just return if an already-compiled AST was passed in.
21 if (input.type === 'Program') {
22 return input;
23 }
24
25 _parser2['default'].yy = yy;
26
27 // Altering the shared object here, but this is ok as parser is a sync operation
28 yy.locInfo = function (locInfo) {
29 return new yy.SourceLocation(options && options.srcName, locInfo);
30 };
31
32 var strip = new _WhitespaceControl['default'](options);
33 return strip.accept(_parser2['default'].parse(input));
34 }
35 });
36 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztVQUtTLE1BQU07O0FBRWYsTUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osU0FMUyxNQUFNLENBS1IsRUFBRSxXQUFVLENBQUM7O0FBRWIsV0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTs7QUFFcEMsUUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUFFLGFBQU8sS0FBSyxDQUFDO0tBQUU7O0FBRS9DLHdCQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7OztBQUdmLE1BQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDN0IsYUFBTyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkUsQ0FBQzs7QUFFRixRQUFJLEtBQUssR0FBRyxrQ0FBc0IsT0FBTyxDQUFDLENBQUM7QUFDM0MsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0dBQzFDIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VyIGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCBXaGl0ZXNwYWNlQ29udHJvbCBmcm9tICcuL3doaXRlc3BhY2UtY29udHJvbCc7XG5pbXBvcnQgKiBhcyBIZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCB7IHBhcnNlciB9O1xuXG5sZXQgeXkgPSB7fTtcbmV4dGVuZCh5eSwgSGVscGVycyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7IHJldHVybiBpbnB1dDsgfVxuXG4gIHBhcnNlci55eSA9IHl5O1xuXG4gIC8vIEFsdGVyaW5nIHRoZSBzaGFyZWQgb2JqZWN0IGhlcmUsIGJ1dCB0aGlzIGlzIG9rIGFzIHBhcnNlciBpcyBhIHN5bmMgb3BlcmF0aW9uXG4gIHl5LmxvY0luZm8gPSBmdW5jdGlvbihsb2NJbmZvKSB7XG4gICAgcmV0dXJuIG5ldyB5eS5Tb3VyY2VMb2NhdGlvbihvcHRpb25zICYmIG9wdGlvbnMuc3JjTmFtZSwgbG9jSW5mbyk7XG4gIH07XG5cbiAgbGV0IHN0cmlwID0gbmV3IFdoaXRlc3BhY2VDb250cm9sKG9wdGlvbnMpO1xuICByZXR1cm4gc3RyaXAuYWNjZXB0KHBhcnNlci5wYXJzZShpbnB1dCkpO1xufVxuIl19
1 define(['exports', 'module', '../utils'], function (exports, module, _utils) {
2 /* global define */
3 'use strict';
4
5 var SourceNode = undefined;
6
7 try {
8 /* istanbul ignore next */
9 if (typeof define !== 'function' || !define.amd) {
10 // We don't support this in AMD environments. For these environments, we asusme that
11 // they are running on the browser and thus have no need for the source-map library.
12 var SourceMap = require('source-map');
13 SourceNode = SourceMap.SourceNode;
14 }
15 } catch (err) {}
16 /* NOP */
17
18 /* istanbul ignore if: tested but not covered in istanbul due to dist build */
19 if (!SourceNode) {
20 SourceNode = function (line, column, srcFile, chunks) {
21 this.src = '';
22 if (chunks) {
23 this.add(chunks);
24 }
25 };
26 /* istanbul ignore next */
27 SourceNode.prototype = {
28 add: function add(chunks) {
29 if (_utils.isArray(chunks)) {
30 chunks = chunks.join('');
31 }
32 this.src += chunks;
33 },
34 prepend: function prepend(chunks) {
35 if (_utils.isArray(chunks)) {
36 chunks = chunks.join('');
37 }
38 this.src = chunks + this.src;
39 },
40 toStringWithSourceMap: function toStringWithSourceMap() {
41 return { code: this.toString() };
42 },
43 toString: function toString() {
44 return this.src;
45 }
46 };
47 }
48
49 function castChunk(chunk, codeGen, loc) {
50 if (_utils.isArray(chunk)) {
51 var ret = [];
52
53 for (var i = 0, len = chunk.length; i < len; i++) {
54 ret.push(codeGen.wrap(chunk[i], loc));
55 }
56 return ret;
57 } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {
58 // Handle primitives that the SourceNode will throw up on
59 return chunk + '';
60 }
61 return chunk;
62 }
63
64 function CodeGen(srcFile) {
65 this.srcFile = srcFile;
66 this.source = [];
67 }
68
69 CodeGen.prototype = {
70 isEmpty: function isEmpty() {
71 return !this.source.length;
72 },
73 prepend: function prepend(source, loc) {
74 this.source.unshift(this.wrap(source, loc));
75 },
76 push: function push(source, loc) {
77 this.source.push(this.wrap(source, loc));
78 },
79
80 merge: function merge() {
81 var source = this.empty();
82 this.each(function (line) {
83 source.add([' ', line, '\n']);
84 });
85 return source;
86 },
87
88 each: function each(iter) {
89 for (var i = 0, len = this.source.length; i < len; i++) {
90 iter(this.source[i]);
91 }
92 },
93
94 empty: function empty() {
95 var loc = this.currentLocation || { start: {} };
96 return new SourceNode(loc.start.line, loc.start.column, this.srcFile);
97 },
98 wrap: function wrap(chunk) {
99 var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];
100
101 if (chunk instanceof SourceNode) {
102 return chunk;
103 }
104
105 chunk = castChunk(chunk, this, loc);
106
107 return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);
108 },
109
110 functionCall: function functionCall(fn, type, params) {
111 params = this.generateList(params);
112 return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);
113 },
114
115 quotedString: function quotedString(str) {
116 return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
117 .replace(/\u2029/g, '\\u2029') + '"';
118 },
119
120 objectLiteral: function objectLiteral(obj) {
121 var pairs = [];
122
123 for (var key in obj) {
124 if (obj.hasOwnProperty(key)) {
125 var value = castChunk(obj[key], this);
126 if (value !== 'undefined') {
127 pairs.push([this.quotedString(key), ':', value]);
128 }
129 }
130 }
131
132 var ret = this.generateList(pairs);
133 ret.prepend('{');
134 ret.add('}');
135 return ret;
136 },
137
138 generateList: function generateList(entries) {
139 var ret = this.empty();
140
141 for (var i = 0, len = entries.length; i < len; i++) {
142 if (i) {
143 ret.add(',');
144 }
145
146 ret.add(castChunk(entries[i], this));
147 }
148
149 return ret;
150 },
151
152 generateArray: function generateArray(entries) {
153 var ret = this.generateList(entries);
154 ret.prepend('[');
155 ret.add(']');
156
157 return ret;
158 }
159 };
160
161 module.exports = CodeGen;
162 });
163 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxNQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLE1BQUk7O0FBRUYsUUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsVUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGdCQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztLQUNuQztHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFFYjs7OztBQUFBLEFBR0QsTUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNmLGNBQVUsR0FBRyxVQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUNuRCxVQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNkLFVBQUksTUFBTSxFQUFFO0FBQ1YsWUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNsQjtLQUNGLENBQUM7O0FBRUYsY0FBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixTQUFHLEVBQUUsYUFBUyxNQUFNLEVBQUU7QUFDcEIsWUFBSSxPQTNCRixPQUFPLENBMkJHLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGdCQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQjtBQUNELFlBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO09BQ3BCO0FBQ0QsYUFBTyxFQUFFLGlCQUFTLE1BQU0sRUFBRTtBQUN4QixZQUFJLE9BakNGLE9BQU8sQ0FpQ0csTUFBTSxDQUFDLEVBQUU7QUFDbkIsZ0JBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO0FBQ0QsWUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFD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QUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsU0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixTQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUViLGFBQU8sR0FBRyxDQUFDO0tBQ1o7R0FDRixDQUFDOzttQkFFYSxPQUFPIiwiZmlsZSI6ImNvZGUtZ2VuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlZmluZSAqL1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmxldCBTb3VyY2VOb2RlO1xuXG50cnkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJyB8fCAhZGVmaW5lLmFtZCkge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBpbiBBTUQgZW52aXJvbm1lbnRzLiBGb3IgdGhlc2UgZW52aXJvbm1lbnRzLCB3ZSBhc3VzbWUgdGhhdFxuICAgIC8vIHRoZXkgYXJlIHJ1bm5pbmcgb24gdGhlIGJyb3dzZXIgYW5kIHRodXMgaGF2ZSBubyBuZWVkIGZvciB0aGUgc291cmNlLW1hcCBsaWJyYXJ5LlxuICAgIGxldCBTb3VyY2VNYXAgPSByZXF1aXJlKCdzb3VyY2UtbWFwJyk7XG4gICAgU291cmNlTm9kZSA9IFNvdXJjZU1hcC5Tb3VyY2VOb2RlO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLyogTk9QICovXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGVzdGVkIGJ1dCBub3QgY292ZXJlZCBpbiBpc3RhbmJ1bCBkdWUgdG8gZGlzdCBidWlsZCAgKi9cbmlmICghU291cmNlTm9kZSkge1xuICBTb3VyY2VOb2RlID0gZnVuY3Rpb24obGluZSwgY29sdW1uLCBzcmNGaWxlLCBjaHVua3MpIHtcbiAgICB0aGlzLnNyYyA9ICcnO1xuICAgIGlmIChjaHVua3MpIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rcyk7XG4gICAgfVxuICB9O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKGNodW5rcykge1xuICAgICAgaWYgKGlzQXJyYXkoY2h1bmtzKSkge1xuICAgICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNyYyArPSBjaHVua3M7XG4gICAgfSxcbiAgICBwcmVwZW5kOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYztcbiAgICB9LFxuICAgIHRvU3RyaW5nV2l0aFNvdXJjZU1hcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2NvZGU6IHRoaXMudG9TdHJpbmcoKX07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGNhc3RDaHVuayhjaHVuaywgY29kZUdlbiwgbG9jKSB7XG4gIGlmIChpc0FycmF5KGNodW5rKSkge1xuICAgIGxldCByZXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmV0LnB1c2goY29kZUdlbi53cmFwKGNodW5rW2ldLCBsb2MpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgY2h1bmsgPT09ICdudW1iZXInKSB7XG4gICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMgdGhhdCB0aGUgU291cmNlTm9kZSB3aWxsIHRocm93IHVwIG9uXG4gICAgcmV0dXJuIGNodW5rICsgJyc7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5cbmZ1bmN0aW9uIENvZGVHZW4oc3JjRmlsZSkge1xuICB0aGlzLnNyY0ZpbGUgPSBzcmNGaWxlO1xuICB0aGlzLnNvdXJjZSA9IFtdO1xufVxuXG5Db2RlR2VuLnByb3RvdHlwZSA9IHtcbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gIXRoaXMuc291cmNlLmxlbmd0aDtcbiAgfSxcbiAgcHJlcGVuZDogZnVuY3Rpb24oc291cmNlLCBsb2MpIHtcbiAgICB0aGlzLnNvdXJjZS51bnNoaWZ0KHRoaXMud3JhcChzb3VyY2UsIGxvYykpO1xuICB9LFxuICBwdXNoOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnB1c2godGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG5cbiAgbWVyZ2U6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzb3VyY2UgPSB0aGlzLmVtcHR5KCk7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHNvdXJjZS5hZGQoWycgICcsIGxpbmUsICdcXG4nXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfSxcblxuICBlYWNoOiBmdW5jdGlvbihpdGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVyKHRoaXMuc291cmNlW2ldKTtcbiAgICB9XG4gIH0sXG5cbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fTtcbiAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7XG4gIH0sXG4gIHdyYXA6IGZ1bmN0aW9uKGNodW5rLCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlLCBjaHVuayk7XG4gIH0sXG5cbiAgZnVuY3Rpb25DYWxsOiBmdW5jdGlvbihmbiwgdHlwZSwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gdGhpcy5nZW5lcmF0ZUxpc3QocGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy53cmFwKFtmbiwgdHlwZSA/ICcuJyArIHR5cGUgKyAnKCcgOiAnKCcsIHBhcmFtcywgJyknXSk7XG4gIH0sXG5cbiAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gJ1wiJyArIChzdHIgKyAnJylcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykgICAvLyBQZXIgRWNtYS0yNjIgNy4zICsgNy44LjRcbiAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKSArICdcIic7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY2FzdENodW5rKG9ialtrZXldLCB0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuXG4gIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmVtcHR5KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkpIHtcbiAgICAgICAgcmV0LmFkZCgnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXQuYWRkKGNhc3RDaHVuayhlbnRyaWVzW2ldLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUFycmF5OiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICAgbGV0IHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KGVudHJpZXMpO1xuICAgIHJldC5wcmVwZW5kKCdbJyk7XG4gICAgcmV0LmFkZCgnXScpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZUdlbjtcblxuIl19
1 define(['exports', '../exception', '../utils', './ast'], function (exports, _exception, _utils, _ast) {
2 /* eslint-disable new-cap */
3
4 'use strict';
5
6 exports.__esModule = true;
7 exports.Compiler = Compiler;
8 exports.precompile = precompile;
9 exports.compile = compile;
10 // istanbul ignore next
11
12 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
13
14 var _Exception = _interopRequireDefault(_exception);
15
16 var _AST = _interopRequireDefault(_ast);
17
18 var slice = [].slice;
19
20 function Compiler() {}
21
22 // the foundHelper register will disambiguate helper lookup from finding a
23 // function in a context. This is necessary for mustache compatibility, which
24 // requires that context functions in blocks are evaluated by blockHelperMissing,
25 // and then proceed as if the resulting value was provided to blockHelperMissing.
26
27 Compiler.prototype = {
28 compiler: Compiler,
29
30 equals: function equals(other) {
31 var len = this.opcodes.length;
32 if (other.opcodes.length !== len) {
33 return false;
34 }
35
36 for (var i = 0; i < len; i++) {
37 var opcode = this.opcodes[i],
38 otherOpcode = other.opcodes[i];
39 if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {
40 return false;
41 }
42 }
43
44 // We know that length is the same between the two arrays because they are directly tied
45 // to the opcode behavior above.
46 len = this.children.length;
47 for (var i = 0; i < len; i++) {
48 if (!this.children[i].equals(other.children[i])) {
49 return false;
50 }
51 }
52
53 return true;
54 },
55
56 guid: 0,
57
58 compile: function compile(program, options) {
59 this.sourceNode = [];
60 this.opcodes = [];
61 this.children = [];
62 this.options = options;
63 this.stringParams = options.stringParams;
64 this.trackIds = options.trackIds;
65
66 options.blockParams = options.blockParams || [];
67
68 // These changes will propagate to the other compiler components
69 var knownHelpers = options.knownHelpers;
70 options.knownHelpers = {
71 'helperMissing': true,
72 'blockHelperMissing': true,
73 'each': true,
74 'if': true,
75 'unless': true,
76 'with': true,
77 'log': true,
78 'lookup': true
79 };
80 if (knownHelpers) {
81 for (var _name in knownHelpers) {
82 /* istanbul ignore else */
83 if (_name in knownHelpers) {
84 this.options.knownHelpers[_name] = knownHelpers[_name];
85 }
86 }
87 }
88
89 return this.accept(program);
90 },
91
92 compileProgram: function compileProgram(program) {
93 var childCompiler = new this.compiler(),
94 // eslint-disable-line new-cap
95 result = childCompiler.compile(program, this.options),
96 guid = this.guid++;
97
98 this.usePartial = this.usePartial || result.usePartial;
99
100 this.children[guid] = result;
101 this.useDepths = this.useDepths || result.useDepths;
102
103 return guid;
104 },
105
106 accept: function accept(node) {
107 /* istanbul ignore next: Sanity code */
108 if (!this[node.type]) {
109 throw new _Exception['default']('Unknown type: ' + node.type, node);
110 }
111
112 this.sourceNode.unshift(node);
113 var ret = this[node.type](node);
114 this.sourceNode.shift();
115 return ret;
116 },
117
118 Program: function Program(program) {
119 this.options.blockParams.unshift(program.blockParams);
120
121 var body = program.body,
122 bodyLength = body.length;
123 for (var i = 0; i < bodyLength; i++) {
124 this.accept(body[i]);
125 }
126
127 this.options.blockParams.shift();
128
129 this.isSimple = bodyLength === 1;
130 this.blockParams = program.blockParams ? program.blockParams.length : 0;
131
132 return this;
133 },
134
135 BlockStatement: function BlockStatement(block) {
136 transformLiteralToPath(block);
137
138 var program = block.program,
139 inverse = block.inverse;
140
141 program = program && this.compileProgram(program);
142 inverse = inverse && this.compileProgram(inverse);
143
144 var type = this.classifySexpr(block);
145
146 if (type === 'helper') {
147 this.helperSexpr(block, program, inverse);
148 } else if (type === 'simple') {
149 this.simpleSexpr(block);
150
151 // now that the simple mustache is resolved, we need to
152 // evaluate it by executing `blockHelperMissing`
153 this.opcode('pushProgram', program);
154 this.opcode('pushProgram', inverse);
155 this.opcode('emptyHash');
156 this.opcode('blockValue', block.path.original);
157 } else {
158 this.ambiguousSexpr(block, program, inverse);
159
160 // now that the simple mustache is resolved, we need to
161 // evaluate it by executing `blockHelperMissing`
162 this.opcode('pushProgram', program);
163 this.opcode('pushProgram', inverse);
164 this.opcode('emptyHash');
165 this.opcode('ambiguousBlockValue');
166 }
167
168 this.opcode('append');
169 },
170
171 DecoratorBlock: function DecoratorBlock(decorator) {
172 var program = decorator.program && this.compileProgram(decorator.program);
173 var params = this.setupFullMustacheParams(decorator, program, undefined),
174 path = decorator.path;
175
176 this.useDecorators = true;
177 this.opcode('registerDecorator', params.length, path.original);
178 },
179
180 PartialStatement: function PartialStatement(partial) {
181 this.usePartial = true;
182
183 var program = partial.program;
184 if (program) {
185 program = this.compileProgram(partial.program);
186 }
187
188 var params = partial.params;
189 if (params.length > 1) {
190 throw new _Exception['default']('Unsupported number of partial arguments: ' + params.length, partial);
191 } else if (!params.length) {
192 if (this.options.explicitPartialContext) {
193 this.opcode('pushLiteral', 'undefined');
194 } else {
195 params.push({ type: 'PathExpression', parts: [], depth: 0 });
196 }
197 }
198
199 var partialName = partial.name.original,
200 isDynamic = partial.name.type === 'SubExpression';
201 if (isDynamic) {
202 this.accept(partial.name);
203 }
204
205 this.setupFullMustacheParams(partial, program, undefined, true);
206
207 var indent = partial.indent || '';
208 if (this.options.preventIndent && indent) {
209 this.opcode('appendContent', indent);
210 indent = '';
211 }
212
213 this.opcode('invokePartial', isDynamic, partialName, indent);
214 this.opcode('append');
215 },
216 PartialBlockStatement: function PartialBlockStatement(partialBlock) {
217 this.PartialStatement(partialBlock);
218 },
219
220 MustacheStatement: function MustacheStatement(mustache) {
221 this.SubExpression(mustache);
222
223 if (mustache.escaped && !this.options.noEscape) {
224 this.opcode('appendEscaped');
225 } else {
226 this.opcode('append');
227 }
228 },
229 Decorator: function Decorator(decorator) {
230 this.DecoratorBlock(decorator);
231 },
232
233 ContentStatement: function ContentStatement(content) {
234 if (content.value) {
235 this.opcode('appendContent', content.value);
236 }
237 },
238
239 CommentStatement: function CommentStatement() {},
240
241 SubExpression: function SubExpression(sexpr) {
242 transformLiteralToPath(sexpr);
243 var type = this.classifySexpr(sexpr);
244
245 if (type === 'simple') {
246 this.simpleSexpr(sexpr);
247 } else if (type === 'helper') {
248 this.helperSexpr(sexpr);
249 } else {
250 this.ambiguousSexpr(sexpr);
251 }
252 },
253 ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {
254 var path = sexpr.path,
255 name = path.parts[0],
256 isBlock = program != null || inverse != null;
257
258 this.opcode('getContext', path.depth);
259
260 this.opcode('pushProgram', program);
261 this.opcode('pushProgram', inverse);
262
263 path.strict = true;
264 this.accept(path);
265
266 this.opcode('invokeAmbiguous', name, isBlock);
267 },
268
269 simpleSexpr: function simpleSexpr(sexpr) {
270 var path = sexpr.path;
271 path.strict = true;
272 this.accept(path);
273 this.opcode('resolvePossibleLambda');
274 },
275
276 helperSexpr: function helperSexpr(sexpr, program, inverse) {
277 var params = this.setupFullMustacheParams(sexpr, program, inverse),
278 path = sexpr.path,
279 name = path.parts[0];
280
281 if (this.options.knownHelpers[name]) {
282 this.opcode('invokeKnownHelper', params.length, name);
283 } else if (this.options.knownHelpersOnly) {
284 throw new _Exception['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);
285 } else {
286 path.strict = true;
287 path.falsy = true;
288
289 this.accept(path);
290 this.opcode('invokeHelper', params.length, path.original, _AST['default'].helpers.simpleId(path));
291 }
292 },
293
294 PathExpression: function PathExpression(path) {
295 this.addDepth(path.depth);
296 this.opcode('getContext', path.depth);
297
298 var name = path.parts[0],
299 scoped = _AST['default'].helpers.scopedId(path),
300 blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
301
302 if (blockParamId) {
303 this.opcode('lookupBlockParam', blockParamId, path.parts);
304 } else if (!name) {
305 // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`
306 this.opcode('pushContext');
307 } else if (path.data) {
308 this.options.data = true;
309 this.opcode('lookupData', path.depth, path.parts, path.strict);
310 } else {
311 this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);
312 }
313 },
314
315 StringLiteral: function StringLiteral(string) {
316 this.opcode('pushString', string.value);
317 },
318
319 NumberLiteral: function NumberLiteral(number) {
320 this.opcode('pushLiteral', number.value);
321 },
322
323 BooleanLiteral: function BooleanLiteral(bool) {
324 this.opcode('pushLiteral', bool.value);
325 },
326
327 UndefinedLiteral: function UndefinedLiteral() {
328 this.opcode('pushLiteral', 'undefined');
329 },
330
331 NullLiteral: function NullLiteral() {
332 this.opcode('pushLiteral', 'null');
333 },
334
335 Hash: function Hash(hash) {
336 var pairs = hash.pairs,
337 i = 0,
338 l = pairs.length;
339
340 this.opcode('pushHash');
341
342 for (; i < l; i++) {
343 this.pushParam(pairs[i].value);
344 }
345 while (i--) {
346 this.opcode('assignToHash', pairs[i].key);
347 }
348 this.opcode('popHash');
349 },
350
351 // HELPERS
352 opcode: function opcode(name) {
353 this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });
354 },
355
356 addDepth: function addDepth(depth) {
357 if (!depth) {
358 return;
359 }
360
361 this.useDepths = true;
362 },
363
364 classifySexpr: function classifySexpr(sexpr) {
365 var isSimple = _AST['default'].helpers.simpleId(sexpr.path);
366
367 var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);
368
369 // a mustache is an eligible helper if:
370 // * its id is simple (a single part, not `this` or `..`)
371 var isHelper = !isBlockParam && _AST['default'].helpers.helperExpression(sexpr);
372
373 // if a mustache is an eligible helper but not a definite
374 // helper, it is ambiguous, and will be resolved in a later
375 // pass or at runtime.
376 var isEligible = !isBlockParam && (isHelper || isSimple);
377
378 // if ambiguous, we can possibly resolve the ambiguity now
379 // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.
380 if (isEligible && !isHelper) {
381 var _name2 = sexpr.path.parts[0],
382 options = this.options;
383
384 if (options.knownHelpers[_name2]) {
385 isHelper = true;
386 } else if (options.knownHelpersOnly) {
387 isEligible = false;
388 }
389 }
390
391 if (isHelper) {
392 return 'helper';
393 } else if (isEligible) {
394 return 'ambiguous';
395 } else {
396 return 'simple';
397 }
398 },
399
400 pushParams: function pushParams(params) {
401 for (var i = 0, l = params.length; i < l; i++) {
402 this.pushParam(params[i]);
403 }
404 },
405
406 pushParam: function pushParam(val) {
407 var value = val.value != null ? val.value : val.original || '';
408
409 if (this.stringParams) {
410 if (value.replace) {
411 value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.');
412 }
413
414 if (val.depth) {
415 this.addDepth(val.depth);
416 }
417 this.opcode('getContext', val.depth || 0);
418 this.opcode('pushStringParam', value, val.type);
419
420 if (val.type === 'SubExpression') {
421 // SubExpressions get evaluated and passed in
422 // in string params mode.
423 this.accept(val);
424 }
425 } else {
426 if (this.trackIds) {
427 var blockParamIndex = undefined;
428 if (val.parts && !_AST['default'].helpers.scopedId(val) && !val.depth) {
429 blockParamIndex = this.blockParamIndex(val.parts[0]);
430 }
431 if (blockParamIndex) {
432 var blockParamChild = val.parts.slice(1).join('.');
433 this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
434 } else {
435 value = val.original || value;
436 if (value.replace) {
437 value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, '');
438 }
439
440 this.opcode('pushId', val.type, value);
441 }
442 }
443 this.accept(val);
444 }
445 },
446
447 setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {
448 var params = sexpr.params;
449 this.pushParams(params);
450
451 this.opcode('pushProgram', program);
452 this.opcode('pushProgram', inverse);
453
454 if (sexpr.hash) {
455 this.accept(sexpr.hash);
456 } else {
457 this.opcode('emptyHash', omitEmpty);
458 }
459
460 return params;
461 },
462
463 blockParamIndex: function blockParamIndex(name) {
464 for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {
465 var blockParams = this.options.blockParams[depth],
466 param = blockParams && _utils.indexOf(blockParams, name);
467 if (blockParams && param >= 0) {
468 return [depth, param];
469 }
470 }
471 }
472 };
473
474 function precompile(input, options, env) {
475 if (input == null || typeof input !== 'string' && input.type !== 'Program') {
476 throw new _Exception['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);
477 }
478
479 options = options || {};
480 if (!('data' in options)) {
481 options.data = true;
482 }
483 if (options.compat) {
484 options.useDepths = true;
485 }
486
487 var ast = env.parse(input, options),
488 environment = new env.Compiler().compile(ast, options);
489 return new env.JavaScriptCompiler().compile(environment, options);
490 }
491
492 function compile(input, options, env) {
493 if (options === undefined) options = {};
494
495 if (input == null || typeof input !== 'string' && input.type !== 'Program') {
496 throw new _Exception['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);
497 }
498
499 options = _utils.extend({}, options);
500 if (!('data' in options)) {
501 options.data = true;
502 }
503 if (options.compat) {
504 options.useDepths = true;
505 }
506
507 var compiled = undefined;
508
509 function compileInput() {
510 var ast = env.parse(input, options),
511 environment = new env.Compiler().compile(ast, options),
512 templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
513 return env.template(templateSpec);
514 }
515
516 // Template is only compiled on first use and cached after that point.
517 function ret(context, execOptions) {
518 if (!compiled) {
519 compiled = compileInput();
520 }
521 return compiled.call(this, context, execOptions);
522 }
523 ret._setup = function (setupOptions) {
524 if (!compiled) {
525 compiled = compileInput();
526 }
527 return compiled._setup(setupOptions);
528 };
529 ret._child = function (i, data, blockParams, depths) {
530 if (!compiled) {
531 compiled = compileInput();
532 }
533 return compiled._child(i, data, blockParams, depths);
534 };
535 return ret;
536 }
537
538 function argEquals(a, b) {
539 if (a === b) {
540 return true;
541 }
542
543 if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {
544 for (var i = 0; i < a.length; i++) {
545 if (!argEquals(a[i], b[i])) {
546 return false;
547 }
548 }
549 return true;
550 }
551 }
552
553 function transformLiteralToPath(sexpr) {
554 if (!sexpr.path.parts) {
555 var literal = sexpr.path;
556 // Casting to string here to make false and 0 literal values play nicely with the rest
557 // of the system.
558 sexpr.path = {
559 type: 'PathExpression',
560 data: false,
561 depth: 0,
562 parts: [literal.original + ''],
563 original: literal.original + '',
564 loc: literal.loc
565 };
566 }
567 }
568 });
569 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQzs7QUFFaEIsV0FBUyxRQUFRLEdBQUcsRUFBRTs7Ozs7OztBQU83QixVQUFRLENBQUMsU0FBUyxHQUFHO0FBQ25CLFlBQVEsRUFBRSxRQUFROztBQUVsQixVQUFNLEVBQUUsZ0JBQVMsS0FBSyxFQUFFO0FBQ3RCLFVBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzlCLFVBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO0FBQ2hDLGVBQU8sS0FBSyxDQUFDO09BQ2Q7O0FBRUQsV0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxZQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyRixpQkFBTyxLQUFLLENBQUM7U0FDZDtPQUNGOzs7O0FBSUQsU0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzNCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUIsWUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FB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aEJELENBQUMsQ0FBQyxJQUFJLE9BbmhCWixPQUFPLENBbWhCYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDckQsV0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsWUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUIsaUJBQU8sS0FBSyxDQUFDO1NBQ2Q7T0FDRjtBQUNELGFBQU8sSUFBSSxDQUFDO0tBQ2I7R0FDRjs7QUFFRCxXQUFTLHNCQUFzQixDQUFDLEtBQUssRUFBRTtBQUNyQyxRQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsVUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQzs7O0FBR3pCLFdBQUssQ0FBQyxJQUFJLEdBQUc7QUFDWCxZQUFJLEVBQUUsZ0JBQWdCO0FBQ3RCLFlBQUksRUFBRSxLQUFLO0FBQ1gsYUFBSyxFQUFFLENBQUM7QUFDUixhQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUM5QixnQkFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixXQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7T0FDakIsQ0FBQztLQUNIO0dBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7aXNBcnJheSwgaW5kZXhPZiwgZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQVNUIGZyb20gJy4vYXN0JztcblxuY29uc3Qgc2xpY2UgPSBbXS5zbGljZTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbXBpbGVyKCkge31cblxuLy8gdGhlIGZvdW5kSGVscGVyIHJlZ2lzdGVyIHdpbGwgZGlzYW1iaWd1YXRlIGhlbHBlciBsb29rdXAgZnJvbSBmaW5kaW5nIGFcbi8vIGZ1bmN0aW9uIGluIGEgY29udGV4dC4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIG11c3RhY2hlIGNvbXBhdGliaWxpdHksIHdoaWNoXG4vLyByZXF1aXJlcyB0aGF0IGNvbnRleHQgZnVuY3Rpb25zIGluIGJsb2NrcyBhcmUgZXZhbHVhdGVkIGJ5IGJsb2NrSGVscGVyTWlzc2luZyxcbi8vIGFuZCB0aGVuIHByb2NlZWQgYXMgaWYgdGhlIHJlc3VsdGluZyB2YWx1ZSB3YXMgcHJvdmlkZWQgdG8gYmxvY2tIZWxwZXJNaXNzaW5nLlxuXG5Db21waWxlci5wcm90b3R5cGUgPSB7XG4gIGNvbXBpbGVyOiBDb21waWxlcixcblxuICBlcXVhbHM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMub3Bjb2Rlcy5sZW5ndGg7XG4gICAgaWYgKG90aGVyLm9wY29kZXMubGVuZ3RoICE9PSBsZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgb3Bjb2RlID0gdGhpcy5vcGNvZGVzW2ldLFxuICAgICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChvcGNvZGUub3Bjb2RlICE9PSBvdGhlck9wY29kZS5vcGNvZGUgfHwgIWFyZ0VxdWFscyhvcGNvZGUuYXJncywgb3RoZXJPcGNvZGUuYXJncykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICAvLyBUaGVzZSBjaGFuZ2VzIHdpbGwgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBjb21waWxlciBjb21wb25lbnRzXG4gICAgbGV0IGtub3duSGVscGVycyA9IG9wdGlvbnMua25vd25IZWxwZXJzO1xuICAgIG9wdGlvbnMua25vd25IZWxwZXJzID0ge1xuICAgICAgJ2hlbHBlck1pc3NpbmcnOiB0cnVlLFxuICAgICAgJ2Jsb2NrSGVscGVyTWlzc2luZyc6IHRydWUsXG4gICAgICAnZWFjaCc6IHRydWUsXG4gICAgICAnaWYnOiB0cnVlLFxuICAgICAgJ3VubGVzcyc6IHRydWUsXG4gICAgICAnd2l0aCc6IHRydWUsXG4gICAgICAnbG9nJzogdHJ1ZSxcbiAgICAgICdsb29rdXAnOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoa25vd25IZWxwZXJzKSB7XG4gICAgICBmb3IgKGxldCBuYW1lIGluIGtub3duSGVscGVycykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAobmFtZSBpbiBrbm93bkhlbHBlcnMpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdID0ga25vd25IZWxwZXJzW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0KHByb2dyYW0pO1xuICB9LFxuXG4gIGNvbXBpbGVQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgbGV0IGNoaWxkQ29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICAgIGd1aWQgPSB0aGlzLmd1aWQrKztcblxuICAgIHRoaXMudXNlUGFydGlhbCA9IHRoaXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDtcblxuICAgIHRoaXMuY2hpbGRyZW5bZ3VpZF0gPSByZXN1bHQ7XG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCByZXN1bHQudXNlRGVwdGhzO1xuXG4gICAgcmV0dXJuIGd1aWQ7XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW25vZGUudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG5vZGUudHlwZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VOb2RlLnVuc2hpZnQobm9kZSk7XG4gICAgbGV0IHJldCA9IHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgICB0aGlzLnNvdXJjZU5vZGUuc2hpZnQoKTtcbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXMudW5zaGlmdChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgICBib2R5TGVuZ3RoID0gYm9keS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0KGJvZHlbaV0pO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5zaGlmdCgpO1xuXG4gICAgdGhpcy5pc1NpbXBsZSA9IGJvZHlMZW5ndGggPT09IDE7XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IHByb2dyYW0uYmxvY2tQYXJhbXMgPyBwcm9ncmFtLmJsb2NrUGFyYW1zLmxlbmd0aCA6IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYmxvY2spIHtcbiAgICB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKGJsb2NrKTtcblxuICAgIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSxcbiAgICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICAgIHBhdGggPSBkZWNvcmF0b3IucGF0aDtcblxuICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgdGhpcy5vcGNvZGUoJ3JlZ2lzdGVyRGVjb3JhdG9yJywgcGFyYW1zLmxlbmd0aCwgcGF0aC5vcmlnaW5hbCk7XG4gIH0sXG5cbiAgUGFydGlhbFN0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHRoaXMudXNlUGFydGlhbCA9IHRydWU7XG5cbiAgICBsZXQgcHJvZ3JhbSA9IHBhcnRpYWwucHJvZ3JhbTtcbiAgICBpZiAocHJvZ3JhbSkge1xuICAgICAgcHJvZ3JhbSA9IHRoaXMuY29tcGlsZVByb2dyYW0ocGFydGlhbC5wcm9ncmFtKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyYW1zID0gcGFydGlhbC5wYXJhbXM7XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBudW1iZXIgb2YgcGFydGlhbCBhcmd1bWVudHM6ICcgKyBwYXJhbXMubGVuZ3RoLCBwYXJ0aWFsKTtcbiAgICB9IGVsc2UgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4cGxpY2l0UGFydGlhbENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goe3R5cGU6ICdQYXRoRXhwcmVzc2lvbicsIHBhcnRzOiBbXSwgZGVwdGg6IDB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICAgIGlzRHluYW1pYyA9IHBhcnRpYWwubmFtZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbic7XG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgdGhpcy5hY2NlcHQocGFydGlhbC5uYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHBhcnRpYWwsIHByb2dyYW0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBsZXQgaW5kZW50ID0gcGFydGlhbC5pbmRlbnQgfHwgJyc7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2ZW50SW5kZW50ICYmIGluZGVudCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBpbmRlbnQpO1xuICAgICAgaW5kZW50ID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBpc0R5bmFtaWMsIHBhcnRpYWxOYW1lLCBpbmRlbnQpO1xuICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgfSxcbiAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsQmxvY2spIHtcbiAgICB0aGlzLlBhcnRpYWxTdGF0ZW1lbnQocGFydGlhbEJsb2NrKTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgICB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpO1xuXG4gICAgaWYgKG11c3RhY2hlLmVzY2FwZWQgJiYgIXRoaXMub3B0aW9ucy5ub0VzY2FwZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZEVzY2FwZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpO1xuICAgIH1cbiAgfSxcbiAgRGVjb3JhdG9yKGRlY29yYXRvcikge1xuICAgIHRoaXMuRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKTtcbiAgfSxcblxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudC52YWx1ZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBjb250ZW50LnZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbihzZXhwcikge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpO1xuICAgIGxldCB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKHNleHByKTtcblxuICAgIGlmICh0eXBlID09PSAnc2ltcGxlJykge1xuICAgICAgdGhpcy5zaW1wbGVTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaGVscGVyJykge1xuICAgICAgdGhpcy5oZWxwZXJTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIpO1xuICAgIH1cbiAgfSxcbiAgYW1iaWd1b3VzU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgICAgaXNCbG9jayA9IHByb2dyYW0gIT0gbnVsbCB8fCBpbnZlcnNlICE9IG51bGw7XG5cbiAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhdGguZGVwdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG5cbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG5cbiAgICB0aGlzLm9wY29kZSgnaW52b2tlQW1iaWd1b3VzJywgbmFtZSwgaXNCbG9jayk7XG4gIH0sXG5cbiAgc2ltcGxlU2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoO1xuICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjY2VwdChwYXRoKTtcbiAgICB0aGlzLm9wY29kZSgncmVzb2x2ZVBvc3NpYmxlTGFtYmRhJyk7XG4gIH0sXG5cbiAgaGVscGVyU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpLFxuICAgICAgICBwYXRoID0gc2V4cHIucGF0aCxcbiAgICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignWW91IHNwZWNpZmllZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgJyArIG5hbWUsIHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwsIEFTVC5oZWxwZXJzLnNpbXBsZUlkKHBhdGgpKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICAgIHNjb3BlZCA9IEFTVC5oZWxwZXJzLnNjb3BlZElkKHBhdGgpLFxuICAgICAgICBibG9ja1BhcmFtSWQgPSAhcGF0aC5kZXB0aCAmJiAhc2NvcGVkICYmIHRoaXMuYmxvY2tQYXJhbUluZGV4KG5hbWUpO1xuXG4gICAgaWYgKGJsb2NrUGFyYW1JZCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cEJsb2NrUGFyYW0nLCBibG9ja1BhcmFtSWQsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoIW5hbWUpIHtcbiAgICAgIC8vIENvbnRleHQgcmVmZXJlbmNlLCBpLmUuIGB7e2ZvbyAufX1gIG9yIGB7e2ZvbyAuLn19YFxuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7XG4gICAgfSBlbHNlIGlmIChwYXRoLmRhdGEpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBEYXRhJywgcGF0aC5kZXB0aCwgcGF0aC5wYXJ0cywgcGF0aC5zdHJpY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwT25Db250ZXh0JywgcGF0aC5wYXJ0cywgcGF0aC5mYWxzeSwgcGF0aC5zdHJpY3QsIHNjb3BlZCk7XG4gICAgfVxuICB9LFxuXG4gIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nJywgc3RyaW5nLnZhbHVlKTtcbiAgfSxcblxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBudW1iZXIudmFsdWUpO1xuICB9LFxuXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbihib29sKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC52YWx1ZSk7XG4gIH0sXG5cbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICB9LFxuXG4gIE51bGxMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAnbnVsbCcpO1xuICB9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbCA9IHBhaXJzLmxlbmd0aDtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoSGFzaCcpO1xuXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhaXJzW2ldLnZhbHVlKTtcbiAgICB9XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJzW2ldLmtleSk7XG4gICAgfVxuICAgIHRoaXMub3Bjb2RlKCdwb3BIYXNoJyk7XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuICBvcGNvZGU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogbmFtZSwgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBsb2M6IHRoaXMuc291cmNlTm9kZVswXS5sb2MgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgICBpc0hlbHBlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzSGVscGVyKSB7XG4gICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgfSBlbHNlIGlmIChpc0VsaWdpYmxlKSB7XG4gICAgICByZXR1cm4gJ2FtYmlndW91cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnc2ltcGxlJztcbiAgICB9XG4gIH0sXG5cbiAgcHVzaFBhcmFtczogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYXJhbXNbaV0pO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW06IGZ1bmN0aW9uKHZhbCkge1xuICAgIGxldCB2YWx1ZSA9IHZhbC52YWx1ZSAhPSBudWxsID8gdmFsLnZhbHVlIDogdmFsLm9yaWdpbmFsIHx8ICcnO1xuXG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwuZGVwdGgpIHtcbiAgICAgICAgdGhpcy5hZGREZXB0aCh2YWwuZGVwdGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCB2YWwuZGVwdGggfHwgMCk7XG4gICAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZ1BhcmFtJywgdmFsdWUsIHZhbC50eXBlKTtcblxuICAgICAgaWYgKHZhbC50eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3ViRXhwcmVzc2lvbnMgZ2V0IGV2YWx1YXRlZCBhbmQgcGFzc2VkIGluXG4gICAgICAgIC8vIGluIHN0cmluZyBwYXJhbXMgbW9kZS5cbiAgICAgICAgdGhpcy5hY2NlcHQodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgbGV0IGJsb2NrUGFyYW1JbmRleDtcbiAgICAgICAgaWYgKHZhbC5wYXJ0cyAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQodmFsKSAmJiAhdmFsLmRlcHRoKSB7XG4gICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9edGhpcyg/OlxcLnwkKS8sICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKGxldCBkZXB0aCA9IDAsIGxlbiA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5sZW5ndGg7IGRlcHRoIDwgbGVuOyBkZXB0aCsrKSB7XG4gICAgICBsZXQgYmxvY2tQYXJhbXMgPSB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXNbZGVwdGhdLFxuICAgICAgICAgIHBhcmFtID0gYmxvY2tQYXJhbXMgJiYgaW5kZXhPZihibG9ja1BhcmFtcywgbmFtZSk7XG4gICAgICBpZiAoYmxvY2tQYXJhbXMgJiYgcGFyYW0gPj0gMCkge1xuICAgICAgICByZXR1cm4gW2RlcHRoLCBwYXJhbV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7XG4gIGlmIChpbnB1dCA9PSBudWxsIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJykpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMucHJlY29tcGlsZS4gWW91IHBhc3NlZCAnICsgaW5wdXQpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBuZXcgZW52LkphdmFTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZShpbnB1dCwgb3B0aW9ucyA9IHt9LCBlbnYpIHtcbiAgaWYgKGlucHV0ID09IG51bGwgfHwgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21waWxlLiBZb3UgcGFzc2VkICcgKyBpbnB1dCk7XG4gIH1cblxuICBvcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgaWYgKCEoJ2RhdGEnIGluIG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgfVxuICBpZiAob3B0aW9ucy5jb21wYXQpIHtcbiAgICBvcHRpb25zLnVzZURlcHRocyA9IHRydWU7XG4gIH1cblxuICBsZXQgY29tcGlsZWQ7XG5cbiAgZnVuY3Rpb24gY29tcGlsZUlucHV0KCkge1xuICAgIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgICAgICBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyksXG4gICAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=
1 define(['exports', '../exception'], function (exports, _exception) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.SourceLocation = SourceLocation;
6 exports.id = id;
7 exports.stripFlags = stripFlags;
8 exports.stripComment = stripComment;
9 exports.preparePath = preparePath;
10 exports.prepareMustache = prepareMustache;
11 exports.prepareRawBlock = prepareRawBlock;
12 exports.prepareBlock = prepareBlock;
13 exports.prepareProgram = prepareProgram;
14 exports.preparePartialBlock = preparePartialBlock;
15 // istanbul ignore next
16
17 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
18
19 var _Exception = _interopRequireDefault(_exception);
20
21 function validateClose(open, close) {
22 close = close.path ? close.path.original : close;
23
24 if (open.path.original !== close) {
25 var errorNode = { loc: open.path.loc };
26
27 throw new _Exception['default'](open.path.original + " doesn't match " + close, errorNode);
28 }
29 }
30
31 function SourceLocation(source, locInfo) {
32 this.source = source;
33 this.start = {
34 line: locInfo.first_line,
35 column: locInfo.first_column
36 };
37 this.end = {
38 line: locInfo.last_line,
39 column: locInfo.last_column
40 };
41 }
42
43 function id(token) {
44 if (/^\[.*\]$/.test(token)) {
45 return token.substr(1, token.length - 2);
46 } else {
47 return token;
48 }
49 }
50
51 function stripFlags(open, close) {
52 return {
53 open: open.charAt(2) === '~',
54 close: close.charAt(close.length - 3) === '~'
55 };
56 }
57
58 function stripComment(comment) {
59 return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, '');
60 }
61
62 function preparePath(data, parts, loc) {
63 loc = this.locInfo(loc);
64
65 var original = data ? '@' : '',
66 dig = [],
67 depth = 0,
68 depthString = '';
69
70 for (var i = 0, l = parts.length; i < l; i++) {
71 var part = parts[i].part,
72
73 // If we have [] syntax then we do not treat path references as operators,
74 // i.e. foo.[this] resolves to approximately context.foo['this']
75 isLiteral = parts[i].original !== part;
76 original += (parts[i].separator || '') + part;
77
78 if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
79 if (dig.length > 0) {
80 throw new _Exception['default']('Invalid path: ' + original, { loc: loc });
81 } else if (part === '..') {
82 depth++;
83 depthString += '../';
84 }
85 } else {
86 dig.push(part);
87 }
88 }
89
90 return {
91 type: 'PathExpression',
92 data: data,
93 depth: depth,
94 parts: dig,
95 original: original,
96 loc: loc
97 };
98 }
99
100 function prepareMustache(path, params, hash, open, strip, locInfo) {
101 // Must use charAt to support IE pre-10
102 var escapeFlag = open.charAt(3) || open.charAt(2),
103 escaped = escapeFlag !== '{' && escapeFlag !== '&';
104
105 var decorator = /\*/.test(open);
106 return {
107 type: decorator ? 'Decorator' : 'MustacheStatement',
108 path: path,
109 params: params,
110 hash: hash,
111 escaped: escaped,
112 strip: strip,
113 loc: this.locInfo(locInfo)
114 };
115 }
116
117 function prepareRawBlock(openRawBlock, contents, close, locInfo) {
118 validateClose(openRawBlock, close);
119
120 locInfo = this.locInfo(locInfo);
121 var program = {
122 type: 'Program',
123 body: contents,
124 strip: {},
125 loc: locInfo
126 };
127
128 return {
129 type: 'BlockStatement',
130 path: openRawBlock.path,
131 params: openRawBlock.params,
132 hash: openRawBlock.hash,
133 program: program,
134 openStrip: {},
135 inverseStrip: {},
136 closeStrip: {},
137 loc: locInfo
138 };
139 }
140
141 function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
142 if (close && close.path) {
143 validateClose(openBlock, close);
144 }
145
146 var decorator = /\*/.test(openBlock.open);
147
148 program.blockParams = openBlock.blockParams;
149
150 var inverse = undefined,
151 inverseStrip = undefined;
152
153 if (inverseAndProgram) {
154 if (decorator) {
155 throw new _Exception['default']('Unexpected inverse block on decorator', inverseAndProgram);
156 }
157
158 if (inverseAndProgram.chain) {
159 inverseAndProgram.program.body[0].closeStrip = close.strip;
160 }
161
162 inverseStrip = inverseAndProgram.strip;
163 inverse = inverseAndProgram.program;
164 }
165
166 if (inverted) {
167 inverted = inverse;
168 inverse = program;
169 program = inverted;
170 }
171
172 return {
173 type: decorator ? 'DecoratorBlock' : 'BlockStatement',
174 path: openBlock.path,
175 params: openBlock.params,
176 hash: openBlock.hash,
177 program: program,
178 inverse: inverse,
179 openStrip: openBlock.strip,
180 inverseStrip: inverseStrip,
181 closeStrip: close && close.strip,
182 loc: this.locInfo(locInfo)
183 };
184 }
185
186 function prepareProgram(statements, loc) {
187 if (!loc && statements.length) {
188 var firstLoc = statements[0].loc,
189 lastLoc = statements[statements.length - 1].loc;
190
191 /* istanbul ignore else */
192 if (firstLoc && lastLoc) {
193 loc = {
194 source: firstLoc.source,
195 start: {
196 line: firstLoc.start.line,
197 column: firstLoc.start.column
198 },
199 end: {
200 line: lastLoc.end.line,
201 column: lastLoc.end.column
202 }
203 };
204 }
205 }
206
207 return {
208 type: 'Program',
209 body: statements,
210 strip: {},
211 loc: loc
212 };
213 }
214
215 function preparePartialBlock(open, program, close, locInfo) {
216 validateClose(open, close);
217
218 return {
219 type: 'PartialBlockStatement',
220 name: open.path,
221 params: open.params,
222 hash: open.hash,
223 program: program,
224 openStrip: open.strip,
225 closeStrip: close && close.strip,
226 loc: this.locInfo(locInfo)
227 };
228 }
229 });
230 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxXQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLFNBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs7QUFFakQsUUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7QUFDaEMsVUFBSSxTQUFTLEdBQUcsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQzs7QUFFckMsWUFBTSwwQkFBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDaEY7R0FDRjs7QUFFTSxXQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzlDLFFBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxVQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDeEIsWUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQzdCLENBQUM7QUFDRixRQUFJLENBQUMsR0FBRyxHQUFHO0FBQ1QsVUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3ZCLFlBQU0sRUFBRSxPQUFPLENBQUMsV0FBVztLQUM1QixDQUFDO0dBQ0g7O0FBRU0sV0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFFBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixhQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDMUMsTUFBTTtBQUNMLGFB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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZnVuY3Rpb24gdmFsaWRhdGVDbG9zZShvcGVuLCBjbG9zZSkge1xuICBjbG9zZSA9IGNsb3NlLnBhdGggPyBjbG9zZS5wYXRoLm9yaWdpbmFsIDogY2xvc2U7XG5cbiAgaWYgKG9wZW4ucGF0aC5vcmlnaW5hbCAhPT0gY2xvc2UpIHtcbiAgICBsZXQgZXJyb3JOb2RlID0ge2xvYzogb3Blbi5wYXRoLmxvY307XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKG9wZW4ucGF0aC5vcmlnaW5hbCArIFwiIGRvZXNuJ3QgbWF0Y2ggXCIgKyBjbG9zZSwgZXJyb3JOb2RlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHIoMSwgdG9rZW4ubGVuZ3RoIC0gMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+P1xcIS0/LT8vLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLT8tP34/XFx9XFx9JC8sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYXRoKGRhdGEsIHBhcnRzLCBsb2MpIHtcbiAgbG9jID0gdGhpcy5sb2NJbmZvKGxvYyk7XG5cbiAgbGV0IG9yaWdpbmFsID0gZGF0YSA/ICdAJyA6ICcnLFxuICAgICAgZGlnID0gW10sXG4gICAgICBkZXB0aCA9IDAsXG4gICAgICBkZXB0aFN0cmluZyA9ICcnO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHBhcnQgPSBwYXJ0c1tpXS5wYXJ0LFxuICAgICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgICAvLyBpLmUuIGZvby5bdGhpc10gcmVzb2x2ZXMgdG8gYXBwcm94aW1hdGVseSBjb250ZXh0LmZvb1sndGhpcyddXG4gICAgICAgIGlzTGl0ZXJhbCA9IHBhcnRzW2ldLm9yaWdpbmFsICE9PSBwYXJ0O1xuICAgIG9yaWdpbmFsICs9IChwYXJ0c1tpXS5zZXBhcmF0b3IgfHwgJycpICsgcGFydDtcblxuICAgIGlmICghaXNMaXRlcmFsICYmIChwYXJ0ID09PSAnLi4nIHx8IHBhcnQgPT09ICcuJyB8fCBwYXJ0ID09PSAndGhpcycpKSB7XG4gICAgICBpZiAoZGlnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBwYXRoOiAnICsgb3JpZ2luYWwsIHtsb2N9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgICBkZXB0aFN0cmluZyArPSAnLi4vJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgICAgZXNjYXBlZCA9IGVzY2FwZUZsYWcgIT09ICd7JyAmJiBlc2NhcGVGbGFnICE9PSAnJic7XG5cbiAgbGV0IGRlY29yYXRvciA9ICgvXFwqLy50ZXN0KG9wZW4pKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yJyA6ICdNdXN0YWNoZVN0YXRlbWVudCcsXG4gICAgcGF0aCxcbiAgICBwYXJhbXMsXG4gICAgaGFzaCxcbiAgICBlc2NhcGVkLFxuICAgIHN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUmF3QmxvY2sob3BlblJhd0Jsb2NrLCBjb250ZW50cywgY2xvc2UsIGxvY0luZm8pIHtcbiAgdmFsaWRhdGVDbG9zZShvcGVuUmF3QmxvY2ssIGNsb3NlKTtcblxuICBsb2NJbmZvID0gdGhpcy5sb2NJbmZvKGxvY0luZm8pO1xuICBsZXQgcHJvZ3JhbSA9IHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogY29udGVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jSW5mb1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuUmF3QmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5SYXdCbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlblJhd0Jsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBvcGVuU3RyaXA6IHt9LFxuICAgIGludmVyc2VTdHJpcDoge30sXG4gICAgY2xvc2VTdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmxvY2sob3BlbkJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlQW5kUHJvZ3JhbSwgY2xvc2UsIGludmVydGVkLCBsb2NJbmZvKSB7XG4gIGlmIChjbG9zZSAmJiBjbG9zZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDbG9zZShvcGVuQmxvY2ssIGNsb3NlKTtcbiAgfVxuXG4gIGxldCBkZWNvcmF0b3IgPSAoL1xcKi8udGVzdChvcGVuQmxvY2sub3BlbikpO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsXG4gICAgICBpbnZlcnNlU3RyaXA7XG5cbiAgaWYgKGludmVyc2VBbmRQcm9ncmFtKSB7XG4gICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsIGludmVyc2VBbmRQcm9ncmFtKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZUFuZFByb2dyYW0uY2hhaW4pIHtcbiAgICAgIGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW0uYm9keVswXS5jbG9zZVN0cmlwID0gY2xvc2Uuc3RyaXA7XG4gICAgfVxuXG4gICAgaW52ZXJzZVN0cmlwID0gaW52ZXJzZUFuZFByb2dyYW0uc3RyaXA7XG4gICAgaW52ZXJzZSA9IGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW07XG4gIH1cblxuICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICBpbnZlcnRlZCA9IGludmVyc2U7XG4gICAgaW52ZXJzZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbSA9IGludmVydGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yQmxvY2snIDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuQmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5CbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlbkJsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBpbnZlcnNlLFxuICAgIG9wZW5TdHJpcDogb3BlbkJsb2NrLnN0cmlwLFxuICAgIGludmVyc2VTdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVByb2dyYW0oc3RhdGVtZW50cywgbG9jKSB7XG4gIGlmICghbG9jICYmIHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgZmlyc3RMb2MgPSBzdGF0ZW1lbnRzWzBdLmxvYyxcbiAgICAgICAgICBsYXN0TG9jID0gc3RhdGVtZW50c1tzdGF0ZW1lbnRzLmxlbmd0aCAtIDFdLmxvYztcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZpcnN0TG9jICYmIGxhc3RMb2MpIHtcbiAgICAgIGxvYyA9IHtcbiAgICAgICAgc291cmNlOiBmaXJzdExvYy5zb3VyY2UsXG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgbGluZTogZmlyc3RMb2Muc3RhcnQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGZpcnN0TG9jLnN0YXJ0LmNvbHVtblxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICBsaW5lOiBsYXN0TG9jLmVuZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogbGFzdExvYy5lbmQuY29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogc3RhdGVtZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NcbiAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhcnRpYWxCbG9jayhvcGVuLCBwcm9ncmFtLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW4sIGNsb3NlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQnLFxuICAgIG5hbWU6IG9wZW4ucGF0aCxcbiAgICBwYXJhbXM6IG9wZW4ucGFyYW1zLFxuICAgIGhhc2g6IG9wZW4uaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDogb3Blbi5zdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG4iXX0=
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 define(['exports', './visitor'], function (exports, _visitor) {
2 /* eslint-disable new-cap */
3 'use strict';
4
5 exports.__esModule = true;
6 exports.print = print;
7 exports.PrintVisitor = PrintVisitor;
8 // istanbul ignore next
9
10 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
11
12 var _Visitor = _interopRequireDefault(_visitor);
13
14 function print(ast) {
15 return new PrintVisitor().accept(ast);
16 }
17
18 function PrintVisitor() {
19 this.padding = 0;
20 }
21
22 PrintVisitor.prototype = new _Visitor['default']();
23
24 PrintVisitor.prototype.pad = function (string) {
25 var out = '';
26
27 for (var i = 0, l = this.padding; i < l; i++) {
28 out += ' ';
29 }
30
31 out += string + '\n';
32 return out;
33 };
34
35 PrintVisitor.prototype.Program = function (program) {
36 var out = '',
37 body = program.body,
38 i = undefined,
39 l = undefined;
40
41 if (program.blockParams) {
42 var blockParams = 'BLOCK PARAMS: [';
43 for (i = 0, l = program.blockParams.length; i < l; i++) {
44 blockParams += ' ' + program.blockParams[i];
45 }
46 blockParams += ' ]';
47 out += this.pad(blockParams);
48 }
49
50 for (i = 0, l = body.length; i < l; i++) {
51 out += this.accept(body[i]);
52 }
53
54 this.padding--;
55
56 return out;
57 };
58
59 PrintVisitor.prototype.MustacheStatement = function (mustache) {
60 return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');
61 };
62 PrintVisitor.prototype.Decorator = function (mustache) {
63 return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');
64 };
65
66 PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {
67 var out = '';
68
69 out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');
70 this.padding++;
71 out += this.pad(this.SubExpression(block));
72 if (block.program) {
73 out += this.pad('PROGRAM:');
74 this.padding++;
75 out += this.accept(block.program);
76 this.padding--;
77 }
78 if (block.inverse) {
79 if (block.program) {
80 this.padding++;
81 }
82 out += this.pad('{{^}}');
83 this.padding++;
84 out += this.accept(block.inverse);
85 this.padding--;
86 if (block.program) {
87 this.padding--;
88 }
89 }
90 this.padding--;
91
92 return out;
93 };
94
95 PrintVisitor.prototype.PartialStatement = function (partial) {
96 var content = 'PARTIAL:' + partial.name.original;
97 if (partial.params[0]) {
98 content += ' ' + this.accept(partial.params[0]);
99 }
100 if (partial.hash) {
101 content += ' ' + this.accept(partial.hash);
102 }
103 return this.pad('{{> ' + content + ' }}');
104 };
105 PrintVisitor.prototype.PartialBlockStatement = function (partial) {
106 var content = 'PARTIAL BLOCK:' + partial.name.original;
107 if (partial.params[0]) {
108 content += ' ' + this.accept(partial.params[0]);
109 }
110 if (partial.hash) {
111 content += ' ' + this.accept(partial.hash);
112 }
113
114 content += ' ' + this.pad('PROGRAM:');
115 this.padding++;
116 content += this.accept(partial.program);
117 this.padding--;
118
119 return this.pad('{{> ' + content + ' }}');
120 };
121
122 PrintVisitor.prototype.ContentStatement = function (content) {
123 return this.pad("CONTENT[ '" + content.value + "' ]");
124 };
125
126 PrintVisitor.prototype.CommentStatement = function (comment) {
127 return this.pad("{{! '" + comment.value + "' }}");
128 };
129
130 PrintVisitor.prototype.SubExpression = function (sexpr) {
131 var params = sexpr.params,
132 paramStrings = [],
133 hash = undefined;
134
135 for (var i = 0, l = params.length; i < l; i++) {
136 paramStrings.push(this.accept(params[i]));
137 }
138
139 params = '[' + paramStrings.join(', ') + ']';
140
141 hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';
142
143 return this.accept(sexpr.path) + ' ' + params + hash;
144 };
145
146 PrintVisitor.prototype.PathExpression = function (id) {
147 var path = id.parts.join('/');
148 return (id.data ? '@' : '') + 'PATH:' + path;
149 };
150
151 PrintVisitor.prototype.StringLiteral = function (string) {
152 return '"' + string.value + '"';
153 };
154
155 PrintVisitor.prototype.NumberLiteral = function (number) {
156 return 'NUMBER{' + number.value + '}';
157 };
158
159 PrintVisitor.prototype.BooleanLiteral = function (bool) {
160 return 'BOOLEAN{' + bool.value + '}';
161 };
162
163 PrintVisitor.prototype.UndefinedLiteral = function () {
164 return 'UNDEFINED';
165 };
166
167 PrintVisitor.prototype.NullLiteral = function () {
168 return 'NULL';
169 };
170
171 PrintVisitor.prototype.Hash = function (hash) {
172 var pairs = hash.pairs,
173 joinedPairs = [];
174
175 for (var i = 0, l = pairs.length; i < l; i++) {
176 joinedPairs.push(this.accept(pairs[i]));
177 }
178
179 return 'HASH{' + joinedPairs.join(', ') + '}';
180 };
181 PrintVisitor.prototype.HashPair = function (pair) {
182 return pair.key + '=' + this.accept(pair.value);
183 };
184 /* eslint-enable new-cap */
185 });
186 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdPLFdBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN6QixXQUFPLElBQUksWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ3ZDOztBQUVNLFdBQVMsWUFBWSxHQUFHO0FBQzdCLFFBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0dBQ2xCOztBQUVELGNBQVksQ0FBQyxTQUFTLEdBQUcseUJBQWEsQ0FBQzs7QUFFdkMsY0FBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBUyxNQUFNLEVBQUU7QUFDNUMsUUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDOztBQUViLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsU0FBRyxJQUFJLElBQUksQ0FBQztLQUNiOztBQUVELE9BQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQzs7QUFFRixjQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUNqRCxRQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJO1FBQ25CLENBQUMsWUFBQTtRQUFFLENBQUMsWUFBQSxDQUFDOztBQUVULFFBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUN2QixVQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQUNwQyxXQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFD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QUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qzs7QUFFRCxXQUFPLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUMvQyxDQUFDO0FBQ0YsY0FBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDL0MsV0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUNqRCxDQUFDIiwiZmlsZSI6InByaW50ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiBuZXcgUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcmludFZpc2l0b3IoKSB7XG4gIHRoaXMucGFkZGluZyA9IDA7XG59XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnBhZGRpbmc7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gJyAgJztcbiAgfVxuXG4gIG91dCArPSBzdHJpbmcgKyAnXFxuJztcbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgbGV0IG91dCA9ICcnLFxuICAgICAgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGksIGw7XG5cbiAgaWYgKHByb2dyYW0uYmxvY2tQYXJhbXMpIHtcbiAgICBsZXQgYmxvY2tQYXJhbXMgPSAnQkxPQ0sgUEFSQU1TOiBbJztcbiAgICBmb3IgKGkgPSAwLCBsID0gcHJvZ3JhbS5ibG9ja1BhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICBibG9ja1BhcmFtcyArPSAnICcgKyBwcm9ncmFtLmJsb2NrUGFyYW1zW2ldO1xuICAgIH1cbiAgICBibG9ja1BhcmFtcyArPSAnIF0nO1xuICAgIG91dCArPSB0aGlzLnBhZChibG9ja1BhcmFtcyk7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gIH1cblxuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gdGhpcy5wYWQoJ3t7IERJUkVDVElWRSAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPVxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IGZ1bmN0aW9uKGJsb2NrKSB7XG4gIGxldCBvdXQgPSAnJztcblxuICBvdXQgKz0gdGhpcy5wYWQoKGJsb2NrLnR5cGUgPT09ICdEZWNvcmF0b3JCbG9jaycgPyAnRElSRUNUSVZFICcgOiAnJykgKyAnQkxPQ0s6Jyk7XG4gIHRoaXMucGFkZGluZysrO1xuICBvdXQgKz0gdGhpcy5wYWQodGhpcy5TdWJFeHByZXNzaW9uKGJsb2NrKSk7XG4gIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgb3V0ICs9IHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgfVxuICBpZiAoYmxvY2suaW52ZXJzZSkge1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7IHRoaXMucGFkZGluZysrOyB9XG4gICAgb3V0ICs9IHRoaXMucGFkKCd7e159fScpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgICBpZiAoYmxvY2sucHJvZ3JhbSkgeyB0aGlzLnBhZGRpbmctLTsgfVxuICB9XG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gIGxldCBjb250ZW50ID0gJ1BBUlRJQUw6JyArIHBhcnRpYWwubmFtZS5vcmlnaW5hbDtcbiAgaWYgKHBhcnRpYWwucGFyYW1zWzBdKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLnBhcmFtc1swXSk7XG4gIH1cbiAgaWYgKHBhcnRpYWwuaGFzaCkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5oYXNoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTCBCTE9DSzonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG5cbiAgY29udGVudCArPSAnICcgKyB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIGNvbnRlbnQgKz0gdGhpcy5hY2NlcHQocGFydGlhbC5wcm9ncmFtKTtcbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIHRoaXMucGFkKCd7ez4gJyArIGNvbnRlbnQgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbnRlbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiB0aGlzLnBhZChcIkNPTlRFTlRbICdcIiArIGNvbnRlbnQudmFsdWUgKyBcIicgXVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwie3shICdcIiArIGNvbW1lbnQudmFsdWUgKyBcIicgfX1cIik7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN1YkV4cHJlc3Npb24gPSBmdW5jdGlvbihzZXhwcikge1xuICBsZXQgcGFyYW1zID0gc2V4cHIucGFyYW1zLFxuICAgICAgcGFyYW1TdHJpbmdzID0gW10sXG4gICAgICBoYXNoO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHBhcmFtU3RyaW5ncy5wdXNoKHRoaXMuYWNjZXB0KHBhcmFtc1tpXSkpO1xuICB9XG5cbiAgcGFyYW1zID0gJ1snICsgcGFyYW1TdHJpbmdzLmpvaW4oJywgJykgKyAnXSc7XG5cbiAgaGFzaCA9IHNleHByLmhhc2ggPyAnICcgKyB0aGlzLmFjY2VwdChzZXhwci5oYXNoKSA6ICcnO1xuXG4gIHJldHVybiB0aGlzLmFjY2VwdChzZXhwci5wYXRoKSArICcgJyArIHBhcmFtcyArIGhhc2g7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb24oaWQpIHtcbiAgbGV0IHBhdGggPSBpZC5wYXJ0cy5qb2luKCcvJyk7XG4gIHJldHVybiAoaWQuZGF0YSA/ICdAJyA6ICcnKSArICdQQVRIOicgKyBwYXRoO1xufTtcblxuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuICdcIicgKyBzdHJpbmcudmFsdWUgKyAnXCInO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsID0gZnVuY3Rpb24obnVtYmVyKSB7XG4gIHJldHVybiAnTlVNQkVSeycgKyBudW1iZXIudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkJvb2xlYW5MaXRlcmFsID0gZnVuY3Rpb24oYm9vbCkge1xuICByZXR1cm4gJ0JPT0xFQU57JyArIGJvb2wudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlVuZGVmaW5lZExpdGVyYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdVTkRFRklORUQnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdWxsTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ05VTEwnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoID0gZnVuY3Rpb24oaGFzaCkge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgICAgam9pbmVkUGFpcnMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGpvaW5lZFBhaXJzLnB1c2godGhpcy5hY2NlcHQocGFpcnNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiAnSEFTSHsnICsgam9pbmVkUGFpcnMuam9pbignLCAnKSArICd9Jztcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLkhhc2hQYWlyID0gZnVuY3Rpb24ocGFpcikge1xuICByZXR1cm4gcGFpci5rZXkgKyAnPScgKyB0aGlzLmFjY2VwdChwYWlyLnZhbHVlKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlIG5ldy1jYXAgKi9cbiJdfQ==
1 define(['exports', 'module', '../exception'], function (exports, module, _exception) {
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _Exception = _interopRequireDefault(_exception);
9
10 function Visitor() {
11 this.parents = [];
12 }
13
14 Visitor.prototype = {
15 constructor: Visitor,
16 mutating: false,
17
18 // Visits a given value. If mutating, will replace the value if necessary.
19 acceptKey: function acceptKey(node, name) {
20 var value = this.accept(node[name]);
21 if (this.mutating) {
22 // Hacky sanity check: This may have a few false positives for type for the helper
23 // methods but will generally do the right thing without a lot of overhead.
24 if (value && !Visitor.prototype[value.type]) {
25 throw new _Exception['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
26 }
27 node[name] = value;
28 }
29 },
30
31 // Performs an accept operation with added sanity check to ensure
32 // required keys are not removed.
33 acceptRequired: function acceptRequired(node, name) {
34 this.acceptKey(node, name);
35
36 if (!node[name]) {
37 throw new _Exception['default'](node.type + ' requires ' + name);
38 }
39 },
40
41 // Traverses a given array. If mutating, empty respnses will be removed
42 // for child elements.
43 acceptArray: function acceptArray(array) {
44 for (var i = 0, l = array.length; i < l; i++) {
45 this.acceptKey(array, i);
46
47 if (!array[i]) {
48 array.splice(i, 1);
49 i--;
50 l--;
51 }
52 }
53 },
54
55 accept: function accept(object) {
56 if (!object) {
57 return;
58 }
59
60 /* istanbul ignore next: Sanity code */
61 if (!this[object.type]) {
62 throw new _Exception['default']('Unknown type: ' + object.type, object);
63 }
64
65 if (this.current) {
66 this.parents.unshift(this.current);
67 }
68 this.current = object;
69
70 var ret = this[object.type](object);
71
72 this.current = this.parents.shift();
73
74 if (!this.mutating || ret) {
75 return ret;
76 } else if (ret !== false) {
77 return object;
78 }
79 },
80
81 Program: function Program(program) {
82 this.acceptArray(program.body);
83 },
84
85 MustacheStatement: visitSubExpression,
86 Decorator: visitSubExpression,
87
88 BlockStatement: visitBlock,
89 DecoratorBlock: visitBlock,
90
91 PartialStatement: visitPartial,
92 PartialBlockStatement: function PartialBlockStatement(partial) {
93 visitPartial.call(this, partial);
94
95 this.acceptKey(partial, 'program');
96 },
97
98 ContentStatement: function ContentStatement() /* content */{},
99 CommentStatement: function CommentStatement() /* comment */{},
100
101 SubExpression: visitSubExpression,
102
103 PathExpression: function PathExpression() /* path */{},
104
105 StringLiteral: function StringLiteral() /* string */{},
106 NumberLiteral: function NumberLiteral() /* number */{},
107 BooleanLiteral: function BooleanLiteral() /* bool */{},
108 UndefinedLiteral: function UndefinedLiteral() /* literal */{},
109 NullLiteral: function NullLiteral() /* literal */{},
110
111 Hash: function Hash(hash) {
112 this.acceptArray(hash.pairs);
113 },
114 HashPair: function HashPair(pair) {
115 this.acceptRequired(pair, 'value');
116 }
117 };
118
119 function visitSubExpression(mustache) {
120 this.acceptRequired(mustache, 'path');
121 this.acceptArray(mustache.params);
122 this.acceptKey(mustache, 'hash');
123 }
124 function visitBlock(block) {
125 visitSubExpression.call(this, block);
126
127 this.acceptKey(block, 'program');
128 this.acceptKey(block, 'inverse');
129 }
130 function visitPartial(partial) {
131 this.acceptRequired(partial, 'name');
132 this.acceptArray(partial.params);
133 this.acceptKey(partial, 'hash');
134 }
135
136 module.exports = Visitor;
137 });
138 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUEsV0FBUyxPQUFPLEdBQUc7QUFDakIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7R0FDbkI7O0FBRUQsU0FBTyxDQUFDLFNBQVMsR0FBRztBQUNsQixlQUFXLEVBQUUsT0FBTztBQUNwQixZQUFRLEVBQUUsS0FBSzs7O0FBR2YsYUFBUyxFQUFFLG1CQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDOUIsVUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQyxVQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7OztBQUdqQixZQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNDLGdCQUFNLDBCQUFjLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcseUJBQXlCLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEg7QUFDRCxZQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO09BQ3BCO0tBQ0Y7Ozs7QUFJRCxrQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDbkMsVUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTNCLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDZixjQUFNLDBCQUFjLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO09BQ3REO0tBQ0Y7Ozs7QUFJRCxlQUFXLEVBQUUscUJBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENB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SSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDbEM7QUFDRCxXQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsc0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFckMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDbEM7QUFDRCxXQUFTLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDN0IsUUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsUUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDakM7O21CQUVjLE9BQU8iLCJmaWxlIjoidmlzaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZnVuY3Rpb24gVmlzaXRvcigpIHtcbiAgdGhpcy5wYXJlbnRzID0gW107XG59XG5cblZpc2l0b3IucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVmlzaXRvcixcbiAgbXV0YXRpbmc6IGZhbHNlLFxuXG4gIC8vIFZpc2l0cyBhIGdpdmVuIHZhbHVlLiBJZiBtdXRhdGluZywgd2lsbCByZXBsYWNlIHRoZSB2YWx1ZSBpZiBuZWNlc3NhcnkuXG4gIGFjY2VwdEtleTogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuYWNjZXB0KG5vZGVbbmFtZV0pO1xuICAgIGlmICh0aGlzLm11dGF0aW5nKSB7XG4gICAgICAvLyBIYWNreSBzYW5pdHkgY2hlY2s6IFRoaXMgbWF5IGhhdmUgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGZvciB0eXBlIGZvciB0aGUgaGVscGVyXG4gICAgICAvLyBtZXRob2RzIGJ1dCB3aWxsIGdlbmVyYWxseSBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCBhIGxvdCBvZiBvdmVyaGVhZC5cbiAgICAgIGlmICh2YWx1ZSAmJiAhVmlzaXRvci5wcm90b3R5cGVbdmFsdWUudHlwZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5leHBlY3RlZCBub2RlIHR5cGUgXCInICsgdmFsdWUudHlwZSArICdcIiBmb3VuZCB3aGVuIGFjY2VwdGluZyAnICsgbmFtZSArICcgb24gJyArIG5vZGUudHlwZSk7XG4gICAgICB9XG4gICAgICBub2RlW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIC8vIFBlcmZvcm1zIGFuIGFjY2VwdCBvcGVyYXRpb24gd2l0aCBhZGRlZCBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlXG4gIC8vIHJlcXVpcmVkIGtleXMgYXJlIG5vdCByZW1vdmVkLlxuICBhY2NlcHRSZXF1aXJlZDogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIHRoaXMuYWNjZXB0S2V5KG5vZGUsIG5hbWUpO1xuXG4gICAgaWYgKCFub2RlW25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKG5vZGUudHlwZSArICcgcmVxdWlyZXMgJyArIG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUcmF2ZXJzZXMgYSBnaXZlbiBhcnJheS4gSWYgbXV0YXRpbmcsIGVtcHR5IHJlc3Buc2VzIHdpbGwgYmUgcmVtb3ZlZFxuICAvLyBmb3IgY2hpbGQgZWxlbWVudHMuXG4gIGFjY2VwdEFycmF5OiBmdW5jdGlvbihhcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLmFjY2VwdEtleShhcnJheSwgaSk7XG5cbiAgICAgIGlmICghYXJyYXlbaV0pIHtcbiAgICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICBpLS07XG4gICAgICAgIGwtLTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tvYmplY3QudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG9iamVjdC50eXBlLCBvYmplY3QpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMucGFyZW50cy51bnNoaWZ0KHRoaXMuY3VycmVudCk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudCA9IG9iamVjdDtcblxuICAgIGxldCByZXQgPSB0aGlzW29iamVjdC50eXBlXShvYmplY3QpO1xuXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5wYXJlbnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoIXRoaXMubXV0YXRpbmcgfHwgcmV0KSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSBpZiAocmV0ICE9PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gIH0sXG5cbiAgUHJvZ3JhbTogZnVuY3Rpb24ocHJvZ3JhbSkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkocHJvZ3JhbS5ib2R5KTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogdmlzaXRTdWJFeHByZXNzaW9uLFxuICBEZWNvcmF0b3I6IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBCbG9ja1N0YXRlbWVudDogdmlzaXRCbG9jayxcbiAgRGVjb3JhdG9yQmxvY2s6IHZpc2l0QmxvY2ssXG5cbiAgUGFydGlhbFN0YXRlbWVudDogdmlzaXRQYXJ0aWFsLFxuICBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB2aXNpdFBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsKTtcblxuICAgIHRoaXMuYWNjZXB0S2V5KHBhcnRpYWwsICdwcm9ncmFtJyk7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29udGVudCAqLykge30sXG4gIENvbW1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKC8qIGNvbW1lbnQgKi8pIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBQYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24oLyogcGF0aCAqLykge30sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oLyogc3RyaW5nICovKSB7fSxcbiAgTnVtYmVyTGl0ZXJhbDogZnVuY3Rpb24oLyogbnVtYmVyICovKSB7fSxcbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKC8qIGJvb2wgKi8pIHt9LFxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigvKiBsaXRlcmFsICovKSB7fSxcbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICB0aGlzLmFjY2VwdEFycmF5KGhhc2gucGFpcnMpO1xuICB9LFxuICBIYXNoUGFpcjogZnVuY3Rpb24ocGFpcikge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFpciwgJ3ZhbHVlJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZpc2l0U3ViRXhwcmVzc2lvbihtdXN0YWNoZSkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKG11c3RhY2hlLCAncGF0aCcpO1xuICB0aGlzLmFjY2VwdEFycmF5KG11c3RhY2hlLnBhcmFtcyk7XG4gIHRoaXMuYWNjZXB0S2V5KG11c3RhY2hlLCAnaGFzaCcpO1xufVxuZnVuY3Rpb24gdmlzaXRCbG9jayhibG9jaykge1xuICB2aXNpdFN1YkV4cHJlc3Npb24uY2FsbCh0aGlzLCBibG9jayk7XG5cbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdwcm9ncmFtJyk7XG4gIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAnaW52ZXJzZScpO1xufVxuZnVuY3Rpb24gdmlzaXRQYXJ0aWFsKHBhcnRpYWwpIHtcbiAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYXJ0aWFsLCAnbmFtZScpO1xuICB0aGlzLmFjY2VwdEFycmF5KHBhcnRpYWwucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ2hhc2gnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlzaXRvcjtcbiJdfQ==
1 define(['exports', 'module', './visitor'], function (exports, module, _visitor) {
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _Visitor = _interopRequireDefault(_visitor);
9
10 function WhitespaceControl() {
11 var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
12
13 this.options = options;
14 }
15 WhitespaceControl.prototype = new _Visitor['default']();
16
17 WhitespaceControl.prototype.Program = function (program) {
18 var doStandalone = !this.options.ignoreStandalone;
19
20 var isRoot = !this.isRootSeen;
21 this.isRootSeen = true;
22
23 var body = program.body;
24 for (var i = 0, l = body.length; i < l; i++) {
25 var current = body[i],
26 strip = this.accept(current);
27
28 if (!strip) {
29 continue;
30 }
31
32 var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
33 _isNextWhitespace = isNextWhitespace(body, i, isRoot),
34 openStandalone = strip.openStandalone && _isPrevWhitespace,
35 closeStandalone = strip.closeStandalone && _isNextWhitespace,
36 inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
37
38 if (strip.close) {
39 omitRight(body, i, true);
40 }
41 if (strip.open) {
42 omitLeft(body, i, true);
43 }
44
45 if (doStandalone && inlineStandalone) {
46 omitRight(body, i);
47
48 if (omitLeft(body, i)) {
49 // If we are on a standalone node, save the indent info for partials
50 if (current.type === 'PartialStatement') {
51 // Pull out the whitespace from the final line
52 current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1];
53 }
54 }
55 }
56 if (doStandalone && openStandalone) {
57 omitRight((current.program || current.inverse).body);
58
59 // Strip out the previous content node if it's whitespace only
60 omitLeft(body, i);
61 }
62 if (doStandalone && closeStandalone) {
63 // Always strip the next node
64 omitRight(body, i);
65
66 omitLeft((current.inverse || current.program).body);
67 }
68 }
69
70 return program;
71 };
72
73 WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {
74 this.accept(block.program);
75 this.accept(block.inverse);
76
77 // Find the inverse program that is involed with whitespace stripping.
78 var program = block.program || block.inverse,
79 inverse = block.program && block.inverse,
80 firstInverse = inverse,
81 lastInverse = inverse;
82
83 if (inverse && inverse.chained) {
84 firstInverse = inverse.body[0].program;
85
86 // Walk the inverse chain to find the last inverse that is actually in the chain.
87 while (lastInverse.chained) {
88 lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
89 }
90 }
91
92 var strip = {
93 open: block.openStrip.open,
94 close: block.closeStrip.close,
95
96 // Determine the standalone candiacy. Basically flag our content as being possibly standalone
97 // so our parent can determine if we actually are standalone
98 openStandalone: isNextWhitespace(program.body),
99 closeStandalone: isPrevWhitespace((firstInverse || program).body)
100 };
101
102 if (block.openStrip.close) {
103 omitRight(program.body, null, true);
104 }
105
106 if (inverse) {
107 var inverseStrip = block.inverseStrip;
108
109 if (inverseStrip.open) {
110 omitLeft(program.body, null, true);
111 }
112
113 if (inverseStrip.close) {
114 omitRight(firstInverse.body, null, true);
115 }
116 if (block.closeStrip.open) {
117 omitLeft(lastInverse.body, null, true);
118 }
119
120 // Find standalone else statments
121 if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {
122 omitLeft(program.body);
123 omitRight(firstInverse.body);
124 }
125 } else if (block.closeStrip.open) {
126 omitLeft(program.body, null, true);
127 }
128
129 return strip;
130 };
131
132 WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {
133 return mustache.strip;
134 };
135
136 WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {
137 /* istanbul ignore next */
138 var strip = node.strip || {};
139 return {
140 inlineStandalone: true,
141 open: strip.open,
142 close: strip.close
143 };
144 };
145
146 function isPrevWhitespace(body, i, isRoot) {
147 if (i === undefined) {
148 i = body.length;
149 }
150
151 // Nodes that end with newlines are considered whitespace (but are special
152 // cased for strip operations)
153 var prev = body[i - 1],
154 sibling = body[i - 2];
155 if (!prev) {
156 return isRoot;
157 }
158
159 if (prev.type === 'ContentStatement') {
160 return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original);
161 }
162 }
163 function isNextWhitespace(body, i, isRoot) {
164 if (i === undefined) {
165 i = -1;
166 }
167
168 var next = body[i + 1],
169 sibling = body[i + 2];
170 if (!next) {
171 return isRoot;
172 }
173
174 if (next.type === 'ContentStatement') {
175 return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original);
176 }
177 }
178
179 // Marks the node to the right of the position as omitted.
180 // I.e. {{foo}}' ' will mark the ' ' node as omitted.
181 //
182 // If i is undefined, then the first child will be marked as such.
183 //
184 // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
185 // content is met.
186 function omitRight(body, i, multiple) {
187 var current = body[i == null ? 0 : i + 1];
188 if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {
189 return;
190 }
191
192 var original = current.value;
193 current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, '');
194 current.rightStripped = current.value !== original;
195 }
196
197 // Marks the node to the left of the position as omitted.
198 // I.e. ' '{{foo}} will mark the ' ' node as omitted.
199 //
200 // If i is undefined then the last child will be marked as such.
201 //
202 // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
203 // content is met.
204 function omitLeft(body, i, multiple) {
205 var current = body[i == null ? body.length - 1 : i - 1];
206 if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {
207 return;
208 }
209
210 // We omit the last node if it's whitespace only and not preceeded by a non-content node.
211 var original = current.value;
212 current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, '');
213 current.leftStripped = current.value !== original;
214 return current.leftStripped;
215 }
216
217 module.exports = WhitespaceControl;
218 });
219 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxXQUFTLGlCQUFpQixHQUFlO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNyQyxRQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztHQUN4QjtBQUNELG1CQUFpQixDQUFDLFNBQVMsR0FBRyx5QkFBYSxDQUFDOztBQUU1QyxtQkFBaUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQ3RELFFBQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzs7QUFFcEQsUUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzlCLFFBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOztBQUV2QixRQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsVUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNqQixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFakMsVUFBSSxDQUFDLEtBQUssRUFBRTtBQUNWLGlCQUFTO09BQ1Y7O0FBRUQsVUFBSSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUNyRCxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUVyRCxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxpQkFBaUI7VUFDMUQsZUFBZSxHQUFHLEtB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QUN4RCxRQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQUFBQyxFQUFFO0FBQzFGLGFBQU87S0FDUjs7O0FBR0QsUUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUM3QixXQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBSSxNQUFNLEdBQUssU0FBUyxBQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0UsV0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxXQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7R0FDN0I7O21CQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICAgIHN0cmlwID0gdGhpcy5hY2NlcHQoY3VycmVudCk7XG5cbiAgICBpZiAoIXN0cmlwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgX2lzUHJldldoaXRlc3BhY2UgPSBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICAgIF9pc05leHRXaGl0ZXNwYWNlID0gaXNOZXh0V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuXG4gICAgICAgIG9wZW5TdGFuZGFsb25lID0gc3RyaXAub3BlblN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UsXG4gICAgICAgIGNsb3NlU3RhbmRhbG9uZSA9IHN0cmlwLmNsb3NlU3RhbmRhbG9uZSAmJiBfaXNOZXh0V2hpdGVzcGFjZSxcbiAgICAgICAgaW5saW5lU3RhbmRhbG9uZSA9IHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gKC8oWyBcXHRdKyQpLykuZXhlYyhib2R5W2kgLSAxXS5vcmlnaW5hbClbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBvcGVuU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KChjdXJyZW50LnByb2dyYW0gfHwgY3VycmVudC5pbnZlcnNlKS5ib2R5KTtcblxuICAgICAgLy8gU3RyaXAgb3V0IHRoZSBwcmV2aW91cyBjb250ZW50IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHlcbiAgICAgIG9taXRMZWZ0KGJvZHksIGkpO1xuICAgIH1cbiAgICBpZiAoZG9TdGFuZGFsb25lICYmIGNsb3NlU3RhbmRhbG9uZSkge1xuICAgICAgLy8gQWx3YXlzIHN0cmlwIHRoZSBuZXh0IG5vZGVcbiAgICAgIG9taXRSaWdodChib2R5LCBpKTtcblxuICAgICAgb21pdExlZnQoKGN1cnJlbnQuaW52ZXJzZSB8fCBjdXJyZW50LnByb2dyYW0pLmJvZHkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9ncmFtO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkJsb2NrU3RhdGVtZW50ID1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24oYmxvY2spIHtcbiAgdGhpcy5hY2NlcHQoYmxvY2sucHJvZ3JhbSk7XG4gIHRoaXMuYWNjZXB0KGJsb2NrLmludmVyc2UpO1xuXG4gIC8vIEZpbmQgdGhlIGludmVyc2UgcHJvZ3JhbSB0aGF0IGlzIGludm9sZWQgd2l0aCB3aGl0ZXNwYWNlIHN0cmlwcGluZy5cbiAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtIHx8IGJsb2NrLmludmVyc2UsXG4gICAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgICAgZmlyc3RJbnZlcnNlID0gaW52ZXJzZSxcbiAgICAgIGxhc3RJbnZlcnNlID0gaW52ZXJzZTtcblxuICBpZiAoaW52ZXJzZSAmJiBpbnZlcnNlLmNoYWluZWQpIHtcbiAgICBmaXJzdEludmVyc2UgPSBpbnZlcnNlLmJvZHlbMF0ucHJvZ3JhbTtcblxuICAgIC8vIFdhbGsgdGhlIGludmVyc2UgY2hhaW4gdG8gZmluZCB0aGUgbGFzdCBpbnZlcnNlIHRoYXQgaXMgYWN0dWFsbHkgaW4gdGhlIGNoYWluLlxuICAgIHdoaWxlIChsYXN0SW52ZXJzZS5jaGFpbmVkKSB7XG4gICAgICBsYXN0SW52ZXJzZSA9IGxhc3RJbnZlcnNlLmJvZHlbbGFzdEludmVyc2UuYm9keS5sZW5ndGggLSAxXS5wcm9ncmFtO1xuICAgIH1cbiAgfVxuXG4gIGxldCBzdHJpcCA9IHtcbiAgICBvcGVuOiBibG9jay5vcGVuU3RyaXAub3BlbixcbiAgICBjbG9zZTogYmxvY2suY2xvc2VTdHJpcC5jbG9zZSxcblxuICAgIC8vIERldGVybWluZSB0aGUgc3RhbmRhbG9uZSBjYW5kaWFjeS4gQmFzaWNhbGx5IGZsYWcgb3VyIGNvbnRlbnQgYXMgYmVpbmcgcG9zc2libHkgc3RhbmRhbG9uZVxuICAgIC8vIHNvIG91ciBwYXJlbnQgY2FuIGRldGVybWluZSBpZiB3ZSBhY3R1YWxseSBhcmUgc3RhbmRhbG9uZVxuICAgIG9wZW5TdGFuZGFsb25lOiBpc05leHRXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSksXG4gICAgY2xvc2VTdGFuZGFsb25lOiBpc1ByZXZXaGl0ZXNwYWNlKChmaXJzdEludmVyc2UgfHwgcHJvZ3JhbSkuYm9keSlcbiAgfTtcblxuICBpZiAoYmxvY2sub3BlblN0cmlwLmNsb3NlKSB7XG4gICAgb21pdFJpZ2h0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoaW52ZXJzZSkge1xuICAgIGxldCBpbnZlcnNlU3RyaXAgPSBibG9jay5pbnZlcnNlU3RyaXA7XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGludmVyc2VTdHJpcC5jbG9zZSkge1xuICAgICAgb21pdFJpZ2h0KGZpcnN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKGJsb2NrLmNsb3NlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQobGFzdEludmVyc2UuYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBzdGFuZGFsb25lIGVsc2Ugc3RhdG1lbnRzXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlU3RhbmRhbG9uZVxuICAgICAgICAmJiBpc1ByZXZXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSlcbiAgICAgICAgJiYgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSkpIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuTXVzdGFjaGVTdGF0ZW1lbnQgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gbXVzdGFjaGUuc3RyaXA7XG59O1xuXG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCA9XG4gICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuXG5mdW5jdGlvbiBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IGJvZHkubGVuZ3RoO1xuICB9XG5cbiAgLy8gTm9kZXMgdGhhdCBlbmQgd2l0aCBuZXdsaW5lcyBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlIChidXQgYXJlIHNwZWNpYWxcbiAgLy8gY2FzZWQgZm9yIHN0cmlwIG9wZXJhdGlvbnMpXG4gIGxldCBwcmV2ID0gYm9keVtpIC0gMV0sXG4gICAgICBzaWJsaW5nID0gYm9keVtpIC0gMl07XG4gIGlmICghcHJldikge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAocHJldi50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/ICgvXFxyP1xcblxccyo/JC8pIDogKC8oXnxcXHI/XFxuKVxccyo/JC8pKS50ZXN0KHByZXYub3JpZ2luYWwpO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICAgIHNpYmxpbmcgPSBib2R5W2kgKyAyXTtcbiAgaWYgKCFuZXh0KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChuZXh0LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gKC9eXFxzKj9cXHI/XFxuLykgOiAoL15cXHMqPyhcXHI/XFxufCQpLykpLnRlc3QobmV4dC5vcmlnaW5hbCk7XG4gIH1cbn1cblxuLy8gTWFya3MgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiB7e2Zvb319JyAnIHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSBtYXJrZWQgYXMgc3VjaC5cbi8vXG4vLyBJZiBtdWxpdHBsZSBpcyB0cnV0aHkgdGhlbiBhbGwgd2hpdGVzcGFjZSB3aWxsIGJlIHN0cmlwcGVkIG91dCB1bnRpbCBub24td2hpdGVzcGFjZVxuLy8gY29udGVudCBpcyBtZXQuXG5mdW5jdGlvbiBvbWl0UmlnaHQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IDAgOiBpICsgMV07XG4gIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3RhdGVtZW50JyB8fCAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgb3JpZ2luYWwgPSBjdXJyZW50LnZhbHVlO1xuICBjdXJyZW50LnZhbHVlID0gY3VycmVudC52YWx1ZS5yZXBsYWNlKG11bHRpcGxlID8gKC9eXFxzKy8pIDogKC9eWyBcXHRdKlxccj9cXG4/LyksICcnKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlwZSAhPT0gJ0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICghbXVsdGlwbGUgJiYgY3VycmVudC5sZWZ0U3RyaXBwZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gV2Ugb21pdCB0aGUgbGFzdCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5IGFuZCBub3QgcHJlY2VlZGVkIGJ5IGEgbm9uLWNvbnRlbnQgbm9kZS5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/ICgvXFxzKyQvKSA6ICgvWyBcXHRdKyQvKSwgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19
1 define(['exports', './decorators/inline'], function (exports, _decoratorsInline) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.registerDefaultDecorators = registerDefaultDecorators;
6 // istanbul ignore next
7
8 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
9
10 var _registerInline = _interopRequireDefault(_decoratorsInline);
11
12 function registerDefaultDecorators(instance) {
13 _registerInline['default'](instance);
14 }
15 });
16 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFTyxXQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCwrQkFBZSxRQUFRLENBQUMsQ0FBQztHQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ==
1 define(['exports', 'module', '../utils'], function (exports, module, _utils) {
2 'use strict';
3
4 module.exports = function (instance) {
5 instance.registerDecorator('inline', function (fn, props, container, options) {
6 var ret = fn;
7 if (!props.partials) {
8 props.partials = {};
9 ret = function (context, options) {
10 // Create a new partials stack frame prior to exec.
11 var original = container.partials;
12 container.partials = _utils.extend({}, original, props.partials);
13 var ret = fn(context, options);
14 container.partials = original;
15 return ret;
16 };
17 }
18
19 props.partials[options.args[0]] = options.fn;
20
21 return ret;
22 });
23 };
24 });
25 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFFZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFVBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFVBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLGFBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFdBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLGNBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsbUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FWckIsTUFBTSxDQVVzQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxjQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixpQkFBTyxHQUFHLENBQUM7U0FDWixDQUFDO09BQ0g7O0FBRUQsV0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFN0MsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpbmxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckRlY29yYXRvcignaW5saW5lJywgZnVuY3Rpb24oZm4sIHByb3BzLCBjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICBsZXQgcmV0ID0gZm47XG4gICAgaWYgKCFwcm9wcy5wYXJ0aWFscykge1xuICAgICAgcHJvcHMucGFydGlhbHMgPSB7fTtcbiAgICAgIHJldCA9IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuXG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpO1xuICAgICAgICBsZXQgcmV0ID0gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9yaWdpbmFsO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9wcy5wYXJ0aWFsc1tvcHRpb25zLmFyZ3NbMF1dID0gb3B0aW9ucy5mbjtcblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufVxuIl19
1 define(['exports', 'module'], function (exports, module) {
2 'use strict';
3
4 var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
5
6 function Exception(message, node) {
7 var loc = node && node.loc,
8 line = undefined,
9 column = undefined;
10 if (loc) {
11 line = loc.start.line;
12 column = loc.start.column;
13
14 message += ' - ' + line + ':' + column;
15 }
16
17 var tmp = Error.prototype.constructor.call(this, message);
18
19 // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
20 for (var idx = 0; idx < errorProps.length; idx++) {
21 this[errorProps[idx]] = tmp[errorProps[idx]];
22 }
23
24 /* istanbul ignore else */
25 if (Error.captureStackTrace) {
26 Error.captureStackTrace(this, Exception);
27 }
28
29 try {
30 if (loc) {
31 this.lineNumber = line;
32
33 // Work around issue under safari where we can't directly set the column value
34 /* istanbul ignore next */
35 if (Object.defineProperty) {
36 Object.defineProperty(this, 'column', {
37 value: column,
38 enumerable: true
39 });
40 } else {
41 this.column = column;
42 }
43 }
44 } catch (nop) {
45 /* Ignore if the browser is very particular */
46 }
47 }
48
49 Exception.prototype = new Error();
50
51 module.exports = Exception;
52 });
53 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUVuRyxXQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLFFBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRztRQUN0QixJQUFJLFlBQUE7UUFDSixNQUFNLFlBQUEsQ0FBQztBQUNYLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3RCLFlBQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7QUFFMUIsYUFBTyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztLQUN4Qzs7QUFFRCxRQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHMUQsU0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5Qzs7O0FBR0QsUUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDM0IsV0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMxQzs7QUFFRCxRQUFJO0FBQ0YsVUFBSSxHQUFHLEVBQUU7QUFDUCxZQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7OztBQUl2QixZQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDekIsZ0JBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNwQyxpQkFBSyxFQUFFLE1BQU07QUFDYixzQkFBVSxFQUFFLElBQUk7V0FDakIsQ0FBQyxDQUFDO1NBQ0osTUFBTTtBQUNMLGNBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO09BQ0Y7S0FDRixDQUFDLE9BQU8sR0FBRyxFQUFFOztLQUViO0dBQ0Y7O0FBRUQsV0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDOzttQkFFbkIsU0FBUyIsImZpbGUiOiJleGNlcHRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmNvbnN0IGVycm9yUHJvcHMgPSBbJ2Rlc2NyaXB0aW9uJywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnbWVzc2FnZScsICduYW1lJywgJ251bWJlcicsICdzdGFjayddO1xuXG5mdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkge1xuICBsZXQgbG9jID0gbm9kZSAmJiBub2RlLmxvYyxcbiAgICAgIGxpbmUsXG4gICAgICBjb2x1bW47XG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgbGV0IHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChsb2MpIHtcbiAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=
1 define(['exports', './helpers/block-helper-missing', './helpers/each', './helpers/helper-missing', './helpers/if', './helpers/log', './helpers/lookup', './helpers/with'], function (exports, _helpersBlockHelperMissing, _helpersEach, _helpersHelperMissing, _helpersIf, _helpersLog, _helpersLookup, _helpersWith) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.registerDefaultHelpers = registerDefaultHelpers;
6 // istanbul ignore next
7
8 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
9
10 var _registerBlockHelperMissing = _interopRequireDefault(_helpersBlockHelperMissing);
11
12 var _registerEach = _interopRequireDefault(_helpersEach);
13
14 var _registerHelperMissing = _interopRequireDefault(_helpersHelperMissing);
15
16 var _registerIf = _interopRequireDefault(_helpersIf);
17
18 var _registerLog = _interopRequireDefault(_helpersLog);
19
20 var _registerLookup = _interopRequireDefault(_helpersLookup);
21
22 var _registerWith = _interopRequireDefault(_helpersWith);
23
24 function registerDefaultHelpers(instance) {
25 _registerBlockHelperMissing['default'](instance);
26 _registerEach['default'](instance);
27 _registerHelperMissing['default'](instance);
28 _registerIf['default'](instance);
29 _registerLog['default'](instance);
30 _registerLookup['default'](instance);
31 _registerWith['default'](instance);
32 }
33 });
34 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRTyxXQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQywyQ0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsNkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsc0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLDJCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDRCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLCtCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDZCQUFhLFFBQVEsQ0FBQyxDQUFDO0dBQ3hCIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlckVhY2ggZnJvbSAnLi9oZWxwZXJzL2VhY2gnO1xuaW1wb3J0IHJlZ2lzdGVySGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVySWYgZnJvbSAnLi9oZWxwZXJzL2lmJztcbmltcG9ydCByZWdpc3RlckxvZyBmcm9tICcuL2hlbHBlcnMvbG9nJztcbmltcG9ydCByZWdpc3Rlckxvb2t1cCBmcm9tICcuL2hlbHBlcnMvbG9va3VwJztcbmltcG9ydCByZWdpc3RlcldpdGggZnJvbSAnLi9oZWxwZXJzL3dpdGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyRWFjaChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySWYoaW5zdGFuY2UpO1xuICByZWdpc3RlckxvZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9va3VwKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJXaXRoKGluc3RhbmNlKTtcbn1cbiJdfQ==
1 define(['exports', 'module', '../utils'], function (exports, module, _utils) {
2 'use strict';
3
4 module.exports = function (instance) {
5 instance.registerHelper('blockHelperMissing', function (context, options) {
6 var inverse = options.inverse,
7 fn = options.fn;
8
9 if (context === true) {
10 return fn(this);
11 } else if (context === false || context == null) {
12 return inverse(this);
13 } else if (_utils.isArray(context)) {
14 if (context.length > 0) {
15 if (options.ids) {
16 options.ids = [options.name];
17 }
18
19 return instance.helpers.each(context, options);
20 } else {
21 return inverse(this);
22 }
23 } else {
24 if (options.data && options.ids) {
25 var data = _utils.createFrame(options.data);
26 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
27 options = { data: data };
28 }
29
30 return fn(context, options);
31 }
32 });
33 };
34 });
35 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1VBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixVQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsZUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QixNQUFNLElBQUksT0FYeUIsT0FBTyxDQVd4QixPQUFPLENBQUMsRUFBRTtBQUMzQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLGNBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLG1CQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzlCOztBQUVELGlCQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRCxNQUFNO0FBQ0wsaUJBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO09BQ0YsTUFBTTtBQUNMLFlBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLGNBQUksSUFBSSxHQUFHLE9BdkJRLFdBQVcsQ0F1QlAsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0F4Qm5CLGlCQUFpQixDQXdCb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGlCQUFPLEdBQUcsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDeEI7O0FBRUQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheX0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGxldCBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgICBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoY29udGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBsZXQgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMubmFtZSk7XG4gICAgICAgIG9wdGlvbnMgPSB7ZGF0YTogZGF0YX07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xufVxuIl19
1 define(['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) {
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _Exception = _interopRequireDefault(_exception);
9
10 module.exports = function (instance) {
11 instance.registerHelper('each', function (context, options) {
12 if (!options) {
13 throw new _Exception['default']('Must pass iterator to #each');
14 }
15
16 var fn = options.fn,
17 inverse = options.inverse,
18 i = 0,
19 ret = '',
20 data = undefined,
21 contextPath = undefined;
22
23 if (options.data && options.ids) {
24 contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
25 }
26
27 if (_utils.isFunction(context)) {
28 context = context.call(this);
29 }
30
31 if (options.data) {
32 data = _utils.createFrame(options.data);
33 }
34
35 function execIteration(field, index, last) {
36 if (data) {
37 data.key = field;
38 data.index = index;
39 data.first = index === 0;
40 data.last = !!last;
41
42 if (contextPath) {
43 data.contextPath = contextPath + field;
44 }
45 }
46
47 ret = ret + fn(context[field], {
48 data: data,
49 blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
50 });
51 }
52
53 if (context && typeof context === 'object') {
54 if (_utils.isArray(context)) {
55 for (var j = context.length; i < j; i++) {
56 if (i in context) {
57 execIteration(i, i, i === context.length - 1);
58 }
59 }
60 } else {
61 var priorKey = undefined;
62
63 for (var key in context) {
64 if (context.hasOwnProperty(key)) {
65 // We're running the iterations one step out of sync so we can detect
66 // the last iteration without have to scan the object twice and create
67 // an itermediate keys array.
68 if (priorKey !== undefined) {
69 execIteration(priorKey, i - 1);
70 }
71 priorKey = key;
72 i++;
73 }
74 }
75 if (priorKey !== undefined) {
76 execIteration(priorKey, i - 1, true);
77 }
78 }
79 }
80
81 if (i === 0) {
82 ret = inverse(this);
83 }
84
85 return ret;
86 });
87 };
88 });
89 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7bUJBR2UsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixjQUFNLDBCQUFjLDZCQUE2QixDQUFDLENBQUM7T0FDcEQ7O0FBRUQsVUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7VUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87VUFDekIsQ0FBQyxHQUFHLENBQUM7VUFDTCxHQUFHLEdBQUcsRUFBRTtVQUNSLElBQUksWUFBQTtVQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixtQkFBVyxHQUFHLE9BakJaLGlCQUFpQixDQWlCYSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ2pGOztBQUVELFVBQUksT0FwQnNELFVBQVUsQ0FvQnJELE9BQU8sQ0FBQyxFQUFFO0FBQUUsZUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FBRTs7QUFFMUQsVUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLFlBQUksR0FBRyxPQXZCMkIsV0FBVyxDQXVCMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xDOztBQUVELGVBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFlBQUksSUFBSSxFQUFFO0FBQ1IsY0FBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsY0FBSSxXQUFXLEVBQUU7QUFDZixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1dBQ3hDO1NBQ0Y7O0FBRUQsV0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLGNBQUksRUFBRSxJQUFJO0FBQ1YscUJBQVcsRUFBRSxPQXhDTSxXQUFXLENBd0NMLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvRSxDQUFDLENBQUM7T0FDSjs7QUFFRCxVQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDMUMsWUFBSSxPQTdDMkMsT0FBTyxDQTZDMUMsT0FBTyxDQUFDLEVBQUU7QUFDcEIsZUFBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsZ0JBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRTtBQUNoQiwyQkFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7V0FDRjtTQUNGLE1BQU07QUFDTCxjQUFJLFFBQVEsWUFBQSxDQUFDOztBQUViLGVBQUssSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO0FBQ3ZCLGdCQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0Isa0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiw2QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7ZUFDaEM7QUFDRCxzQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGVBQUMsRUFBRSxDQUFDO2FBQ0w7V0FDRjtBQUNELGNBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix5QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3RDO1NBQ0Y7T0FDRjs7QUFFRCxVQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxXQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3JCOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
1 define(['exports', 'module', '../exception'], function (exports, module, _exception) {
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _Exception = _interopRequireDefault(_exception);
9
10 module.exports = function (instance) {
11 instance.registerHelper('helperMissing', function () /* [args, ]options */{
12 if (arguments.length === 1) {
13 // A missing field in a {{foo}} construct.
14 return undefined;
15 } else {
16 // Someone is actually trying to call something, blow up.
17 throw new _Exception['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
18 }
19 });
20 };
21 });
22 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGlDQUFnQztBQUN2RSxVQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUUxQixlQUFPLFNBQVMsQ0FBQztPQUNsQixNQUFNOztBQUVMLGNBQU0sMEJBQWMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ3ZGO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiaGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oLyogW2FyZ3MsIF1vcHRpb25zICovKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
1 define(['exports', 'module', '../utils'], function (exports, module, _utils) {
2 'use strict';
3
4 module.exports = function (instance) {
5 instance.registerHelper('if', function (conditional, options) {
6 if (_utils.isFunction(conditional)) {
7 conditional = conditional.call(this);
8 }
9
10 // Default behavior is to render the positive path if the value is truthy and not empty.
11 // The `includeZero` option may be set to treat the condtional as purely not empty based on the
12 // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
13 if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
14 return options.inverse(this);
15 } else {
16 return options.fn(this);
17 }
18 });
19
20 instance.registerHelper('unless', function (conditional, options) {
21 return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
22 });
23 };
24 });
25 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxVQUFJLE9BSlMsVUFBVSxDQUlSLFdBQVcsQ0FBQyxFQUFFO0FBQUUsbUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7Ozs7O0FBS3RFLFVBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLE9BVC9DLE9BQU8sQ0FTZ0QsV0FBVyxDQUFDLEVBQUU7QUFDdkUsZUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDLENBQUM7O0FBRUgsWUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELGFBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztLQUN2SCxDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ==
1 define(['exports', 'module'], function (exports, module) {
2 'use strict';
3
4 module.exports = function (instance) {
5 instance.registerHelper('log', function () /* message, options */{
6 var args = [undefined],
7 options = arguments[arguments.length - 1];
8 for (var i = 0; i < arguments.length - 1; i++) {
9 args.push(arguments[i]);
10 }
11
12 var level = 1;
13 if (options.hash.level != null) {
14 level = options.hash.level;
15 } else if (options.data && options.data.level != null) {
16 level = options.data.level;
17 }
18 args[0] = level;
19
20 instance.log.apply(instance, args);
21 });
22 };
23 });
24 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQ0FBaUM7QUFDOUQsVUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7VUFDbEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFVBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLGFBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDckQsYUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzVCO0FBQ0QsVUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFaEIsY0FBUSxDQUFDLEdBQUcsTUFBQSxDQUFaLFFBQVEsRUFBUyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJsb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24oLyogbWVzc2FnZSwgb3B0aW9ucyAqLykge1xuICAgIGxldCBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgbGV0IGxldmVsID0gMTtcbiAgICBpZiAob3B0aW9ucy5oYXNoLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5oYXNoLmxldmVsO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuZGF0YS5sZXZlbDtcbiAgICB9XG4gICAgYXJnc1swXSA9IGxldmVsO1xuXG4gICAgaW5zdGFuY2UubG9nKC4uLiBhcmdzKTtcbiAgfSk7XG59XG4iXX0=
1 define(['exports', 'module'], function (exports, module) {
2 'use strict';
3
4 module.exports = function (instance) {
5 instance.registerHelper('lookup', function (obj, field) {
6 return obj && obj[field];
7 });
8 };
9 });
10 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDckQsYUFBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzFCLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmpbZmllbGRdO1xuICB9KTtcbn1cbiJdfQ==
1 define(['exports', 'module', '../utils'], function (exports, module, _utils) {
2 'use strict';
3
4 module.exports = function (instance) {
5 instance.registerHelper('with', function (context, options) {
6 if (_utils.isFunction(context)) {
7 context = context.call(this);
8 }
9
10 var fn = options.fn;
11
12 if (!_utils.isEmpty(context)) {
13 var data = options.data;
14 if (options.data && options.ids) {
15 data = _utils.createFrame(options.data);
16 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
17 }
18
19 return fn(context, {
20 data: data,
21 blockParams: _utils.blockParams([context], [data && data.contextPath])
22 });
23 } else {
24 return options.inverse(this);
25 }
26 });
27 };
28 });
29 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7bUJBRWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksT0FKc0QsVUFBVSxDQUlyRCxPQUFPLENBQUMsRUFBRTtBQUFFLGVBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7O0FBRTFELFVBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7O0FBRXBCLFVBQUksQ0FBQyxPQVI0QyxPQUFPLENBUTNDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JCLFlBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsY0FBSSxHQUFHLE9BWHlCLFdBQVcsQ0FXeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0FabkIsaUJBQWlCLENBWW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRjs7QUFFRCxlQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsY0FBSSxFQUFFLElBQUk7QUFDVixxQkFBVyxFQUFFLE9BakJNLFdBQVcsQ0FpQkwsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEUsQ0FBQyxDQUFDO09BQ0osTUFBTTtBQUNMLGVBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QjtLQUNGLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
1 define(['exports', 'module', './utils'], function (exports, module, _utils) {
2 'use strict';
3
4 var logger = {
5 methodMap: ['debug', 'info', 'warn', 'error'],
6 level: 'info',
7
8 // Maps a given level value to the `methodMap` indexes above.
9 lookupLevel: function lookupLevel(level) {
10 if (typeof level === 'string') {
11 var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
12 if (levelMap >= 0) {
13 level = levelMap;
14 } else {
15 level = parseInt(level, 10);
16 }
17 }
18
19 return level;
20 },
21
22 // Can be overridden in the host environment
23 log: function log(level) {
24 level = logger.lookupLevel(level);
25
26 if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
27 var method = logger.methodMap[level];
28 if (!console[method]) {
29 // eslint-disable-line no-console
30 method = 'log';
31 }
32
33 for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
34 message[_key - 1] = arguments[_key];
35 }
36
37 console[method].apply(console, message); // eslint-disable-line no-console
38 }
39 }
40 };
41
42 module.exports = logger;
43 });
44 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFJLE1BQU0sR0FBRztBQUNYLGFBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxTQUFLLEVBQUUsTUFBTTs7O0FBR2IsZUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixVQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixZQUFJLFFBQVEsR0FBRyxPQVRiLE9BQU8sQ0FTYyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNqQixlQUFLLEdBQUcsUUFBUSxDQUFDO1NBQ2xCLE1BQU07QUFDTCxlQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtPQUNGOztBQUVELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7OztBQUdELE9BQUcsRUFBRSxhQUFTLEtBQUssRUFBYztBQUMvQixXQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsVUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFO0FBQy9FLFlBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFDcEIsZ0JBQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7OzBDQVBtQixPQUFPO0FBQVAsaUJBQU87OztBQVEzQixlQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7R0FDRixDQUFDOzttQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==
1 define(['exports', 'module'], function (exports, module) {
2 /* global window */
3 'use strict';
4
5 module.exports = function (Handlebars) {
6 /* istanbul ignore next */
7 var root = typeof global !== 'undefined' ? global : window,
8 $Handlebars = root.Handlebars;
9 /* istanbul ignore next */
10 Handlebars.noConflict = function () {
11 if (root.Handlebars === Handlebars) {
12 root.Handlebars = $Handlebars;
13 }
14 return Handlebars;
15 };
16 };
17 });
18 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7bUJBQ2UsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLFFBQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtRQUN0RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFbEMsY0FBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFVBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsWUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7T0FDL0I7QUFDRCxhQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0dBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgICAkSGFuZGxlYmFycyA9IHJvb3QuSGFuZGxlYmFycztcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHJvb3QuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgcm9vdC5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19
1 define(['exports', './utils', './exception', './base'], function (exports, _utils, _exception, _base) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.checkRevision = checkRevision;
6 exports.template = template;
7 exports.wrapProgram = wrapProgram;
8 exports.resolvePartial = resolvePartial;
9 exports.invokePartial = invokePartial;
10 exports.noop = noop;
11 // istanbul ignore next
12
13 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
14
15 var _Exception = _interopRequireDefault(_exception);
16
17 function checkRevision(compilerInfo) {
18 var compilerRevision = compilerInfo && compilerInfo[0] || 1,
19 currentRevision = _base.COMPILER_REVISION;
20
21 if (compilerRevision !== currentRevision) {
22 if (compilerRevision < currentRevision) {
23 var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
24 compilerVersions = _base.REVISION_CHANGES[compilerRevision];
25 throw new _Exception['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
26 } else {
27 // Use the embedded version info since the runtime doesn't know about this revision yet
28 throw new _Exception['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
29 }
30 }
31 }
32
33 function template(templateSpec, env) {
34 /* istanbul ignore next */
35 if (!env) {
36 throw new _Exception['default']('No environment passed to template');
37 }
38 if (!templateSpec || !templateSpec.main) {
39 throw new _Exception['default']('Unknown template object: ' + typeof templateSpec);
40 }
41
42 templateSpec.main.decorator = templateSpec.main_d;
43
44 // Note: Using env.VM references rather than local var references throughout this section to allow
45 // for external users to override these as psuedo-supported APIs.
46 env.VM.checkRevision(templateSpec.compiler);
47
48 function invokePartialWrapper(partial, context, options) {
49 if (options.hash) {
50 context = _utils.extend({}, context, options.hash);
51 if (options.ids) {
52 options.ids[0] = true;
53 }
54 }
55
56 partial = env.VM.resolvePartial.call(this, partial, context, options);
57 var result = env.VM.invokePartial.call(this, partial, context, options);
58
59 if (result == null && env.compile) {
60 options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
61 result = options.partials[options.name](context, options);
62 }
63 if (result != null) {
64 if (options.indent) {
65 var lines = result.split('\n');
66 for (var i = 0, l = lines.length; i < l; i++) {
67 if (!lines[i] && i + 1 === l) {
68 break;
69 }
70
71 lines[i] = options.indent + lines[i];
72 }
73 result = lines.join('\n');
74 }
75 return result;
76 } else {
77 throw new _Exception['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
78 }
79 }
80
81 // Just add water
82 var container = {
83 strict: function strict(obj, name) {
84 if (!(name in obj)) {
85 throw new _Exception['default']('"' + name + '" not defined in ' + obj);
86 }
87 return obj[name];
88 },
89 lookup: function lookup(depths, name) {
90 var len = depths.length;
91 for (var i = 0; i < len; i++) {
92 if (depths[i] && depths[i][name] != null) {
93 return depths[i][name];
94 }
95 }
96 },
97 lambda: function lambda(current, context) {
98 return typeof current === 'function' ? current.call(context) : current;
99 },
100
101 escapeExpression: _utils.escapeExpression,
102 invokePartial: invokePartialWrapper,
103
104 fn: function fn(i) {
105 var ret = templateSpec[i];
106 ret.decorator = templateSpec[i + '_d'];
107 return ret;
108 },
109
110 programs: [],
111 program: function program(i, data, declaredBlockParams, blockParams, depths) {
112 var programWrapper = this.programs[i],
113 fn = this.fn(i);
114 if (data || depths || blockParams || declaredBlockParams) {
115 programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
116 } else if (!programWrapper) {
117 programWrapper = this.programs[i] = wrapProgram(this, i, fn);
118 }
119 return programWrapper;
120 },
121
122 data: function data(value, depth) {
123 while (value && depth--) {
124 value = value._parent;
125 }
126 return value;
127 },
128 merge: function merge(param, common) {
129 var obj = param || common;
130
131 if (param && common && param !== common) {
132 obj = _utils.extend({}, common, param);
133 }
134
135 return obj;
136 },
137 // An empty object to use as replacement for null-contexts
138 nullContext: Object.seal({}),
139
140 noop: env.VM.noop,
141 compilerInfo: templateSpec.compiler
142 };
143
144 function ret(context) {
145 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
146
147 var data = options.data;
148
149 ret._setup(options);
150 if (!options.partial && templateSpec.useData) {
151 data = initData(context, data);
152 }
153 var depths = undefined,
154 blockParams = templateSpec.useBlockParams ? [] : undefined;
155 if (templateSpec.useDepths) {
156 if (options.depths) {
157 depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
158 } else {
159 depths = [context];
160 }
161 }
162
163 function main(context /*, options*/) {
164 return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
165 }
166 main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
167 return main(context, options);
168 }
169 ret.isTop = true;
170
171 ret._setup = function (options) {
172 if (!options.partial) {
173 container.helpers = container.merge(options.helpers, env.helpers);
174
175 if (templateSpec.usePartial) {
176 container.partials = container.merge(options.partials, env.partials);
177 }
178 if (templateSpec.usePartial || templateSpec.useDecorators) {
179 container.decorators = container.merge(options.decorators, env.decorators);
180 }
181 } else {
182 container.helpers = options.helpers;
183 container.partials = options.partials;
184 container.decorators = options.decorators;
185 }
186 };
187
188 ret._child = function (i, data, blockParams, depths) {
189 if (templateSpec.useBlockParams && !blockParams) {
190 throw new _Exception['default']('must pass block params');
191 }
192 if (templateSpec.useDepths && !depths) {
193 throw new _Exception['default']('must pass parent depths');
194 }
195
196 return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
197 };
198 return ret;
199 }
200
201 function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
202 function prog(context) {
203 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
204
205 var currentDepths = depths;
206 if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
207 currentDepths = [context].concat(depths);
208 }
209
210 return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
211 }
212
213 prog = executeDecorators(fn, prog, container, depths, data, blockParams);
214
215 prog.program = i;
216 prog.depth = depths ? depths.length : 0;
217 prog.blockParams = declaredBlockParams || 0;
218 return prog;
219 }
220
221 function resolvePartial(partial, context, options) {
222 if (!partial) {
223 if (options.name === '@partial-block') {
224 partial = options.data['partial-block'];
225 } else {
226 partial = options.partials[options.name];
227 }
228 } else if (!partial.call && !options.name) {
229 // This is a dynamic partial that returned a string
230 options.name = partial;
231 partial = options.partials[partial];
232 }
233 return partial;
234 }
235
236 function invokePartial(partial, context, options) {
237 // Use the current closure context to save the partial-block if this partial
238 var currentPartialBlock = options.data && options.data['partial-block'];
239 options.partial = true;
240 if (options.ids) {
241 options.data.contextPath = options.ids[0] || options.data.contextPath;
242 }
243
244 var partialBlock = undefined;
245 if (options.fn && options.fn !== noop) {
246 (function () {
247 options.data = _base.createFrame(options.data);
248 // Wrapper function to get access to currentPartialBlock from the closure
249 var fn = options.fn;
250 partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
251 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
252
253 // Restore the partial-block from the closure for the execution of the block
254 // i.e. the part inside the block of the partial call.
255 options.data = _base.createFrame(options.data);
256 options.data['partial-block'] = currentPartialBlock;
257 return fn(context, options);
258 };
259 if (fn.partials) {
260 options.partials = _utils.extend({}, options.partials, fn.partials);
261 }
262 })();
263 }
264
265 if (partial === undefined && partialBlock) {
266 partial = partialBlock;
267 }
268
269 if (partial === undefined) {
270 throw new _Exception['default']('The partial ' + options.name + ' could not be found');
271 } else if (partial instanceof Function) {
272 return partial(context, options);
273 }
274 }
275
276 function noop() {
277 return '';
278 }
279
280 function initData(context, data) {
281 if (!data || !('root' in data)) {
282 data = data ? _base.createFrame(data) : {};
283 data.root = context;
284 }
285 return data;
286 }
287
288 function executeDecorators(fn, prog, container, depths, data, blockParams) {
289 if (fn.decorator) {
290 var props = {};
291 prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
292 _utils.extend(prog, props);
293 }
294 return prog;
295 }
296 });
297 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUlPLFdBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxRQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxlQUFlLFNBSmQsaUJBQWlCLEFBSWlCLENBQUM7O0FBRTFDLFFBQUksZ0JBQWdCLEtBQUssZUFBZSxFQUFFO0FBQ3hDLFVBQUksZ0JBQWdCLEdBQUcsZUFBZSxFQUFFO0FBQ3RDLFlBQU0sZUFBZSxHQUFHLE1BUkYsZ0JBQWdCLENBUUcsZUFBZSxDQUFDO1lBQ25ELGdCQUFnQixHQUFHLE1BVEgsZ0JBQWdCLENBU0ksZ0JBQWdCLENBQUMsQ0FBQztBQUM1RCxjQUFNLDBCQUFjLHlGQUF5RixHQUN2RyxxREFBcUQsR0FBRyxlQUFlLEdBQUcsbURBQW1ELEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDaEssTUFBTTs7QUFFTCxjQUFNLDBCQUFjLHdGQUF3RixHQUN0RyxpREFBaUQsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDbkY7S0FDRjtHQUNGOztBQUVNLFdBQVMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7O0FBRTFDLFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixZQUFNLDBCQUFjLG1DQUFtQyxDQUFDLENBQUM7S0FDMUQ7QUFDRCxRQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUN2QyxZQUFNLDBCQUFjLDJCQUEyQixHQUFHLE9BQU8sWUFBWSxDQUFDLENBQUM7S0FDeEU7O0FBRUQsZ0JBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7QUFJbEQsT0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENB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LENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVGLGFBQU0sTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMzQjtBQUNELFdBQU8sSUFBSSxDQUFDO0dBQ2IiLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyBDT01QSUxFUl9SRVZJU0lPTiwgUkVWSVNJT05fQ0hBTkdFUywgY3JlYXRlRnJhbWUgfSBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IGNvbXBpbGVySW5mbyAmJiBjb21waWxlckluZm9bMF0gfHwgMSxcbiAgICAgICAgY3VycmVudFJldmlzaW9uID0gQ09NUElMRVJfUkVWSVNJT047XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gIT09IGN1cnJlbnRSZXZpc2lvbikge1xuICAgIGlmIChjb21waWxlclJldmlzaW9uIDwgY3VycmVudFJldmlzaW9uKSB7XG4gICAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICAgICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKCcgKyBydW50aW1lVmVyc2lvbnMgKyAnKSBvciBkb3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCcgKyBjb21waWxlclZlcnNpb25zICsgJykuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSB0aGUgZW1iZWRkZWQgdmVyc2lvbiBpbmZvIHNpbmNlIHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHJldmlzaW9uIHlldFxuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgKyBjb21waWxlckluZm9bMV0gKyAnKS4nKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0ZW1wbGF0ZSBvYmplY3Q6ICcgKyB0eXBlb2YgdGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIHRlbXBsYXRlU3BlYy5tYWluLmRlY29yYXRvciA9IHRlbXBsYXRlU3BlYy5tYWluX2Q7XG5cbiAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9jYWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3dcbiAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRoZXNlIGFzIHBzdWVkby1zdXBwb3J0ZWQgQVBJcy5cbiAgZW52LlZNLmNoZWNrUmV2aXNpb24odGVtcGxhdGVTcGVjLmNvbXBpbGVyKTtcblxuICBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsV3JhcHBlcihwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgICAgY29udGV4dCA9IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTtcbiAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIGxldCByZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShwYXJ0aWFsLCB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLCBlbnYpO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLmluZGVudCkge1xuICAgICAgICBsZXQgbGluZXMgPSByZXN1bHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmICghbGluZXNbaV0gJiYgaSArIDEgPT09IGwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpbmVzW2ldID0gb3B0aW9ucy5pbmRlbnQgKyBsaW5lc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICBsZXQgY29udGFpbmVyID0ge1xuICAgIHN0cmljdDogZnVuY3Rpb24ob2JqLCBuYW1lKSB7XG4gICAgICBpZiAoIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpbbmFtZV07XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGRlcHRoc1tpXSAmJiBkZXB0aHNbaV1bbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBkZXB0aHNbaV1bbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbWJkYTogZnVuY3Rpb24oY3VycmVudCwgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjdXJyZW50ID09PSAnZnVuY3Rpb24nID8gY3VycmVudC5jYWxsKGNvbnRleHQpIDogY3VycmVudDtcbiAgICB9LFxuXG4gICAgZXNjYXBlRXhwcmVzc2lvbjogVXRpbHMuZXNjYXBlRXhwcmVzc2lvbixcbiAgICBpbnZva2VQYXJ0aWFsOiBpbnZva2VQYXJ0aWFsV3JhcHBlcixcblxuICAgIGZuOiBmdW5jdGlvbihpKSB7XG4gICAgICBsZXQgcmV0ID0gdGVtcGxhdGVTcGVjW2ldO1xuICAgICAgcmV0LmRlY29yYXRvciA9IHRlbXBsYXRlU3BlY1tpICsgJ19kJ107XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG5cbiAgICBwcm9ncmFtczogW10sXG4gICAgcHJvZ3JhbTogZnVuY3Rpb24oaSwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgICAgbGV0IHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSxcbiAgICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZTogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiAocGFyYW0gIT09IGNvbW1vbikpIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICAgIGJsb2NrUGFyYW1zID0gdGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRlcHRocykge1xuICAgICAgICBkZXB0aHMgPSBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gJycgKyB0ZW1wbGF0ZVNwZWMubWFpbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIH1cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuaGVscGVycywgZW52LmhlbHBlcnMpO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMucGFydGlhbHMsIGVudi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5kZWNvcmF0b3JzLCBlbnYuZGVjb3JhdG9ycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgIH1cbiAgfTtcblxuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgJiYgIWJsb2NrUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgYmxvY2sgcGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzICYmICFkZXB0aHMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoZGVwdGhzICYmIGNvbnRleHQgIT0gZGVwdGhzWzBdICYmICEoY29udGV4dCA9PT0gY29udGFpbmVyLm51bGxDb250ZXh0ICYmIGRlcHRoc1swXSA9PT0gbnVsbCkpIHtcbiAgICAgIGN1cnJlbnREZXB0aHMgPSBbY29udGV4dF0uY29uY2F0KGRlcHRocyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGNvbnRhaW5lcixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY29udGFpbmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgb3B0aW9ucy5kYXRhIHx8IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgICBjdXJyZW50RGVwdGhzKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgLy8gVXNlIHRoZSBjdXJyZW50IGNsb3N1cmUgY29udGV4dCB0byBzYXZlIHRoZSBwYXJ0aWFsLWJsb2NrIGlmIHRoaXMgcGFydGlhbFxuICBjb25zdCBjdXJyZW50UGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAvLyBXcmFwcGVyIGZ1bmN0aW9uIHRvIGdldCBhY2Nlc3MgdG8gY3VycmVudFBhcnRpYWxCbG9jayBmcm9tIHRoZSBjbG9zdXJlXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG5cbiAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcnRpYWwtYmxvY2sgZnJvbSB0aGUgY2xvc3VyZSBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2tcbiAgICAgIC8vIGkuZS4gdGhlIHBhcnQgaW5zaWRlIHRoZSBibG9jayBvZiB0aGUgcGFydGlhbCBjYWxsLlxuICAgICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gY3VycmVudFBhcnRpYWxCbG9jaztcbiAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGlmIChmbi5wYXJ0aWFscykge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFscyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucy5wYXJ0aWFscywgZm4ucGFydGlhbHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7XG4gICAgcGFydGlhbCA9IHBhcnRpYWxCbG9jaztcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgZm91bmQnKTtcbiAgfSBlbHNlIGlmIChwYXJ0aWFsIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gcGFydGlhbChjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHsgcmV0dXJuICcnOyB9XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IocHJvZywgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGhzICYmIGRlcHRoc1swXSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvZztcbn1cbiJdfQ==
1 define(['exports', 'module'], function (exports, module) {
2 // Build out our basic SafeString type
3 'use strict';
4
5 function SafeString(string) {
6 this.string = string;
7 }
8
9 SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
10 return '' + this.string;
11 };
12
13 module.exports = SafeString;
14 });
15 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxXQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsUUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDdEI7O0FBRUQsWUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxXQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0dBQ3pCLENBQUM7O21CQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==
1 define(['exports'], function (exports) {
2 'use strict';
3
4 exports.__esModule = true;
5 exports.extend = extend;
6 exports.indexOf = indexOf;
7 exports.escapeExpression = escapeExpression;
8 exports.isEmpty = isEmpty;
9 exports.createFrame = createFrame;
10 exports.blockParams = blockParams;
11 exports.appendContextPath = appendContextPath;
12 var escape = {
13 '&': '&amp;',
14 '<': '&lt;',
15 '>': '&gt;',
16 '"': '&quot;',
17 "'": '&#x27;',
18 '`': '&#x60;',
19 '=': '&#x3D;'
20 };
21
22 var badChars = /[&<>"'`=]/g,
23 possible = /[&<>"'`=]/;
24
25 function escapeChar(chr) {
26 return escape[chr];
27 }
28
29 function extend(obj /* , ...source */) {
30 for (var i = 1; i < arguments.length; i++) {
31 for (var key in arguments[i]) {
32 if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
33 obj[key] = arguments[i][key];
34 }
35 }
36 }
37
38 return obj;
39 }
40
41 var toString = Object.prototype.toString;
42
43 exports.toString = toString;
44 // Sourced from lodash
45 // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
46 /* eslint-disable func-style */
47 var isFunction = function isFunction(value) {
48 return typeof value === 'function';
49 };
50 // fallback for older versions of Chrome and Safari
51 /* istanbul ignore next */
52 if (isFunction(/x/)) {
53 exports.isFunction = isFunction = function (value) {
54 return typeof value === 'function' && toString.call(value) === '[object Function]';
55 };
56 }
57 exports.isFunction = isFunction;
58
59 /* eslint-enable func-style */
60
61 /* istanbul ignore next */
62 var isArray = Array.isArray || function (value) {
63 return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
64 };
65
66 exports.isArray = isArray;
67 // Older IE versions do not directly support indexOf so we must implement our own, sadly.
68
69 function indexOf(array, value) {
70 for (var i = 0, len = array.length; i < len; i++) {
71 if (array[i] === value) {
72 return i;
73 }
74 }
75 return -1;
76 }
77
78 function escapeExpression(string) {
79 if (typeof string !== 'string') {
80 // don't escape SafeStrings, since they're already safe
81 if (string && string.toHTML) {
82 return string.toHTML();
83 } else if (string == null) {
84 return '';
85 } else if (!string) {
86 return string + '';
87 }
88
89 // Force a string conversion as this will be done by the append regardless and
90 // the regex test will do this transparently behind the scenes, causing issues if
91 // an object's to string has escaped characters in it.
92 string = '' + string;
93 }
94
95 if (!possible.test(string)) {
96 return string;
97 }
98 return string.replace(badChars, escapeChar);
99 }
100
101 function isEmpty(value) {
102 if (!value && value !== 0) {
103 return true;
104 } else if (isArray(value) && value.length === 0) {
105 return true;
106 } else {
107 return false;
108 }
109 }
110
111 function createFrame(object) {
112 var frame = extend({}, object);
113 frame._parent = object;
114 return frame;
115 }
116
117 function blockParams(params, ids) {
118 params.path = ids;
119 return params;
120 }
121
122 function appendContextPath(contextPath, id) {
123 return (contextPath ? contextPath + '.' : '') + id;
124 }
125 });
126 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUc7QUFDYixPQUFHLEVBQUUsT0FBTztBQUNaLE9BQUcsRUFBRSxNQUFNO0FBQ1gsT0FBRyxFQUFFLE1BQU07QUFDWCxPQUFHLEVBQUUsUUFBUTtBQUNiLE9BQUcsRUFBRSxRQUFRO0FBQ2IsT0FBRyxFQUFFLFFBQVE7QUFDYixPQUFHLEVBQUUsUUFBUTtHQUNkLENBQUM7O0FBRUYsTUFBTSxRQUFRLEdBQUcsWUFBWTtNQUN2QixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUU3QixXQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsV0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEI7O0FBRU0sV0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBbUI7QUFDM0MsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsV0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsWUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELGFBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7T0FDRjtLQUNGOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1o7O0FBRU0sTUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxNQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsV0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDcEMsQ0FBQzs7O0FBR0YsTUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsWUFJTSxVQUFVLEdBSmhCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixhQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0tBQ3BGLENBQUM7R0FDSDtVQUNPLFVBQVUsR0FBVixVQUFVOzs7OztBQUlYLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBUyxLQUFLLEVBQUU7QUFDdEQsV0FBTyxBQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7R0FDakcsQ0FBQzs7Ozs7QUFHSyxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGVBQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRjtBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUM7R0FDWDs7QUFHTSxXQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxRQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsVUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixlQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztPQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixlQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7T0FDcEI7Ozs7O0FBS0QsWUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFBRSxhQUFPLE1BQU0sQ0FBQztLQUFFO0FBQzlDLFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFNBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRU0sV0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxVQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVNLFdBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxXQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0dBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nLFxuICAgICAgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChvYmovKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGxldCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFNvdXJjZWQgZnJvbSBsb2Rhc2hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHRcbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtc3R5bGUgKi9cbmxldCBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG59XG5leHBvcnQge2lzRnVuY3Rpb259O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG4vLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LlxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJheVtpXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHsgcmV0dXJuIHN0cmluZzsgfVxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcmFtZShvYmplY3QpIHtcbiAgbGV0IGZyYW1lID0gZXh0ZW5kKHt9LCBvYmplY3QpO1xuICBmcmFtZS5fcGFyZW50ID0gb2JqZWN0O1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICBwYXJhbXMucGF0aCA9IGlkcztcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbiJdfQ==
1 define(['exports', 'async', 'fs', './handlebars', 'path', 'source-map', 'uglify-js'], function (exports, _async, _fs, _handlebars, _path, _sourceMap, _uglifyJs) {
2 /* eslint-disable no-console */
3 'use strict';
4
5 // istanbul ignore next
6
7 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
8
9 var _Async = _interopRequireDefault(_async);
10
11 var _fs2 = _interopRequireDefault(_fs);
12
13 var _uglify = _interopRequireDefault(_uglifyJs);
14
15 module.exports.loadTemplates = function (opts, callback) {
16 loadStrings(opts, function (err, strings) {
17 if (err) {
18 callback(err);
19 } else {
20 loadFiles(opts, function (err, files) {
21 if (err) {
22 callback(err);
23 } else {
24 opts.templates = strings.concat(files);
25 callback(undefined, opts);
26 }
27 });
28 }
29 });
30 };
31
32 function loadStrings(opts, callback) {
33 var strings = arrayCast(opts.string),
34 names = arrayCast(opts.name);
35
36 if (names.length !== strings.length && strings.length > 1) {
37 return callback(new _handlebars.Exception('Number of names did not match the number of string inputs'));
38 }
39
40 _Async['default'].map(strings, function (string, callback) {
41 if (string !== '-') {
42 callback(undefined, string);
43 } else {
44 (function () {
45 // Load from stdin
46 var buffer = '';
47 process.stdin.setEncoding('utf8');
48
49 process.stdin.on('data', function (chunk) {
50 buffer += chunk;
51 });
52 process.stdin.on('end', function () {
53 callback(undefined, buffer);
54 });
55 })();
56 }
57 }, function (err, strings) {
58 strings = strings.map(function (string, index) {
59 return {
60 name: names[index],
61 path: names[index],
62 source: string
63 };
64 });
65 callback(err, strings);
66 });
67 }
68
69 function loadFiles(opts, callback) {
70 // Build file extension pattern
71 var extension = (opts.extension || 'handlebars').replace(/[\\^$*+?.():=!|{}\-\[\]]/g, function (arg) {
72 return '\\' + arg;
73 });
74 extension = new RegExp('\\.' + extension + '$');
75
76 var ret = [],
77 queue = (opts.files || []).map(function (template) {
78 return { template: template, root: opts.root };
79 });
80 _Async['default'].whilst(function () {
81 return queue.length;
82 }, function (callback) {
83 var _queue$shift = queue.shift();
84
85 var path = _queue$shift.template;
86 var root = _queue$shift.root;
87
88 _fs2['default'].stat(path, function (err, stat) {
89 if (err) {
90 return callback(new _handlebars.Exception('Unable to open template file "' + path + '"'));
91 }
92
93 if (stat.isDirectory()) {
94 opts.hasDirectory = true;
95
96 _fs2['default'].readdir(path, function (err, children) {
97 /* istanbul ignore next : Race condition that being too lazy to test */
98 if (err) {
99 return callback(err);
100 }
101 children.forEach(function (file) {
102 var childPath = path + '/' + file;
103
104 if (extension.test(childPath) || _fs2['default'].statSync(childPath).isDirectory()) {
105 queue.push({ template: childPath, root: root || path });
106 }
107 });
108
109 callback();
110 });
111 } else {
112 _fs2['default'].readFile(path, 'utf8', function (err, data) {
113 /* istanbul ignore next : Race condition that being too lazy to test */
114 if (err) {
115 return callback(err);
116 }
117
118 if (opts.bom && data.indexOf('') === 0) {
119 data = data.substring(1);
120 }
121
122 // Clean the template name
123 var name = path;
124 if (!root) {
125 name = _path.basename(name);
126 } else if (name.indexOf(root) === 0) {
127 name = name.substring(root.length + 1);
128 }
129 name = name.replace(extension, '');
130
131 ret.push({
132 path: path,
133 name: name,
134 source: data
135 });
136
137 callback();
138 });
139 }
140 });
141 }, function (err) {
142 if (err) {
143 callback(err);
144 } else {
145 callback(undefined, ret);
146 }
147 });
148 }
149
150 module.exports.cli = function (opts) {
151 if (opts.version) {
152 console.log(_handlebars.VERSION);
153 return;
154 }
155
156 if (!opts.templates.length && !opts.hasDirectory) {
157 throw new _handlebars.Exception('Must define at least one template or directory.');
158 }
159
160 if (opts.simple && opts.min) {
161 throw new _handlebars.Exception('Unable to minimize simple output');
162 }
163
164 var multiple = opts.templates.length !== 1 || opts.hasDirectory;
165 if (opts.simple && multiple) {
166 throw new _handlebars.Exception('Unable to output multiple templates in simple mode');
167 }
168
169 // Force simple mode if we have only one template and it's unnamed.
170 if (!opts.amd && !opts.commonjs && opts.templates.length === 1 && !opts.templates[0].name) {
171 opts.simple = true;
172 }
173
174 // Convert the known list into a hash
175 var known = {};
176 if (opts.known && !Array.isArray(opts.known)) {
177 opts.known = [opts.known];
178 }
179 if (opts.known) {
180 for (var i = 0, len = opts.known.length; i < len; i++) {
181 known[opts.known[i]] = true;
182 }
183 }
184
185 var objectName = opts.partial ? 'Handlebars.partials' : 'templates';
186
187 var output = new _sourceMap.SourceNode();
188 if (!opts.simple) {
189 if (opts.amd) {
190 output.add('define([\'' + opts.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];');
191 } else if (opts.commonjs) {
192 output.add('var Handlebars = require("' + opts.commonjs + '");');
193 } else {
194 output.add('(function() {\n');
195 }
196 output.add(' var template = Handlebars.template, templates = ');
197 if (opts.namespace) {
198 output.add(opts.namespace);
199 output.add(' = ');
200 output.add(opts.namespace);
201 output.add(' || ');
202 }
203 output.add('{};\n');
204 }
205
206 opts.templates.forEach(function (template) {
207 var options = {
208 knownHelpers: known,
209 knownHelpersOnly: opts.o
210 };
211
212 if (opts.map) {
213 options.srcName = template.path;
214 }
215 if (opts.data) {
216 options.data = true;
217 }
218
219 var precompiled = _handlebars.precompile(template.source, options);
220
221 // If we are generating a source map, we have to reconstruct the SourceNode object
222 if (opts.map) {
223 var consumer = new _sourceMap.SourceMapConsumer(precompiled.map);
224 precompiled = _sourceMap.SourceNode.fromStringWithSourceMap(precompiled.code, consumer);
225 }
226
227 if (opts.simple) {
228 output.add([precompiled, '\n']);
229 } else {
230 if (!template.name) {
231 throw new _handlebars.Exception('Name missing for template');
232 }
233
234 if (opts.amd && !multiple) {
235 output.add('return ');
236 }
237 output.add([objectName, '[\'', template.name, '\'] = template(', precompiled, ');\n']);
238 }
239 });
240
241 // Output the content
242 if (!opts.simple) {
243 if (opts.amd) {
244 if (multiple) {
245 output.add(['return ', objectName, ';\n']);
246 }
247 output.add('});');
248 } else if (!opts.commonjs) {
249 output.add('})();');
250 }
251 }
252
253 if (opts.map) {
254 output.add('\n//# sourceMappingURL=' + opts.map + '\n');
255 }
256
257 output = output.toStringWithSourceMap();
258 output.map = output.map + '';
259
260 if (opts.min) {
261 output = _uglify['default'].minify(output.code, {
262 fromString: true,
263
264 outSourceMap: opts.map,
265 inSourceMap: JSON.parse(output.map)
266 });
267 }
268
269 if (opts.map) {
270 _fs2['default'].writeFileSync(opts.map, output.map, 'utf8');
271 }
272 output = output.code;
273
274 if (opts.output) {
275 _fs2['default'].writeFileSync(opts.output, output, 'utf8');
276 } else {
277 console.log(output);
278 }
279 };
280
281 function arrayCast(value) {
282 value = value != null ? value : [];
283 if (!Array.isArray(value)) {
284 value = [value];
285 }
286 return value;
287 }
288 });
289 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcmVjb21waWxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQVFBLFFBQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxlQUFXLENBQUMsSUFBSSxFQUFFLFVBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRTtBQUN2QyxVQUFJLEdBQUcsRUFBRTtBQUNQLGdCQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDZixNQUFNO0FBQ0wsaUJBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ25DLGNBQUksR0FBRyxFQUFFO0FBQ1Asb0JBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztXQUNmLE1BQU07QUFDTCxnQkFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQzNCO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDLENBQUM7R0FDSixDQUFDOztBQUVGLFdBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkMsUUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpDLFFBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUM1QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixhQUFPLFFBQVEsQ0FBQyxJQUFJLFlBQVcsU0FBUyxDQUFDLDJEQUEyRCxDQUFDLENBQUMsQ0FBQztLQUN4Rzs7QUFFRCxzQkFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUMxQyxVQUFJLE1BQU0sS0FB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LEdBQUcsQ0FBQztPQUNwQyxDQUFDLENBQUM7S0FDSjs7QUFFRCxRQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixzQkFBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2hEO0FBQ0QsVUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7O0FBRXJCLFFBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNmLHNCQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMvQyxNQUFNO0FBQ0wsYUFBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQjtHQUNGLENBQUM7O0FBRUYsV0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFNBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekIsV0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakI7QUFDRCxXQUFPLEtBQUssQ0FBQztHQUNkIiwiZmlsZSI6InByZWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IEFzeW5jIGZyb20gJ2FzeW5jJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBIYW5kbGViYXJzIGZyb20gJy4vaGFuZGxlYmFycyc7XG5pbXBvcnQge2Jhc2VuYW1lfSBmcm9tICdwYXRoJztcbmltcG9ydCB7U291cmNlTWFwQ29uc3VtZXIsIFNvdXJjZU5vZGV9IGZyb20gJ3NvdXJjZS1tYXAnO1xuaW1wb3J0IHVnbGlmeSBmcm9tICd1Z2xpZnktanMnO1xuXG5tb2R1bGUuZXhwb3J0cy5sb2FkVGVtcGxhdGVzID0gZnVuY3Rpb24ob3B0cywgY2FsbGJhY2spIHtcbiAgbG9hZFN0cmluZ3Mob3B0cywgZnVuY3Rpb24oZXJyLCBzdHJpbmdzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZEZpbGVzKG9wdHMsIGZ1bmN0aW9uKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0cy50ZW1wbGF0ZXMgPSBzdHJpbmdzLmNvbmNhdChmaWxlcyk7XG4gICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGxvYWRTdHJpbmdzKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGxldCBzdHJpbmdzID0gYXJyYXlDYXN0KG9wdHMuc3RyaW5nKSxcbiAgICAgIG5hbWVzID0gYXJyYXlDYXN0KG9wdHMubmFtZSk7XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCAhPT0gc3RyaW5ncy5sZW5ndGhcbiAgICAgICYmIHN0cmluZ3MubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oJ051bWJlciBvZiBuYW1lcyBkaWQgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RyaW5nIGlucHV0cycpKTtcbiAgfVxuXG4gIEFzeW5jLm1hcChzdHJpbmdzLCBmdW5jdGlvbihzdHJpbmcsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoc3RyaW5nICE9PSAnLScpIHtcbiAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCBzdHJpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9hZCBmcm9tIHN0ZGluXG4gICAgICAgIGxldCBidWZmZXIgPSAnJztcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpO1xuXG4gICAgICAgIHByb2Nlc3Muc3RkaW4ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICAgIGJ1ZmZlciArPSBjaHVuaztcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4ub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgYnVmZmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbihlcnIsIHN0cmluZ3MpIHtcbiAgICAgIHN0cmluZ3MgPSBzdHJpbmdzLm1hcCgoc3RyaW5nLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZTogbmFtZXNbaW5kZXhdLFxuICAgICAgICBwYXRoOiBuYW1lc1tpbmRleF0sXG4gICAgICAgIHNvdXJjZTogc3RyaW5nXG4gICAgICB9KSk7XG4gICAgICBjYWxsYmFjayhlcnIsIHN0cmluZ3MpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBsb2FkRmlsZXMob3B0cywgY2FsbGJhY2spIHtcbiAgLy8gQnVpbGQgZmlsZSBleHRlbnNpb24gcGF0dGVyblxuICBsZXQgZXh0ZW5zaW9uID0gKG9wdHMuZXh0ZW5zaW9uIHx8ICdoYW5kbGViYXJzJykucmVwbGFjZSgvW1xcXFxeJCorPy4oKTo9IXx7fVxcLVxcW1xcXV0vZywgZnVuY3Rpb24oYXJnKSB7IHJldHVybiAnXFxcXCcgKyBhcmc7IH0pO1xuICBleHRlbnNpb24gPSBuZXcgUmVnRXhwKCdcXFxcLicgKyBleHRlbnNpb24gKyAnJCcpO1xuXG4gIGxldCByZXQgPSBbXSxcbiAgICAgIHF1ZXVlID0gKG9wdHMuZmlsZXMgfHwgW10pLm1hcCgodGVtcGxhdGUpID0+ICh7dGVtcGxhdGUsIHJvb3Q6IG9wdHMucm9vdH0pKTtcbiAgQXN5bmMud2hpbHN0KCgpID0+IHF1ZXVlLmxlbmd0aCwgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBsZXQge3RlbXBsYXRlOiBwYXRoLCByb290fSA9IHF1ZXVlLnNoaWZ0KCk7XG5cbiAgICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKGBVbmFibGUgdG8gb3BlbiB0ZW1wbGF0ZSBmaWxlIFwiJHtwYXRofVwiYCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIG9wdHMuaGFzRGlyZWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgICBmcy5yZWFkZGlyKHBhdGgsIGZ1bmN0aW9uKGVyciwgY2hpbGRyZW4pIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCA6IFJhY2UgY29uZGl0aW9uIHRoYXQgYmVpbmcgdG9vIGxhenkgdG8gdGVzdCAqL1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgICAgIGxldCBjaGlsZFBhdGggPSBwYXRoICsgJy8nICsgZmlsZTtcblxuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi50ZXN0KGNoaWxkUGF0aCkgfHwgZnMuc3RhdFN5bmMoY2hpbGRQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgIHF1ZXVlLnB1c2goe3RlbXBsYXRlOiBjaGlsZFBhdGgsIHJvb3Q6IHJvb3QgfHwgcGF0aH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcy5yZWFkRmlsZShwYXRoLCAndXRmOCcsIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IDogUmFjZSBjb25kaXRpb24gdGhhdCBiZWluZyB0b28gbGF6eSB0byB0ZXN0ICovXG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdHMuYm9tICYmIGRhdGEuaW5kZXhPZignXFx1RkVGRicpID09PSAwKSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2xlYW4gdGhlIHRlbXBsYXRlIG5hbWVcbiAgICAgICAgICBsZXQgbmFtZSA9IHBhdGg7XG4gICAgICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgICAgICBuYW1lID0gYmFzZW5hbWUobmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmluZGV4T2Yocm9vdCkgPT09IDApIHtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhyb290Lmxlbmd0aCArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKGV4dGVuc2lvbiwgJycpO1xuXG4gICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBzb3VyY2U6IGRhdGFcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBmdW5jdGlvbihlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayh1bmRlZmluZWQsIHJldCk7XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuY2xpID0gZnVuY3Rpb24ob3B0cykge1xuICBpZiAob3B0cy52ZXJzaW9uKSB7XG4gICAgY29uc29sZS5sb2coSGFuZGxlYmFycy5WRVJTSU9OKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW9wdHMudGVtcGxhdGVzLmxlbmd0aCAmJiAhb3B0cy5oYXNEaXJlY3RvcnkpIHtcbiAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oJ011c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSB0ZW1wbGF0ZSBvciBkaXJlY3RvcnkuJyk7XG4gIH1cblxuICBpZiAob3B0cy5zaW1wbGUgJiYgb3B0cy5taW4pIHtcbiAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oJ1VuYWJsZSB0byBtaW5pbWl6ZSBzaW1wbGUgb3V0cHV0Jyk7XG4gIH1cblxuICBjb25zdCBtdWx0aXBsZSA9IG9wdHMudGVtcGxhdGVzLmxlbmd0aCAhPT0gMSB8fCBvcHRzLmhhc0RpcmVjdG9yeTtcbiAgaWYgKG9wdHMuc2ltcGxlICYmIG11bHRpcGxlKSB7XG4gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdVbmFibGUgdG8gb3V0cHV0IG11bHRpcGxlIHRlbXBsYXRlcyBpbiBzaW1wbGUgbW9kZScpO1xuICB9XG5cbiAgLy8gRm9yY2Ugc2ltcGxlIG1vZGUgaWYgd2UgaGF2ZSBvbmx5IG9uZSB0ZW1wbGF0ZSBhbmQgaXQncyB1bm5hbWVkLlxuICBpZiAoIW9wdHMuYW1kICYmICFvcHRzLmNvbW1vbmpzICYmIG9wdHMudGVtcGxhdGVzLmxlbmd0aCA9PT0gMVxuICAgICAgJiYgIW9wdHMudGVtcGxhdGVzWzBdLm5hbWUpIHtcbiAgICBvcHRzLnNpbXBsZSA9IHRydWU7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBrbm93biBsaXN0IGludG8gYSBoYXNoXG4gIGxldCBrbm93biA9IHt9O1xuICBpZiAob3B0cy5rbm93biAmJiAhQXJyYXkuaXNBcnJheShvcHRzLmtub3duKSkge1xuICAgIG9wdHMua25vd24gPSBbb3B0cy5rbm93bl07XG4gIH1cbiAgaWYgKG9wdHMua25vd24pIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb3B0cy5rbm93bi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAga25vd25bb3B0cy5rbm93bltpXV0gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9iamVjdE5hbWUgPSBvcHRzLnBhcnRpYWwgPyAnSGFuZGxlYmFycy5wYXJ0aWFscycgOiAndGVtcGxhdGVzJztcblxuICBsZXQgb3V0cHV0ID0gbmV3IFNvdXJjZU5vZGUoKTtcbiAgaWYgKCFvcHRzLnNpbXBsZSkge1xuICAgIGlmIChvcHRzLmFtZCkge1xuICAgICAgb3V0cHV0LmFkZCgnZGVmaW5lKFtcXCcnICsgb3B0cy5oYW5kbGViYXJQYXRoICsgJ2hhbmRsZWJhcnMucnVudGltZVxcJ10sIGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcXG4gIEhhbmRsZWJhcnMgPSBIYW5kbGViYXJzW1wiZGVmYXVsdFwiXTsnKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuY29tbW9uanMpIHtcbiAgICAgIG91dHB1dC5hZGQoJ3ZhciBIYW5kbGViYXJzID0gcmVxdWlyZShcIicgKyBvcHRzLmNvbW1vbmpzICsgJ1wiKTsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LmFkZCgnKGZ1bmN0aW9uKCkge1xcbicpO1xuICAgIH1cbiAgICBvdXRwdXQuYWRkKCcgIHZhciB0ZW1wbGF0ZSA9IEhhbmRsZWJhcnMudGVtcGxhdGUsIHRlbXBsYXRlcyA9ICcpO1xuICAgIGlmIChvcHRzLm5hbWVzcGFjZSkge1xuICAgICAgb3V0cHV0LmFkZChvcHRzLm5hbWVzcGFjZSk7XG4gICAgICBvdXRwdXQuYWRkKCcgPSAnKTtcbiAgICAgIG91dHB1dC5hZGQob3B0cy5uYW1lc3BhY2UpO1xuICAgICAgb3V0cHV0LmFkZCgnIHx8ICcpO1xuICAgIH1cbiAgICBvdXRwdXQuYWRkKCd7fTtcXG4nKTtcbiAgfVxuXG4gIG9wdHMudGVtcGxhdGVzLmZvckVhY2goZnVuY3Rpb24odGVtcGxhdGUpIHtcbiAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgIGtub3duSGVscGVyczoga25vd24sXG4gICAgICBrbm93bkhlbHBlcnNPbmx5OiBvcHRzLm9cbiAgICB9O1xuXG4gICAgaWYgKG9wdHMubWFwKSB7XG4gICAgICBvcHRpb25zLnNyY05hbWUgPSB0ZW1wbGF0ZS5wYXRoO1xuICAgIH1cbiAgICBpZiAob3B0cy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBwcmVjb21waWxlZCA9IEhhbmRsZWJhcnMucHJlY29tcGlsZSh0ZW1wbGF0ZS5zb3VyY2UsIG9wdGlvbnMpO1xuXG4gICAgLy8gSWYgd2UgYXJlIGdlbmVyYXRpbmcgYSBzb3VyY2UgbWFwLCB3ZSBoYXZlIHRvIHJlY29uc3RydWN0IHRoZSBTb3VyY2VOb2RlIG9iamVjdFxuICAgIGlmIChvcHRzLm1hcCkge1xuICAgICAgbGV0IGNvbnN1bWVyID0gbmV3IFNvdXJjZU1hcENvbnN1bWVyKHByZWNvbXBpbGVkLm1hcCk7XG4gICAgICBwcmVjb21waWxlZCA9IFNvdXJjZU5vZGUuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAocHJlY29tcGlsZWQuY29kZSwgY29uc3VtZXIpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLnNpbXBsZSkge1xuICAgICAgb3V0cHV0LmFkZChbcHJlY29tcGlsZWQsICdcXG4nXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGVtcGxhdGUubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oJ05hbWUgbWlzc2luZyBmb3IgdGVtcGxhdGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuYW1kICYmICFtdWx0aXBsZSkge1xuICAgICAgICBvdXRwdXQuYWRkKCdyZXR1cm4gJyk7XG4gICAgICB9XG4gICAgICBvdXRwdXQuYWRkKFtvYmplY3ROYW1lLCAnW1xcJycsIHRlbXBsYXRlLm5hbWUsICdcXCddID0gdGVtcGxhdGUoJywgcHJlY29tcGlsZWQsICcpO1xcbiddKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE91dHB1dCB0aGUgY29udGVudFxuICBpZiAoIW9wdHMuc2ltcGxlKSB7XG4gICAgaWYgKG9wdHMuYW1kKSB7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgb3V0cHV0LmFkZChbJ3JldHVybiAnLCBvYmplY3ROYW1lLCAnO1xcbiddKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dC5hZGQoJ30pOycpO1xuICAgIH0gZWxzZSBpZiAoIW9wdHMuY29tbW9uanMpIHtcbiAgICAgIG91dHB1dC5hZGQoJ30pKCk7Jyk7XG4gICAgfVxuICB9XG5cblxuICBpZiAob3B0cy5tYXApIHtcbiAgICBvdXRwdXQuYWRkKCdcXG4vLyMgc291cmNlTWFwcGluZ1VSTD0nICsgb3B0cy5tYXAgKyAnXFxuJyk7XG4gIH1cblxuICBvdXRwdXQgPSBvdXRwdXQudG9TdHJpbmdXaXRoU291cmNlTWFwKCk7XG4gIG91dHB1dC5tYXAgPSBvdXRwdXQubWFwICsgJyc7XG5cbiAgaWYgKG9wdHMubWluKSB7XG4gICAgb3V0cHV0ID0gdWdsaWZ5Lm1pbmlmeShvdXRwdXQuY29kZSwge1xuICAgICAgZnJvbVN0cmluZzogdHJ1ZSxcblxuICAgICAgb3V0U291cmNlTWFwOiBvcHRzLm1hcCxcbiAgICAgIGluU291cmNlTWFwOiBKU09OLnBhcnNlKG91dHB1dC5tYXApXG4gICAgfSk7XG4gIH1cblxuICBpZiAob3B0cy5tYXApIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKG9wdHMubWFwLCBvdXRwdXQubWFwLCAndXRmOCcpO1xuICB9XG4gIG91dHB1dCA9IG91dHB1dC5jb2RlO1xuXG4gIGlmIChvcHRzLm91dHB1dCkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMob3B0cy5vdXRwdXQsIG91dHB1dCwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhvdXRwdXQpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhcnJheUNhc3QodmFsdWUpIHtcbiAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
1 'use strict';
2
3 exports.__esModule = true;
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _handlebarsRuntime = require('./handlebars.runtime');
9
10 var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);
11
12 // Compiler imports
13
14 var _handlebarsCompilerAst = require('./handlebars/compiler/ast');
15
16 var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
17
18 var _handlebarsCompilerBase = require('./handlebars/compiler/base');
19
20 var _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler');
21
22 var _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler');
23
24 var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
25
26 var _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor');
27
28 var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
29
30 var _handlebarsNoConflict = require('./handlebars/no-conflict');
31
32 var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
33
34 var _create = _handlebarsRuntime2['default'].create;
35 function create() {
36 var hb = _create();
37
38 hb.compile = function (input, options) {
39 return _handlebarsCompilerCompiler.compile(input, options, hb);
40 };
41 hb.precompile = function (input, options) {
42 return _handlebarsCompilerCompiler.precompile(input, options, hb);
43 };
44
45 hb.AST = _handlebarsCompilerAst2['default'];
46 hb.Compiler = _handlebarsCompilerCompiler.Compiler;
47 hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];
48 hb.Parser = _handlebarsCompilerBase.parser;
49 hb.parse = _handlebarsCompilerBase.parse;
50
51 return hb;
52 }
53
54 var inst = create();
55 inst.create = create;
56
57 _handlebarsNoConflict2['default'](inst);
58
59 inst.Visitor = _handlebarsCompilerVisitor2['default'];
60
61 inst['default'] = inst;
62
63 exports['default'] = inst;
64 module.exports = exports['default'];
65 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBQ0gsNEJBQTRCOzswQ0FDdEIsZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7O0FBRWpCLFNBQU8sRUFBRSxDQUFDO0NBQ1g7O0FBRUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O0FBRXJCLGtDQUFXLElBQUksQ0FBQyxDQUFDOztBQUVqQixJQUFJLENBQUMsT0FBTyx5Q0FBVSxDQUFDOztBQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDOztxQkFFUixJQUFJIiwiZmlsZSI6ImhhbmRsZWJhcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVudGltZSBmcm9tICcuL2hhbmRsZWJhcnMucnVudGltZSc7XG5cbi8vIENvbXBpbGVyIGltcG9ydHNcbmltcG9ydCBBU1QgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdCc7XG5pbXBvcnQgeyBwYXJzZXIgYXMgUGFyc2VyLCBwYXJzZSB9IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0LlZpc2l0b3IgPSBWaXNpdG9yO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19
1 'use strict';
2
3 exports.__esModule = true;
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 // istanbul ignore next
9
10 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
11
12 var _handlebarsBase = require('./handlebars/base');
13
14 var base = _interopRequireWildcard(_handlebarsBase);
15
16 // Each of these augment the Handlebars object. No need to setup here.
17 // (This is done to easily share code between commonjs and browse envs)
18
19 var _handlebarsSafeString = require('./handlebars/safe-string');
20
21 var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
22
23 var _handlebarsException = require('./handlebars/exception');
24
25 var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
26
27 var _handlebarsUtils = require('./handlebars/utils');
28
29 var Utils = _interopRequireWildcard(_handlebarsUtils);
30
31 var _handlebarsRuntime = require('./handlebars/runtime');
32
33 var runtime = _interopRequireWildcard(_handlebarsRuntime);
34
35 var _handlebarsNoConflict = require('./handlebars/no-conflict');
36
37 var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
38
39 // For compatibility and usage outside of module systems, make the Handlebars object a namespace
40 function create() {
41 var hb = new base.HandlebarsEnvironment();
42
43 Utils.extend(hb, base);
44 hb.SafeString = _handlebarsSafeString2['default'];
45 hb.Exception = _handlebarsException2['default'];
46 hb.Utils = Utils;
47 hb.escapeExpression = Utils.escapeExpression;
48
49 hb.VM = runtime;
50 hb.template = function (spec) {
51 return runtime.template(spec, hb);
52 };
53
54 return hb;
55 }
56
57 var inst = create();
58 inst.create = create;
59
60 _handlebarsNoConflict2['default'](inst);
61
62 inst['default'] = inst;
63
64 exports['default'] = inst;
65 module.exports = exports['default'];
66 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=
1 'use strict';
2
3 exports.__esModule = true;
4 exports.HandlebarsEnvironment = HandlebarsEnvironment;
5 // istanbul ignore next
6
7 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
8
9 var _utils = require('./utils');
10
11 var _exception = require('./exception');
12
13 var _exception2 = _interopRequireDefault(_exception);
14
15 var _helpers = require('./helpers');
16
17 var _decorators = require('./decorators');
18
19 var _logger = require('./logger');
20
21 var _logger2 = _interopRequireDefault(_logger);
22
23 var VERSION = '4.0.10';
24 exports.VERSION = VERSION;
25 var COMPILER_REVISION = 7;
26
27 exports.COMPILER_REVISION = COMPILER_REVISION;
28 var REVISION_CHANGES = {
29 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
30 2: '== 1.0.0-rc.3',
31 3: '== 1.0.0-rc.4',
32 4: '== 1.x.x',
33 5: '== 2.0.0-alpha.x',
34 6: '>= 2.0.0-beta.1',
35 7: '>= 4.0.0'
36 };
37
38 exports.REVISION_CHANGES = REVISION_CHANGES;
39 var objectType = '[object Object]';
40
41 function HandlebarsEnvironment(helpers, partials, decorators) {
42 this.helpers = helpers || {};
43 this.partials = partials || {};
44 this.decorators = decorators || {};
45
46 _helpers.registerDefaultHelpers(this);
47 _decorators.registerDefaultDecorators(this);
48 }
49
50 HandlebarsEnvironment.prototype = {
51 constructor: HandlebarsEnvironment,
52
53 logger: _logger2['default'],
54 log: _logger2['default'].log,
55
56 registerHelper: function registerHelper(name, fn) {
57 if (_utils.toString.call(name) === objectType) {
58 if (fn) {
59 throw new _exception2['default']('Arg not supported with multiple helpers');
60 }
61 _utils.extend(this.helpers, name);
62 } else {
63 this.helpers[name] = fn;
64 }
65 },
66 unregisterHelper: function unregisterHelper(name) {
67 delete this.helpers[name];
68 },
69
70 registerPartial: function registerPartial(name, partial) {
71 if (_utils.toString.call(name) === objectType) {
72 _utils.extend(this.partials, name);
73 } else {
74 if (typeof partial === 'undefined') {
75 throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
76 }
77 this.partials[name] = partial;
78 }
79 },
80 unregisterPartial: function unregisterPartial(name) {
81 delete this.partials[name];
82 },
83
84 registerDecorator: function registerDecorator(name, fn) {
85 if (_utils.toString.call(name) === objectType) {
86 if (fn) {
87 throw new _exception2['default']('Arg not supported with multiple decorators');
88 }
89 _utils.extend(this.decorators, name);
90 } else {
91 this.decorators[name] = fn;
92 }
93 },
94 unregisterDecorator: function unregisterDecorator(name) {
95 delete this.decorators[name];
96 }
97 };
98
99 var log = _logger2['default'].log;
100
101 exports.log = log;
102 exports.createFrame = _utils.createFrame;
103 exports.logger = _logger2['default'];
104 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQTRDLFNBQVM7O3lCQUMvQixhQUFhOzs7O3VCQUNFLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNuQyxVQUFVOzs7O0FBRXRCLElBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQzs7QUFDekIsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxVQUFVO0NBQ2QsQ0FBQzs7O0FBRUYsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFNBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsTUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLE1BQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixNQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGtDQUF1QixJQUFJLENBQUMsQ0FBQztBQUM3Qix3Q0FBMEIsSUFBSSxDQUFDLENBQUM7Q0FDakM7O0FBRUQscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLGFBQVcsRUFBRSxxQkFBcUI7O0FBRWxDLFFBQU0scUJBQVE7QUFDZCxLQUFHLEVBQUUsb0JBQU8sR0FBRzs7QUFFZixnQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDakMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQUUsY0FBTSwyQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO09BQUU7QUFDM0Usb0JBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QixNQUFNO0FBQ0wsVUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDekI7R0FDRjtBQUNELGtCQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDM0I7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFFBQUksZ0JBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdCLE1BQU07QUFDTCxVQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNsQyxjQUFNLHlFQUEwRCxJQUFJLG9CQUFpQixDQUFDO09BQ3ZGO0FBQ0QsVUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDL0I7R0FDRjtBQUNELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxXQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0FBRUQsbUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFBRSxjQUFNLDJCQUFjLDRDQUE0QyxDQUFDLENBQUM7T0FBRTtBQUM5RSxvQkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtHQUNGO0FBQ0QscUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM5QjtDQUNGLENBQUM7O0FBRUssSUFBSSxHQUFHLEdBQUcsb0JBQU8sR0FBRyxDQUFDOzs7UUFFcEIsV0FBVztRQUFFLE1BQU0iLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlRnJhbWUsIGV4dGVuZCwgdG9TdHJpbmd9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdEhlbHBlcnN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnN9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnNC4wLjEwJztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDc7XG5cbmV4cG9ydCBjb25zdCBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz09IDEueC54JyxcbiAgNTogJz09IDIuMC4wLWFscGhhLngnLFxuICA2OiAnPj0gMi4wLjAtYmV0YS4xJyxcbiAgNzogJz49IDQuMC4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmhlbHBlcnNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lLCBwYXJ0aWFsKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGV4dGVuZCh0aGlzLnBhcnRpYWxzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGBBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGEgcGFydGlhbCBjYWxsZWQgXCIke25hbWV9XCIgYXMgdW5kZWZpbmVkYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcnRpYWxzW25hbWVdID0gcGFydGlhbDtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMucGFydGlhbHNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGRlY29yYXRvcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHtjcmVhdGVGcmFtZSwgbG9nZ2VyfTtcbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 var AST = {
5 // Public API used to evaluate derived attributes regarding AST nodes
6 helpers: {
7 // a mustache is definitely a helper if:
8 // * it is an eligible helper, and
9 // * it has at least one parameter or hash segment
10 helperExpression: function helperExpression(node) {
11 return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);
12 },
13
14 scopedId: function scopedId(path) {
15 return (/^\.|this\b/.test(path.original)
16 );
17 },
18
19 // an ID is simple if it only has one part, and that part is not
20 // `..` or `this`.
21 simpleId: function simpleId(path) {
22 return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;
23 }
24 }
25 };
26
27 // Must be exported as an object rather than the root of the module as the jison lexer
28 // must modify the object to operate properly.
29 exports['default'] = AST;
30 module.exports = exports['default'];
31 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFBTyxBQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUM3QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQSxJQUNuRSxDQUFDLEVBQUUsQUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFLLElBQUksQ0FBQyxJQUFJLENBQUEsQUFBQyxBQUFDLENBQUM7S0FDaEU7O0FBRUQsWUFBUSxFQUFFLGtCQUFTLElBQUksRUFBRTtBQUN2QixhQUFPLEFBQUMsYUFBWSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDM0M7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQzlFO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUthLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJylcbiAgICAgICAgICB8fCAoKG5vZGUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpXG4gICAgICAgICAgICAmJiAhISgobm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXMubGVuZ3RoKSB8fCBub2RlLmhhc2gpKTtcbiAgICB9LFxuXG4gICAgc2NvcGVkSWQ6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiAoL15cXC58dGhpc1xcYi8pLnRlc3QocGF0aC5vcmlnaW5hbCk7XG4gICAgfSxcblxuICAgIC8vIGFuIElEIGlzIHNpbXBsZSBpZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3RcbiAgICAvLyBgLi5gIG9yIGB0aGlzYC5cbiAgICBzaW1wbGVJZDogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgucGFydHMubGVuZ3RoID09PSAxICYmICFBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSAmJiAhcGF0aC5kZXB0aDtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXJcbi8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS5cbmV4cG9ydCBkZWZhdWx0IEFTVDtcbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 exports.parse = parse;
5 // istanbul ignore next
6
7 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
8
9 // istanbul ignore next
10
11 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
12
13 var _parser = require('./parser');
14
15 var _parser2 = _interopRequireDefault(_parser);
16
17 var _whitespaceControl = require('./whitespace-control');
18
19 var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
20
21 var _helpers = require('./helpers');
22
23 var Helpers = _interopRequireWildcard(_helpers);
24
25 var _utils = require('../utils');
26
27 exports.parser = _parser2['default'];
28
29 var yy = {};
30 _utils.extend(yy, Helpers);
31
32 function parse(input, options) {
33 // Just return if an already-compiled AST was passed in.
34 if (input.type === 'Program') {
35 return input;
36 }
37
38 _parser2['default'].yy = yy;
39
40 // Altering the shared object here, but this is ok as parser is a sync operation
41 yy.locInfo = function (locInfo) {
42 return new yy.SourceLocation(options && options.srcName, locInfo);
43 };
44
45 var strip = new _whitespaceControl2['default'](options);
46 return strip.accept(_parser2['default'].parse(input));
47 }
48 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O3NCQUFtQixVQUFVOzs7O2lDQUNDLHNCQUFzQjs7Ozt1QkFDM0IsV0FBVzs7SUFBeEIsT0FBTzs7cUJBQ0ksVUFBVTs7UUFFeEIsTUFBTTs7QUFFZixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWixjQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFYixTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVwQyxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQUUsV0FBTyxLQUFLLENBQUM7R0FBRTs7QUFFL0Msc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksS0FBSyxHQUFHLG1DQUFzQixPQUFPLENBQUMsQ0FBQztBQUMzQyxTQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsb0JBQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDMUMiLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXJzZXIgZnJvbSAnLi9wYXJzZXInO1xuaW1wb3J0IFdoaXRlc3BhY2VDb250cm9sIGZyb20gJy4vd2hpdGVzcGFjZS1jb250cm9sJztcbmltcG9ydCAqIGFzIEhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IHsgcGFyc2VyIH07XG5cbmxldCB5eSA9IHt9O1xuZXh0ZW5kKHl5LCBIZWxwZXJzKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIC8vIEp1c3QgcmV0dXJuIGlmIGFuIGFscmVhZHktY29tcGlsZWQgQVNUIHdhcyBwYXNzZWQgaW4uXG4gIGlmIChpbnB1dC50eXBlID09PSAnUHJvZ3JhbScpIHsgcmV0dXJuIGlucHV0OyB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG4gIHJldHVybiBzdHJpcC5hY2NlcHQocGFyc2VyLnBhcnNlKGlucHV0KSk7XG59XG4iXX0=
1 /* global define */
2 'use strict';
3
4 exports.__esModule = true;
5
6 var _utils = require('../utils');
7
8 var SourceNode = undefined;
9
10 try {
11 /* istanbul ignore next */
12 if (typeof define !== 'function' || !define.amd) {
13 // We don't support this in AMD environments. For these environments, we asusme that
14 // they are running on the browser and thus have no need for the source-map library.
15 var SourceMap = require('source-map');
16 SourceNode = SourceMap.SourceNode;
17 }
18 } catch (err) {}
19 /* NOP */
20
21 /* istanbul ignore if: tested but not covered in istanbul due to dist build */
22 if (!SourceNode) {
23 SourceNode = function (line, column, srcFile, chunks) {
24 this.src = '';
25 if (chunks) {
26 this.add(chunks);
27 }
28 };
29 /* istanbul ignore next */
30 SourceNode.prototype = {
31 add: function add(chunks) {
32 if (_utils.isArray(chunks)) {
33 chunks = chunks.join('');
34 }
35 this.src += chunks;
36 },
37 prepend: function prepend(chunks) {
38 if (_utils.isArray(chunks)) {
39 chunks = chunks.join('');
40 }
41 this.src = chunks + this.src;
42 },
43 toStringWithSourceMap: function toStringWithSourceMap() {
44 return { code: this.toString() };
45 },
46 toString: function toString() {
47 return this.src;
48 }
49 };
50 }
51
52 function castChunk(chunk, codeGen, loc) {
53 if (_utils.isArray(chunk)) {
54 var ret = [];
55
56 for (var i = 0, len = chunk.length; i < len; i++) {
57 ret.push(codeGen.wrap(chunk[i], loc));
58 }
59 return ret;
60 } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {
61 // Handle primitives that the SourceNode will throw up on
62 return chunk + '';
63 }
64 return chunk;
65 }
66
67 function CodeGen(srcFile) {
68 this.srcFile = srcFile;
69 this.source = [];
70 }
71
72 CodeGen.prototype = {
73 isEmpty: function isEmpty() {
74 return !this.source.length;
75 },
76 prepend: function prepend(source, loc) {
77 this.source.unshift(this.wrap(source, loc));
78 },
79 push: function push(source, loc) {
80 this.source.push(this.wrap(source, loc));
81 },
82
83 merge: function merge() {
84 var source = this.empty();
85 this.each(function (line) {
86 source.add([' ', line, '\n']);
87 });
88 return source;
89 },
90
91 each: function each(iter) {
92 for (var i = 0, len = this.source.length; i < len; i++) {
93 iter(this.source[i]);
94 }
95 },
96
97 empty: function empty() {
98 var loc = this.currentLocation || { start: {} };
99 return new SourceNode(loc.start.line, loc.start.column, this.srcFile);
100 },
101 wrap: function wrap(chunk) {
102 var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];
103
104 if (chunk instanceof SourceNode) {
105 return chunk;
106 }
107
108 chunk = castChunk(chunk, this, loc);
109
110 return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);
111 },
112
113 functionCall: function functionCall(fn, type, params) {
114 params = this.generateList(params);
115 return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);
116 },
117
118 quotedString: function quotedString(str) {
119 return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
120 .replace(/\u2029/g, '\\u2029') + '"';
121 },
122
123 objectLiteral: function objectLiteral(obj) {
124 var pairs = [];
125
126 for (var key in obj) {
127 if (obj.hasOwnProperty(key)) {
128 var value = castChunk(obj[key], this);
129 if (value !== 'undefined') {
130 pairs.push([this.quotedString(key), ':', value]);
131 }
132 }
133 }
134
135 var ret = this.generateList(pairs);
136 ret.prepend('{');
137 ret.add('}');
138 return ret;
139 },
140
141 generateList: function generateList(entries) {
142 var ret = this.empty();
143
144 for (var i = 0, len = entries.length; i < len; i++) {
145 if (i) {
146 ret.add(',');
147 }
148
149 ret.add(castChunk(entries[i], this));
150 }
151
152 return ret;
153 },
154
155 generateArray: function generateArray(entries) {
156 var ret = this.generateList(entries);
157 ret.prepend('[');
158 ret.add(']');
159
160 return ret;
161 }
162 };
163
164 exports['default'] = CodeGen;
165 module.exports = exports['default'];
166 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNzQixVQUFVOztBQUVoQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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T0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixPQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUViLFdBQU8sR0FBRyxDQUFDO0dBQ1o7Q0FDRixDQUFDOztxQkFFYSxPQUFPIiwiZmlsZSI6ImNvZGUtZ2VuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlZmluZSAqL1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmxldCBTb3VyY2VOb2RlO1xuXG50cnkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJyB8fCAhZGVmaW5lLmFtZCkge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBpbiBBTUQgZW52aXJvbm1lbnRzLiBGb3IgdGhlc2UgZW52aXJvbm1lbnRzLCB3ZSBhc3VzbWUgdGhhdFxuICAgIC8vIHRoZXkgYXJlIHJ1bm5pbmcgb24gdGhlIGJyb3dzZXIgYW5kIHRodXMgaGF2ZSBubyBuZWVkIGZvciB0aGUgc291cmNlLW1hcCBsaWJyYXJ5LlxuICAgIGxldCBTb3VyY2VNYXAgPSByZXF1aXJlKCdzb3VyY2UtbWFwJyk7XG4gICAgU291cmNlTm9kZSA9IFNvdXJjZU1hcC5Tb3VyY2VOb2RlO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLyogTk9QICovXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGVzdGVkIGJ1dCBub3QgY292ZXJlZCBpbiBpc3RhbmJ1bCBkdWUgdG8gZGlzdCBidWlsZCAgKi9cbmlmICghU291cmNlTm9kZSkge1xuICBTb3VyY2VOb2RlID0gZnVuY3Rpb24obGluZSwgY29sdW1uLCBzcmNGaWxlLCBjaHVua3MpIHtcbiAgICB0aGlzLnNyYyA9ICcnO1xuICAgIGlmIChjaHVua3MpIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rcyk7XG4gICAgfVxuICB9O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKGNodW5rcykge1xuICAgICAgaWYgKGlzQXJyYXkoY2h1bmtzKSkge1xuICAgICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNyYyArPSBjaHVua3M7XG4gICAgfSxcbiAgICBwcmVwZW5kOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYztcbiAgICB9LFxuICAgIHRvU3RyaW5nV2l0aFNvdXJjZU1hcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2NvZGU6IHRoaXMudG9TdHJpbmcoKX07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGNhc3RDaHVuayhjaHVuaywgY29kZUdlbiwgbG9jKSB7XG4gIGlmIChpc0FycmF5KGNodW5rKSkge1xuICAgIGxldCByZXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmV0LnB1c2goY29kZUdlbi53cmFwKGNodW5rW2ldLCBsb2MpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgY2h1bmsgPT09ICdudW1iZXInKSB7XG4gICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMgdGhhdCB0aGUgU291cmNlTm9kZSB3aWxsIHRocm93IHVwIG9uXG4gICAgcmV0dXJuIGNodW5rICsgJyc7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5cbmZ1bmN0aW9uIENvZGVHZW4oc3JjRmlsZSkge1xuICB0aGlzLnNyY0ZpbGUgPSBzcmNGaWxlO1xuICB0aGlzLnNvdXJjZSA9IFtdO1xufVxuXG5Db2RlR2VuLnByb3RvdHlwZSA9IHtcbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gIXRoaXMuc291cmNlLmxlbmd0aDtcbiAgfSxcbiAgcHJlcGVuZDogZnVuY3Rpb24oc291cmNlLCBsb2MpIHtcbiAgICB0aGlzLnNvdXJjZS51bnNoaWZ0KHRoaXMud3JhcChzb3VyY2UsIGxvYykpO1xuICB9LFxuICBwdXNoOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnB1c2godGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG5cbiAgbWVyZ2U6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzb3VyY2UgPSB0aGlzLmVtcHR5KCk7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHNvdXJjZS5hZGQoWycgICcsIGxpbmUsICdcXG4nXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfSxcblxuICBlYWNoOiBmdW5jdGlvbihpdGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVyKHRoaXMuc291cmNlW2ldKTtcbiAgICB9XG4gIH0sXG5cbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fTtcbiAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7XG4gIH0sXG4gIHdyYXA6IGZ1bmN0aW9uKGNodW5rLCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlLCBjaHVuayk7XG4gIH0sXG5cbiAgZnVuY3Rpb25DYWxsOiBmdW5jdGlvbihmbiwgdHlwZSwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gdGhpcy5nZW5lcmF0ZUxpc3QocGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy53cmFwKFtmbiwgdHlwZSA/ICcuJyArIHR5cGUgKyAnKCcgOiAnKCcsIHBhcmFtcywgJyknXSk7XG4gIH0sXG5cbiAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gJ1wiJyArIChzdHIgKyAnJylcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykgICAvLyBQZXIgRWNtYS0yNjIgNy4zICsgNy44LjRcbiAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKSArICdcIic7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY2FzdENodW5rKG9ialtrZXldLCB0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuXG4gIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmVtcHR5KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkpIHtcbiAgICAgICAgcmV0LmFkZCgnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXQuYWRkKGNhc3RDaHVuayhlbnRyaWVzW2ldLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUFycmF5OiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICAgbGV0IHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KGVudHJpZXMpO1xuICAgIHJldC5wcmVwZW5kKCdbJyk7XG4gICAgcmV0LmFkZCgnXScpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZUdlbjtcblxuIl19
1 /* eslint-disable new-cap */
2
3 'use strict';
4
5 exports.__esModule = true;
6 exports.Compiler = Compiler;
7 exports.precompile = precompile;
8 exports.compile = compile;
9 // istanbul ignore next
10
11 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
12
13 var _exception = require('../exception');
14
15 var _exception2 = _interopRequireDefault(_exception);
16
17 var _utils = require('../utils');
18
19 var _ast = require('./ast');
20
21 var _ast2 = _interopRequireDefault(_ast);
22
23 var slice = [].slice;
24
25 function Compiler() {}
26
27 // the foundHelper register will disambiguate helper lookup from finding a
28 // function in a context. This is necessary for mustache compatibility, which
29 // requires that context functions in blocks are evaluated by blockHelperMissing,
30 // and then proceed as if the resulting value was provided to blockHelperMissing.
31
32 Compiler.prototype = {
33 compiler: Compiler,
34
35 equals: function equals(other) {
36 var len = this.opcodes.length;
37 if (other.opcodes.length !== len) {
38 return false;
39 }
40
41 for (var i = 0; i < len; i++) {
42 var opcode = this.opcodes[i],
43 otherOpcode = other.opcodes[i];
44 if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {
45 return false;
46 }
47 }
48
49 // We know that length is the same between the two arrays because they are directly tied
50 // to the opcode behavior above.
51 len = this.children.length;
52 for (var i = 0; i < len; i++) {
53 if (!this.children[i].equals(other.children[i])) {
54 return false;
55 }
56 }
57
58 return true;
59 },
60
61 guid: 0,
62
63 compile: function compile(program, options) {
64 this.sourceNode = [];
65 this.opcodes = [];
66 this.children = [];
67 this.options = options;
68 this.stringParams = options.stringParams;
69 this.trackIds = options.trackIds;
70
71 options.blockParams = options.blockParams || [];
72
73 // These changes will propagate to the other compiler components
74 var knownHelpers = options.knownHelpers;
75 options.knownHelpers = {
76 'helperMissing': true,
77 'blockHelperMissing': true,
78 'each': true,
79 'if': true,
80 'unless': true,
81 'with': true,
82 'log': true,
83 'lookup': true
84 };
85 if (knownHelpers) {
86 for (var _name in knownHelpers) {
87 /* istanbul ignore else */
88 if (_name in knownHelpers) {
89 this.options.knownHelpers[_name] = knownHelpers[_name];
90 }
91 }
92 }
93
94 return this.accept(program);
95 },
96
97 compileProgram: function compileProgram(program) {
98 var childCompiler = new this.compiler(),
99 // eslint-disable-line new-cap
100 result = childCompiler.compile(program, this.options),
101 guid = this.guid++;
102
103 this.usePartial = this.usePartial || result.usePartial;
104
105 this.children[guid] = result;
106 this.useDepths = this.useDepths || result.useDepths;
107
108 return guid;
109 },
110
111 accept: function accept(node) {
112 /* istanbul ignore next: Sanity code */
113 if (!this[node.type]) {
114 throw new _exception2['default']('Unknown type: ' + node.type, node);
115 }
116
117 this.sourceNode.unshift(node);
118 var ret = this[node.type](node);
119 this.sourceNode.shift();
120 return ret;
121 },
122
123 Program: function Program(program) {
124 this.options.blockParams.unshift(program.blockParams);
125
126 var body = program.body,
127 bodyLength = body.length;
128 for (var i = 0; i < bodyLength; i++) {
129 this.accept(body[i]);
130 }
131
132 this.options.blockParams.shift();
133
134 this.isSimple = bodyLength === 1;
135 this.blockParams = program.blockParams ? program.blockParams.length : 0;
136
137 return this;
138 },
139
140 BlockStatement: function BlockStatement(block) {
141 transformLiteralToPath(block);
142
143 var program = block.program,
144 inverse = block.inverse;
145
146 program = program && this.compileProgram(program);
147 inverse = inverse && this.compileProgram(inverse);
148
149 var type = this.classifySexpr(block);
150
151 if (type === 'helper') {
152 this.helperSexpr(block, program, inverse);
153 } else if (type === 'simple') {
154 this.simpleSexpr(block);
155
156 // now that the simple mustache is resolved, we need to
157 // evaluate it by executing `blockHelperMissing`
158 this.opcode('pushProgram', program);
159 this.opcode('pushProgram', inverse);
160 this.opcode('emptyHash');
161 this.opcode('blockValue', block.path.original);
162 } else {
163 this.ambiguousSexpr(block, program, inverse);
164
165 // now that the simple mustache is resolved, we need to
166 // evaluate it by executing `blockHelperMissing`
167 this.opcode('pushProgram', program);
168 this.opcode('pushProgram', inverse);
169 this.opcode('emptyHash');
170 this.opcode('ambiguousBlockValue');
171 }
172
173 this.opcode('append');
174 },
175
176 DecoratorBlock: function DecoratorBlock(decorator) {
177 var program = decorator.program && this.compileProgram(decorator.program);
178 var params = this.setupFullMustacheParams(decorator, program, undefined),
179 path = decorator.path;
180
181 this.useDecorators = true;
182 this.opcode('registerDecorator', params.length, path.original);
183 },
184
185 PartialStatement: function PartialStatement(partial) {
186 this.usePartial = true;
187
188 var program = partial.program;
189 if (program) {
190 program = this.compileProgram(partial.program);
191 }
192
193 var params = partial.params;
194 if (params.length > 1) {
195 throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);
196 } else if (!params.length) {
197 if (this.options.explicitPartialContext) {
198 this.opcode('pushLiteral', 'undefined');
199 } else {
200 params.push({ type: 'PathExpression', parts: [], depth: 0 });
201 }
202 }
203
204 var partialName = partial.name.original,
205 isDynamic = partial.name.type === 'SubExpression';
206 if (isDynamic) {
207 this.accept(partial.name);
208 }
209
210 this.setupFullMustacheParams(partial, program, undefined, true);
211
212 var indent = partial.indent || '';
213 if (this.options.preventIndent && indent) {
214 this.opcode('appendContent', indent);
215 indent = '';
216 }
217
218 this.opcode('invokePartial', isDynamic, partialName, indent);
219 this.opcode('append');
220 },
221 PartialBlockStatement: function PartialBlockStatement(partialBlock) {
222 this.PartialStatement(partialBlock);
223 },
224
225 MustacheStatement: function MustacheStatement(mustache) {
226 this.SubExpression(mustache);
227
228 if (mustache.escaped && !this.options.noEscape) {
229 this.opcode('appendEscaped');
230 } else {
231 this.opcode('append');
232 }
233 },
234 Decorator: function Decorator(decorator) {
235 this.DecoratorBlock(decorator);
236 },
237
238 ContentStatement: function ContentStatement(content) {
239 if (content.value) {
240 this.opcode('appendContent', content.value);
241 }
242 },
243
244 CommentStatement: function CommentStatement() {},
245
246 SubExpression: function SubExpression(sexpr) {
247 transformLiteralToPath(sexpr);
248 var type = this.classifySexpr(sexpr);
249
250 if (type === 'simple') {
251 this.simpleSexpr(sexpr);
252 } else if (type === 'helper') {
253 this.helperSexpr(sexpr);
254 } else {
255 this.ambiguousSexpr(sexpr);
256 }
257 },
258 ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {
259 var path = sexpr.path,
260 name = path.parts[0],
261 isBlock = program != null || inverse != null;
262
263 this.opcode('getContext', path.depth);
264
265 this.opcode('pushProgram', program);
266 this.opcode('pushProgram', inverse);
267
268 path.strict = true;
269 this.accept(path);
270
271 this.opcode('invokeAmbiguous', name, isBlock);
272 },
273
274 simpleSexpr: function simpleSexpr(sexpr) {
275 var path = sexpr.path;
276 path.strict = true;
277 this.accept(path);
278 this.opcode('resolvePossibleLambda');
279 },
280
281 helperSexpr: function helperSexpr(sexpr, program, inverse) {
282 var params = this.setupFullMustacheParams(sexpr, program, inverse),
283 path = sexpr.path,
284 name = path.parts[0];
285
286 if (this.options.knownHelpers[name]) {
287 this.opcode('invokeKnownHelper', params.length, name);
288 } else if (this.options.knownHelpersOnly) {
289 throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);
290 } else {
291 path.strict = true;
292 path.falsy = true;
293
294 this.accept(path);
295 this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));
296 }
297 },
298
299 PathExpression: function PathExpression(path) {
300 this.addDepth(path.depth);
301 this.opcode('getContext', path.depth);
302
303 var name = path.parts[0],
304 scoped = _ast2['default'].helpers.scopedId(path),
305 blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
306
307 if (blockParamId) {
308 this.opcode('lookupBlockParam', blockParamId, path.parts);
309 } else if (!name) {
310 // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`
311 this.opcode('pushContext');
312 } else if (path.data) {
313 this.options.data = true;
314 this.opcode('lookupData', path.depth, path.parts, path.strict);
315 } else {
316 this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);
317 }
318 },
319
320 StringLiteral: function StringLiteral(string) {
321 this.opcode('pushString', string.value);
322 },
323
324 NumberLiteral: function NumberLiteral(number) {
325 this.opcode('pushLiteral', number.value);
326 },
327
328 BooleanLiteral: function BooleanLiteral(bool) {
329 this.opcode('pushLiteral', bool.value);
330 },
331
332 UndefinedLiteral: function UndefinedLiteral() {
333 this.opcode('pushLiteral', 'undefined');
334 },
335
336 NullLiteral: function NullLiteral() {
337 this.opcode('pushLiteral', 'null');
338 },
339
340 Hash: function Hash(hash) {
341 var pairs = hash.pairs,
342 i = 0,
343 l = pairs.length;
344
345 this.opcode('pushHash');
346
347 for (; i < l; i++) {
348 this.pushParam(pairs[i].value);
349 }
350 while (i--) {
351 this.opcode('assignToHash', pairs[i].key);
352 }
353 this.opcode('popHash');
354 },
355
356 // HELPERS
357 opcode: function opcode(name) {
358 this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });
359 },
360
361 addDepth: function addDepth(depth) {
362 if (!depth) {
363 return;
364 }
365
366 this.useDepths = true;
367 },
368
369 classifySexpr: function classifySexpr(sexpr) {
370 var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);
371
372 var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);
373
374 // a mustache is an eligible helper if:
375 // * its id is simple (a single part, not `this` or `..`)
376 var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);
377
378 // if a mustache is an eligible helper but not a definite
379 // helper, it is ambiguous, and will be resolved in a later
380 // pass or at runtime.
381 var isEligible = !isBlockParam && (isHelper || isSimple);
382
383 // if ambiguous, we can possibly resolve the ambiguity now
384 // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.
385 if (isEligible && !isHelper) {
386 var _name2 = sexpr.path.parts[0],
387 options = this.options;
388
389 if (options.knownHelpers[_name2]) {
390 isHelper = true;
391 } else if (options.knownHelpersOnly) {
392 isEligible = false;
393 }
394 }
395
396 if (isHelper) {
397 return 'helper';
398 } else if (isEligible) {
399 return 'ambiguous';
400 } else {
401 return 'simple';
402 }
403 },
404
405 pushParams: function pushParams(params) {
406 for (var i = 0, l = params.length; i < l; i++) {
407 this.pushParam(params[i]);
408 }
409 },
410
411 pushParam: function pushParam(val) {
412 var value = val.value != null ? val.value : val.original || '';
413
414 if (this.stringParams) {
415 if (value.replace) {
416 value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.');
417 }
418
419 if (val.depth) {
420 this.addDepth(val.depth);
421 }
422 this.opcode('getContext', val.depth || 0);
423 this.opcode('pushStringParam', value, val.type);
424
425 if (val.type === 'SubExpression') {
426 // SubExpressions get evaluated and passed in
427 // in string params mode.
428 this.accept(val);
429 }
430 } else {
431 if (this.trackIds) {
432 var blockParamIndex = undefined;
433 if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {
434 blockParamIndex = this.blockParamIndex(val.parts[0]);
435 }
436 if (blockParamIndex) {
437 var blockParamChild = val.parts.slice(1).join('.');
438 this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
439 } else {
440 value = val.original || value;
441 if (value.replace) {
442 value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, '');
443 }
444
445 this.opcode('pushId', val.type, value);
446 }
447 }
448 this.accept(val);
449 }
450 },
451
452 setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {
453 var params = sexpr.params;
454 this.pushParams(params);
455
456 this.opcode('pushProgram', program);
457 this.opcode('pushProgram', inverse);
458
459 if (sexpr.hash) {
460 this.accept(sexpr.hash);
461 } else {
462 this.opcode('emptyHash', omitEmpty);
463 }
464
465 return params;
466 },
467
468 blockParamIndex: function blockParamIndex(name) {
469 for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {
470 var blockParams = this.options.blockParams[depth],
471 param = blockParams && _utils.indexOf(blockParams, name);
472 if (blockParams && param >= 0) {
473 return [depth, param];
474 }
475 }
476 }
477 };
478
479 function precompile(input, options, env) {
480 if (input == null || typeof input !== 'string' && input.type !== 'Program') {
481 throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);
482 }
483
484 options = options || {};
485 if (!('data' in options)) {
486 options.data = true;
487 }
488 if (options.compat) {
489 options.useDepths = true;
490 }
491
492 var ast = env.parse(input, options),
493 environment = new env.Compiler().compile(ast, options);
494 return new env.JavaScriptCompiler().compile(environment, options);
495 }
496
497 function compile(input, options, env) {
498 if (options === undefined) options = {};
499
500 if (input == null || typeof input !== 'string' && input.type !== 'Program') {
501 throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);
502 }
503
504 options = _utils.extend({}, options);
505 if (!('data' in options)) {
506 options.data = true;
507 }
508 if (options.compat) {
509 options.useDepths = true;
510 }
511
512 var compiled = undefined;
513
514 function compileInput() {
515 var ast = env.parse(input, options),
516 environment = new env.Compiler().compile(ast, options),
517 templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
518 return env.template(templateSpec);
519 }
520
521 // Template is only compiled on first use and cached after that point.
522 function ret(context, execOptions) {
523 if (!compiled) {
524 compiled = compileInput();
525 }
526 return compiled.call(this, context, execOptions);
527 }
528 ret._setup = function (setupOptions) {
529 if (!compiled) {
530 compiled = compileInput();
531 }
532 return compiled._setup(setupOptions);
533 };
534 ret._child = function (i, data, blockParams, depths) {
535 if (!compiled) {
536 compiled = compileInput();
537 }
538 return compiled._child(i, data, blockParams, depths);
539 };
540 return ret;
541 }
542
543 function argEquals(a, b) {
544 if (a === b) {
545 return true;
546 }
547
548 if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {
549 for (var i = 0; i < a.length; i++) {
550 if (!argEquals(a[i], b[i])) {
551 return false;
552 }
553 }
554 return true;
555 }
556 }
557
558 function transformLiteralToPath(sexpr) {
559 if (!sexpr.path.parts) {
560 var literal = sexpr.path;
561 // Casting to string here to make false and 0 literal values play nicely with the rest
562 // of the system.
563 sexpr.path = {
564 type: 'PathExpression',
565 data: false,
566 depth: 0,
567 parts: [literal.original + ''],
568 original: literal.original + '',
569 loc: literal.loc
570 };
571 }
572 }
573 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDRyxVQUFVOzttQkFDakMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQ3hCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFVBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JGLGVBQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjs7OztBQUlELE9BQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMzQixTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxD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QVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3JELFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFVBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFCLGVBQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjtBQUNELFdBQU8sSUFBSSxDQUFDO0dBQ2I7Q0FDRjs7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEtBQUssRUFBRTtBQUNyQyxNQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsUUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQzs7O0FBR3pCLFNBQUssQ0FBQyxJQUFJLEdBQUc7QUFDWCxVQUFJLEVBQUUsZ0JBQWdCO0FBQ3RCLFVBQUksRUFBRSxLQUFLO0FBQ1gsV0FBSyxFQUFFLENBQUM7QUFDUixXQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUM5QixjQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFO0FBQy9CLFNBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztLQUNqQixDQUFDO0dBQ0g7Q0FDRiIsImZpbGUiOiJjb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cblxuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuaW1wb3J0IHtpc0FycmF5LCBpbmRleE9mLCBleHRlbmR9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgICAgb3RoZXJPcGNvZGUgPSBvdGhlci5vcGNvZGVzW2ldO1xuICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCAhYXJnRXF1YWxzKG9wY29kZS5hcmdzLCBvdGhlck9wY29kZS5hcmdzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Uga25vdyB0aGF0IGxlbmd0aCBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSB0d28gYXJyYXlzIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgdGllZFxuICAgIC8vIHRvIHRoZSBvcGNvZGUgYmVoYXZpb3IgYWJvdmUuXG4gICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuW2ldLmVxdWFscyhvdGhlci5jaGlsZHJlbltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIGd1aWQ6IDAsXG5cbiAgY29tcGlsZTogZnVuY3Rpb24ocHJvZ3JhbSwgb3B0aW9ucykge1xuICAgIHRoaXMuc291cmNlTm9kZSA9IFtdO1xuICAgIHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gb3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IG9wdGlvbnMudHJhY2tJZHM7XG5cbiAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gb3B0aW9ucy5ibG9ja1BhcmFtcyB8fCBbXTtcblxuICAgIC8vIFRoZXNlIGNoYW5nZXMgd2lsbCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGNvbXBpbGVyIGNvbXBvbmVudHNcbiAgICBsZXQga25vd25IZWxwZXJzID0gb3B0aW9ucy5rbm93bkhlbHBlcnM7XG4gICAgb3B0aW9ucy5rbm93bkhlbHBlcnMgPSB7XG4gICAgICAnaGVscGVyTWlzc2luZyc6IHRydWUsXG4gICAgICAnYmxvY2tIZWxwZXJNaXNzaW5nJzogdHJ1ZSxcbiAgICAgICdlYWNoJzogdHJ1ZSxcbiAgICAgICdpZic6IHRydWUsXG4gICAgICAndW5sZXNzJzogdHJ1ZSxcbiAgICAgICd3aXRoJzogdHJ1ZSxcbiAgICAgICdsb2cnOiB0cnVlLFxuICAgICAgJ2xvb2t1cCc6IHRydWVcbiAgICB9O1xuICAgIGlmIChrbm93bkhlbHBlcnMpIHtcbiAgICAgIGZvciAobGV0IG5hbWUgaW4ga25vd25IZWxwZXJzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChuYW1lIGluIGtub3duSGVscGVycykge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNbbmFtZV0gPSBrbm93bkhlbHBlcnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgICByZXN1bHQgPSBjaGlsZENvbXBpbGVyLmNvbXBpbGUocHJvZ3JhbSwgdGhpcy5vcHRpb25zKSxcbiAgICAgICAgZ3VpZCA9IHRoaXMuZ3VpZCsrO1xuXG4gICAgdGhpcy51c2VQYXJ0aWFsID0gdGhpcy51c2VQYXJ0aWFsIHx8IHJlc3VsdC51c2VQYXJ0aWFsO1xuXG4gICAgdGhpcy5jaGlsZHJlbltndWlkXSA9IHJlc3VsdDtcbiAgICB0aGlzLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzIHx8IHJlc3VsdC51c2VEZXB0aHM7XG5cbiAgICByZXR1cm4gZ3VpZDtcbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogU2FuaXR5IGNvZGUgKi9cbiAgICBpZiAoIXRoaXNbbm9kZS50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgbm9kZS50eXBlLCBub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZU5vZGUudW5zaGlmdChub2RlKTtcbiAgICBsZXQgcmV0ID0gdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICAgIHRoaXMuc291cmNlTm9kZS5zaGlmdCgpO1xuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgUHJvZ3JhbTogZnVuY3Rpb24ocHJvZ3JhbSkge1xuICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy51bnNoaWZ0KHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHksXG4gICAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgICBpbnZlcnNlID0gYmxvY2suaW52ZXJzZTtcblxuICAgIHByb2dyYW0gPSBwcm9ncmFtICYmIHRoaXMuY29tcGlsZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgaW52ZXJzZSA9IGludmVyc2UgJiYgdGhpcy5jb21waWxlUHJvZ3JhbShpbnZlcnNlKTtcblxuICAgIGxldCB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKGJsb2NrKTtcblxuICAgIGlmICh0eXBlID09PSAnaGVscGVyJykge1xuICAgICAgdGhpcy5oZWxwZXJTZXhwcihibG9jaywgcHJvZ3JhbSwgaW52ZXJzZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2ltcGxlJykge1xuICAgICAgdGhpcy5zaW1wbGVTZXhwcihibG9jayk7XG5cbiAgICAgIC8vIG5vdyB0aGF0IHRoZSBzaW1wbGUgbXVzdGFjaGUgaXMgcmVzb2x2ZWQsIHdlIG5lZWQgdG9cbiAgICAgIC8vIGV2YWx1YXRlIGl0IGJ5IGV4ZWN1dGluZyBgYmxvY2tIZWxwZXJNaXNzaW5nYFxuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdlbXB0eUhhc2gnKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdibG9ja1ZhbHVlJywgYmxvY2sucGF0aC5vcmlnaW5hbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYW1iaWd1b3VzQmxvY2tWYWx1ZScpO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgfSxcblxuICBEZWNvcmF0b3JCbG9jayhkZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvZ3JhbSA9IGRlY29yYXRvci5wcm9ncmFtICYmIHRoaXMuY29tcGlsZVByb2dyYW0oZGVjb3JhdG9yLnByb2dyYW0pO1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKGRlY29yYXRvciwgcHJvZ3JhbSwgdW5kZWZpbmVkKSxcbiAgICAgICAgcGF0aCA9IGRlY29yYXRvci5wYXRoO1xuXG4gICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLm9wY29kZSgncmVnaXN0ZXJEZWNvcmF0b3InLCBwYXJhbXMubGVuZ3RoLCBwYXRoLm9yaWdpbmFsKTtcbiAgfSxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gICAgdGhpcy51c2VQYXJ0aWFsID0gdHJ1ZTtcblxuICAgIGxldCBwcm9ncmFtID0gcGFydGlhbC5wcm9ncmFtO1xuICAgIGlmIChwcm9ncmFtKSB7XG4gICAgICBwcm9ncmFtID0gdGhpcy5jb21waWxlUHJvZ3JhbShwYXJ0aWFsLnByb2dyYW0pO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBwYXJ0aWFsLnBhcmFtcztcbiAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsIHBhcnRpYWwpO1xuICAgIH0gZWxzZSBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwbGljaXRQYXJ0aWFsQ29udGV4dCkge1xuICAgICAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMucHVzaCh7dHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJ0aWFsTmFtZSA9IHBhcnRpYWwubmFtZS5vcmlnaW5hbCxcbiAgICAgICAgaXNEeW5hbWljID0gcGFydGlhbC5uYW1lLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJztcbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICB0aGlzLmFjY2VwdChwYXJ0aWFsLm5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMocGFydGlhbCwgcHJvZ3JhbSwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIGxldCBpbmRlbnQgPSBwYXJ0aWFsLmluZGVudCB8fCAnJztcbiAgICBpZiAodGhpcy5vcHRpb25zLnByZXZlbnRJbmRlbnQgJiYgaW5kZW50KSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGluZGVudCk7XG4gICAgICBpbmRlbnQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnaW52b2tlUGFydGlhbCcsIGlzRHluYW1pYywgcGFydGlhbE5hbWUsIGluZGVudCk7XG4gICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpO1xuICB9LFxuICBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWxCbG9jaykge1xuICAgIHRoaXMuUGFydGlhbFN0YXRlbWVudChwYXJ0aWFsQmxvY2spO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiBmdW5jdGlvbihtdXN0YWNoZSkge1xuICAgIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSk7XG5cbiAgICBpZiAobXVzdGFjaGUuZXNjYXBlZCAmJiAhdGhpcy5vcHRpb25zLm5vRXNjYXBlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kRXNjYXBlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gICAgfVxuICB9LFxuICBEZWNvcmF0b3IoZGVjb3JhdG9yKSB7XG4gICAgdGhpcy5EZWNvcmF0b3JCbG9jayhkZWNvcmF0b3IpO1xuICB9LFxuXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICAgIG5hbWUgPSBwYXRoLnBhcnRzWzBdLFxuICAgICAgICBpc0Jsb2NrID0gcHJvZ3JhbSAhPSBudWxsIHx8IGludmVyc2UgIT0gbnVsbDtcblxuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjY2VwdChwYXRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VBbWJpZ3VvdXMnLCBuYW1lLCBpc0Jsb2NrKTtcbiAgfSxcblxuICBzaW1wbGVTZXhwcjogZnVuY3Rpb24oc2V4cHIpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGg7XG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdyZXNvbHZlUG9zc2libGVMYW1iZGEnKTtcbiAgfSxcblxuICBoZWxwZXJTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSksXG4gICAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLm9wY29kZSgnaW52b2tlS25vd25IZWxwZXInLCBwYXJhbXMubGVuZ3RoLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdZb3Ugc3BlY2lmaWVkIGtub3duSGVscGVyc09ubHksIGJ1dCB1c2VkIHRoZSB1bmtub3duIGhlbHBlciAnICsgbmFtZSwgc2V4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgICBwYXRoLmZhbHN5ID0gdHJ1ZTtcblxuICAgICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgICB0aGlzLm9wY29kZSgnaW52b2tlSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgcGF0aC5vcmlnaW5hbCwgQVNULmhlbHBlcnMuc2ltcGxlSWQocGF0aCkpO1xuICAgIH1cbiAgfSxcblxuICBQYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24ocGF0aCkge1xuICAgIHRoaXMuYWRkRGVwdGgocGF0aC5kZXB0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIGxldCBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgICAgc2NvcGVkID0gQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCksXG4gICAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBPbkNvbnRleHQnLCBwYXRoLnBhcnRzLCBwYXRoLmZhbHN5LCBwYXRoLnN0cmljdCwgc2NvcGVkKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBsID0gcGFpcnMubGVuZ3RoO1xuXG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hIYXNoJyk7XG5cbiAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5wdXNoUGFyYW0ocGFpcnNbaV0udmFsdWUpO1xuICAgIH1cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXNzaWduVG9IYXNoJywgcGFpcnNbaV0ua2V5KTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ3BvcEhhc2gnKTtcbiAgfSxcblxuICAvLyBIRUxQRVJTXG4gIG9wY29kZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHRoaXMub3Bjb2Rlcy5wdXNoKHsgb3Bjb2RlOiBuYW1lLCBhcmdzOiBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGxvYzogdGhpcy5zb3VyY2VOb2RlWzBdLmxvYyB9KTtcbiAgfSxcblxuICBhZGREZXB0aDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICBpZiAoIWRlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51c2VEZXB0aHMgPSB0cnVlO1xuICB9LFxuXG4gIGNsYXNzaWZ5U2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgbGV0IGlzU2ltcGxlID0gQVNULmhlbHBlcnMuc2ltcGxlSWQoc2V4cHIucGF0aCk7XG5cbiAgICBsZXQgaXNCbG9ja1BhcmFtID0gaXNTaW1wbGUgJiYgISF0aGlzLmJsb2NrUGFyYW1JbmRleChzZXhwci5wYXRoLnBhcnRzWzBdKTtcblxuICAgIC8vIGEgbXVzdGFjaGUgaXMgYW4gZWxpZ2libGUgaGVscGVyIGlmOlxuICAgIC8vICogaXRzIGlkIGlzIHNpbXBsZSAoYSBzaW5nbGUgcGFydCwgbm90IGB0aGlzYCBvciBgLi5gKVxuICAgIGxldCBpc0hlbHBlciA9ICFpc0Jsb2NrUGFyYW0gJiYgQVNULmhlbHBlcnMuaGVscGVyRXhwcmVzc2lvbihzZXhwcik7XG5cbiAgICAvLyBpZiBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBidXQgbm90IGEgZGVmaW5pdGVcbiAgICAvLyBoZWxwZXIsIGl0IGlzIGFtYmlndW91cywgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgaW4gYSBsYXRlclxuICAgIC8vIHBhc3Mgb3IgYXQgcnVudGltZS5cbiAgICBsZXQgaXNFbGlnaWJsZSA9ICFpc0Jsb2NrUGFyYW0gJiYgKGlzSGVscGVyIHx8IGlzU2ltcGxlKTtcblxuICAgIC8vIGlmIGFtYmlndW91cywgd2UgY2FuIHBvc3NpYmx5IHJlc29sdmUgdGhlIGFtYmlndWl0eSBub3dcbiAgICAvLyBBbiBlbGlnaWJsZSBoZWxwZXIgaXMgb25lIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGNvbXBsZXggcGF0aCwgaS5lLiBgdGhpcy5mb29gLCBgLi4vZm9vYCBldGMuXG4gICAgaWYgKGlzRWxpZ2libGUgJiYgIWlzSGVscGVyKSB7XG4gICAgICBsZXQgbmFtZSA9IHNleHByLnBhdGgucGFydHNbMF0sXG4gICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcLj9cXC5cXC8pKi9nLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbC5kZXB0aCkge1xuICAgICAgICB0aGlzLmFkZERlcHRoKHZhbC5kZXB0aCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHZhbC5kZXB0aCB8fCAwKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nUGFyYW0nLCB2YWx1ZSwgdmFsLnR5cGUpO1xuXG4gICAgICBpZiAodmFsLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgICAvLyBTdWJFeHByZXNzaW9ucyBnZXQgZXZhbHVhdGVkIGFuZCBwYXNzZWQgaW5cbiAgICAgICAgLy8gaW4gc3RyaW5nIHBhcmFtcyBtb2RlLlxuICAgICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgICBsZXQgYmxvY2tQYXJhbUluZGV4O1xuICAgICAgICBpZiAodmFsLnBhcnRzICYmICFBU1QuaGVscGVycy5zY29wZWRJZCh2YWwpICYmICF2YWwuZGVwdGgpIHtcbiAgICAgICAgICAgYmxvY2tQYXJhbUluZGV4ID0gdGhpcy5ibG9ja1BhcmFtSW5kZXgodmFsLnBhcnRzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tQYXJhbUluZGV4KSB7XG4gICAgICAgICAgbGV0IGJsb2NrUGFyYW1DaGlsZCA9IHZhbC5wYXJ0cy5zbGljZSgxKS5qb2luKCcuJyk7XG4gICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hJZCcsICdCbG9ja1BhcmFtJywgYmxvY2tQYXJhbUluZGV4LCBibG9ja1BhcmFtQ2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gdmFsLm9yaWdpbmFsIHx8IHZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL150aGlzKD86XFwufCQpLywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXlxcLiQvLCAnJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hJZCcsIHZhbC50eXBlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgfVxuICB9LFxuXG4gIHNldHVwRnVsbE11c3RhY2hlUGFyYW1zOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSwgb21pdEVtcHR5KSB7XG4gICAgbGV0IHBhcmFtcyA9IHNleHByLnBhcmFtcztcbiAgICB0aGlzLnB1c2hQYXJhbXMocGFyYW1zKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgaWYgKHNleHByLmhhc2gpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHNleHByLmhhc2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJywgb21pdEVtcHR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9LFxuXG4gIGJsb2NrUGFyYW1JbmRleDogZnVuY3Rpb24obmFtZSkge1xuICAgIGZvciAobGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDsgZGVwdGggPCBsZW47IGRlcHRoKyspIHtcbiAgICAgIGxldCBibG9ja1BhcmFtcyA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtc1tkZXB0aF0sXG4gICAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKGlucHV0ID09IG51bGwgfHwgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5wcmVjb21waWxlLiBZb3UgcGFzc2VkICcgKyBpbnB1dCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCEoJ2RhdGEnIGluIG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgfVxuICBpZiAob3B0aW9ucy5jb21wYXQpIHtcbiAgICBvcHRpb25zLnVzZURlcHRocyA9IHRydWU7XG4gIH1cblxuICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoaW5wdXQgPT0gbnVsbCB8fCAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLmNvbXBpbGUuIFlvdSBwYXNzZWQgJyArIGlucHV0KTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMpO1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBjb21waWxlZDtcblxuICBmdW5jdGlvbiBjb21waWxlSW5wdXQoKSB7XG4gICAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgICAgdGVtcGxhdGVTcGVjID0gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIHJldHVybiBlbnYudGVtcGxhdGUodGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIC8vIFRlbXBsYXRlIGlzIG9ubHkgY29tcGlsZWQgb24gZmlyc3QgdXNlIGFuZCBjYWNoZWQgYWZ0ZXIgdGhhdCBwb2ludC5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIGV4ZWNPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLmNhbGwodGhpcywgY29udGV4dCwgZXhlY09wdGlvbnMpO1xuICB9XG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihzZXR1cE9wdGlvbnMpIHtcbiAgICBpZiAoIWNvbXBpbGVkKSB7XG4gICAgICBjb21waWxlZCA9IGNvbXBpbGVJbnB1dCgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQuX3NldHVwKHNldHVwT3B0aW9ucyk7XG4gIH07XG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9jaGlsZChpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gYXJnRXF1YWxzKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGEpICYmIGlzQXJyYXkoYikgJiYgYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWFyZ0VxdWFscyhhW2ldLCBiW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpIHtcbiAgaWYgKCFzZXhwci5wYXRoLnBhcnRzKSB7XG4gICAgbGV0IGxpdGVyYWwgPSBzZXhwci5wYXRoO1xuICAgIC8vIENhc3RpbmcgdG8gc3RyaW5nIGhlcmUgdG8gbWFrZSBmYWxzZSBhbmQgMCBsaXRlcmFsIHZhbHVlcyBwbGF5IG5pY2VseSB3aXRoIHRoZSByZXN0XG4gICAgLy8gb2YgdGhlIHN5c3RlbS5cbiAgICBzZXhwci5wYXRoID0ge1xuICAgICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJyxcbiAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBwYXJ0czogW2xpdGVyYWwub3JpZ2luYWwgKyAnJ10sXG4gICAgICBvcmlnaW5hbDogbGl0ZXJhbC5vcmlnaW5hbCArICcnLFxuICAgICAgbG9jOiBsaXRlcmFsLmxvY1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 exports.SourceLocation = SourceLocation;
5 exports.id = id;
6 exports.stripFlags = stripFlags;
7 exports.stripComment = stripComment;
8 exports.preparePath = preparePath;
9 exports.prepareMustache = prepareMustache;
10 exports.prepareRawBlock = prepareRawBlock;
11 exports.prepareBlock = prepareBlock;
12 exports.prepareProgram = prepareProgram;
13 exports.preparePartialBlock = preparePartialBlock;
14 // istanbul ignore next
15
16 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
17
18 var _exception = require('../exception');
19
20 var _exception2 = _interopRequireDefault(_exception);
21
22 function validateClose(open, close) {
23 close = close.path ? close.path.original : close;
24
25 if (open.path.original !== close) {
26 var errorNode = { loc: open.path.loc };
27
28 throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode);
29 }
30 }
31
32 function SourceLocation(source, locInfo) {
33 this.source = source;
34 this.start = {
35 line: locInfo.first_line,
36 column: locInfo.first_column
37 };
38 this.end = {
39 line: locInfo.last_line,
40 column: locInfo.last_column
41 };
42 }
43
44 function id(token) {
45 if (/^\[.*\]$/.test(token)) {
46 return token.substr(1, token.length - 2);
47 } else {
48 return token;
49 }
50 }
51
52 function stripFlags(open, close) {
53 return {
54 open: open.charAt(2) === '~',
55 close: close.charAt(close.length - 3) === '~'
56 };
57 }
58
59 function stripComment(comment) {
60 return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, '');
61 }
62
63 function preparePath(data, parts, loc) {
64 loc = this.locInfo(loc);
65
66 var original = data ? '@' : '',
67 dig = [],
68 depth = 0,
69 depthString = '';
70
71 for (var i = 0, l = parts.length; i < l; i++) {
72 var part = parts[i].part,
73
74 // If we have [] syntax then we do not treat path references as operators,
75 // i.e. foo.[this] resolves to approximately context.foo['this']
76 isLiteral = parts[i].original !== part;
77 original += (parts[i].separator || '') + part;
78
79 if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
80 if (dig.length > 0) {
81 throw new _exception2['default']('Invalid path: ' + original, { loc: loc });
82 } else if (part === '..') {
83 depth++;
84 depthString += '../';
85 }
86 } else {
87 dig.push(part);
88 }
89 }
90
91 return {
92 type: 'PathExpression',
93 data: data,
94 depth: depth,
95 parts: dig,
96 original: original,
97 loc: loc
98 };
99 }
100
101 function prepareMustache(path, params, hash, open, strip, locInfo) {
102 // Must use charAt to support IE pre-10
103 var escapeFlag = open.charAt(3) || open.charAt(2),
104 escaped = escapeFlag !== '{' && escapeFlag !== '&';
105
106 var decorator = /\*/.test(open);
107 return {
108 type: decorator ? 'Decorator' : 'MustacheStatement',
109 path: path,
110 params: params,
111 hash: hash,
112 escaped: escaped,
113 strip: strip,
114 loc: this.locInfo(locInfo)
115 };
116 }
117
118 function prepareRawBlock(openRawBlock, contents, close, locInfo) {
119 validateClose(openRawBlock, close);
120
121 locInfo = this.locInfo(locInfo);
122 var program = {
123 type: 'Program',
124 body: contents,
125 strip: {},
126 loc: locInfo
127 };
128
129 return {
130 type: 'BlockStatement',
131 path: openRawBlock.path,
132 params: openRawBlock.params,
133 hash: openRawBlock.hash,
134 program: program,
135 openStrip: {},
136 inverseStrip: {},
137 closeStrip: {},
138 loc: locInfo
139 };
140 }
141
142 function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
143 if (close && close.path) {
144 validateClose(openBlock, close);
145 }
146
147 var decorator = /\*/.test(openBlock.open);
148
149 program.blockParams = openBlock.blockParams;
150
151 var inverse = undefined,
152 inverseStrip = undefined;
153
154 if (inverseAndProgram) {
155 if (decorator) {
156 throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);
157 }
158
159 if (inverseAndProgram.chain) {
160 inverseAndProgram.program.body[0].closeStrip = close.strip;
161 }
162
163 inverseStrip = inverseAndProgram.strip;
164 inverse = inverseAndProgram.program;
165 }
166
167 if (inverted) {
168 inverted = inverse;
169 inverse = program;
170 program = inverted;
171 }
172
173 return {
174 type: decorator ? 'DecoratorBlock' : 'BlockStatement',
175 path: openBlock.path,
176 params: openBlock.params,
177 hash: openBlock.hash,
178 program: program,
179 inverse: inverse,
180 openStrip: openBlock.strip,
181 inverseStrip: inverseStrip,
182 closeStrip: close && close.strip,
183 loc: this.locInfo(locInfo)
184 };
185 }
186
187 function prepareProgram(statements, loc) {
188 if (!loc && statements.length) {
189 var firstLoc = statements[0].loc,
190 lastLoc = statements[statements.length - 1].loc;
191
192 /* istanbul ignore else */
193 if (firstLoc && lastLoc) {
194 loc = {
195 source: firstLoc.source,
196 start: {
197 line: firstLoc.start.line,
198 column: firstLoc.start.column
199 },
200 end: {
201 line: lastLoc.end.line,
202 column: lastLoc.end.column
203 }
204 };
205 }
206 }
207
208 return {
209 type: 'Program',
210 body: statements,
211 strip: {},
212 loc: loc
213 };
214 }
215
216 function preparePartialBlock(open, program, close, locInfo) {
217 validateClose(open, close);
218
219 return {
220 type: 'PartialBlockStatement',
221 name: open.path,
222 params: open.params,
223 hash: open.hash,
224 program: program,
225 openStrip: open.strip,
226 closeStrip: close && close.strip,
227 loc: this.locInfo(locInfo)
228 };
229 }
230 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDLENBQUM7O0FBRXJDLFVBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ2hGO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzFD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anMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHtsb2M6IG9wZW4ucGF0aC5sb2N9O1xuXG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihvcGVuLnBhdGgub3JpZ2luYWwgKyBcIiBkb2Vzbid0IG1hdGNoIFwiICsgY2xvc2UsIGVycm9yTm9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKHNvdXJjZSwgbG9jSW5mbykge1xuICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgdGhpcy5zdGFydCA9IHtcbiAgICBsaW5lOiBsb2NJbmZvLmZpcnN0X2xpbmUsXG4gICAgY29sdW1uOiBsb2NJbmZvLmZpcnN0X2NvbHVtblxuICB9O1xuICB0aGlzLmVuZCA9IHtcbiAgICBsaW5lOiBsb2NJbmZvLmxhc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8ubGFzdF9jb2x1bW5cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkKHRva2VuKSB7XG4gIGlmICgvXlxcWy4qXFxdJC8udGVzdCh0b2tlbikpIHtcbiAgICByZXR1cm4gdG9rZW4uc3Vic3RyKDEsIHRva2VuLmxlbmd0aCAtIDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBGbGFncyhvcGVuLCBjbG9zZSkge1xuICByZXR1cm4ge1xuICAgIG9wZW46IG9wZW4uY2hhckF0KDIpID09PSAnficsXG4gICAgY2xvc2U6IGNsb3NlLmNoYXJBdChjbG9zZS5sZW5ndGggLSAzKSA9PT0gJ34nXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcENvbW1lbnQoY29tbWVudCkge1xuICByZXR1cm4gY29tbWVudC5yZXBsYWNlKC9eXFx7XFx7fj9cXCEtPy0/LywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICAgIGRpZyA9IFtdLFxuICAgICAgZGVwdGggPSAwLFxuICAgICAgZGVwdGhTdHJpbmcgPSAnJztcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBwYXJ0ID0gcGFydHNbaV0ucGFydCxcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBbXSBzeW50YXggdGhlbiB3ZSBkbyBub3QgdHJlYXQgcGF0aCByZWZlcmVuY2VzIGFzIG9wZXJhdG9ycyxcbiAgICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgICBpc0xpdGVyYWwgPSBwYXJ0c1tpXS5vcmlnaW5hbCAhPT0gcGFydDtcbiAgICBvcmlnaW5hbCArPSAocGFydHNbaV0uc2VwYXJhdG9yIHx8ICcnKSArIHBhcnQ7XG5cbiAgICBpZiAoIWlzTGl0ZXJhbCAmJiAocGFydCA9PT0gJy4uJyB8fCBwYXJ0ID09PSAnLicgfHwgcGFydCA9PT0gJ3RoaXMnKSkge1xuICAgICAgaWYgKGRpZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgcGF0aDogJyArIG9yaWdpbmFsLCB7bG9jfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgZGVwdGhTdHJpbmcgKz0gJy4uLyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJyxcbiAgICBkYXRhLFxuICAgIGRlcHRoLFxuICAgIHBhcnRzOiBkaWcsXG4gICAgb3JpZ2luYWwsXG4gICAgbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTXVzdGFjaGUocGF0aCwgcGFyYW1zLCBoYXNoLCBvcGVuLCBzdHJpcCwgbG9jSW5mbykge1xuICAvLyBNdXN0IHVzZSBjaGFyQXQgdG8gc3VwcG9ydCBJRSBwcmUtMTBcbiAgbGV0IGVzY2FwZUZsYWcgPSBvcGVuLmNoYXJBdCgzKSB8fCBvcGVuLmNoYXJBdCgyKSxcbiAgICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAoL1xcKi8udGVzdChvcGVuKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogZGVjb3JhdG9yID8gJ0RlY29yYXRvcicgOiAnTXVzdGFjaGVTdGF0ZW1lbnQnLFxuICAgIHBhdGgsXG4gICAgcGFyYW1zLFxuICAgIGhhc2gsXG4gICAgZXNjYXBlZCxcbiAgICBzdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVJhd0Jsb2NrKG9wZW5SYXdCbG9jaywgY29udGVudHMsIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlblJhd0Jsb2NrLCBjbG9zZSk7XG5cbiAgbG9jSW5mbyA9IHRoaXMubG9jSW5mbyhsb2NJbmZvKTtcbiAgbGV0IHByb2dyYW0gPSB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IGNvbnRlbnRzLFxuICAgIHN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgcGF0aDogb3BlblJhd0Jsb2NrLnBhdGgsXG4gICAgcGFyYW1zOiBvcGVuUmF3QmxvY2sucGFyYW1zLFxuICAgIGhhc2g6IG9wZW5SYXdCbG9jay5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiB7fSxcbiAgICBpbnZlcnNlU3RyaXA6IHt9LFxuICAgIGNsb3NlU3RyaXA6IHt9LFxuICAgIGxvYzogbG9jSW5mb1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUJsb2NrKG9wZW5CbG9jaywgcHJvZ3JhbSwgaW52ZXJzZUFuZFByb2dyYW0sIGNsb3NlLCBpbnZlcnRlZCwgbG9jSW5mbykge1xuICBpZiAoY2xvc2UgJiYgY2xvc2UucGF0aCkge1xuICAgIHZhbGlkYXRlQ2xvc2Uob3BlbkJsb2NrLCBjbG9zZSk7XG4gIH1cblxuICBsZXQgZGVjb3JhdG9yID0gKC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pKTtcblxuICBwcm9ncmFtLmJsb2NrUGFyYW1zID0gb3BlbkJsb2NrLmJsb2NrUGFyYW1zO1xuXG4gIGxldCBpbnZlcnNlLFxuICAgICAgaW52ZXJzZVN0cmlwO1xuXG4gIGlmIChpbnZlcnNlQW5kUHJvZ3JhbSkge1xuICAgIGlmIChkZWNvcmF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgaW52ZXJzZSBibG9jayBvbiBkZWNvcmF0b3InLCBpbnZlcnNlQW5kUHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgaWYgKGludmVyc2VBbmRQcm9ncmFtLmNoYWluKSB7XG4gICAgICBpbnZlcnNlQW5kUHJvZ3JhbS5wcm9ncmFtLmJvZHlbMF0uY2xvc2VTdHJpcCA9IGNsb3NlLnN0cmlwO1xuICAgIH1cblxuICAgIGludmVyc2VTdHJpcCA9IGludmVyc2VBbmRQcm9ncmFtLnN0cmlwO1xuICAgIGludmVyc2UgPSBpbnZlcnNlQW5kUHJvZ3JhbS5wcm9ncmFtO1xuICB9XG5cbiAgaWYgKGludmVydGVkKSB7XG4gICAgaW52ZXJ0ZWQgPSBpbnZlcnNlO1xuICAgIGludmVyc2UgPSBwcm9ncmFtO1xuICAgIHByb2dyYW0gPSBpbnZlcnRlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogZGVjb3JhdG9yID8gJ0RlY29yYXRvckJsb2NrJyA6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgcGF0aDogb3BlbkJsb2NrLnBhdGgsXG4gICAgcGFyYW1zOiBvcGVuQmxvY2sucGFyYW1zLFxuICAgIGhhc2g6IG9wZW5CbG9jay5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgaW52ZXJzZSxcbiAgICBvcGVuU3RyaXA6IG9wZW5CbG9jay5zdHJpcCxcbiAgICBpbnZlcnNlU3RyaXAsXG4gICAgY2xvc2VTdHJpcDogY2xvc2UgJiYgY2xvc2Uuc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQcm9ncmFtKHN0YXRlbWVudHMsIGxvYykge1xuICBpZiAoIWxvYyAmJiBzdGF0ZW1lbnRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGZpcnN0TG9jID0gc3RhdGVtZW50c1swXS5sb2MsXG4gICAgICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYXJ0aWFsQmxvY2sob3BlbiwgcHJvZ3JhbSwgY2xvc2UsIGxvY0luZm8pIHtcbiAgdmFsaWRhdGVDbG9zZShvcGVuLCBjbG9zZSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGFydGlhbEJsb2NrU3RhdGVtZW50JyxcbiAgICBuYW1lOiBvcGVuLnBhdGgsXG4gICAgcGFyYW1zOiBvcGVuLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBvcGVuU3RyaXA6IG9wZW4uc3RyaXAsXG4gICAgY2xvc2VTdHJpcDogY2xvc2UgJiYgY2xvc2Uuc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuIl19
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 /* eslint-disable new-cap */
2 'use strict';
3
4 exports.__esModule = true;
5 exports.print = print;
6 exports.PrintVisitor = PrintVisitor;
7 // istanbul ignore next
8
9 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
10
11 var _visitor = require('./visitor');
12
13 var _visitor2 = _interopRequireDefault(_visitor);
14
15 function print(ast) {
16 return new PrintVisitor().accept(ast);
17 }
18
19 function PrintVisitor() {
20 this.padding = 0;
21 }
22
23 PrintVisitor.prototype = new _visitor2['default']();
24
25 PrintVisitor.prototype.pad = function (string) {
26 var out = '';
27
28 for (var i = 0, l = this.padding; i < l; i++) {
29 out += ' ';
30 }
31
32 out += string + '\n';
33 return out;
34 };
35
36 PrintVisitor.prototype.Program = function (program) {
37 var out = '',
38 body = program.body,
39 i = undefined,
40 l = undefined;
41
42 if (program.blockParams) {
43 var blockParams = 'BLOCK PARAMS: [';
44 for (i = 0, l = program.blockParams.length; i < l; i++) {
45 blockParams += ' ' + program.blockParams[i];
46 }
47 blockParams += ' ]';
48 out += this.pad(blockParams);
49 }
50
51 for (i = 0, l = body.length; i < l; i++) {
52 out += this.accept(body[i]);
53 }
54
55 this.padding--;
56
57 return out;
58 };
59
60 PrintVisitor.prototype.MustacheStatement = function (mustache) {
61 return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');
62 };
63 PrintVisitor.prototype.Decorator = function (mustache) {
64 return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');
65 };
66
67 PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {
68 var out = '';
69
70 out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');
71 this.padding++;
72 out += this.pad(this.SubExpression(block));
73 if (block.program) {
74 out += this.pad('PROGRAM:');
75 this.padding++;
76 out += this.accept(block.program);
77 this.padding--;
78 }
79 if (block.inverse) {
80 if (block.program) {
81 this.padding++;
82 }
83 out += this.pad('{{^}}');
84 this.padding++;
85 out += this.accept(block.inverse);
86 this.padding--;
87 if (block.program) {
88 this.padding--;
89 }
90 }
91 this.padding--;
92
93 return out;
94 };
95
96 PrintVisitor.prototype.PartialStatement = function (partial) {
97 var content = 'PARTIAL:' + partial.name.original;
98 if (partial.params[0]) {
99 content += ' ' + this.accept(partial.params[0]);
100 }
101 if (partial.hash) {
102 content += ' ' + this.accept(partial.hash);
103 }
104 return this.pad('{{> ' + content + ' }}');
105 };
106 PrintVisitor.prototype.PartialBlockStatement = function (partial) {
107 var content = 'PARTIAL BLOCK:' + partial.name.original;
108 if (partial.params[0]) {
109 content += ' ' + this.accept(partial.params[0]);
110 }
111 if (partial.hash) {
112 content += ' ' + this.accept(partial.hash);
113 }
114
115 content += ' ' + this.pad('PROGRAM:');
116 this.padding++;
117 content += this.accept(partial.program);
118 this.padding--;
119
120 return this.pad('{{> ' + content + ' }}');
121 };
122
123 PrintVisitor.prototype.ContentStatement = function (content) {
124 return this.pad("CONTENT[ '" + content.value + "' ]");
125 };
126
127 PrintVisitor.prototype.CommentStatement = function (comment) {
128 return this.pad("{{! '" + comment.value + "' }}");
129 };
130
131 PrintVisitor.prototype.SubExpression = function (sexpr) {
132 var params = sexpr.params,
133 paramStrings = [],
134 hash = undefined;
135
136 for (var i = 0, l = params.length; i < l; i++) {
137 paramStrings.push(this.accept(params[i]));
138 }
139
140 params = '[' + paramStrings.join(', ') + ']';
141
142 hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';
143
144 return this.accept(sexpr.path) + ' ' + params + hash;
145 };
146
147 PrintVisitor.prototype.PathExpression = function (id) {
148 var path = id.parts.join('/');
149 return (id.data ? '@' : '') + 'PATH:' + path;
150 };
151
152 PrintVisitor.prototype.StringLiteral = function (string) {
153 return '"' + string.value + '"';
154 };
155
156 PrintVisitor.prototype.NumberLiteral = function (number) {
157 return 'NUMBER{' + number.value + '}';
158 };
159
160 PrintVisitor.prototype.BooleanLiteral = function (bool) {
161 return 'BOOLEAN{' + bool.value + '}';
162 };
163
164 PrintVisitor.prototype.UndefinedLiteral = function () {
165 return 'UNDEFINED';
166 };
167
168 PrintVisitor.prototype.NullLiteral = function () {
169 return 'NULL';
170 };
171
172 PrintVisitor.prototype.Hash = function (hash) {
173 var pairs = hash.pairs,
174 joinedPairs = [];
175
176 for (var i = 0, l = pairs.length; i < l; i++) {
177 joinedPairs.push(this.accept(pairs[i]));
178 }
179
180 return 'HASH{' + joinedPairs.join(', ') + '}';
181 };
182 PrintVisitor.prototype.HashPair = function (pair) {
183 return pair.key + '=' + this.accept(pair.value);
184 };
185 /* eslint-enable new-cap */
186 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozt1QkFDb0IsV0FBVzs7OztBQUV4QixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDekIsU0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2Qzs7QUFFTSxTQUFTLFlBQVksR0FBRztBQUM3QixNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNsQjs7QUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRXZDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVMsTUFBTSxFQUFFO0FBQzVDLE1BQUksR0FBRyxHQUFHLEVBQUUsQ0FBQzs7QUFFYixPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLE9BQUcsSUFBSSxJQUFJLENBQUM7R0FDYjs7QUFFRCxLQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDakQsTUFBSSxHQUFHLEdBQUcsRUFBRTtNQUNSLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtNQUNuQixDQUFDLFlBQUE7TUFBRSxDQUFDLFlBQUEsQ0FBQzs7QUFFVCxNQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDdkIsUUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsU0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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SUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3pDOztBQUVELFNBQU8sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQy9DLENBQUM7QUFDRixZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFTLElBQUksRUFBRTtBQUMvQyxTQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ2pELENBQUMiLCJmaWxlIjoicHJpbnRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cbmltcG9ydCBWaXNpdG9yIGZyb20gJy4vdmlzaXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludChhc3QpIHtcbiAgcmV0dXJuIG5ldyBQcmludFZpc2l0b3IoKS5hY2NlcHQoYXN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByaW50VmlzaXRvcigpIHtcbiAgdGhpcy5wYWRkaW5nID0gMDtcbn1cblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUucGFkID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGxldCBvdXQgPSAnJztcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucGFkZGluZzsgaSA8IGw7IGkrKykge1xuICAgIG91dCArPSAnICAnO1xuICB9XG5cbiAgb3V0ICs9IHN0cmluZyArICdcXG4nO1xuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBsZXQgb3V0ID0gJycsXG4gICAgICBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgaSwgbDtcblxuICBpZiAocHJvZ3JhbS5ibG9ja1BhcmFtcykge1xuICAgIGxldCBibG9ja1BhcmFtcyA9ICdCTE9DSyBQQVJBTVM6IFsnO1xuICAgIGZvciAoaSA9IDAsIGwgPSBwcm9ncmFtLmJsb2NrUGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgIGJsb2NrUGFyYW1zICs9ICcgJyArIHByb2dyYW0uYmxvY2tQYXJhbXNbaV07XG4gICAgfVxuICAgIGJsb2NrUGFyYW1zICs9ICcgXSc7XG4gICAgb3V0ICs9IHRoaXMucGFkKGJsb2NrUGFyYW1zKTtcbiAgfVxuXG4gIGZvciAoaSA9IDAsIGwgPSBib2R5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChib2R5W2ldKTtcbiAgfVxuXG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk11c3RhY2hlU3RhdGVtZW50ID0gZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgcmV0dXJuIHRoaXMucGFkKCd7eyAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvciA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgRElSRUNUSVZFICcgKyB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpICsgJyB9fScpO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9XG5QcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvckJsb2NrID0gZnVuY3Rpb24oYmxvY2spIHtcbiAgbGV0IG91dCA9ICcnO1xuXG4gIG91dCArPSB0aGlzLnBhZCgoYmxvY2sudHlwZSA9PT0gJ0RlY29yYXRvckJsb2NrJyA/ICdESVJFQ1RJVkUgJyA6ICcnKSArICdCTE9DSzonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIG91dCArPSB0aGlzLnBhZCh0aGlzLlN1YkV4cHJlc3Npb24oYmxvY2spKTtcbiAgaWYgKGJsb2NrLnByb2dyYW0pIHtcbiAgICBvdXQgKz0gdGhpcy5wYWQoJ1BST0dSQU06Jyk7XG4gICAgdGhpcy5wYWRkaW5nKys7XG4gICAgb3V0ICs9IHRoaXMuYWNjZXB0KGJsb2NrLnByb2dyYW0pO1xuICAgIHRoaXMucGFkZGluZy0tO1xuICB9XG4gIGlmIChibG9jay5pbnZlcnNlKSB7XG4gICAgaWYgKGJsb2NrLnByb2dyYW0pIHsgdGhpcy5wYWRkaW5nKys7IH1cbiAgICBvdXQgKz0gdGhpcy5wYWQoJ3t7Xn19Jyk7XG4gICAgdGhpcy5wYWRkaW5nKys7XG4gICAgb3V0ICs9IHRoaXMuYWNjZXB0KGJsb2NrLmludmVyc2UpO1xuICAgIHRoaXMucGFkZGluZy0tO1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7IHRoaXMucGFkZGluZy0tOyB9XG4gIH1cbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTDonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG4gIHJldHVybiB0aGlzLnBhZCgne3s+ICcgKyBjb250ZW50ICsgJyB9fScpO1xufTtcblByaW50VmlzaXRvci5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24ocGFydGlhbCkge1xuICBsZXQgY29udGVudCA9ICdQQVJUSUFMIEJMT0NLOicgKyBwYXJ0aWFsLm5hbWUub3JpZ2luYWw7XG4gIGlmIChwYXJ0aWFsLnBhcmFtc1swXSkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5wYXJhbXNbMF0pO1xuICB9XG4gIGlmIChwYXJ0aWFsLmhhc2gpIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwuaGFzaCk7XG4gIH1cblxuICBjb250ZW50ICs9ICcgJyArIHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICB0aGlzLnBhZGRpbmcrKztcbiAgY29udGVudCArPSB0aGlzLmFjY2VwdChwYXJ0aWFsLnByb2dyYW0pO1xuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29udGVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwiQ09OVEVOVFsgJ1wiICsgY29udGVudC52YWx1ZSArIFwiJyBdXCIpO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICByZXR1cm4gdGhpcy5wYWQoXCJ7eyEgJ1wiICsgY29tbWVudC52YWx1ZSArIFwiJyB9fVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuU3ViRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKHNleHByKSB7XG4gIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXMsXG4gICAgICBwYXJhbVN0cmluZ3MgPSBbXSxcbiAgICAgIGhhc2g7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcGFyYW1TdHJpbmdzLnB1c2godGhpcy5hY2NlcHQocGFyYW1zW2ldKSk7XG4gIH1cblxuICBwYXJhbXMgPSAnWycgKyBwYXJhbVN0cmluZ3Muam9pbignLCAnKSArICddJztcblxuICBoYXNoID0gc2V4cHIuaGFzaCA/ICcgJyArIHRoaXMuYWNjZXB0KHNleHByLmhhc2gpIDogJyc7XG5cbiAgcmV0dXJuIHRoaXMuYWNjZXB0KHNleHByLnBhdGgpICsgJyAnICsgcGFyYW1zICsgaGFzaDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbihpZCkge1xuICBsZXQgcGF0aCA9IGlkLnBhcnRzLmpvaW4oJy8nKTtcbiAgcmV0dXJuIChpZC5kYXRhID8gJ0AnIDogJycpICsgJ1BBVEg6JyArIHBhdGg7XG59O1xuXG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuU3RyaW5nTGl0ZXJhbCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICByZXR1cm4gJ1wiJyArIHN0cmluZy52YWx1ZSArICdcIic7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk51bWJlckxpdGVyYWwgPSBmdW5jdGlvbihudW1iZXIpIHtcbiAgcmV0dXJuICdOVU1CRVJ7JyArIG51bWJlci52YWx1ZSArICd9Jztcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQm9vbGVhbkxpdGVyYWwgPSBmdW5jdGlvbihib29sKSB7XG4gIHJldHVybiAnQk9PTEVBTnsnICsgYm9vbC52YWx1ZSArICd9Jztcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuVW5kZWZpbmVkTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ1VOREVGSU5FRCc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk51bGxMaXRlcmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnTlVMTCc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkhhc2ggPSBmdW5jdGlvbihoYXNoKSB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBqb2luZWRQYWlycyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgam9pbmVkUGFpcnMucHVzaCh0aGlzLmFjY2VwdChwYWlyc1tpXSkpO1xuICB9XG5cbiAgcmV0dXJuICdIQVNIeycgKyBqb2luZWRQYWlycy5qb2luKCcsICcpICsgJ30nO1xufTtcblByaW50VmlzaXRvci5wcm90b3R5cGUuSGFzaFBhaXIgPSBmdW5jdGlvbihwYWlyKSB7XG4gIHJldHVybiBwYWlyLmtleSArICc9JyArIHRoaXMuYWNjZXB0KHBhaXIudmFsdWUpO1xufTtcbi8qIGVzbGludC1lbmFibGUgbmV3LWNhcCAqL1xuIl19
1 'use strict';
2
3 exports.__esModule = true;
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _exception = require('../exception');
9
10 var _exception2 = _interopRequireDefault(_exception);
11
12 function Visitor() {
13 this.parents = [];
14 }
15
16 Visitor.prototype = {
17 constructor: Visitor,
18 mutating: false,
19
20 // Visits a given value. If mutating, will replace the value if necessary.
21 acceptKey: function acceptKey(node, name) {
22 var value = this.accept(node[name]);
23 if (this.mutating) {
24 // Hacky sanity check: This may have a few false positives for type for the helper
25 // methods but will generally do the right thing without a lot of overhead.
26 if (value && !Visitor.prototype[value.type]) {
27 throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
28 }
29 node[name] = value;
30 }
31 },
32
33 // Performs an accept operation with added sanity check to ensure
34 // required keys are not removed.
35 acceptRequired: function acceptRequired(node, name) {
36 this.acceptKey(node, name);
37
38 if (!node[name]) {
39 throw new _exception2['default'](node.type + ' requires ' + name);
40 }
41 },
42
43 // Traverses a given array. If mutating, empty respnses will be removed
44 // for child elements.
45 acceptArray: function acceptArray(array) {
46 for (var i = 0, l = array.length; i < l; i++) {
47 this.acceptKey(array, i);
48
49 if (!array[i]) {
50 array.splice(i, 1);
51 i--;
52 l--;
53 }
54 }
55 },
56
57 accept: function accept(object) {
58 if (!object) {
59 return;
60 }
61
62 /* istanbul ignore next: Sanity code */
63 if (!this[object.type]) {
64 throw new _exception2['default']('Unknown type: ' + object.type, object);
65 }
66
67 if (this.current) {
68 this.parents.unshift(this.current);
69 }
70 this.current = object;
71
72 var ret = this[object.type](object);
73
74 this.current = this.parents.shift();
75
76 if (!this.mutating || ret) {
77 return ret;
78 } else if (ret !== false) {
79 return object;
80 }
81 },
82
83 Program: function Program(program) {
84 this.acceptArray(program.body);
85 },
86
87 MustacheStatement: visitSubExpression,
88 Decorator: visitSubExpression,
89
90 BlockStatement: visitBlock,
91 DecoratorBlock: visitBlock,
92
93 PartialStatement: visitPartial,
94 PartialBlockStatement: function PartialBlockStatement(partial) {
95 visitPartial.call(this, partial);
96
97 this.acceptKey(partial, 'program');
98 },
99
100 ContentStatement: function ContentStatement() /* content */{},
101 CommentStatement: function CommentStatement() /* comment */{},
102
103 SubExpression: visitSubExpression,
104
105 PathExpression: function PathExpression() /* path */{},
106
107 StringLiteral: function StringLiteral() /* string */{},
108 NumberLiteral: function NumberLiteral() /* number */{},
109 BooleanLiteral: function BooleanLiteral() /* bool */{},
110 UndefinedLiteral: function UndefinedLiteral() /* literal */{},
111 NullLiteral: function NullLiteral() /* literal */{},
112
113 Hash: function Hash(hash) {
114 this.acceptArray(hash.pairs);
115 },
116 HashPair: function HashPair(pair) {
117 this.acceptRequired(pair, 'value');
118 }
119 };
120
121 function visitSubExpression(mustache) {
122 this.acceptRequired(mustache, 'path');
123 this.acceptArray(mustache.params);
124 this.acceptKey(mustache, 'hash');
125 }
126 function visitBlock(block) {
127 visitSubExpression.call(this, block);
128
129 this.acceptKey(block, 'program');
130 this.acceptKey(block, 'inverse');
131 }
132 function visitPartial(partial) {
133 this.acceptRequired(partial, 'name');
134 this.acceptArray(partial.params);
135 this.acceptKey(partial, 'hash');
136 }
137
138 exports['default'] = Visitor;
139 module.exports = exports['default'];
140 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFBYyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLHlCQUF5QixHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3BIO0FBQ0QsVUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNwQjtHQUNGOzs7O0FBSUQsZ0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ25DLFFBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUUzQixRQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2YsWUFBTSwyQkFBYyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztLQUN0RDtHQUNGOzs7O0FBSUQsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixTQUFLLElBQUksQ0FBQyxHQUFH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O0FBQ2xDLE1BQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ2xDO0FBQ0QsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQ3pCLG9CQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7O0FBRXJDLE1BQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLE1BQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0NBQ2xDO0FBQ0QsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzdCLE1BQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLE1BQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLE1BQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ2pDOztxQkFFYyxPQUFPIiwiZmlsZSI6InZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIFZpc2l0b3IoKSB7XG4gIHRoaXMucGFyZW50cyA9IFtdO1xufVxuXG5WaXNpdG9yLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFZpc2l0b3IsXG4gIG11dGF0aW5nOiBmYWxzZSxcblxuICAvLyBWaXNpdHMgYSBnaXZlbiB2YWx1ZS4gSWYgbXV0YXRpbmcsIHdpbGwgcmVwbGFjZSB0aGUgdmFsdWUgaWYgbmVjZXNzYXJ5LlxuICBhY2NlcHRLZXk6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmFjY2VwdChub2RlW25hbWVdKTtcbiAgICBpZiAodGhpcy5tdXRhdGluZykge1xuICAgICAgLy8gSGFja3kgc2FuaXR5IGNoZWNrOiBUaGlzIG1heSBoYXZlIGEgZmV3IGZhbHNlIHBvc2l0aXZlcyBmb3IgdHlwZSBmb3IgdGhlIGhlbHBlclxuICAgICAgLy8gbWV0aG9kcyBidXQgd2lsbCBnZW5lcmFsbHkgZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGhvdXQgYSBsb3Qgb2Ygb3ZlcmhlYWQuXG4gICAgICBpZiAodmFsdWUgJiYgIVZpc2l0b3IucHJvdG90eXBlW3ZhbHVlLnR5cGVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgbm9kZSB0eXBlIFwiJyArIHZhbHVlLnR5cGUgKyAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArIG5hbWUgKyAnIG9uICcgKyBub2RlLnR5cGUpO1xuICAgICAgfVxuICAgICAgbm9kZVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICAvLyBQZXJmb3JtcyBhbiBhY2NlcHQgb3BlcmF0aW9uIHdpdGggYWRkZWQgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZVxuICAvLyByZXF1aXJlZCBrZXlzIGFyZSBub3QgcmVtb3ZlZC5cbiAgYWNjZXB0UmVxdWlyZWQ6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICB0aGlzLmFjY2VwdEtleShub2RlLCBuYW1lKTtcblxuICAgIGlmICghbm9kZVtuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihub2RlLnR5cGUgKyAnIHJlcXVpcmVzICcgKyBuYW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVHJhdmVyc2VzIGEgZ2l2ZW4gYXJyYXkuIElmIG11dGF0aW5nLCBlbXB0eSByZXNwbnNlcyB3aWxsIGJlIHJlbW92ZWRcbiAgLy8gZm9yIGNoaWxkIGVsZW1lbnRzLlxuICBhY2NlcHRBcnJheTogZnVuY3Rpb24oYXJyYXkpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHRLZXkoYXJyYXksIGkpO1xuXG4gICAgICBpZiAoIWFycmF5W2ldKSB7XG4gICAgICAgIGFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgICAgaS0tO1xuICAgICAgICBsLS07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogU2FuaXR5IGNvZGUgKi9cbiAgICBpZiAoIXRoaXNbb2JqZWN0LnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBvYmplY3QudHlwZSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudHMudW5zaGlmdCh0aGlzLmN1cnJlbnQpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICBsZXQgcmV0ID0gdGhpc1tvYmplY3QudHlwZV0ob2JqZWN0KTtcblxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMucGFyZW50cy5zaGlmdCgpO1xuXG4gICAgaWYgKCF0aGlzLm11dGF0aW5nIHx8IHJldCkge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2UgaWYgKHJldCAhPT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICB0aGlzLmFjY2VwdEFycmF5KHByb2dyYW0uYm9keSk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IHZpc2l0U3ViRXhwcmVzc2lvbixcbiAgRGVjb3JhdG9yOiB2aXNpdFN1YkV4cHJlc3Npb24sXG5cbiAgQmxvY2tTdGF0ZW1lbnQ6IHZpc2l0QmxvY2ssXG4gIERlY29yYXRvckJsb2NrOiB2aXNpdEJsb2NrLFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IHZpc2l0UGFydGlhbCxcbiAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gICAgdmlzaXRQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCk7XG5cbiAgICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAncHJvZ3JhbScpO1xuICB9LFxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKC8qIGNvbnRlbnQgKi8pIHt9LFxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb21tZW50ICovKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiB2aXNpdFN1YkV4cHJlc3Npb24sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKC8qIHBhdGggKi8pIHt9LFxuXG4gIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKC8qIHN0cmluZyAqLykge30sXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKC8qIG51bWJlciAqLykge30sXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbigvKiBib29sICovKSB7fSxcbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG4gIE51bGxMaXRlcmFsOiBmdW5jdGlvbigvKiBsaXRlcmFsICovKSB7fSxcblxuICBIYXNoOiBmdW5jdGlvbihoYXNoKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShoYXNoLnBhaXJzKTtcbiAgfSxcbiAgSGFzaFBhaXI6IGZ1bmN0aW9uKHBhaXIpIHtcbiAgICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhaXIsICd2YWx1ZScpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB2aXNpdFN1YkV4cHJlc3Npb24obXVzdGFjaGUpIHtcbiAgdGhpcy5hY2NlcHRSZXF1aXJlZChtdXN0YWNoZSwgJ3BhdGgnKTtcbiAgdGhpcy5hY2NlcHRBcnJheShtdXN0YWNoZS5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShtdXN0YWNoZSwgJ2hhc2gnKTtcbn1cbmZ1bmN0aW9uIHZpc2l0QmxvY2soYmxvY2spIHtcbiAgdmlzaXRTdWJFeHByZXNzaW9uLmNhbGwodGhpcywgYmxvY2spO1xuXG4gIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAncHJvZ3JhbScpO1xuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ2ludmVyc2UnKTtcbn1cbmZ1bmN0aW9uIHZpc2l0UGFydGlhbChwYXJ0aWFsKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFydGlhbCwgJ25hbWUnKTtcbiAgdGhpcy5hY2NlcHRBcnJheShwYXJ0aWFsLnBhcmFtcyk7XG4gIHRoaXMuYWNjZXB0S2V5KHBhcnRpYWwsICdoYXNoJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpc2l0b3I7XG4iXX0=
1 'use strict';
2
3 exports.__esModule = true;
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _visitor = require('./visitor');
9
10 var _visitor2 = _interopRequireDefault(_visitor);
11
12 function WhitespaceControl() {
13 var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
14
15 this.options = options;
16 }
17 WhitespaceControl.prototype = new _visitor2['default']();
18
19 WhitespaceControl.prototype.Program = function (program) {
20 var doStandalone = !this.options.ignoreStandalone;
21
22 var isRoot = !this.isRootSeen;
23 this.isRootSeen = true;
24
25 var body = program.body;
26 for (var i = 0, l = body.length; i < l; i++) {
27 var current = body[i],
28 strip = this.accept(current);
29
30 if (!strip) {
31 continue;
32 }
33
34 var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
35 _isNextWhitespace = isNextWhitespace(body, i, isRoot),
36 openStandalone = strip.openStandalone && _isPrevWhitespace,
37 closeStandalone = strip.closeStandalone && _isNextWhitespace,
38 inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
39
40 if (strip.close) {
41 omitRight(body, i, true);
42 }
43 if (strip.open) {
44 omitLeft(body, i, true);
45 }
46
47 if (doStandalone && inlineStandalone) {
48 omitRight(body, i);
49
50 if (omitLeft(body, i)) {
51 // If we are on a standalone node, save the indent info for partials
52 if (current.type === 'PartialStatement') {
53 // Pull out the whitespace from the final line
54 current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1];
55 }
56 }
57 }
58 if (doStandalone && openStandalone) {
59 omitRight((current.program || current.inverse).body);
60
61 // Strip out the previous content node if it's whitespace only
62 omitLeft(body, i);
63 }
64 if (doStandalone && closeStandalone) {
65 // Always strip the next node
66 omitRight(body, i);
67
68 omitLeft((current.inverse || current.program).body);
69 }
70 }
71
72 return program;
73 };
74
75 WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {
76 this.accept(block.program);
77 this.accept(block.inverse);
78
79 // Find the inverse program that is involed with whitespace stripping.
80 var program = block.program || block.inverse,
81 inverse = block.program && block.inverse,
82 firstInverse = inverse,
83 lastInverse = inverse;
84
85 if (inverse && inverse.chained) {
86 firstInverse = inverse.body[0].program;
87
88 // Walk the inverse chain to find the last inverse that is actually in the chain.
89 while (lastInverse.chained) {
90 lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
91 }
92 }
93
94 var strip = {
95 open: block.openStrip.open,
96 close: block.closeStrip.close,
97
98 // Determine the standalone candiacy. Basically flag our content as being possibly standalone
99 // so our parent can determine if we actually are standalone
100 openStandalone: isNextWhitespace(program.body),
101 closeStandalone: isPrevWhitespace((firstInverse || program).body)
102 };
103
104 if (block.openStrip.close) {
105 omitRight(program.body, null, true);
106 }
107
108 if (inverse) {
109 var inverseStrip = block.inverseStrip;
110
111 if (inverseStrip.open) {
112 omitLeft(program.body, null, true);
113 }
114
115 if (inverseStrip.close) {
116 omitRight(firstInverse.body, null, true);
117 }
118 if (block.closeStrip.open) {
119 omitLeft(lastInverse.body, null, true);
120 }
121
122 // Find standalone else statments
123 if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {
124 omitLeft(program.body);
125 omitRight(firstInverse.body);
126 }
127 } else if (block.closeStrip.open) {
128 omitLeft(program.body, null, true);
129 }
130
131 return strip;
132 };
133
134 WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {
135 return mustache.strip;
136 };
137
138 WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {
139 /* istanbul ignore next */
140 var strip = node.strip || {};
141 return {
142 inlineStandalone: true,
143 open: strip.open,
144 close: strip.close
145 };
146 };
147
148 function isPrevWhitespace(body, i, isRoot) {
149 if (i === undefined) {
150 i = body.length;
151 }
152
153 // Nodes that end with newlines are considered whitespace (but are special
154 // cased for strip operations)
155 var prev = body[i - 1],
156 sibling = body[i - 2];
157 if (!prev) {
158 return isRoot;
159 }
160
161 if (prev.type === 'ContentStatement') {
162 return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original);
163 }
164 }
165 function isNextWhitespace(body, i, isRoot) {
166 if (i === undefined) {
167 i = -1;
168 }
169
170 var next = body[i + 1],
171 sibling = body[i + 2];
172 if (!next) {
173 return isRoot;
174 }
175
176 if (next.type === 'ContentStatement') {
177 return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original);
178 }
179 }
180
181 // Marks the node to the right of the position as omitted.
182 // I.e. {{foo}}' ' will mark the ' ' node as omitted.
183 //
184 // If i is undefined, then the first child will be marked as such.
185 //
186 // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
187 // content is met.
188 function omitRight(body, i, multiple) {
189 var current = body[i == null ? 0 : i + 1];
190 if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {
191 return;
192 }
193
194 var original = current.value;
195 current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, '');
196 current.rightStripped = current.value !== original;
197 }
198
199 // Marks the node to the left of the position as omitted.
200 // I.e. ' '{{foo}} will mark the ' ' node as omitted.
201 //
202 // If i is undefined then the last child will be marked as such.
203 //
204 // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
205 // content is met.
206 function omitLeft(body, i, multiple) {
207 var current = body[i == null ? body.length - 1 : i - 1];
208 if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {
209 return;
210 }
211
212 // We omit the last node if it's whitespace only and not preceeded by a non-content node.
213 var original = current.value;
214 current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, '');
215 current.leftStripped = current.value !== original;
216 return current.leftStripped;
217 }
218
219 exports['default'] = WhitespaceControl;
220 module.exports = exports['default'];
221 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUVqQyxRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFFckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFELGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLGlCQUFpQjtRQUM1RCxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksaUJBQWlCLElBQUksaUJBQWlCLENBQUM7O0FBRXhGLFFBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNmLGVBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzFCO0FBQ0QsUUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ2QsY0FBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekI7O0FBRUQsUUFBSSxZQUFZLElBQUksZ0JBQWdCLEVBQUU7QUFDcEMsZUFBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFbkIsVUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFOztBQUVyQixZQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUU7O0FBRXZDLGlCQUFPLENBQUMsTUFBTSxHQUFHLEFBQUMsV0FBVyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlEO09BQ0Y7S0FDRjtBQUNELFFBQUksWUFBWSxJQUFJLGNBQWMsRUFBRTtBQUNsQyxlQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUEsQ0FBRSxJQUFJLENBQUMsQ0FBQzs7O0FBR3JELGNBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkI7QUFDRCxRQUFJLFlBQVksSUFBSSxlQUFlLEVBQUU7O0FBRW5DLGVBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBRW5CLGNBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQSxDQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3JEO0dBQ0Y7O0FBRUQsU0FBTyxPQUFPLENBQUM7Q0FDaEIsQ0FBQzs7QUFFRixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUMxQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUMxQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEdBQUcsVUFBUyxLQUFLLEVBQUU7QUFDbEUsTUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0IsTUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUczQixNQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPO01BQ3hDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPO01BQ3hDLFlBQVksR0FBRyxPQUFPO01BQ3RCLFdBQVcsR0FBRyxPQUFPLENBQUM7O0FBRTFCLE1BQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDOUIsZ0JBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzs7O0FBR3ZDLFdBQU8sV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUMxQixpQkFBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0tBQ3JFO0dBQ0Y7O0FBRUQsTUFBSSxLQUFLLEdBQUc7QUFDVixRQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzFCLFNBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUs7Ozs7QUFJN0Isa0JBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzlDLG1CQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFBLENBQUUsSUFBSSxDQUFDO0dBQ2xFLENBQUM7O0FBRUYsTUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUN6QixhQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDckM7O0FBRUQsTUFBSSxPQUFPLEVBQUU7QUFDWCxRQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDOztBQUV0QyxRQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDckIsY0FBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BDOztBQUVELFFBQUksWUFBWSxDQUFDLEtBQUssRUFBRTtBQUN0QixlQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDMUM7QUFDRCxRQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQ3pCLGNBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4Qzs7O0FBR0QsUUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQzNCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFDOUIsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFDLGNBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsZUFBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtBQUNoQyxZQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDcEM7O0FBRUQsU0FBTyxLQUFLLENBQUM7Q0FDZCxDQUFDOztBQUVGLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQ3JDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxVQUFTLFFBQVEsRUFBRTtBQUNqRSxTQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDdkIsQ0FBQzs7QUFFRixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQ3hDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFTLElBQUksRUFBRTs7QUFFaEUsTUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDN0IsU0FBTztBQUNMLG9CQUFnQixFQUFFLElBQUk7QUFDdEIsUUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0FBQ2hCLFNBQUssRUFBRSxLQUFLLENBQUMsS0FBSztHQUNuQixDQUFDO0NBQ0gsQ0FBQzs7QUFHRixTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLE1BQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNuQixLQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztHQUNqQjs7OztBQUlELE1BQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCxXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVELE1BQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtBQUNwQyxXQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFJLFlBQVksR0FBSyxnQkFBZ0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7R0FDdkY7Q0FDRjtBQUNELFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDekMsTUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25CLEtBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUNSOztBQUVELE1BQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCxXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVELE1BQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtBQUNwQyxXQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFJLFlBQVksR0FBSyxnQkFBZ0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7R0FDdkY7Q0FDRjs7Ozs7Ozs7O0FBU0QsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUU7QUFDcEMsTUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxNQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLGFBQWEsQUFBQyxFQUFFO0FBQzNGLFdBQU87R0FDUjs7QUFFRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFJLE1BQU0sR0FBSyxlQUFlLEFBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRixTQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDO0NBQ3BEOzs7Ozs7Ozs7QUFTRCxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRTtBQUNuQyxNQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEFBQUMsRUFBRTtBQUMxRixXQUFPO0dBQ1I7OztBQUdELE1BQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDN0IsU0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUksTUFBTSxHQUFLLFNBQVMsQUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLFNBQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDbEQsU0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDO0NBQzdCOztxQkFFYyxpQkFBaUIiLCJmaWxlIjoid2hpdGVzcGFjZS1jb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi92aXNpdG9yJztcblxuZnVuY3Rpb24gV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyA9IHt9KSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG59XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgY29uc3QgZG9TdGFuZGFsb25lID0gIXRoaXMub3B0aW9ucy5pZ25vcmVTdGFuZGFsb25lO1xuXG4gIGxldCBpc1Jvb3QgPSAhdGhpcy5pc1Jvb3RTZWVuO1xuICB0aGlzLmlzUm9vdFNlZW4gPSB0cnVlO1xuXG4gIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5O1xuICBmb3IgKGxldCBpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IGN1cnJlbnQgPSBib2R5W2ldLFxuICAgICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgICBfaXNOZXh0V2hpdGVzcGFjZSA9IGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSxcblxuICAgICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgICBjbG9zZVN0YW5kYWxvbmUgPSBzdHJpcC5jbG9zZVN0YW5kYWxvbmUgJiYgX2lzTmV4dFdoaXRlc3BhY2UsXG4gICAgICAgIGlubGluZVN0YW5kYWxvbmUgPSBzdHJpcC5pbmxpbmVTdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlICYmIF9pc05leHRXaGl0ZXNwYWNlO1xuXG4gICAgaWYgKHN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoZG9TdGFuZGFsb25lICYmIGlubGluZVN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpKTtcblxuICAgICAgaWYgKG9taXRMZWZ0KGJvZHksIGkpKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBvbiBhIHN0YW5kYWxvbmUgbm9kZSwgc2F2ZSB0aGUgaW5kZW50IGluZm8gZm9yIHBhcnRpYWxzXG4gICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICdQYXJ0aWFsU3RhdGVtZW50Jykge1xuICAgICAgICAgIC8vIFB1bGwgb3V0IHRoZSB3aGl0ZXNwYWNlIGZyb20gdGhlIGZpbmFsIGxpbmVcbiAgICAgICAgICBjdXJyZW50LmluZGVudCA9ICgvKFsgXFx0XSskKS8pLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuRGVjb3JhdG9yQmxvY2sgPVxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKGJsb2NrKSB7XG4gIHRoaXMuYWNjZXB0KGJsb2NrLnByb2dyYW0pO1xuICB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcblxuICAvLyBGaW5kIHRoZSBpbnZlcnNlIHByb2dyYW0gdGhhdCBpcyBpbnZvbGVkIHdpdGggd2hpdGVzcGFjZSBzdHJpcHBpbmcuXG4gIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSB8fCBibG9jay5pbnZlcnNlLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLnByb2dyYW0gJiYgYmxvY2suaW52ZXJzZSxcbiAgICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgICBsYXN0SW52ZXJzZSA9IGludmVyc2U7XG5cbiAgaWYgKGludmVyc2UgJiYgaW52ZXJzZS5jaGFpbmVkKSB7XG4gICAgZmlyc3RJbnZlcnNlID0gaW52ZXJzZS5ib2R5WzBdLnByb2dyYW07XG5cbiAgICAvLyBXYWxrIHRoZSBpbnZlcnNlIGNoYWluIHRvIGZpbmQgdGhlIGxhc3QgaW52ZXJzZSB0aGF0IGlzIGFjdHVhbGx5IGluIHRoZSBjaGFpbi5cbiAgICB3aGlsZSAobGFzdEludmVyc2UuY2hhaW5lZCkge1xuICAgICAgbGFzdEludmVyc2UgPSBsYXN0SW52ZXJzZS5ib2R5W2xhc3RJbnZlcnNlLmJvZHkubGVuZ3RoIC0gMV0ucHJvZ3JhbTtcbiAgICB9XG4gIH1cblxuICBsZXQgc3RyaXAgPSB7XG4gICAgb3BlbjogYmxvY2sub3BlblN0cmlwLm9wZW4sXG4gICAgY2xvc2U6IGJsb2NrLmNsb3NlU3RyaXAuY2xvc2UsXG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHN0YW5kYWxvbmUgY2FuZGlhY3kuIEJhc2ljYWxseSBmbGFnIG91ciBjb250ZW50IGFzIGJlaW5nIHBvc3NpYmx5IHN0YW5kYWxvbmVcbiAgICAvLyBzbyBvdXIgcGFyZW50IGNhbiBkZXRlcm1pbmUgaWYgd2UgYWN0dWFsbHkgYXJlIHN0YW5kYWxvbmVcbiAgICBvcGVuU3RhbmRhbG9uZTogaXNOZXh0V2hpdGVzcGFjZShwcm9ncmFtLmJvZHkpLFxuICAgIGNsb3NlU3RhbmRhbG9uZTogaXNQcmV2V2hpdGVzcGFjZSgoZmlyc3RJbnZlcnNlIHx8IHByb2dyYW0pLmJvZHkpXG4gIH07XG5cbiAgaWYgKGJsb2NrLm9wZW5TdHJpcC5jbG9zZSkge1xuICAgIG9taXRSaWdodChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgaWYgKGludmVyc2UpIHtcbiAgICBsZXQgaW52ZXJzZVN0cmlwID0gYmxvY2suaW52ZXJzZVN0cmlwO1xuXG4gICAgaWYgKGludmVyc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlU3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChmaXJzdEludmVyc2UuYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGxhc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgc3RhbmRhbG9uZSBlbHNlIHN0YXRtZW50c1xuICAgIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmVcbiAgICAgICAgJiYgaXNQcmV2V2hpdGVzcGFjZShwcm9ncmFtLmJvZHkpXG4gICAgICAgICYmIGlzTmV4dFdoaXRlc3BhY2UoZmlyc3RJbnZlcnNlLmJvZHkpKSB7XG4gICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHkpO1xuICAgICAgb21pdFJpZ2h0KGZpcnN0SW52ZXJzZS5ib2R5KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3IgPVxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLk11c3RhY2hlU3RhdGVtZW50ID0gZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgcmV0dXJuIG11c3RhY2hlLnN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPVxuICAgIFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgc3RyaXAgPSBub2RlLnN0cmlwIHx8IHt9O1xuICByZXR1cm4ge1xuICAgIGlubGluZVN0YW5kYWxvbmU6IHRydWUsXG4gICAgb3Blbjogc3RyaXAub3BlbixcbiAgICBjbG9zZTogc3RyaXAuY2xvc2VcbiAgfTtcbn07XG5cblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgICAgc2libGluZyA9IGJvZHlbaSAtIDJdO1xuICBpZiAoIXByZXYpIHtcbiAgICByZXR1cm4gaXNSb290O1xuICB9XG5cbiAgaWYgKHByZXYudHlwZSA9PT0gJ0NvbnRlbnRTdGF0ZW1lbnQnKSB7XG4gICAgcmV0dXJuIChzaWJsaW5nIHx8ICFpc1Jvb3QgPyAoL1xccj9cXG5cXHMqPyQvKSA6ICgvKF58XFxyP1xcbilcXHMqPyQvKSkudGVzdChwcmV2Lm9yaWdpbmFsKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNOZXh0V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAtMTtcbiAgfVxuXG4gIGxldCBuZXh0ID0gYm9keVtpICsgMV0sXG4gICAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/ICgvXlxccyo/XFxyP1xcbi8pIDogKC9eXFxzKj8oXFxyP1xcbnwkKS8pKS50ZXN0KG5leHQub3JpZ2luYWwpO1xuICB9XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgcG9zaXRpb24gYXMgb21pdHRlZC5cbi8vIEkuZS4ge3tmb299fScgJyB3aWxsIG1hcmsgdGhlICcgJyBub2RlIGFzIG9taXR0ZWQuXG4vL1xuLy8gSWYgaSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdFJpZ2h0KGJvZHksIGksIG11bHRpcGxlKSB7XG4gIGxldCBjdXJyZW50ID0gYm9keVtpID09IG51bGwgPyAwIDogaSArIDFdO1xuICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHwgKCFtdWx0aXBsZSAmJiBjdXJyZW50LnJpZ2h0U3RyaXBwZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/ICgvXlxccysvKSA6ICgvXlsgXFx0XSpcXHI/XFxuPy8pLCAnJyk7XG4gIGN1cnJlbnQucmlnaHRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgbGVmdCBvZiB0aGUgcG9zaXRpb24gYXMgb21pdHRlZC5cbi8vIEkuZS4gJyAne3tmb299fSB3aWxsIG1hcmsgdGhlICcgJyBub2RlIGFzIG9taXR0ZWQuXG4vL1xuLy8gSWYgaSBpcyB1bmRlZmluZWQgdGhlbiB0aGUgbGFzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRMZWZ0KGJvZHksIGksIG11bHRpcGxlKSB7XG4gIGxldCBjdXJyZW50ID0gYm9keVtpID09IG51bGwgPyBib2R5Lmxlbmd0aCAtIDEgOiBpIC0gMV07XG4gIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3RhdGVtZW50JyB8fCAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdlIG9taXQgdGhlIGxhc3Qgbm9kZSBpZiBpdCdzIHdoaXRlc3BhY2Ugb25seSBhbmQgbm90IHByZWNlZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAoL1xccyskLykgOiAoL1sgXFx0XSskLyksICcnKTtcbiAgY3VycmVudC5sZWZ0U3RyaXBwZWQgPSBjdXJyZW50LnZhbHVlICE9PSBvcmlnaW5hbDtcbiAgcmV0dXJuIGN1cnJlbnQubGVmdFN0cmlwcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBXaGl0ZXNwYWNlQ29udHJvbDtcbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 exports.registerDefaultDecorators = registerDefaultDecorators;
5 // istanbul ignore next
6
7 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
8
9 var _decoratorsInline = require('./decorators/inline');
10
11 var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
12
13 function registerDefaultDecorators(instance) {
14 _decoratorsInline2['default'](instance);
15 }
16 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4
5 var _utils = require('../utils');
6
7 exports['default'] = function (instance) {
8 instance.registerDecorator('inline', function (fn, props, container, options) {
9 var ret = fn;
10 if (!props.partials) {
11 props.partials = {};
12 ret = function (context, options) {
13 // Create a new partials stack frame prior to exec.
14 var original = container.partials;
15 container.partials = _utils.extend({}, original, props.partials);
16 var ret = fn(context, options);
17 container.partials = original;
18 return ret;
19 };
20 }
21
22 props.partials[options.args[0]] = options.fn;
23
24 return ret;
25 });
26 };
27
28 module.exports = exports['default'];
29 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXFCLFVBQVU7O3FCQUVoQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=
1 'use strict';
2
3 exports.__esModule = true;
4
5 var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
6
7 function Exception(message, node) {
8 var loc = node && node.loc,
9 line = undefined,
10 column = undefined;
11 if (loc) {
12 line = loc.start.line;
13 column = loc.start.column;
14
15 message += ' - ' + line + ':' + column;
16 }
17
18 var tmp = Error.prototype.constructor.call(this, message);
19
20 // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
21 for (var idx = 0; idx < errorProps.length; idx++) {
22 this[errorProps[idx]] = tmp[errorProps[idx]];
23 }
24
25 /* istanbul ignore else */
26 if (Error.captureStackTrace) {
27 Error.captureStackTrace(this, Exception);
28 }
29
30 try {
31 if (loc) {
32 this.lineNumber = line;
33
34 // Work around issue under safari where we can't directly set the column value
35 /* istanbul ignore next */
36 if (Object.defineProperty) {
37 Object.defineProperty(this, 'column', {
38 value: column,
39 enumerable: true
40 });
41 } else {
42 this.column = column;
43 }
44 }
45 } catch (nop) {
46 /* Ignore if the browser is very particular */
47 }
48 }
49
50 Exception.prototype = new Error();
51
52 exports['default'] = Exception;
53 module.exports = exports['default'];
54 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsSUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbkcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDdEIsSUFBSSxZQUFBO01BQ0osTUFBTSxZQUFBLENBQUM7QUFDWCxNQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBRTFCLFdBQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7R0FDeEM7O0FBRUQsTUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFELE9BQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2hELFFBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDOUM7OztBQUdELE1BQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsTUFBSTtBQUNGLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Ozs7QUFJdkIsVUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQ3pCLGNBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNwQyxlQUFLLEVBQUUsTUFBTTtBQUNiLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7T0FDdEI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgZXJyb3JQcm9wcyA9IFsnZGVzY3JpcHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdtZXNzYWdlJywgJ25hbWUnLCAnbnVtYmVyJywgJ3N0YWNrJ107XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgICAgbGluZSxcbiAgICAgIGNvbHVtbjtcbiAgaWYgKGxvYykge1xuICAgIGxpbmUgPSBsb2Muc3RhcnQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcblxuICAgICAgLy8gV29yayBhcm91bmQgaXNzdWUgdW5kZXIgc2FmYXJpIHdoZXJlIHdlIGNhbid0IGRpcmVjdGx5IHNldCB0aGUgY29sdW1uIHZhbHVlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKG5vcCkge1xuICAgIC8qIElnbm9yZSBpZiB0aGUgYnJvd3NlciBpcyB2ZXJ5IHBhcnRpY3VsYXIgKi9cbiAgfVxufVxuXG5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG5cbmV4cG9ydCBkZWZhdWx0IEV4Y2VwdGlvbjtcbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 exports.registerDefaultHelpers = registerDefaultHelpers;
5 // istanbul ignore next
6
7 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
8
9 var _helpersBlockHelperMissing = require('./helpers/block-helper-missing');
10
11 var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
12
13 var _helpersEach = require('./helpers/each');
14
15 var _helpersEach2 = _interopRequireDefault(_helpersEach);
16
17 var _helpersHelperMissing = require('./helpers/helper-missing');
18
19 var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
20
21 var _helpersIf = require('./helpers/if');
22
23 var _helpersIf2 = _interopRequireDefault(_helpersIf);
24
25 var _helpersLog = require('./helpers/log');
26
27 var _helpersLog2 = _interopRequireDefault(_helpersLog);
28
29 var _helpersLookup = require('./helpers/lookup');
30
31 var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
32
33 var _helpersWith = require('./helpers/with');
34
35 var _helpersWith2 = _interopRequireDefault(_helpersWith);
36
37 function registerDefaultHelpers(instance) {
38 _helpersBlockHelperMissing2['default'](instance);
39 _helpersEach2['default'](instance);
40 _helpersHelperMissing2['default'](instance);
41 _helpersIf2['default'](instance);
42 _helpersLog2['default'](instance);
43 _helpersLookup2['default'](instance);
44 _helpersWith2['default'](instance);
45 }
46 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7eUNBQXVDLGdDQUFnQzs7OzsyQkFDOUMsZ0JBQWdCOzs7O29DQUNQLDBCQUEwQjs7Ozt5QkFDckMsY0FBYzs7OzswQkFDYixlQUFlOzs7OzZCQUNaLGtCQUFrQjs7OzsyQkFDcEIsZ0JBQWdCOzs7O0FBRWxDLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO0FBQy9DLHlDQUEyQixRQUFRLENBQUMsQ0FBQztBQUNyQywyQkFBYSxRQUFRLENBQUMsQ0FBQztBQUN2QixvQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFDaEMseUJBQVcsUUFBUSxDQUFDLENBQUM7QUFDckIsMEJBQVksUUFBUSxDQUFDLENBQUM7QUFDdEIsNkJBQWUsUUFBUSxDQUFDLENBQUM7QUFDekIsMkJBQWEsUUFBUSxDQUFDLENBQUM7Q0FDeEIiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVyRWFjaCBmcm9tICcuL2hlbHBlcnMvZWFjaCc7XG5pbXBvcnQgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJJZiBmcm9tICcuL2hlbHBlcnMvaWYnO1xuaW1wb3J0IHJlZ2lzdGVyTG9nIGZyb20gJy4vaGVscGVycy9sb2cnO1xuaW1wb3J0IHJlZ2lzdGVyTG9va3VwIGZyb20gJy4vaGVscGVycy9sb29rdXAnO1xuaW1wb3J0IHJlZ2lzdGVyV2l0aCBmcm9tICcuL2hlbHBlcnMvd2l0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJFYWNoKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJJZihpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb29rdXAoaW5zdGFuY2UpO1xuICByZWdpc3RlcldpdGgoaW5zdGFuY2UpO1xufVxuIl19
1 'use strict';
2
3 exports.__esModule = true;
4
5 var _utils = require('../utils');
6
7 exports['default'] = function (instance) {
8 instance.registerHelper('blockHelperMissing', function (context, options) {
9 var inverse = options.inverse,
10 fn = options.fn;
11
12 if (context === true) {
13 return fn(this);
14 } else if (context === false || context == null) {
15 return inverse(this);
16 } else if (_utils.isArray(context)) {
17 if (context.length > 0) {
18 if (options.ids) {
19 options.ids = [options.name];
20 }
21
22 return instance.helpers.each(context, options);
23 } else {
24 return inverse(this);
25 }
26 } else {
27 if (options.data && options.ids) {
28 var data = _utils.createFrame(options.data);
29 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
30 options = { data: data };
31 }
32
33 return fn(context, options);
34 }
35 });
36 };
37
38 module.exports = exports['default'];
39 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBc0QsVUFBVTs7cUJBRWpELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGVBQU8sR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztPQUN4Qjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGNyZWF0ZUZyYW1lLCBpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHtkYXRhOiBkYXRhfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
1 'use strict';
2
3 exports.__esModule = true;
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _utils = require('../utils');
9
10 var _exception = require('../exception');
11
12 var _exception2 = _interopRequireDefault(_exception);
13
14 exports['default'] = function (instance) {
15 instance.registerHelper('each', function (context, options) {
16 if (!options) {
17 throw new _exception2['default']('Must pass iterator to #each');
18 }
19
20 var fn = options.fn,
21 inverse = options.inverse,
22 i = 0,
23 ret = '',
24 data = undefined,
25 contextPath = undefined;
26
27 if (options.data && options.ids) {
28 contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
29 }
30
31 if (_utils.isFunction(context)) {
32 context = context.call(this);
33 }
34
35 if (options.data) {
36 data = _utils.createFrame(options.data);
37 }
38
39 function execIteration(field, index, last) {
40 if (data) {
41 data.key = field;
42 data.index = index;
43 data.first = index === 0;
44 data.last = !!last;
45
46 if (contextPath) {
47 data.contextPath = contextPath + field;
48 }
49 }
50
51 ret = ret + fn(context[field], {
52 data: data,
53 blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
54 });
55 }
56
57 if (context && typeof context === 'object') {
58 if (_utils.isArray(context)) {
59 for (var j = context.length; i < j; i++) {
60 if (i in context) {
61 execIteration(i, i, i === context.length - 1);
62 }
63 }
64 } else {
65 var priorKey = undefined;
66
67 for (var key in context) {
68 if (context.hasOwnProperty(key)) {
69 // We're running the iterations one step out of sync so we can detect
70 // the last iteration without have to scan the object twice and create
71 // an itermediate keys array.
72 if (priorKey !== undefined) {
73 execIteration(priorKey, i - 1);
74 }
75 priorKey = key;
76 i++;
77 }
78 }
79 if (priorKey !== undefined) {
80 execIteration(priorKey, i - 1, true);
81 }
82 }
83 }
84
85 if (i === 0) {
86 ret = inverse(this);
87 }
88
89 return ret;
90 });
91 };
92
93 module.exports = exports['default'];
94 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQUErRSxVQUFVOzt5QkFDbkUsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixZQUFNLDJCQUFjLDZCQUE2QixDQUFDLENBQUM7S0FDcEQ7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDekIsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksWUFBQTtRQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixRQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixpQkFBVyxHQUFHLHlCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pGOztBQUVELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsVUFBSSxHQUFHLG1CQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxhQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN6QyxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN6QixZQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7O0FBRW5CLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO09BQ0Y7O0FBRUQsU0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFlBQUksRUFBRSxJQUFJO0FBQ1YsbUJBQVcsRUFBRSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0UsQ0FBQyxDQUFDO0tBQ0o7O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNO0FBQ0wsWUFBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixhQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtBQUN2QixjQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0IsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0w7U0FDRjtBQUNELFlBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix1QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 // istanbul ignore next
5
6 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
7
8 var _exception = require('../exception');
9
10 var _exception2 = _interopRequireDefault(_exception);
11
12 exports['default'] = function (instance) {
13 instance.registerHelper('helperMissing', function () /* [args, ]options */{
14 if (arguments.length === 1) {
15 // A missing field in a {{foo}} construct.
16 return undefined;
17 } else {
18 // Someone is actually trying to call something, blow up.
19 throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
20 }
21 });
22 };
23
24 module.exports = exports['default'];
25 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFBYyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufVxuIl19
1 'use strict';
2
3 exports.__esModule = true;
4
5 var _utils = require('../utils');
6
7 exports['default'] = function (instance) {
8 instance.registerHelper('if', function (conditional, options) {
9 if (_utils.isFunction(conditional)) {
10 conditional = conditional.call(this);
11 }
12
13 // Default behavior is to render the positive path if the value is truthy and not empty.
14 // The `includeZero` option may be set to treat the condtional as purely not empty based on the
15 // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
16 if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
17 return options.inverse(this);
18 } else {
19 return options.fn(this);
20 }
21 });
22
23 instance.registerHelper('unless', function (conditional, options) {
24 return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
25 });
26 };
27
28 module.exports = exports['default'];
29 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBa0MsVUFBVTs7cUJBRTdCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLGtCQUFXLFdBQVcsQ0FBQyxFQUFFO0FBQUUsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQUU7Ozs7O0FBS3RFLFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztHQUN2SCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4
5 exports['default'] = function (instance) {
6 instance.registerHelper('log', function () /* message, options */{
7 var args = [undefined],
8 options = arguments[arguments.length - 1];
9 for (var i = 0; i < arguments.length - 1; i++) {
10 args.push(arguments[i]);
11 }
12
13 var level = 1;
14 if (options.hash.level != null) {
15 level = options.hash.level;
16 } else if (options.data && options.data.level != null) {
17 level = options.data.level;
18 }
19 args[0] = level;
20
21 instance.log.apply(instance, args);
22 });
23 };
24
25 module.exports = exports['default'];
26 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVMsSUFBSSxDQUFDLENBQUM7R0FDeEIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi4gYXJncyk7XG4gIH0pO1xufVxuIl19
1 'use strict';
2
3 exports.__esModule = true;
4
5 exports['default'] = function (instance) {
6 instance.registerHelper('lookup', function (obj, field) {
7 return obj && obj[field];
8 });
9 };
10
11 module.exports = exports['default'];
12 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3JELFdBQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUMxQixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJsb29rdXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9va3VwJywgZnVuY3Rpb24ob2JqLCBmaWVsZCkge1xuICAgIHJldHVybiBvYmogJiYgb2JqW2ZpZWxkXTtcbiAgfSk7XG59XG4iXX0=
1 'use strict';
2
3 exports.__esModule = true;
4
5 var _utils = require('../utils');
6
7 exports['default'] = function (instance) {
8 instance.registerHelper('with', function (context, options) {
9 if (_utils.isFunction(context)) {
10 context = context.call(this);
11 }
12
13 var fn = options.fn;
14
15 if (!_utils.isEmpty(context)) {
16 var data = options.data;
17 if (options.data && options.ids) {
18 data = _utils.createFrame(options.data);
19 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
20 }
21
22 return fn(context, {
23 data: data,
24 blockParams: _utils.blockParams([context], [data && data.contextPath])
25 });
26 } else {
27 return options.inverse(this);
28 }
29 });
30 };
31
32 module.exports = exports['default'];
33 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUErRSxVQUFVOztxQkFFMUUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLENBQUMsZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNyQixVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFlBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGOztBQUVELGFBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFXLEVBQUUsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO0tBQ0osTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4
5 var _utils = require('./utils');
6
7 var logger = {
8 methodMap: ['debug', 'info', 'warn', 'error'],
9 level: 'info',
10
11 // Maps a given level value to the `methodMap` indexes above.
12 lookupLevel: function lookupLevel(level) {
13 if (typeof level === 'string') {
14 var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
15 if (levelMap >= 0) {
16 level = levelMap;
17 } else {
18 level = parseInt(level, 10);
19 }
20 }
21
22 return level;
23 },
24
25 // Can be overridden in the host environment
26 log: function log(level) {
27 level = logger.lookupLevel(level);
28
29 if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
30 var method = logger.methodMap[level];
31 if (!console[method]) {
32 // eslint-disable-line no-console
33 method = 'log';
34 }
35
36 for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
37 message[_key - 1] = arguments[_key];
38 }
39
40 console[method].apply(console, message); // eslint-disable-line no-console
41 }
42 }
43 };
44
45 exports['default'] = logger;
46 module.exports = exports['default'];
47 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFzQixTQUFTOztBQUUvQixJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDL0UsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUNwQixjQUFNLEdBQUcsS0FBSyxDQUFDO09BQ2hCOzt3Q0FQbUIsT0FBTztBQUFQLGVBQU87OztBQVEzQixhQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO0dBQ0Y7Q0FDRixDQUFDOztxQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==
1 /* global window */
2 'use strict';
3
4 exports.__esModule = true;
5
6 exports['default'] = function (Handlebars) {
7 /* istanbul ignore next */
8 var root = typeof global !== 'undefined' ? global : window,
9 $Handlebars = root.Handlebars;
10 /* istanbul ignore next */
11 Handlebars.noConflict = function () {
12 if (root.Handlebars === Handlebars) {
13 root.Handlebars = $Handlebars;
14 }
15 return Handlebars;
16 };
17 };
18
19 module.exports = exports['default'];
20 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOztBQUVsQyxNQUFJLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRWxDLFlBQVUsQ0FBQyxVQUFVLEdBQUcsWUFBVztBQUNqQyxRQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFVBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQy9CO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 exports.checkRevision = checkRevision;
5 exports.template = template;
6 exports.wrapProgram = wrapProgram;
7 exports.resolvePartial = resolvePartial;
8 exports.invokePartial = invokePartial;
9 exports.noop = noop;
10 // istanbul ignore next
11
12 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
13
14 // istanbul ignore next
15
16 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
17
18 var _utils = require('./utils');
19
20 var Utils = _interopRequireWildcard(_utils);
21
22 var _exception = require('./exception');
23
24 var _exception2 = _interopRequireDefault(_exception);
25
26 var _base = require('./base');
27
28 function checkRevision(compilerInfo) {
29 var compilerRevision = compilerInfo && compilerInfo[0] || 1,
30 currentRevision = _base.COMPILER_REVISION;
31
32 if (compilerRevision !== currentRevision) {
33 if (compilerRevision < currentRevision) {
34 var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
35 compilerVersions = _base.REVISION_CHANGES[compilerRevision];
36 throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
37 } else {
38 // Use the embedded version info since the runtime doesn't know about this revision yet
39 throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
40 }
41 }
42 }
43
44 function template(templateSpec, env) {
45 /* istanbul ignore next */
46 if (!env) {
47 throw new _exception2['default']('No environment passed to template');
48 }
49 if (!templateSpec || !templateSpec.main) {
50 throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
51 }
52
53 templateSpec.main.decorator = templateSpec.main_d;
54
55 // Note: Using env.VM references rather than local var references throughout this section to allow
56 // for external users to override these as psuedo-supported APIs.
57 env.VM.checkRevision(templateSpec.compiler);
58
59 function invokePartialWrapper(partial, context, options) {
60 if (options.hash) {
61 context = Utils.extend({}, context, options.hash);
62 if (options.ids) {
63 options.ids[0] = true;
64 }
65 }
66
67 partial = env.VM.resolvePartial.call(this, partial, context, options);
68 var result = env.VM.invokePartial.call(this, partial, context, options);
69
70 if (result == null && env.compile) {
71 options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
72 result = options.partials[options.name](context, options);
73 }
74 if (result != null) {
75 if (options.indent) {
76 var lines = result.split('\n');
77 for (var i = 0, l = lines.length; i < l; i++) {
78 if (!lines[i] && i + 1 === l) {
79 break;
80 }
81
82 lines[i] = options.indent + lines[i];
83 }
84 result = lines.join('\n');
85 }
86 return result;
87 } else {
88 throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
89 }
90 }
91
92 // Just add water
93 var container = {
94 strict: function strict(obj, name) {
95 if (!(name in obj)) {
96 throw new _exception2['default']('"' + name + '" not defined in ' + obj);
97 }
98 return obj[name];
99 },
100 lookup: function lookup(depths, name) {
101 var len = depths.length;
102 for (var i = 0; i < len; i++) {
103 if (depths[i] && depths[i][name] != null) {
104 return depths[i][name];
105 }
106 }
107 },
108 lambda: function lambda(current, context) {
109 return typeof current === 'function' ? current.call(context) : current;
110 },
111
112 escapeExpression: Utils.escapeExpression,
113 invokePartial: invokePartialWrapper,
114
115 fn: function fn(i) {
116 var ret = templateSpec[i];
117 ret.decorator = templateSpec[i + '_d'];
118 return ret;
119 },
120
121 programs: [],
122 program: function program(i, data, declaredBlockParams, blockParams, depths) {
123 var programWrapper = this.programs[i],
124 fn = this.fn(i);
125 if (data || depths || blockParams || declaredBlockParams) {
126 programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
127 } else if (!programWrapper) {
128 programWrapper = this.programs[i] = wrapProgram(this, i, fn);
129 }
130 return programWrapper;
131 },
132
133 data: function data(value, depth) {
134 while (value && depth--) {
135 value = value._parent;
136 }
137 return value;
138 },
139 merge: function merge(param, common) {
140 var obj = param || common;
141
142 if (param && common && param !== common) {
143 obj = Utils.extend({}, common, param);
144 }
145
146 return obj;
147 },
148 // An empty object to use as replacement for null-contexts
149 nullContext: Object.seal({}),
150
151 noop: env.VM.noop,
152 compilerInfo: templateSpec.compiler
153 };
154
155 function ret(context) {
156 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
157
158 var data = options.data;
159
160 ret._setup(options);
161 if (!options.partial && templateSpec.useData) {
162 data = initData(context, data);
163 }
164 var depths = undefined,
165 blockParams = templateSpec.useBlockParams ? [] : undefined;
166 if (templateSpec.useDepths) {
167 if (options.depths) {
168 depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
169 } else {
170 depths = [context];
171 }
172 }
173
174 function main(context /*, options*/) {
175 return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
176 }
177 main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
178 return main(context, options);
179 }
180 ret.isTop = true;
181
182 ret._setup = function (options) {
183 if (!options.partial) {
184 container.helpers = container.merge(options.helpers, env.helpers);
185
186 if (templateSpec.usePartial) {
187 container.partials = container.merge(options.partials, env.partials);
188 }
189 if (templateSpec.usePartial || templateSpec.useDecorators) {
190 container.decorators = container.merge(options.decorators, env.decorators);
191 }
192 } else {
193 container.helpers = options.helpers;
194 container.partials = options.partials;
195 container.decorators = options.decorators;
196 }
197 };
198
199 ret._child = function (i, data, blockParams, depths) {
200 if (templateSpec.useBlockParams && !blockParams) {
201 throw new _exception2['default']('must pass block params');
202 }
203 if (templateSpec.useDepths && !depths) {
204 throw new _exception2['default']('must pass parent depths');
205 }
206
207 return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
208 };
209 return ret;
210 }
211
212 function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
213 function prog(context) {
214 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
215
216 var currentDepths = depths;
217 if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
218 currentDepths = [context].concat(depths);
219 }
220
221 return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
222 }
223
224 prog = executeDecorators(fn, prog, container, depths, data, blockParams);
225
226 prog.program = i;
227 prog.depth = depths ? depths.length : 0;
228 prog.blockParams = declaredBlockParams || 0;
229 return prog;
230 }
231
232 function resolvePartial(partial, context, options) {
233 if (!partial) {
234 if (options.name === '@partial-block') {
235 partial = options.data['partial-block'];
236 } else {
237 partial = options.partials[options.name];
238 }
239 } else if (!partial.call && !options.name) {
240 // This is a dynamic partial that returned a string
241 options.name = partial;
242 partial = options.partials[partial];
243 }
244 return partial;
245 }
246
247 function invokePartial(partial, context, options) {
248 // Use the current closure context to save the partial-block if this partial
249 var currentPartialBlock = options.data && options.data['partial-block'];
250 options.partial = true;
251 if (options.ids) {
252 options.data.contextPath = options.ids[0] || options.data.contextPath;
253 }
254
255 var partialBlock = undefined;
256 if (options.fn && options.fn !== noop) {
257 (function () {
258 options.data = _base.createFrame(options.data);
259 // Wrapper function to get access to currentPartialBlock from the closure
260 var fn = options.fn;
261 partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
262 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
263
264 // Restore the partial-block from the closure for the execution of the block
265 // i.e. the part inside the block of the partial call.
266 options.data = _base.createFrame(options.data);
267 options.data['partial-block'] = currentPartialBlock;
268 return fn(context, options);
269 };
270 if (fn.partials) {
271 options.partials = Utils.extend({}, options.partials, fn.partials);
272 }
273 })();
274 }
275
276 if (partial === undefined && partialBlock) {
277 partial = partialBlock;
278 }
279
280 if (partial === undefined) {
281 throw new _exception2['default']('The partial ' + options.name + ' could not be found');
282 } else if (partial instanceof Function) {
283 return partial(context, options);
284 }
285 }
286
287 function noop() {
288 return '';
289 }
290
291 function initData(context, data) {
292 if (!data || !('root' in data)) {
293 data = data ? _base.createFrame(data) : {};
294 data.root = context;
295 }
296 return data;
297 }
298
299 function executeDecorators(fn, prog, container, depths, data, blockParams) {
300 if (fn.decorator) {
301 var props = {};
302 prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
303 Utils.extend(prog, props);
304 }
305 return prog;
306 }
307 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBQzhCLFFBQVE7O0FBRWxFLFNBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUN2RCxlQUFlLDBCQUFvQixDQUFDOztBQUUxQyxNQUFJLGdCQUFnQixLQUFLLGVBQWUsRUFBRTtBQUN4QyxRQUFJLGdCQUFnQixHQUFHLGVBQWUsRUFBRTtBQUN0QyxVQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1VBQ25ELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVELFlBQU0sMkJBQWMseUZBQXlGLEdBQ3ZHLHFEQUFxRCxHQUFHLGVBQWUsR0FBRyxtREFBbUQsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNoSyxNQUFNOztBQUVMLFlBQU0sMkJBQWMsd0ZBQXdGLEdBQ3RHLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNuRjtHQUNGO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcs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QUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUYsU0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDM0I7QUFDRCxTQUFPLElBQUksQ0FBQztDQUNiIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMsIGNyZWF0ZUZyYW1lIH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChjb21waWxlclJldmlzaW9uICE9PSBjdXJyZW50UmV2aXNpb24pIHtcbiAgICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IGN1cnJlbnRSZXZpc2lvbikge1xuICAgICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgcnVudGltZVZlcnNpb25zICsgJykgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgnICsgY29tcGlsZXJWZXJzaW9ucyArICcpLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgY29tcGlsZXJJbmZvWzFdICsgJykuJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMsIGVudikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWVudikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc3VlZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBlbnYuY29tcGlsZSkge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdID0gZW52LmNvbXBpbGUocGFydGlhbCwgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucywgZW52KTtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgbGV0IGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uKG9iaiwgbmFtZSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqW25hbWVdO1xuICAgIH0sXG4gICAgbG9va3VwOiBmdW5jdGlvbihkZXB0aHMsIG5hbWUpIHtcbiAgICAgIGNvbnN0IGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChkZXB0aHNbaV0gJiYgZGVwdGhzW2ldW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgICAgZm4gPSB0aGlzLmZuKGkpO1xuICAgICAgaWYgKGRhdGEgfHwgZGVwdGhzIHx8IGJsb2NrUGFyYW1zIHx8IGRlY2xhcmVkQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2U6IGZ1bmN0aW9uKHBhcmFtLCBjb21tb24pIHtcbiAgICAgIGxldCBvYmogPSBwYXJhbSB8fCBjb21tb247XG5cbiAgICAgIGlmIChwYXJhbSAmJiBjb21tb24gJiYgKHBhcmFtICE9PSBjb21tb24pKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID0gY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXSA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpIDogb3B0aW9ucy5kZXB0aHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXB0aHMgPSBbY29udGV4dF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFpbihjb250ZXh0LyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG4gICAgbWFpbiA9IGV4ZWN1dGVEZWNvcmF0b3JzKHRlbXBsYXRlU3BlYy5tYWluLCBtYWluLCBjb250YWluZXIsIG9wdGlvbnMuZGVwdGhzIHx8IFtdLCBkYXRhLCBibG9ja1BhcmFtcyk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0LmlzVG9wID0gdHJ1ZTtcblxuICByZXQuX3NldHVwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmhlbHBlcnMsIGVudi5oZWxwZXJzKTtcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLnBhcnRpYWxzLCBlbnYucGFydGlhbHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsIHx8IHRlbXBsYXRlU3BlYy51c2VEZWNvcmF0b3JzKSB7XG4gICAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuZGVjb3JhdG9ycywgZW52LmRlY29yYXRvcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIHRlbXBsYXRlU3BlY1tpXSwgZGF0YSwgMCwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSAmJiAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihjb250YWluZXIsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtcyAmJiBbb3B0aW9ucy5ibG9ja1BhcmFtc10uY29uY2F0KGJsb2NrUGFyYW1zKSxcbiAgICAgICAgY3VycmVudERlcHRocyk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuXG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7IHJldHVybiAnJzsgfVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG4iXX0=
1 // Build out our basic SafeString type
2 'use strict';
3
4 exports.__esModule = true;
5 function SafeString(string) {
6 this.string = string;
7 }
8
9 SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
10 return '' + this.string;
11 };
12
13 exports['default'] = SafeString;
14 module.exports = exports['default'];
15 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==
1 'use strict';
2
3 exports.__esModule = true;
4 exports.extend = extend;
5 exports.indexOf = indexOf;
6 exports.escapeExpression = escapeExpression;
7 exports.isEmpty = isEmpty;
8 exports.createFrame = createFrame;
9 exports.blockParams = blockParams;
10 exports.appendContextPath = appendContextPath;
11 var escape = {
12 '&': '&amp;',
13 '<': '&lt;',
14 '>': '&gt;',
15 '"': '&quot;',
16 "'": '&#x27;',
17 '`': '&#x60;',
18 '=': '&#x3D;'
19 };
20
21 var badChars = /[&<>"'`=]/g,
22 possible = /[&<>"'`=]/;
23
24 function escapeChar(chr) {
25 return escape[chr];
26 }
27
28 function extend(obj /* , ...source */) {
29 for (var i = 1; i < arguments.length; i++) {
30 for (var key in arguments[i]) {
31 if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
32 obj[key] = arguments[i][key];
33 }
34 }
35 }
36
37 return obj;
38 }
39
40 var toString = Object.prototype.toString;
41
42 exports.toString = toString;
43 // Sourced from lodash
44 // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
45 /* eslint-disable func-style */
46 var isFunction = function isFunction(value) {
47 return typeof value === 'function';
48 };
49 // fallback for older versions of Chrome and Safari
50 /* istanbul ignore next */
51 if (isFunction(/x/)) {
52 exports.isFunction = isFunction = function (value) {
53 return typeof value === 'function' && toString.call(value) === '[object Function]';
54 };
55 }
56 exports.isFunction = isFunction;
57
58 /* eslint-enable func-style */
59
60 /* istanbul ignore next */
61 var isArray = Array.isArray || function (value) {
62 return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
63 };
64
65 exports.isArray = isArray;
66 // Older IE versions do not directly support indexOf so we must implement our own, sadly.
67
68 function indexOf(array, value) {
69 for (var i = 0, len = array.length; i < len; i++) {
70 if (array[i] === value) {
71 return i;
72 }
73 }
74 return -1;
75 }
76
77 function escapeExpression(string) {
78 if (typeof string !== 'string') {
79 // don't escape SafeStrings, since they're already safe
80 if (string && string.toHTML) {
81 return string.toHTML();
82 } else if (string == null) {
83 return '';
84 } else if (!string) {
85 return string + '';
86 }
87
88 // Force a string conversion as this will be done by the append regardless and
89 // the regex test will do this transparently behind the scenes, causing issues if
90 // an object's to string has escaped characters in it.
91 string = '' + string;
92 }
93
94 if (!possible.test(string)) {
95 return string;
96 }
97 return string.replace(badChars, escapeChar);
98 }
99
100 function isEmpty(value) {
101 if (!value && value !== 0) {
102 return true;
103 } else if (isArray(value) && value.length === 0) {
104 return true;
105 } else {
106 return false;
107 }
108 }
109
110 function createFrame(object) {
111 var frame = extend({}, object);
112 frame._parent = object;
113 return frame;
114 }
115
116 function blockParams(params, ids) {
117 params.path = ids;
118 return params;
119 }
120
121 function appendContextPath(contextPath, id) {
122 return (contextPath ? contextPath + '.' : '') + id;
123 }
124 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQ3ZCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRTdCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFtQjtBQUMzQyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQUlNLFVBQVUsR0FKaEIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUJBQW1CLENBQUM7R0FDcEYsQ0FBQztDQUNIO1FBQ08sVUFBVSxHQUFWLFVBQVU7Ozs7O0FBSVgsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFTLEtBQUssRUFBRTtBQUN0RCxTQUFPLEFBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUFHLEtBQUssQ0FBQztDQUNqRyxDQUFDOzs7OztBQUdLLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUdNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUFFLFdBQU8sTUFBTSxDQUFDO0dBQUU7QUFDOUMsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iai8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydCB7aXNGdW5jdGlvbn07XG4vKiBlc2xpbnQtZW5hYmxlIGZ1bmMtc3R5bGUgKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19
1 /* eslint-disable no-console */
2 'use strict';
3
4 // istanbul ignore next
5
6 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
7
8 // istanbul ignore next
9
10 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
11
12 var _async = require('async');
13
14 var _async2 = _interopRequireDefault(_async);
15
16 var _fs = require('fs');
17
18 var _fs2 = _interopRequireDefault(_fs);
19
20 var _handlebars = require('./handlebars');
21
22 var Handlebars = _interopRequireWildcard(_handlebars);
23
24 var _path = require('path');
25
26 var _sourceMap = require('source-map');
27
28 var _uglifyJs = require('uglify-js');
29
30 var _uglifyJs2 = _interopRequireDefault(_uglifyJs);
31
32 module.exports.loadTemplates = function (opts, callback) {
33 loadStrings(opts, function (err, strings) {
34 if (err) {
35 callback(err);
36 } else {
37 loadFiles(opts, function (err, files) {
38 if (err) {
39 callback(err);
40 } else {
41 opts.templates = strings.concat(files);
42 callback(undefined, opts);
43 }
44 });
45 }
46 });
47 };
48
49 function loadStrings(opts, callback) {
50 var strings = arrayCast(opts.string),
51 names = arrayCast(opts.name);
52
53 if (names.length !== strings.length && strings.length > 1) {
54 return callback(new Handlebars.Exception('Number of names did not match the number of string inputs'));
55 }
56
57 _async2['default'].map(strings, function (string, callback) {
58 if (string !== '-') {
59 callback(undefined, string);
60 } else {
61 (function () {
62 // Load from stdin
63 var buffer = '';
64 process.stdin.setEncoding('utf8');
65
66 process.stdin.on('data', function (chunk) {
67 buffer += chunk;
68 });
69 process.stdin.on('end', function () {
70 callback(undefined, buffer);
71 });
72 })();
73 }
74 }, function (err, strings) {
75 strings = strings.map(function (string, index) {
76 return {
77 name: names[index],
78 path: names[index],
79 source: string
80 };
81 });
82 callback(err, strings);
83 });
84 }
85
86 function loadFiles(opts, callback) {
87 // Build file extension pattern
88 var extension = (opts.extension || 'handlebars').replace(/[\\^$*+?.():=!|{}\-\[\]]/g, function (arg) {
89 return '\\' + arg;
90 });
91 extension = new RegExp('\\.' + extension + '$');
92
93 var ret = [],
94 queue = (opts.files || []).map(function (template) {
95 return { template: template, root: opts.root };
96 });
97 _async2['default'].whilst(function () {
98 return queue.length;
99 }, function (callback) {
100 var _queue$shift = queue.shift();
101
102 var path = _queue$shift.template;
103 var root = _queue$shift.root;
104
105 _fs2['default'].stat(path, function (err, stat) {
106 if (err) {
107 return callback(new Handlebars.Exception('Unable to open template file "' + path + '"'));
108 }
109
110 if (stat.isDirectory()) {
111 opts.hasDirectory = true;
112
113 _fs2['default'].readdir(path, function (err, children) {
114 /* istanbul ignore next : Race condition that being too lazy to test */
115 if (err) {
116 return callback(err);
117 }
118 children.forEach(function (file) {
119 var childPath = path + '/' + file;
120
121 if (extension.test(childPath) || _fs2['default'].statSync(childPath).isDirectory()) {
122 queue.push({ template: childPath, root: root || path });
123 }
124 });
125
126 callback();
127 });
128 } else {
129 _fs2['default'].readFile(path, 'utf8', function (err, data) {
130 /* istanbul ignore next : Race condition that being too lazy to test */
131 if (err) {
132 return callback(err);
133 }
134
135 if (opts.bom && data.indexOf('') === 0) {
136 data = data.substring(1);
137 }
138
139 // Clean the template name
140 var name = path;
141 if (!root) {
142 name = _path.basename(name);
143 } else if (name.indexOf(root) === 0) {
144 name = name.substring(root.length + 1);
145 }
146 name = name.replace(extension, '');
147
148 ret.push({
149 path: path,
150 name: name,
151 source: data
152 });
153
154 callback();
155 });
156 }
157 });
158 }, function (err) {
159 if (err) {
160 callback(err);
161 } else {
162 callback(undefined, ret);
163 }
164 });
165 }
166
167 module.exports.cli = function (opts) {
168 if (opts.version) {
169 console.log(Handlebars.VERSION);
170 return;
171 }
172
173 if (!opts.templates.length && !opts.hasDirectory) {
174 throw new Handlebars.Exception('Must define at least one template or directory.');
175 }
176
177 if (opts.simple && opts.min) {
178 throw new Handlebars.Exception('Unable to minimize simple output');
179 }
180
181 var multiple = opts.templates.length !== 1 || opts.hasDirectory;
182 if (opts.simple && multiple) {
183 throw new Handlebars.Exception('Unable to output multiple templates in simple mode');
184 }
185
186 // Force simple mode if we have only one template and it's unnamed.
187 if (!opts.amd && !opts.commonjs && opts.templates.length === 1 && !opts.templates[0].name) {
188 opts.simple = true;
189 }
190
191 // Convert the known list into a hash
192 var known = {};
193 if (opts.known && !Array.isArray(opts.known)) {
194 opts.known = [opts.known];
195 }
196 if (opts.known) {
197 for (var i = 0, len = opts.known.length; i < len; i++) {
198 known[opts.known[i]] = true;
199 }
200 }
201
202 var objectName = opts.partial ? 'Handlebars.partials' : 'templates';
203
204 var output = new _sourceMap.SourceNode();
205 if (!opts.simple) {
206 if (opts.amd) {
207 output.add('define([\'' + opts.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];');
208 } else if (opts.commonjs) {
209 output.add('var Handlebars = require("' + opts.commonjs + '");');
210 } else {
211 output.add('(function() {\n');
212 }
213 output.add(' var template = Handlebars.template, templates = ');
214 if (opts.namespace) {
215 output.add(opts.namespace);
216 output.add(' = ');
217 output.add(opts.namespace);
218 output.add(' || ');
219 }
220 output.add('{};\n');
221 }
222
223 opts.templates.forEach(function (template) {
224 var options = {
225 knownHelpers: known,
226 knownHelpersOnly: opts.o
227 };
228
229 if (opts.map) {
230 options.srcName = template.path;
231 }
232 if (opts.data) {
233 options.data = true;
234 }
235
236 var precompiled = Handlebars.precompile(template.source, options);
237
238 // If we are generating a source map, we have to reconstruct the SourceNode object
239 if (opts.map) {
240 var consumer = new _sourceMap.SourceMapConsumer(precompiled.map);
241 precompiled = _sourceMap.SourceNode.fromStringWithSourceMap(precompiled.code, consumer);
242 }
243
244 if (opts.simple) {
245 output.add([precompiled, '\n']);
246 } else {
247 if (!template.name) {
248 throw new Handlebars.Exception('Name missing for template');
249 }
250
251 if (opts.amd && !multiple) {
252 output.add('return ');
253 }
254 output.add([objectName, '[\'', template.name, '\'] = template(', precompiled, ');\n']);
255 }
256 });
257
258 // Output the content
259 if (!opts.simple) {
260 if (opts.amd) {
261 if (multiple) {
262 output.add(['return ', objectName, ';\n']);
263 }
264 output.add('});');
265 } else if (!opts.commonjs) {
266 output.add('})();');
267 }
268 }
269
270 if (opts.map) {
271 output.add('\n//# sourceMappingURL=' + opts.map + '\n');
272 }
273
274 output = output.toStringWithSourceMap();
275 output.map = output.map + '';
276
277 if (opts.min) {
278 output = _uglifyJs2['default'].minify(output.code, {
279 fromString: true,
280
281 outSourceMap: opts.map,
282 inSourceMap: JSON.parse(output.map)
283 });
284 }
285
286 if (opts.map) {
287 _fs2['default'].writeFileSync(opts.map, output.map, 'utf8');
288 }
289 output = output.code;
290
291 if (opts.output) {
292 _fs2['default'].writeFileSync(opts.output, output, 'utf8');
293 } else {
294 console.log(output);
295 }
296 };
297
298 function arrayCast(value) {
299 value = value != null ? value : [];
300 if (!Array.isArray(value)) {
301 value = [value];
302 }
303 return value;
304 }
305 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcmVjb21waWxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFDa0IsT0FBTzs7OztrQkFDVixJQUFJOzs7OzBCQUNTLGNBQWM7O0lBQTlCLFVBQVU7O29CQUNDLE1BQU07O3lCQUNlLFlBQVk7O3dCQUNyQyxXQUFXOzs7O0FBRTlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxhQUFXLENBQUMsSUFBSSxFQUFFLFVBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRTtBQUN2QyxRQUFJLEdBQUcsRUFBRTtBQUNQLGNBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNmLE1BQU07QUFDTCxlQUFTLENBQUMsSUFBSSxFQUFFLFVBQVMsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUNuQyxZQUFJLEdBQUcsRUFBRTtBQUNQLGtCQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZixNQUFNO0FBQ0wsY0FBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGtCQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO09BQ0YsQ0FBQyxDQUFDO0tBQ0o7R0FDRixDQUFDLENBQUM7Q0FDSixDQUFDOztBQUVGLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkMsTUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7TUFDaEMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpDLE1BQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUM1QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixXQUFPLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsMkRBQTJELENBQUMs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QUUsSUFBSSxDQUFDLEdBQUc7QUFDdEIsaUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7S0FDcEMsQ0FBQyxDQUFDO0dBQ0o7O0FBRUQsTUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osb0JBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztHQUNoRDtBQUNELFFBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDOztBQUVyQixNQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDZixvQkFBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDL0MsTUFBTTtBQUNMLFdBQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7R0FDckI7Q0FDRixDQUFDOztBQUVGLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUN4QixPQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFNBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQ2pCO0FBQ0QsU0FBTyxLQUFLLENBQUM7Q0FDZCIsImZpbGUiOiJwcmVjb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCBBc3luYyBmcm9tICdhc3luYyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgSGFuZGxlYmFycyBmcm9tICcuL2hhbmRsZWJhcnMnO1xuaW1wb3J0IHtiYXNlbmFtZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1NvdXJjZU1hcENvbnN1bWVyLCBTb3VyY2VOb2RlfSBmcm9tICdzb3VyY2UtbWFwJztcbmltcG9ydCB1Z2xpZnkgZnJvbSAndWdsaWZ5LWpzJztcblxubW9kdWxlLmV4cG9ydHMubG9hZFRlbXBsYXRlcyA9IGZ1bmN0aW9uKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGxvYWRTdHJpbmdzKG9wdHMsIGZ1bmN0aW9uKGVyciwgc3RyaW5ncykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRGaWxlcyhvcHRzLCBmdW5jdGlvbihlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdHMudGVtcGxhdGVzID0gc3RyaW5ncy5jb25jYXQoZmlsZXMpO1xuICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBsb2FkU3RyaW5ncyhvcHRzLCBjYWxsYmFjaykge1xuICBsZXQgc3RyaW5ncyA9IGFycmF5Q2FzdChvcHRzLnN0cmluZyksXG4gICAgICBuYW1lcyA9IGFycmF5Q2FzdChvcHRzLm5hbWUpO1xuXG4gIGlmIChuYW1lcy5sZW5ndGggIT09IHN0cmluZ3MubGVuZ3RoXG4gICAgICAmJiBzdHJpbmdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdOdW1iZXIgb2YgbmFtZXMgZGlkIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cmluZyBpbnB1dHMnKSk7XG4gIH1cblxuICBBc3luYy5tYXAoc3RyaW5ncywgZnVuY3Rpb24oc3RyaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHN0cmluZyAhPT0gJy0nKSB7XG4gICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvYWQgZnJvbSBzdGRpblxuICAgICAgICBsZXQgYnVmZmVyID0gJyc7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcblxuICAgICAgICBwcm9jZXNzLnN0ZGluLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2h1bms7XG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIGJ1ZmZlcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnVuY3Rpb24oZXJyLCBzdHJpbmdzKSB7XG4gICAgICBzdHJpbmdzID0gc3RyaW5ncy5tYXAoKHN0cmluZywgaW5kZXgpID0+ICh7XG4gICAgICAgIG5hbWU6IG5hbWVzW2luZGV4XSxcbiAgICAgICAgcGF0aDogbmFtZXNbaW5kZXhdLFxuICAgICAgICBzb3VyY2U6IHN0cmluZ1xuICAgICAgfSkpO1xuICAgICAgY2FsbGJhY2soZXJyLCBzdHJpbmdzKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbG9hZEZpbGVzKG9wdHMsIGNhbGxiYWNrKSB7XG4gIC8vIEJ1aWxkIGZpbGUgZXh0ZW5zaW9uIHBhdHRlcm5cbiAgbGV0IGV4dGVuc2lvbiA9IChvcHRzLmV4dGVuc2lvbiB8fCAnaGFuZGxlYmFycycpLnJlcGxhY2UoL1tcXFxcXiQqKz8uKCk6PSF8e31cXC1cXFtcXF1dL2csIGZ1bmN0aW9uKGFyZykgeyByZXR1cm4gJ1xcXFwnICsgYXJnOyB9KTtcbiAgZXh0ZW5zaW9uID0gbmV3IFJlZ0V4cCgnXFxcXC4nICsgZXh0ZW5zaW9uICsgJyQnKTtcblxuICBsZXQgcmV0ID0gW10sXG4gICAgICBxdWV1ZSA9IChvcHRzLmZpbGVzIHx8IFtdKS5tYXAoKHRlbXBsYXRlKSA9PiAoe3RlbXBsYXRlLCByb290OiBvcHRzLnJvb3R9KSk7XG4gIEFzeW5jLndoaWxzdCgoKSA9PiBxdWV1ZS5sZW5ndGgsIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHt0ZW1wbGF0ZTogcGF0aCwgcm9vdH0gPSBxdWV1ZS5zaGlmdCgpO1xuXG4gICAgZnMuc3RhdChwYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbihgVW5hYmxlIHRvIG9wZW4gdGVtcGxhdGUgZmlsZSBcIiR7cGF0aH1cImApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBvcHRzLmhhc0RpcmVjdG9yeSA9IHRydWU7XG5cbiAgICAgICAgZnMucmVhZGRpcihwYXRoLCBmdW5jdGlvbihlcnIsIGNoaWxkcmVuKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgOiBSYWNlIGNvbmRpdGlvbiB0aGF0IGJlaW5nIHRvbyBsYXp5IHRvIHRlc3QgKi9cbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRQYXRoID0gcGF0aCArICcvJyArIGZpbGU7XG5cbiAgICAgICAgICAgIGlmIChleHRlbnNpb24udGVzdChjaGlsZFBhdGgpIHx8IGZzLnN0YXRTeW5jKGNoaWxkUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHt0ZW1wbGF0ZTogY2hpbGRQYXRoLCByb290OiByb290IHx8IHBhdGh9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnMucmVhZEZpbGUocGF0aCwgJ3V0ZjgnLCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCA6IFJhY2UgY29uZGl0aW9uIHRoYXQgYmVpbmcgdG9vIGxhenkgdG8gdGVzdCAqL1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRzLmJvbSAmJiBkYXRhLmluZGV4T2YoJ1xcdUZFRkYnKSA9PT0gMCkge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENsZWFuIHRoZSB0ZW1wbGF0ZSBuYW1lXG4gICAgICAgICAgbGV0IG5hbWUgPSBwYXRoO1xuICAgICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgbmFtZSA9IGJhc2VuYW1lKG5hbWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5pbmRleE9mKHJvb3QpID09PSAwKSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShleHRlbnNpb24sICcnKTtcblxuICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgc291cmNlOiBkYXRhXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCByZXQpO1xuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNsaSA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgaWYgKG9wdHMudmVyc2lvbikge1xuICAgIGNvbnNvbGUubG9nKEhhbmRsZWJhcnMuVkVSU0lPTik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFvcHRzLnRlbXBsYXRlcy5sZW5ndGggJiYgIW9wdHMuaGFzRGlyZWN0b3J5KSB7XG4gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdNdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgdGVtcGxhdGUgb3IgZGlyZWN0b3J5LicpO1xuICB9XG5cbiAgaWYgKG9wdHMuc2ltcGxlICYmIG9wdHMubWluKSB7XG4gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdVbmFibGUgdG8gbWluaW1pemUgc2ltcGxlIG91dHB1dCcpO1xuICB9XG5cbiAgY29uc3QgbXVsdGlwbGUgPSBvcHRzLnRlbXBsYXRlcy5sZW5ndGggIT09IDEgfHwgb3B0cy5oYXNEaXJlY3Rvcnk7XG4gIGlmIChvcHRzLnNpbXBsZSAmJiBtdWx0aXBsZSkge1xuICAgIHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbignVW5hYmxlIHRvIG91dHB1dCBtdWx0aXBsZSB0ZW1wbGF0ZXMgaW4gc2ltcGxlIG1vZGUnKTtcbiAgfVxuXG4gIC8vIEZvcmNlIHNpbXBsZSBtb2RlIGlmIHdlIGhhdmUgb25seSBvbmUgdGVtcGxhdGUgYW5kIGl0J3MgdW5uYW1lZC5cbiAgaWYgKCFvcHRzLmFtZCAmJiAhb3B0cy5jb21tb25qcyAmJiBvcHRzLnRlbXBsYXRlcy5sZW5ndGggPT09IDFcbiAgICAgICYmICFvcHRzLnRlbXBsYXRlc1swXS5uYW1lKSB7XG4gICAgb3B0cy5zaW1wbGUgPSB0cnVlO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUga25vd24gbGlzdCBpbnRvIGEgaGFzaFxuICBsZXQga25vd24gPSB7fTtcbiAgaWYgKG9wdHMua25vd24gJiYgIUFycmF5LmlzQXJyYXkob3B0cy5rbm93bikpIHtcbiAgICBvcHRzLmtub3duID0gW29wdHMua25vd25dO1xuICB9XG4gIGlmIChvcHRzLmtub3duKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9wdHMua25vd24ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtub3duW29wdHMua25vd25baV1dID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvYmplY3ROYW1lID0gb3B0cy5wYXJ0aWFsID8gJ0hhbmRsZWJhcnMucGFydGlhbHMnIDogJ3RlbXBsYXRlcyc7XG5cbiAgbGV0IG91dHB1dCA9IG5ldyBTb3VyY2VOb2RlKCk7XG4gIGlmICghb3B0cy5zaW1wbGUpIHtcbiAgICBpZiAob3B0cy5hbWQpIHtcbiAgICAgIG91dHB1dC5hZGQoJ2RlZmluZShbXFwnJyArIG9wdHMuaGFuZGxlYmFyUGF0aCArICdoYW5kbGViYXJzLnJ1bnRpbWVcXCddLCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XFxuICBIYW5kbGViYXJzID0gSGFuZGxlYmFyc1tcImRlZmF1bHRcIl07Jyk7XG4gICAgfSBlbHNlIGlmIChvcHRzLmNvbW1vbmpzKSB7XG4gICAgICBvdXRwdXQuYWRkKCd2YXIgSGFuZGxlYmFycyA9IHJlcXVpcmUoXCInICsgb3B0cy5jb21tb25qcyArICdcIik7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5hZGQoJyhmdW5jdGlvbigpIHtcXG4nKTtcbiAgICB9XG4gICAgb3V0cHV0LmFkZCgnICB2YXIgdGVtcGxhdGUgPSBIYW5kbGViYXJzLnRlbXBsYXRlLCB0ZW1wbGF0ZXMgPSAnKTtcbiAgICBpZiAob3B0cy5uYW1lc3BhY2UpIHtcbiAgICAgIG91dHB1dC5hZGQob3B0cy5uYW1lc3BhY2UpO1xuICAgICAgb3V0cHV0LmFkZCgnID0gJyk7XG4gICAgICBvdXRwdXQuYWRkKG9wdHMubmFtZXNwYWNlKTtcbiAgICAgIG91dHB1dC5hZGQoJyB8fCAnKTtcbiAgICB9XG4gICAgb3V0cHV0LmFkZCgne307XFxuJyk7XG4gIH1cblxuICBvcHRzLnRlbXBsYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICBrbm93bkhlbHBlcnM6IGtub3duLFxuICAgICAga25vd25IZWxwZXJzT25seTogb3B0cy5vXG4gICAgfTtcblxuICAgIGlmIChvcHRzLm1hcCkge1xuICAgICAgb3B0aW9ucy5zcmNOYW1lID0gdGVtcGxhdGUucGF0aDtcbiAgICB9XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgcHJlY29tcGlsZWQgPSBIYW5kbGViYXJzLnByZWNvbXBpbGUodGVtcGxhdGUuc291cmNlLCBvcHRpb25zKTtcblxuICAgIC8vIElmIHdlIGFyZSBnZW5lcmF0aW5nIGEgc291cmNlIG1hcCwgd2UgaGF2ZSB0byByZWNvbnN0cnVjdCB0aGUgU291cmNlTm9kZSBvYmplY3RcbiAgICBpZiAob3B0cy5tYXApIHtcbiAgICAgIGxldCBjb25zdW1lciA9IG5ldyBTb3VyY2VNYXBDb25zdW1lcihwcmVjb21waWxlZC5tYXApO1xuICAgICAgcHJlY29tcGlsZWQgPSBTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKHByZWNvbXBpbGVkLmNvZGUsIGNvbnN1bWVyKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zaW1wbGUpIHtcbiAgICAgIG91dHB1dC5hZGQoW3ByZWNvbXBpbGVkLCAnXFxuJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRlbXBsYXRlLm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdOYW1lIG1pc3NpbmcgZm9yIHRlbXBsYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLmFtZCAmJiAhbXVsdGlwbGUpIHtcbiAgICAgICAgb3V0cHV0LmFkZCgncmV0dXJuICcpO1xuICAgICAgfVxuICAgICAgb3V0cHV0LmFkZChbb2JqZWN0TmFtZSwgJ1tcXCcnLCB0ZW1wbGF0ZS5uYW1lLCAnXFwnXSA9IHRlbXBsYXRlKCcsIHByZWNvbXBpbGVkLCAnKTtcXG4nXSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBPdXRwdXQgdGhlIGNvbnRlbnRcbiAgaWYgKCFvcHRzLnNpbXBsZSkge1xuICAgIGlmIChvcHRzLmFtZCkge1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIG91dHB1dC5hZGQoWydyZXR1cm4gJywgb2JqZWN0TmFtZSwgJztcXG4nXSk7XG4gICAgICB9XG4gICAgICBvdXRwdXQuYWRkKCd9KTsnKTtcbiAgICB9IGVsc2UgaWYgKCFvcHRzLmNvbW1vbmpzKSB7XG4gICAgICBvdXRwdXQuYWRkKCd9KSgpOycpO1xuICAgIH1cbiAgfVxuXG5cbiAgaWYgKG9wdHMubWFwKSB7XG4gICAgb3V0cHV0LmFkZCgnXFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9JyArIG9wdHMubWFwICsgJ1xcbicpO1xuICB9XG5cbiAgb3V0cHV0ID0gb3V0cHV0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCgpO1xuICBvdXRwdXQubWFwID0gb3V0cHV0Lm1hcCArICcnO1xuXG4gIGlmIChvcHRzLm1pbikge1xuICAgIG91dHB1dCA9IHVnbGlmeS5taW5pZnkob3V0cHV0LmNvZGUsIHtcbiAgICAgIGZyb21TdHJpbmc6IHRydWUsXG5cbiAgICAgIG91dFNvdXJjZU1hcDogb3B0cy5tYXAsXG4gICAgICBpblNvdXJjZU1hcDogSlNPTi5wYXJzZShvdXRwdXQubWFwKVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9wdHMubWFwKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhvcHRzLm1hcCwgb3V0cHV0Lm1hcCwgJ3V0ZjgnKTtcbiAgfVxuICBvdXRwdXQgPSBvdXRwdXQuY29kZTtcblxuICBpZiAob3B0cy5vdXRwdXQpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKG9wdHMub3V0cHV0LCBvdXRwdXQsICd1dGY4Jyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2cob3V0cHV0KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXJyYXlDYXN0KHZhbHVlKSB7XG4gIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogW107XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuIl19
This diff could not be displayed because it is too large.
1 /**!
2
3 @license
4 handlebars v4.0.10
5
6 Copyright (C) 2011-2016 by Yehuda Katz
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25
26 */
27 define("handlebars/utils",["exports"],function(a){"use strict";function b(a){return j[a]}function c(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function d(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function e(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return l.test(a)?a.replace(k,b):a}function f(a){return!a&&0!==a||!(!o(a)||0!==a.length)}function g(a){var b=c({},a);return b._parent=a,b}function h(a,b){return a.path=b,a}function i(a,b){return(a?a+".":"")+b}a.__esModule=!0,a.extend=c,a.indexOf=d,a.escapeExpression=e,a.isEmpty=f,a.createFrame=g,a.blockParams=h,a.appendContextPath=i;var j={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},k=/[&<>"'`=]/g,l=/[&<>"'`=]/,m=Object.prototype.toString;a.toString=m;var n=function(a){return"function"==typeof a};n(/x/)&&(a.isFunction=n=function(a){return"function"==typeof a&&"[object Function]"===m.call(a)}),a.isFunction=n;var o=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===m.call(a)};a.isArray=o}),define("handlebars/exception",["exports","module"],function(a,b){"use strict";function c(a,b){var e=b&&b.loc,f=void 0,g=void 0;e&&(f=e.start.line,g=e.start.column,a+=" - "+f+":"+g);for(var h=Error.prototype.constructor.call(this,a),i=0;i<d.length;i++)this[d[i]]=h[d[i]];Error.captureStackTrace&&Error.captureStackTrace(this,c);try{e&&(this.lineNumber=f,Object.defineProperty?Object.defineProperty(this,"column",{value:g,enumerable:!0}):this.column=g)}catch(j){}}var d=["description","fileName","lineNumber","message","name","number","stack"];c.prototype=new Error,b.exports=c}),define("handlebars/helpers/block-helper-missing",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerHelper("blockHelperMissing",function(b,d){var e=d.inverse,f=d.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(c.isArray(b))return b.length>0?(d.ids&&(d.ids=[d.name]),a.helpers.each(b,d)):e(this);if(d.data&&d.ids){var g=c.createFrame(d.data);g.contextPath=c.appendContextPath(d.data.contextPath,d.name),d={data:g}}return f(b,d)})}}),define("handlebars/helpers/each",["exports","module","../utils","../exception"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}var f=e(d);b.exports=function(a){a.registerHelper("each",function(a,b){function d(b,d,f){j&&(j.key=b,j.index=d,j.first=0===d,j.last=!!f,k&&(j.contextPath=k+b)),i+=e(a[b],{data:j,blockParams:c.blockParams([a[b],b],[k+b,null])})}if(!b)throw new f["default"]("Must pass iterator to #each");var e=b.fn,g=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=c.appendContextPath(b.data.contextPath,b.ids[0])+"."),c.isFunction(a)&&(a=a.call(this)),b.data&&(j=c.createFrame(b.data)),a&&"object"==typeof a)if(c.isArray(a))for(var l=a.length;h<l;h++)h in a&&d(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&d(m,h-1),m=n,h++);void 0!==m&&d(m,h-1,!0)}return 0===h&&(i=g(this)),i})}}),define("handlebars/helpers/helper-missing",["exports","module","../exception"],function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}var e=d(c);b.exports=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new e["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})}}),define("handlebars/helpers/if",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerHelper("if",function(a,b){return c.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||c.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})}}),define("handlebars/helpers/log",["exports","module"],function(a,b){"use strict";b.exports=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})}}),define("handlebars/helpers/lookup",["exports","module"],function(a,b){"use strict";b.exports=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})}}),define("handlebars/helpers/with",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerHelper("with",function(a,b){c.isFunction(a)&&(a=a.call(this));var d=b.fn;if(c.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=c.createFrame(b.data),e.contextPath=c.appendContextPath(b.data.contextPath,b.ids[0])),d(a,{data:e,blockParams:c.blockParams([a],[e&&e.contextPath])})})}}),define("handlebars/helpers",["exports","./helpers/block-helper-missing","./helpers/each","./helpers/helper-missing","./helpers/if","./helpers/log","./helpers/lookup","./helpers/with"],function(a,b,c,d,e,f,g,h){"use strict";function i(a){return a&&a.__esModule?a:{"default":a}}function j(a){k["default"](a),l["default"](a),m["default"](a),n["default"](a),o["default"](a),p["default"](a),q["default"](a)}a.__esModule=!0,a.registerDefaultHelpers=j;var k=i(b),l=i(c),m=i(d),n=i(e),o=i(f),p=i(g),q=i(h)}),define("handlebars/decorators/inline",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerDecorator("inline",function(a,b,d,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=d.partials;d.partials=c.extend({},g,b.partials);var h=a(e,f);return d.partials=g,h}),b.partials[e.args[0]]=e.fn,f})}}),define("handlebars/decorators",["exports","./decorators/inline"],function(a,b){"use strict";function c(a){return a&&a.__esModule?a:{"default":a}}function d(a){e["default"](a)}a.__esModule=!0,a.registerDefaultDecorators=d;var e=c(b)}),define("handlebars/logger",["exports","module","./utils"],function(a,b,c){"use strict";var d={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=c.indexOf(d.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=d.lookupLevel(a),"undefined"!=typeof console&&d.lookupLevel(d.level)<=a){var b=d.methodMap[a];console[b]||(b="log");for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;f<c;f++)e[f-1]=arguments[f];console[b].apply(console,e)}}};b.exports=d}),define("handlebars/base",["exports","./utils","./exception","./helpers","./decorators","./logger"],function(a,b,c,d,e,f){"use strict";function g(a){return a&&a.__esModule?a:{"default":a}}function h(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},d.registerDefaultHelpers(this),e.registerDefaultDecorators(this)}a.__esModule=!0,a.HandlebarsEnvironment=h;var i=g(c),j=g(f),k="4.0.10";a.VERSION=k;var l=7;a.COMPILER_REVISION=l;var m={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};a.REVISION_CHANGES=m;var n="[object Object]";h.prototype={constructor:h,logger:j["default"],log:j["default"].log,registerHelper:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple helpers");b.extend(this.helpers,a)}else this.helpers[a]=c},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,c){if(b.toString.call(a)===n)b.extend(this.partials,a);else{if("undefined"==typeof c)throw new i["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=c}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple decorators");b.extend(this.decorators,a)}else this.decorators[a]=c},unregisterDecorator:function(a){delete this.decorators[a]}};var o=j["default"].log;a.log=o,a.createFrame=b.createFrame,a.logger=j["default"]}),define("handlebars/safe-string",["exports","module"],function(a,b){"use strict";function c(a){this.string=a}c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b.exports=c}),define("handlebars/runtime",["exports","./utils","./exception","./base"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(a){var b=a&&a[0]||1,c=d.COMPILER_REVISION;if(b!==c){if(b<c){var e=d.REVISION_CHANGES[c],f=d.REVISION_CHANGES[b];throw new n["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+e+") or downgrade your runtime to an older version ("+f+").")}throw new n["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function g(a,c){function d(d,e,f){f.hash&&(e=b.extend({},e,f.hash),f.ids&&(f.ids[0]=!0)),d=c.VM.resolvePartial.call(this,d,e,f);var g=c.VM.invokePartial.call(this,d,e,f);if(null==g&&c.compile&&(f.partials[f.name]=c.compile(d,a.compilerOptions,c),g=f.partials[f.name](e,f)),null!=g){if(f.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=f.indent+h[i];g=h.join("\n")}return g}throw new n["default"]("The partial "+f.name+" could not be compiled when running in runtime-only mode")}function e(b){function c(b){return""+a.main(f,b,f.helpers,f.partials,g,i,h)}var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=d.data;e._setup(d),!d.partial&&a.useData&&(g=l(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=d.depths?b!=d.depths[0]?[b].concat(d.depths):d.depths:[b]),(c=m(a.main,c,f,d.depths||[],g,i))(b,d)}if(!c)throw new n["default"]("No environment passed to template");if(!a||!a.main)throw new n["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,c.VM.checkRevision(a.compiler);var f={strict:function(a,b){if(!(b in a))throw new n["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:b.escapeExpression,invokePartial:d,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var f=this.programs[a],g=this.fn(a);return b||e||d||c?f=h(this,a,g,b,c,d,e):f||(f=this.programs[a]=h(this,a,g)),f},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,c){var d=a||c;return a&&c&&a!==c&&(d=b.extend({},c,a)),d},nullContext:Object.seal({}),noop:c.VM.noop,compilerInfo:a.compiler};return e.isTop=!0,e._setup=function(b){b.partial?(f.helpers=b.helpers,f.partials=b.partials,f.decorators=b.decorators):(f.helpers=f.merge(b.helpers,c.helpers),a.usePartial&&(f.partials=f.merge(b.partials,c.partials)),(a.usePartial||a.useDecorators)&&(f.decorators=f.merge(b.decorators,c.decorators)))},e._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new n["default"]("must pass block params");if(a.useDepths&&!e)throw new n["default"]("must pass parent depths");return h(f,b,a[b],c,0,d,e)},e}function h(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=m(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function i(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function j(a,c,e){var f=e.data&&e.data["partial-block"];e.partial=!0,e.ids&&(e.data.contextPath=e.ids[0]||e.data.contextPath);var g=void 0;if(e.fn&&e.fn!==k&&!function(){e.data=d.createFrame(e.data);var a=e.fn;g=e.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=d.createFrame(c.data),c.data["partial-block"]=f,a(b,c)},a.partials&&(e.partials=b.extend({},e.partials,a.partials))}(),void 0===a&&g&&(a=g),void 0===a)throw new n["default"]("The partial "+e.name+" could not be found");if(a instanceof Function)return a(c,e)}function k(){return""}function l(a,b){return b&&"root"in b||(b=b?d.createFrame(b):{},b.root=a),b}function m(a,c,d,e,f,g){if(a.decorator){var h={};c=a.decorator(c,h,d,e&&e[0],f,g,e),b.extend(c,h)}return c}a.__esModule=!0,a.checkRevision=f,a.template=g,a.wrapProgram=h,a.resolvePartial=i,a.invokePartial=j,a.noop=k;var n=e(c)}),define("handlebars/no-conflict",["exports","module"],function(a,b){"use strict";b.exports=function(a){var b="undefined"!=typeof global?global:window,c=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=c),a}}}),define("handlebars.runtime",["exports","module","./handlebars/base","./handlebars/safe-string","./handlebars/exception","./handlebars/utils","./handlebars/runtime","./handlebars/no-conflict"],function(a,b,c,d,e,f,g,h){"use strict";function i(a){return a&&a.__esModule?a:{"default":a}}function j(){var a=new c.HandlebarsEnvironment;return f.extend(a,c),a.SafeString=k["default"],a.Exception=l["default"],a.Utils=f,a.escapeExpression=f.escapeExpression,a.VM=g,a.template=function(b){return g.template(b,a)},a}var k=i(d),l=i(e),m=i(h),n=j();n.create=j,m["default"](n),n["default"]=n,b.exports=n}),define("handlebars/compiler/ast",["exports","module"],function(a,b){"use strict";var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b.exports=c}),define("handlebars/compiler/parser",["exports","module"],function(a,b){"use strict";var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){
28 throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b.exports=c}),define("handlebars/compiler/visitor",["exports","module","../exception"],function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(){this.parents=[]}function f(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function g(a){f.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function h(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var i=d(c);e.prototype={constructor:e,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!e.prototype[c.type])throw new i["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new i["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new i["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:f,Decorator:f,BlockStatement:g,DecoratorBlock:g,PartialStatement:h,PartialBlockStatement:function(a){h.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:f,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b.exports=e}),define("handlebars/compiler/whitespace-control",["exports","module","./visitor"],function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function f(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function g(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function h(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function i(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var j=d(c);e.prototype=new j["default"],e.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,e=0,j=d.length;e<j;e++){var k=d[e],l=this.accept(k);if(l){var m=f(d,e,c),n=g(d,e,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&h(d,e,!0),l.open&&i(d,e,!0),b&&q&&(h(d,e),i(d,e)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[e-1].original)[1])),b&&o&&(h((k.program||k.inverse).body),i(d,e)),b&&p&&(h(d,e),i((k.inverse||k.program).body))}}return a},e.prototype.BlockStatement=e.prototype.DecoratorBlock=e.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,e=c;if(c&&c.chained)for(d=c.body[0].program;e.chained;)e=e.body[e.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:g(b.body),closeStandalone:f((d||b).body)};if(a.openStrip.close&&h(b.body,null,!0),c){var k=a.inverseStrip;k.open&&i(b.body,null,!0),k.close&&h(d.body,null,!0),a.closeStrip.open&&i(e.body,null,!0),!this.options.ignoreStandalone&&f(b.body)&&g(d.body)&&(i(b.body),h(d.body))}else a.closeStrip.open&&i(b.body,null,!0);return j},e.prototype.Decorator=e.prototype.MustacheStatement=function(a){return a.strip},e.prototype.PartialStatement=e.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b.exports=e}),define("handlebars/compiler/helpers",["exports","../exception"],function(a,b){"use strict";function c(a){return a&&a.__esModule?a:{"default":a}}function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new o["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new o["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new o["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}a.__esModule=!0,a.SourceLocation=e,a.id=f,a.stripFlags=g,a.stripComment=h,a.preparePath=i,a.prepareMustache=j,a.prepareRawBlock=k,a.prepareBlock=l,a.prepareProgram=m,a.preparePartialBlock=n;var o=c(b)}),define("handlebars/compiler/base",["exports","./parser","./whitespace-control","./helpers","../utils"],function(a,b,c,d,e){"use strict";function f(a){return a&&a.__esModule?a:{"default":a}}function g(a,b){if("Program"===a.type)return a;h["default"].yy=j,j.locInfo=function(a){return new j.SourceLocation(b&&b.srcName,a)};var c=new i["default"](b);return c.accept(h["default"].parse(a))}a.__esModule=!0,a.parse=g;var h=f(b),i=f(c);a.parser=h["default"];var j={};e.extend(j,d)}),define("handlebars/compiler/compiler",["exports","../exception","../utils","./ast"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(){}function g(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function h(a,b,d){function e(){var c=d.parse(a,b),e=(new d.Compiler).compile(c,b),f=(new d.JavaScriptCompiler).compile(e,b,void 0,!0);return d.template(f)}function f(a,b){return g||(g=e()),g.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=c.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var g=void 0;return f._setup=function(a){return g||(g=e()),g._setup(a)},f._child=function(a,b,c,d){return g||(g=e()),g._child(a,b,c,d)},f}function i(a,b){if(a===b)return!0;if(c.isArray(a)&&c.isArray(b)&&a.length===b.length){for(var d=0;d<a.length;d++)if(!i(a[d],b[d]))return!1;return!0}}function j(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}a.__esModule=!0,a.Compiler=f,a.precompile=g,a.compile=h;var k=e(b),l=e(d),m=[].slice;f.prototype={compiler:f,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!i(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){j(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){j(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,l["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=l["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:m.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=l["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&l["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||l["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,d=this.options.blockParams.length;b<d;b++){var e=this.options.blockParams[b],f=e&&c.indexOf(e,a);if(e&&f>=0)return[b,f]}}}}),define("handlebars/compiler/code-gen",["exports","module","../utils"],function(a,b,c){"use strict";function d(a,b,d){if(c.isArray(a)){for(var e=[],f=0,g=a.length;f<g;f++)e.push(b.wrap(a[f],d));return e}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}var f=void 0;try{if("function"!=typeof define||!define.amd){var g=require("source-map");f=g.SourceNode}}catch(h){}f||(f=function(a,b,c,d){this.src="",d&&this.add(d)},f.prototype={add:function(a){c.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){c.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new f(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof f?a:(a=d(a,this,b),new f(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b.exports=e}),define("handlebars/compiler/javascript-compiler",["exports","module","../base","../exception","../utils","./code-gen"],function(a,b,c,d,e,f){"use strict";function g(a){return a&&a.__esModule?a:{"default":a}}function h(a){this.value=a}function i(){}function j(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var k=g(d),l=g(f);i.prototype={nameLookup:function(a,b){return i.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=c.COMPILER_REVISION,b=c.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return e.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new k["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var j=this.createFunctionContext(d);if(this.isChild)return j;var l={compiler:this.compilerInfo(),main:j};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new l["default"](this.options.srcName),this.decorators=new l["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var f=this;if(this.options.strict||this.options.assumeObjects)return void this.push(j(this.options.strict&&e,this,b,a));for(var g=b.length;c<g;c++)this.replaceStack(function(e){var g=f.nameLookup(e,b[c],a);return d?[" && ",g]:[" != null ? ",g," : ",e];
29 })},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:i,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof h||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new h(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,d=void 0,e=void 0;if(!this.isInline())throw new k["default"]("replaceStack on non-inline");var f=this.popStack(!0);if(f instanceof h)c=[f.value],b=["(",c],e=!0;else{d=!0;var g=this.incrStack();b=["((",this.push(g)," = ",f,")"],c=this.topStack()}var i=a.call(this,c);e||this.popStack(),d&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var d=a[b];if(d instanceof h)this.compileStack.push(d);else{var e=this.incrStack();this.pushSource([e," = ",d,";"]),this.compileStack.push(e)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof h)return c.value;if(!b){if(!this.stackSlot)throw new k["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof h?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=i.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),i.isValidJavaScriptVariableName=function(a){return!i.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b.exports=i}),define("handlebars",["exports","module","./handlebars.runtime","./handlebars/compiler/ast","./handlebars/compiler/base","./handlebars/compiler/compiler","./handlebars/compiler/javascript-compiler","./handlebars/compiler/visitor","./handlebars/no-conflict"],function(a,b,c,d,e,f,g,h,i){"use strict";function j(a){return a&&a.__esModule?a:{"default":a}}function k(){var a=q();return a.compile=function(b,c){return f.compile(b,c,a)},a.precompile=function(b,c){return f.precompile(b,c,a)},a.AST=m["default"],a.Compiler=f.Compiler,a.JavaScriptCompiler=n["default"],a.Parser=e.parser,a.parse=e.parse,a}var l=j(c),m=j(d),n=j(g),o=j(h),p=j(i),q=l["default"].create,r=k();r.create=k,p["default"](r),r.Visitor=o["default"],r["default"]=r,b.exports=r});
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
1 /**!
2
3 @license
4 handlebars v4.0.10
5
6 Copyright (C) 2011-2016 by Yehuda Katz
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25
26 */
27 !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
28 85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
29 var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
1 /**!
2
3 @license
4 handlebars v4.0.10
5
6 Copyright (C) 2011-2016 by Yehuda Katz
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25
26 */
27 define("handlebars/utils",["exports"],function(a){"use strict";function b(a){return j[a]}function c(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function d(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function e(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return l.test(a)?a.replace(k,b):a}function f(a){return!a&&0!==a||!(!o(a)||0!==a.length)}function g(a){var b=c({},a);return b._parent=a,b}function h(a,b){return a.path=b,a}function i(a,b){return(a?a+".":"")+b}a.__esModule=!0,a.extend=c,a.indexOf=d,a.escapeExpression=e,a.isEmpty=f,a.createFrame=g,a.blockParams=h,a.appendContextPath=i;var j={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},k=/[&<>"'`=]/g,l=/[&<>"'`=]/,m=Object.prototype.toString;a.toString=m;var n=function(a){return"function"==typeof a};n(/x/)&&(a.isFunction=n=function(a){return"function"==typeof a&&"[object Function]"===m.call(a)}),a.isFunction=n;var o=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===m.call(a)};a.isArray=o}),define("handlebars/exception",["exports","module"],function(a,b){"use strict";function c(a,b){var e=b&&b.loc,f=void 0,g=void 0;e&&(f=e.start.line,g=e.start.column,a+=" - "+f+":"+g);for(var h=Error.prototype.constructor.call(this,a),i=0;i<d.length;i++)this[d[i]]=h[d[i]];Error.captureStackTrace&&Error.captureStackTrace(this,c);try{e&&(this.lineNumber=f,Object.defineProperty?Object.defineProperty(this,"column",{value:g,enumerable:!0}):this.column=g)}catch(j){}}var d=["description","fileName","lineNumber","message","name","number","stack"];c.prototype=new Error,b.exports=c}),define("handlebars/helpers/block-helper-missing",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerHelper("blockHelperMissing",function(b,d){var e=d.inverse,f=d.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(c.isArray(b))return b.length>0?(d.ids&&(d.ids=[d.name]),a.helpers.each(b,d)):e(this);if(d.data&&d.ids){var g=c.createFrame(d.data);g.contextPath=c.appendContextPath(d.data.contextPath,d.name),d={data:g}}return f(b,d)})}}),define("handlebars/helpers/each",["exports","module","../utils","../exception"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}var f=e(d);b.exports=function(a){a.registerHelper("each",function(a,b){function d(b,d,f){j&&(j.key=b,j.index=d,j.first=0===d,j.last=!!f,k&&(j.contextPath=k+b)),i+=e(a[b],{data:j,blockParams:c.blockParams([a[b],b],[k+b,null])})}if(!b)throw new f["default"]("Must pass iterator to #each");var e=b.fn,g=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=c.appendContextPath(b.data.contextPath,b.ids[0])+"."),c.isFunction(a)&&(a=a.call(this)),b.data&&(j=c.createFrame(b.data)),a&&"object"==typeof a)if(c.isArray(a))for(var l=a.length;h<l;h++)h in a&&d(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&d(m,h-1),m=n,h++);void 0!==m&&d(m,h-1,!0)}return 0===h&&(i=g(this)),i})}}),define("handlebars/helpers/helper-missing",["exports","module","../exception"],function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}var e=d(c);b.exports=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new e["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})}}),define("handlebars/helpers/if",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerHelper("if",function(a,b){return c.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||c.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})}}),define("handlebars/helpers/log",["exports","module"],function(a,b){"use strict";b.exports=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})}}),define("handlebars/helpers/lookup",["exports","module"],function(a,b){"use strict";b.exports=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})}}),define("handlebars/helpers/with",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerHelper("with",function(a,b){c.isFunction(a)&&(a=a.call(this));var d=b.fn;if(c.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=c.createFrame(b.data),e.contextPath=c.appendContextPath(b.data.contextPath,b.ids[0])),d(a,{data:e,blockParams:c.blockParams([a],[e&&e.contextPath])})})}}),define("handlebars/helpers",["exports","./helpers/block-helper-missing","./helpers/each","./helpers/helper-missing","./helpers/if","./helpers/log","./helpers/lookup","./helpers/with"],function(a,b,c,d,e,f,g,h){"use strict";function i(a){return a&&a.__esModule?a:{"default":a}}function j(a){k["default"](a),l["default"](a),m["default"](a),n["default"](a),o["default"](a),p["default"](a),q["default"](a)}a.__esModule=!0,a.registerDefaultHelpers=j;var k=i(b),l=i(c),m=i(d),n=i(e),o=i(f),p=i(g),q=i(h)}),define("handlebars/decorators/inline",["exports","module","../utils"],function(a,b,c){"use strict";b.exports=function(a){a.registerDecorator("inline",function(a,b,d,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=d.partials;d.partials=c.extend({},g,b.partials);var h=a(e,f);return d.partials=g,h}),b.partials[e.args[0]]=e.fn,f})}}),define("handlebars/decorators",["exports","./decorators/inline"],function(a,b){"use strict";function c(a){return a&&a.__esModule?a:{"default":a}}function d(a){e["default"](a)}a.__esModule=!0,a.registerDefaultDecorators=d;var e=c(b)}),define("handlebars/logger",["exports","module","./utils"],function(a,b,c){"use strict";var d={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=c.indexOf(d.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=d.lookupLevel(a),"undefined"!=typeof console&&d.lookupLevel(d.level)<=a){var b=d.methodMap[a];console[b]||(b="log");for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;f<c;f++)e[f-1]=arguments[f];console[b].apply(console,e)}}};b.exports=d}),define("handlebars/base",["exports","./utils","./exception","./helpers","./decorators","./logger"],function(a,b,c,d,e,f){"use strict";function g(a){return a&&a.__esModule?a:{"default":a}}function h(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},d.registerDefaultHelpers(this),e.registerDefaultDecorators(this)}a.__esModule=!0,a.HandlebarsEnvironment=h;var i=g(c),j=g(f),k="4.0.10";a.VERSION=k;var l=7;a.COMPILER_REVISION=l;var m={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};a.REVISION_CHANGES=m;var n="[object Object]";h.prototype={constructor:h,logger:j["default"],log:j["default"].log,registerHelper:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple helpers");b.extend(this.helpers,a)}else this.helpers[a]=c},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,c){if(b.toString.call(a)===n)b.extend(this.partials,a);else{if("undefined"==typeof c)throw new i["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=c}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple decorators");b.extend(this.decorators,a)}else this.decorators[a]=c},unregisterDecorator:function(a){delete this.decorators[a]}};var o=j["default"].log;a.log=o,a.createFrame=b.createFrame,a.logger=j["default"]}),define("handlebars/safe-string",["exports","module"],function(a,b){"use strict";function c(a){this.string=a}c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b.exports=c}),define("handlebars/runtime",["exports","./utils","./exception","./base"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(a){var b=a&&a[0]||1,c=d.COMPILER_REVISION;if(b!==c){if(b<c){var e=d.REVISION_CHANGES[c],f=d.REVISION_CHANGES[b];throw new n["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+e+") or downgrade your runtime to an older version ("+f+").")}throw new n["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function g(a,c){function d(d,e,f){f.hash&&(e=b.extend({},e,f.hash),f.ids&&(f.ids[0]=!0)),d=c.VM.resolvePartial.call(this,d,e,f);var g=c.VM.invokePartial.call(this,d,e,f);if(null==g&&c.compile&&(f.partials[f.name]=c.compile(d,a.compilerOptions,c),g=f.partials[f.name](e,f)),null!=g){if(f.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=f.indent+h[i];g=h.join("\n")}return g}throw new n["default"]("The partial "+f.name+" could not be compiled when running in runtime-only mode")}function e(b){function c(b){return""+a.main(f,b,f.helpers,f.partials,g,i,h)}var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=d.data;e._setup(d),!d.partial&&a.useData&&(g=l(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=d.depths?b!=d.depths[0]?[b].concat(d.depths):d.depths:[b]),(c=m(a.main,c,f,d.depths||[],g,i))(b,d)}if(!c)throw new n["default"]("No environment passed to template");if(!a||!a.main)throw new n["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,c.VM.checkRevision(a.compiler);var f={strict:function(a,b){if(!(b in a))throw new n["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:b.escapeExpression,invokePartial:d,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var f=this.programs[a],g=this.fn(a);return b||e||d||c?f=h(this,a,g,b,c,d,e):f||(f=this.programs[a]=h(this,a,g)),f},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,c){var d=a||c;return a&&c&&a!==c&&(d=b.extend({},c,a)),d},nullContext:Object.seal({}),noop:c.VM.noop,compilerInfo:a.compiler};return e.isTop=!0,e._setup=function(b){b.partial?(f.helpers=b.helpers,f.partials=b.partials,f.decorators=b.decorators):(f.helpers=f.merge(b.helpers,c.helpers),a.usePartial&&(f.partials=f.merge(b.partials,c.partials)),(a.usePartial||a.useDecorators)&&(f.decorators=f.merge(b.decorators,c.decorators)))},e._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new n["default"]("must pass block params");if(a.useDepths&&!e)throw new n["default"]("must pass parent depths");return h(f,b,a[b],c,0,d,e)},e}function h(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=m(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function i(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function j(a,c,e){var f=e.data&&e.data["partial-block"];e.partial=!0,e.ids&&(e.data.contextPath=e.ids[0]||e.data.contextPath);var g=void 0;if(e.fn&&e.fn!==k&&!function(){e.data=d.createFrame(e.data);var a=e.fn;g=e.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=d.createFrame(c.data),c.data["partial-block"]=f,a(b,c)},a.partials&&(e.partials=b.extend({},e.partials,a.partials))}(),void 0===a&&g&&(a=g),void 0===a)throw new n["default"]("The partial "+e.name+" could not be found");if(a instanceof Function)return a(c,e)}function k(){return""}function l(a,b){return b&&"root"in b||(b=b?d.createFrame(b):{},b.root=a),b}function m(a,c,d,e,f,g){if(a.decorator){var h={};c=a.decorator(c,h,d,e&&e[0],f,g,e),b.extend(c,h)}return c}a.__esModule=!0,a.checkRevision=f,a.template=g,a.wrapProgram=h,a.resolvePartial=i,a.invokePartial=j,a.noop=k;var n=e(c)}),define("handlebars/no-conflict",["exports","module"],function(a,b){"use strict";b.exports=function(a){var b="undefined"!=typeof global?global:window,c=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=c),a}}}),define("handlebars.runtime",["exports","module","./handlebars/base","./handlebars/safe-string","./handlebars/exception","./handlebars/utils","./handlebars/runtime","./handlebars/no-conflict"],function(a,b,c,d,e,f,g,h){"use strict";function i(a){return a&&a.__esModule?a:{"default":a}}function j(){var a=new c.HandlebarsEnvironment;return f.extend(a,c),a.SafeString=k["default"],a.Exception=l["default"],a.Utils=f,a.escapeExpression=f.escapeExpression,a.VM=g,a.template=function(b){return g.template(b,a)},a}var k=i(d),l=i(e),m=i(h),n=j();n.create=j,m["default"](n),n["default"]=n,b.exports=n});
...\ No newline at end of file ...\ No newline at end of file
1 /**!
2
3 @license
4 handlebars v4.0.10
5
6 Copyright (C) 2011-2016 by Yehuda Katz
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25
26 */
27 (function webpackUniversalModuleDefinition(root, factory) {
28 if(typeof exports === 'object' && typeof module === 'object')
29 module.exports = factory();
30 else if(typeof define === 'function' && define.amd)
31 define([], factory);
32 else if(typeof exports === 'object')
33 exports["Handlebars"] = factory();
34 else
35 root["Handlebars"] = factory();
36 })(this, function() {
37 return /******/ (function(modules) { // webpackBootstrap
38 /******/ // The module cache
39 /******/ var installedModules = {};
40
41 /******/ // The require function
42 /******/ function __webpack_require__(moduleId) {
43
44 /******/ // Check if module is in cache
45 /******/ if(installedModules[moduleId])
46 /******/ return installedModules[moduleId].exports;
47
48 /******/ // Create a new module (and put it into the cache)
49 /******/ var module = installedModules[moduleId] = {
50 /******/ exports: {},
51 /******/ id: moduleId,
52 /******/ loaded: false
53 /******/ };
54
55 /******/ // Execute the module function
56 /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
57
58 /******/ // Flag the module as loaded
59 /******/ module.loaded = true;
60
61 /******/ // Return the exports of the module
62 /******/ return module.exports;
63 /******/ }
64
65
66 /******/ // expose the modules object (__webpack_modules__)
67 /******/ __webpack_require__.m = modules;
68
69 /******/ // expose the module cache
70 /******/ __webpack_require__.c = installedModules;
71
72 /******/ // __webpack_public_path__
73 /******/ __webpack_require__.p = "";
74
75 /******/ // Load entry module and return exports
76 /******/ return __webpack_require__(0);
77 /******/ })
78 /************************************************************************/
79 /******/ ([
80 /* 0 */
81 /***/ (function(module, exports, __webpack_require__) {
82
83 'use strict';
84
85 var _interopRequireWildcard = __webpack_require__(1)['default'];
86
87 var _interopRequireDefault = __webpack_require__(2)['default'];
88
89 exports.__esModule = true;
90
91 var _handlebarsBase = __webpack_require__(3);
92
93 var base = _interopRequireWildcard(_handlebarsBase);
94
95 // Each of these augment the Handlebars object. No need to setup here.
96 // (This is done to easily share code between commonjs and browse envs)
97
98 var _handlebarsSafeString = __webpack_require__(20);
99
100 var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
101
102 var _handlebarsException = __webpack_require__(5);
103
104 var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
105
106 var _handlebarsUtils = __webpack_require__(4);
107
108 var Utils = _interopRequireWildcard(_handlebarsUtils);
109
110 var _handlebarsRuntime = __webpack_require__(21);
111
112 var runtime = _interopRequireWildcard(_handlebarsRuntime);
113
114 var _handlebarsNoConflict = __webpack_require__(33);
115
116 var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
117
118 // For compatibility and usage outside of module systems, make the Handlebars object a namespace
119 function create() {
120 var hb = new base.HandlebarsEnvironment();
121
122 Utils.extend(hb, base);
123 hb.SafeString = _handlebarsSafeString2['default'];
124 hb.Exception = _handlebarsException2['default'];
125 hb.Utils = Utils;
126 hb.escapeExpression = Utils.escapeExpression;
127
128 hb.VM = runtime;
129 hb.template = function (spec) {
130 return runtime.template(spec, hb);
131 };
132
133 return hb;
134 }
135
136 var inst = create();
137 inst.create = create;
138
139 _handlebarsNoConflict2['default'](inst);
140
141 inst['default'] = inst;
142
143 exports['default'] = inst;
144 module.exports = exports['default'];
145
146 /***/ }),
147 /* 1 */
148 /***/ (function(module, exports) {
149
150 "use strict";
151
152 exports["default"] = function (obj) {
153 if (obj && obj.__esModule) {
154 return obj;
155 } else {
156 var newObj = {};
157
158 if (obj != null) {
159 for (var key in obj) {
160 if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
161 }
162 }
163
164 newObj["default"] = obj;
165 return newObj;
166 }
167 };
168
169 exports.__esModule = true;
170
171 /***/ }),
172 /* 2 */
173 /***/ (function(module, exports) {
174
175 "use strict";
176
177 exports["default"] = function (obj) {
178 return obj && obj.__esModule ? obj : {
179 "default": obj
180 };
181 };
182
183 exports.__esModule = true;
184
185 /***/ }),
186 /* 3 */
187 /***/ (function(module, exports, __webpack_require__) {
188
189 'use strict';
190
191 var _interopRequireDefault = __webpack_require__(2)['default'];
192
193 exports.__esModule = true;
194 exports.HandlebarsEnvironment = HandlebarsEnvironment;
195
196 var _utils = __webpack_require__(4);
197
198 var _exception = __webpack_require__(5);
199
200 var _exception2 = _interopRequireDefault(_exception);
201
202 var _helpers = __webpack_require__(9);
203
204 var _decorators = __webpack_require__(17);
205
206 var _logger = __webpack_require__(19);
207
208 var _logger2 = _interopRequireDefault(_logger);
209
210 var VERSION = '4.0.10';
211 exports.VERSION = VERSION;
212 var COMPILER_REVISION = 7;
213
214 exports.COMPILER_REVISION = COMPILER_REVISION;
215 var REVISION_CHANGES = {
216 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
217 2: '== 1.0.0-rc.3',
218 3: '== 1.0.0-rc.4',
219 4: '== 1.x.x',
220 5: '== 2.0.0-alpha.x',
221 6: '>= 2.0.0-beta.1',
222 7: '>= 4.0.0'
223 };
224
225 exports.REVISION_CHANGES = REVISION_CHANGES;
226 var objectType = '[object Object]';
227
228 function HandlebarsEnvironment(helpers, partials, decorators) {
229 this.helpers = helpers || {};
230 this.partials = partials || {};
231 this.decorators = decorators || {};
232
233 _helpers.registerDefaultHelpers(this);
234 _decorators.registerDefaultDecorators(this);
235 }
236
237 HandlebarsEnvironment.prototype = {
238 constructor: HandlebarsEnvironment,
239
240 logger: _logger2['default'],
241 log: _logger2['default'].log,
242
243 registerHelper: function registerHelper(name, fn) {
244 if (_utils.toString.call(name) === objectType) {
245 if (fn) {
246 throw new _exception2['default']('Arg not supported with multiple helpers');
247 }
248 _utils.extend(this.helpers, name);
249 } else {
250 this.helpers[name] = fn;
251 }
252 },
253 unregisterHelper: function unregisterHelper(name) {
254 delete this.helpers[name];
255 },
256
257 registerPartial: function registerPartial(name, partial) {
258 if (_utils.toString.call(name) === objectType) {
259 _utils.extend(this.partials, name);
260 } else {
261 if (typeof partial === 'undefined') {
262 throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
263 }
264 this.partials[name] = partial;
265 }
266 },
267 unregisterPartial: function unregisterPartial(name) {
268 delete this.partials[name];
269 },
270
271 registerDecorator: function registerDecorator(name, fn) {
272 if (_utils.toString.call(name) === objectType) {
273 if (fn) {
274 throw new _exception2['default']('Arg not supported with multiple decorators');
275 }
276 _utils.extend(this.decorators, name);
277 } else {
278 this.decorators[name] = fn;
279 }
280 },
281 unregisterDecorator: function unregisterDecorator(name) {
282 delete this.decorators[name];
283 }
284 };
285
286 var log = _logger2['default'].log;
287
288 exports.log = log;
289 exports.createFrame = _utils.createFrame;
290 exports.logger = _logger2['default'];
291
292 /***/ }),
293 /* 4 */
294 /***/ (function(module, exports) {
295
296 'use strict';
297
298 exports.__esModule = true;
299 exports.extend = extend;
300 exports.indexOf = indexOf;
301 exports.escapeExpression = escapeExpression;
302 exports.isEmpty = isEmpty;
303 exports.createFrame = createFrame;
304 exports.blockParams = blockParams;
305 exports.appendContextPath = appendContextPath;
306 var escape = {
307 '&': '&amp;',
308 '<': '&lt;',
309 '>': '&gt;',
310 '"': '&quot;',
311 "'": '&#x27;',
312 '`': '&#x60;',
313 '=': '&#x3D;'
314 };
315
316 var badChars = /[&<>"'`=]/g,
317 possible = /[&<>"'`=]/;
318
319 function escapeChar(chr) {
320 return escape[chr];
321 }
322
323 function extend(obj /* , ...source */) {
324 for (var i = 1; i < arguments.length; i++) {
325 for (var key in arguments[i]) {
326 if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
327 obj[key] = arguments[i][key];
328 }
329 }
330 }
331
332 return obj;
333 }
334
335 var toString = Object.prototype.toString;
336
337 exports.toString = toString;
338 // Sourced from lodash
339 // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
340 /* eslint-disable func-style */
341 var isFunction = function isFunction(value) {
342 return typeof value === 'function';
343 };
344 // fallback for older versions of Chrome and Safari
345 /* istanbul ignore next */
346 if (isFunction(/x/)) {
347 exports.isFunction = isFunction = function (value) {
348 return typeof value === 'function' && toString.call(value) === '[object Function]';
349 };
350 }
351 exports.isFunction = isFunction;
352
353 /* eslint-enable func-style */
354
355 /* istanbul ignore next */
356 var isArray = Array.isArray || function (value) {
357 return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
358 };
359
360 exports.isArray = isArray;
361 // Older IE versions do not directly support indexOf so we must implement our own, sadly.
362
363 function indexOf(array, value) {
364 for (var i = 0, len = array.length; i < len; i++) {
365 if (array[i] === value) {
366 return i;
367 }
368 }
369 return -1;
370 }
371
372 function escapeExpression(string) {
373 if (typeof string !== 'string') {
374 // don't escape SafeStrings, since they're already safe
375 if (string && string.toHTML) {
376 return string.toHTML();
377 } else if (string == null) {
378 return '';
379 } else if (!string) {
380 return string + '';
381 }
382
383 // Force a string conversion as this will be done by the append regardless and
384 // the regex test will do this transparently behind the scenes, causing issues if
385 // an object's to string has escaped characters in it.
386 string = '' + string;
387 }
388
389 if (!possible.test(string)) {
390 return string;
391 }
392 return string.replace(badChars, escapeChar);
393 }
394
395 function isEmpty(value) {
396 if (!value && value !== 0) {
397 return true;
398 } else if (isArray(value) && value.length === 0) {
399 return true;
400 } else {
401 return false;
402 }
403 }
404
405 function createFrame(object) {
406 var frame = extend({}, object);
407 frame._parent = object;
408 return frame;
409 }
410
411 function blockParams(params, ids) {
412 params.path = ids;
413 return params;
414 }
415
416 function appendContextPath(contextPath, id) {
417 return (contextPath ? contextPath + '.' : '') + id;
418 }
419
420 /***/ }),
421 /* 5 */
422 /***/ (function(module, exports, __webpack_require__) {
423
424 'use strict';
425
426 var _Object$defineProperty = __webpack_require__(6)['default'];
427
428 exports.__esModule = true;
429
430 var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
431
432 function Exception(message, node) {
433 var loc = node && node.loc,
434 line = undefined,
435 column = undefined;
436 if (loc) {
437 line = loc.start.line;
438 column = loc.start.column;
439
440 message += ' - ' + line + ':' + column;
441 }
442
443 var tmp = Error.prototype.constructor.call(this, message);
444
445 // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
446 for (var idx = 0; idx < errorProps.length; idx++) {
447 this[errorProps[idx]] = tmp[errorProps[idx]];
448 }
449
450 /* istanbul ignore else */
451 if (Error.captureStackTrace) {
452 Error.captureStackTrace(this, Exception);
453 }
454
455 try {
456 if (loc) {
457 this.lineNumber = line;
458
459 // Work around issue under safari where we can't directly set the column value
460 /* istanbul ignore next */
461 if (_Object$defineProperty) {
462 Object.defineProperty(this, 'column', {
463 value: column,
464 enumerable: true
465 });
466 } else {
467 this.column = column;
468 }
469 }
470 } catch (nop) {
471 /* Ignore if the browser is very particular */
472 }
473 }
474
475 Exception.prototype = new Error();
476
477 exports['default'] = Exception;
478 module.exports = exports['default'];
479
480 /***/ }),
481 /* 6 */
482 /***/ (function(module, exports, __webpack_require__) {
483
484 module.exports = { "default": __webpack_require__(7), __esModule: true };
485
486 /***/ }),
487 /* 7 */
488 /***/ (function(module, exports, __webpack_require__) {
489
490 var $ = __webpack_require__(8);
491 module.exports = function defineProperty(it, key, desc){
492 return $.setDesc(it, key, desc);
493 };
494
495 /***/ }),
496 /* 8 */
497 /***/ (function(module, exports) {
498
499 var $Object = Object;
500 module.exports = {
501 create: $Object.create,
502 getProto: $Object.getPrototypeOf,
503 isEnum: {}.propertyIsEnumerable,
504 getDesc: $Object.getOwnPropertyDescriptor,
505 setDesc: $Object.defineProperty,
506 setDescs: $Object.defineProperties,
507 getKeys: $Object.keys,
508 getNames: $Object.getOwnPropertyNames,
509 getSymbols: $Object.getOwnPropertySymbols,
510 each: [].forEach
511 };
512
513 /***/ }),
514 /* 9 */
515 /***/ (function(module, exports, __webpack_require__) {
516
517 'use strict';
518
519 var _interopRequireDefault = __webpack_require__(2)['default'];
520
521 exports.__esModule = true;
522 exports.registerDefaultHelpers = registerDefaultHelpers;
523
524 var _helpersBlockHelperMissing = __webpack_require__(10);
525
526 var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
527
528 var _helpersEach = __webpack_require__(11);
529
530 var _helpersEach2 = _interopRequireDefault(_helpersEach);
531
532 var _helpersHelperMissing = __webpack_require__(12);
533
534 var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
535
536 var _helpersIf = __webpack_require__(13);
537
538 var _helpersIf2 = _interopRequireDefault(_helpersIf);
539
540 var _helpersLog = __webpack_require__(14);
541
542 var _helpersLog2 = _interopRequireDefault(_helpersLog);
543
544 var _helpersLookup = __webpack_require__(15);
545
546 var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
547
548 var _helpersWith = __webpack_require__(16);
549
550 var _helpersWith2 = _interopRequireDefault(_helpersWith);
551
552 function registerDefaultHelpers(instance) {
553 _helpersBlockHelperMissing2['default'](instance);
554 _helpersEach2['default'](instance);
555 _helpersHelperMissing2['default'](instance);
556 _helpersIf2['default'](instance);
557 _helpersLog2['default'](instance);
558 _helpersLookup2['default'](instance);
559 _helpersWith2['default'](instance);
560 }
561
562 /***/ }),
563 /* 10 */
564 /***/ (function(module, exports, __webpack_require__) {
565
566 'use strict';
567
568 exports.__esModule = true;
569
570 var _utils = __webpack_require__(4);
571
572 exports['default'] = function (instance) {
573 instance.registerHelper('blockHelperMissing', function (context, options) {
574 var inverse = options.inverse,
575 fn = options.fn;
576
577 if (context === true) {
578 return fn(this);
579 } else if (context === false || context == null) {
580 return inverse(this);
581 } else if (_utils.isArray(context)) {
582 if (context.length > 0) {
583 if (options.ids) {
584 options.ids = [options.name];
585 }
586
587 return instance.helpers.each(context, options);
588 } else {
589 return inverse(this);
590 }
591 } else {
592 if (options.data && options.ids) {
593 var data = _utils.createFrame(options.data);
594 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
595 options = { data: data };
596 }
597
598 return fn(context, options);
599 }
600 });
601 };
602
603 module.exports = exports['default'];
604
605 /***/ }),
606 /* 11 */
607 /***/ (function(module, exports, __webpack_require__) {
608
609 'use strict';
610
611 var _interopRequireDefault = __webpack_require__(2)['default'];
612
613 exports.__esModule = true;
614
615 var _utils = __webpack_require__(4);
616
617 var _exception = __webpack_require__(5);
618
619 var _exception2 = _interopRequireDefault(_exception);
620
621 exports['default'] = function (instance) {
622 instance.registerHelper('each', function (context, options) {
623 if (!options) {
624 throw new _exception2['default']('Must pass iterator to #each');
625 }
626
627 var fn = options.fn,
628 inverse = options.inverse,
629 i = 0,
630 ret = '',
631 data = undefined,
632 contextPath = undefined;
633
634 if (options.data && options.ids) {
635 contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
636 }
637
638 if (_utils.isFunction(context)) {
639 context = context.call(this);
640 }
641
642 if (options.data) {
643 data = _utils.createFrame(options.data);
644 }
645
646 function execIteration(field, index, last) {
647 if (data) {
648 data.key = field;
649 data.index = index;
650 data.first = index === 0;
651 data.last = !!last;
652
653 if (contextPath) {
654 data.contextPath = contextPath + field;
655 }
656 }
657
658 ret = ret + fn(context[field], {
659 data: data,
660 blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
661 });
662 }
663
664 if (context && typeof context === 'object') {
665 if (_utils.isArray(context)) {
666 for (var j = context.length; i < j; i++) {
667 if (i in context) {
668 execIteration(i, i, i === context.length - 1);
669 }
670 }
671 } else {
672 var priorKey = undefined;
673
674 for (var key in context) {
675 if (context.hasOwnProperty(key)) {
676 // We're running the iterations one step out of sync so we can detect
677 // the last iteration without have to scan the object twice and create
678 // an itermediate keys array.
679 if (priorKey !== undefined) {
680 execIteration(priorKey, i - 1);
681 }
682 priorKey = key;
683 i++;
684 }
685 }
686 if (priorKey !== undefined) {
687 execIteration(priorKey, i - 1, true);
688 }
689 }
690 }
691
692 if (i === 0) {
693 ret = inverse(this);
694 }
695
696 return ret;
697 });
698 };
699
700 module.exports = exports['default'];
701
702 /***/ }),
703 /* 12 */
704 /***/ (function(module, exports, __webpack_require__) {
705
706 'use strict';
707
708 var _interopRequireDefault = __webpack_require__(2)['default'];
709
710 exports.__esModule = true;
711
712 var _exception = __webpack_require__(5);
713
714 var _exception2 = _interopRequireDefault(_exception);
715
716 exports['default'] = function (instance) {
717 instance.registerHelper('helperMissing', function () /* [args, ]options */{
718 if (arguments.length === 1) {
719 // A missing field in a {{foo}} construct.
720 return undefined;
721 } else {
722 // Someone is actually trying to call something, blow up.
723 throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
724 }
725 });
726 };
727
728 module.exports = exports['default'];
729
730 /***/ }),
731 /* 13 */
732 /***/ (function(module, exports, __webpack_require__) {
733
734 'use strict';
735
736 exports.__esModule = true;
737
738 var _utils = __webpack_require__(4);
739
740 exports['default'] = function (instance) {
741 instance.registerHelper('if', function (conditional, options) {
742 if (_utils.isFunction(conditional)) {
743 conditional = conditional.call(this);
744 }
745
746 // Default behavior is to render the positive path if the value is truthy and not empty.
747 // The `includeZero` option may be set to treat the condtional as purely not empty based on the
748 // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
749 if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
750 return options.inverse(this);
751 } else {
752 return options.fn(this);
753 }
754 });
755
756 instance.registerHelper('unless', function (conditional, options) {
757 return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
758 });
759 };
760
761 module.exports = exports['default'];
762
763 /***/ }),
764 /* 14 */
765 /***/ (function(module, exports) {
766
767 'use strict';
768
769 exports.__esModule = true;
770
771 exports['default'] = function (instance) {
772 instance.registerHelper('log', function () /* message, options */{
773 var args = [undefined],
774 options = arguments[arguments.length - 1];
775 for (var i = 0; i < arguments.length - 1; i++) {
776 args.push(arguments[i]);
777 }
778
779 var level = 1;
780 if (options.hash.level != null) {
781 level = options.hash.level;
782 } else if (options.data && options.data.level != null) {
783 level = options.data.level;
784 }
785 args[0] = level;
786
787 instance.log.apply(instance, args);
788 });
789 };
790
791 module.exports = exports['default'];
792
793 /***/ }),
794 /* 15 */
795 /***/ (function(module, exports) {
796
797 'use strict';
798
799 exports.__esModule = true;
800
801 exports['default'] = function (instance) {
802 instance.registerHelper('lookup', function (obj, field) {
803 return obj && obj[field];
804 });
805 };
806
807 module.exports = exports['default'];
808
809 /***/ }),
810 /* 16 */
811 /***/ (function(module, exports, __webpack_require__) {
812
813 'use strict';
814
815 exports.__esModule = true;
816
817 var _utils = __webpack_require__(4);
818
819 exports['default'] = function (instance) {
820 instance.registerHelper('with', function (context, options) {
821 if (_utils.isFunction(context)) {
822 context = context.call(this);
823 }
824
825 var fn = options.fn;
826
827 if (!_utils.isEmpty(context)) {
828 var data = options.data;
829 if (options.data && options.ids) {
830 data = _utils.createFrame(options.data);
831 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
832 }
833
834 return fn(context, {
835 data: data,
836 blockParams: _utils.blockParams([context], [data && data.contextPath])
837 });
838 } else {
839 return options.inverse(this);
840 }
841 });
842 };
843
844 module.exports = exports['default'];
845
846 /***/ }),
847 /* 17 */
848 /***/ (function(module, exports, __webpack_require__) {
849
850 'use strict';
851
852 var _interopRequireDefault = __webpack_require__(2)['default'];
853
854 exports.__esModule = true;
855 exports.registerDefaultDecorators = registerDefaultDecorators;
856
857 var _decoratorsInline = __webpack_require__(18);
858
859 var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
860
861 function registerDefaultDecorators(instance) {
862 _decoratorsInline2['default'](instance);
863 }
864
865 /***/ }),
866 /* 18 */
867 /***/ (function(module, exports, __webpack_require__) {
868
869 'use strict';
870
871 exports.__esModule = true;
872
873 var _utils = __webpack_require__(4);
874
875 exports['default'] = function (instance) {
876 instance.registerDecorator('inline', function (fn, props, container, options) {
877 var ret = fn;
878 if (!props.partials) {
879 props.partials = {};
880 ret = function (context, options) {
881 // Create a new partials stack frame prior to exec.
882 var original = container.partials;
883 container.partials = _utils.extend({}, original, props.partials);
884 var ret = fn(context, options);
885 container.partials = original;
886 return ret;
887 };
888 }
889
890 props.partials[options.args[0]] = options.fn;
891
892 return ret;
893 });
894 };
895
896 module.exports = exports['default'];
897
898 /***/ }),
899 /* 19 */
900 /***/ (function(module, exports, __webpack_require__) {
901
902 'use strict';
903
904 exports.__esModule = true;
905
906 var _utils = __webpack_require__(4);
907
908 var logger = {
909 methodMap: ['debug', 'info', 'warn', 'error'],
910 level: 'info',
911
912 // Maps a given level value to the `methodMap` indexes above.
913 lookupLevel: function lookupLevel(level) {
914 if (typeof level === 'string') {
915 var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
916 if (levelMap >= 0) {
917 level = levelMap;
918 } else {
919 level = parseInt(level, 10);
920 }
921 }
922
923 return level;
924 },
925
926 // Can be overridden in the host environment
927 log: function log(level) {
928 level = logger.lookupLevel(level);
929
930 if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
931 var method = logger.methodMap[level];
932 if (!console[method]) {
933 // eslint-disable-line no-console
934 method = 'log';
935 }
936
937 for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
938 message[_key - 1] = arguments[_key];
939 }
940
941 console[method].apply(console, message); // eslint-disable-line no-console
942 }
943 }
944 };
945
946 exports['default'] = logger;
947 module.exports = exports['default'];
948
949 /***/ }),
950 /* 20 */
951 /***/ (function(module, exports) {
952
953 // Build out our basic SafeString type
954 'use strict';
955
956 exports.__esModule = true;
957 function SafeString(string) {
958 this.string = string;
959 }
960
961 SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
962 return '' + this.string;
963 };
964
965 exports['default'] = SafeString;
966 module.exports = exports['default'];
967
968 /***/ }),
969 /* 21 */
970 /***/ (function(module, exports, __webpack_require__) {
971
972 'use strict';
973
974 var _Object$seal = __webpack_require__(22)['default'];
975
976 var _interopRequireWildcard = __webpack_require__(1)['default'];
977
978 var _interopRequireDefault = __webpack_require__(2)['default'];
979
980 exports.__esModule = true;
981 exports.checkRevision = checkRevision;
982 exports.template = template;
983 exports.wrapProgram = wrapProgram;
984 exports.resolvePartial = resolvePartial;
985 exports.invokePartial = invokePartial;
986 exports.noop = noop;
987
988 var _utils = __webpack_require__(4);
989
990 var Utils = _interopRequireWildcard(_utils);
991
992 var _exception = __webpack_require__(5);
993
994 var _exception2 = _interopRequireDefault(_exception);
995
996 var _base = __webpack_require__(3);
997
998 function checkRevision(compilerInfo) {
999 var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1000 currentRevision = _base.COMPILER_REVISION;
1001
1002 if (compilerRevision !== currentRevision) {
1003 if (compilerRevision < currentRevision) {
1004 var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
1005 compilerVersions = _base.REVISION_CHANGES[compilerRevision];
1006 throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
1007 } else {
1008 // Use the embedded version info since the runtime doesn't know about this revision yet
1009 throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
1010 }
1011 }
1012 }
1013
1014 function template(templateSpec, env) {
1015 /* istanbul ignore next */
1016 if (!env) {
1017 throw new _exception2['default']('No environment passed to template');
1018 }
1019 if (!templateSpec || !templateSpec.main) {
1020 throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
1021 }
1022
1023 templateSpec.main.decorator = templateSpec.main_d;
1024
1025 // Note: Using env.VM references rather than local var references throughout this section to allow
1026 // for external users to override these as psuedo-supported APIs.
1027 env.VM.checkRevision(templateSpec.compiler);
1028
1029 function invokePartialWrapper(partial, context, options) {
1030 if (options.hash) {
1031 context = Utils.extend({}, context, options.hash);
1032 if (options.ids) {
1033 options.ids[0] = true;
1034 }
1035 }
1036
1037 partial = env.VM.resolvePartial.call(this, partial, context, options);
1038 var result = env.VM.invokePartial.call(this, partial, context, options);
1039
1040 if (result == null && env.compile) {
1041 options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1042 result = options.partials[options.name](context, options);
1043 }
1044 if (result != null) {
1045 if (options.indent) {
1046 var lines = result.split('\n');
1047 for (var i = 0, l = lines.length; i < l; i++) {
1048 if (!lines[i] && i + 1 === l) {
1049 break;
1050 }
1051
1052 lines[i] = options.indent + lines[i];
1053 }
1054 result = lines.join('\n');
1055 }
1056 return result;
1057 } else {
1058 throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
1059 }
1060 }
1061
1062 // Just add water
1063 var container = {
1064 strict: function strict(obj, name) {
1065 if (!(name in obj)) {
1066 throw new _exception2['default']('"' + name + '" not defined in ' + obj);
1067 }
1068 return obj[name];
1069 },
1070 lookup: function lookup(depths, name) {
1071 var len = depths.length;
1072 for (var i = 0; i < len; i++) {
1073 if (depths[i] && depths[i][name] != null) {
1074 return depths[i][name];
1075 }
1076 }
1077 },
1078 lambda: function lambda(current, context) {
1079 return typeof current === 'function' ? current.call(context) : current;
1080 },
1081
1082 escapeExpression: Utils.escapeExpression,
1083 invokePartial: invokePartialWrapper,
1084
1085 fn: function fn(i) {
1086 var ret = templateSpec[i];
1087 ret.decorator = templateSpec[i + '_d'];
1088 return ret;
1089 },
1090
1091 programs: [],
1092 program: function program(i, data, declaredBlockParams, blockParams, depths) {
1093 var programWrapper = this.programs[i],
1094 fn = this.fn(i);
1095 if (data || depths || blockParams || declaredBlockParams) {
1096 programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
1097 } else if (!programWrapper) {
1098 programWrapper = this.programs[i] = wrapProgram(this, i, fn);
1099 }
1100 return programWrapper;
1101 },
1102
1103 data: function data(value, depth) {
1104 while (value && depth--) {
1105 value = value._parent;
1106 }
1107 return value;
1108 },
1109 merge: function merge(param, common) {
1110 var obj = param || common;
1111
1112 if (param && common && param !== common) {
1113 obj = Utils.extend({}, common, param);
1114 }
1115
1116 return obj;
1117 },
1118 // An empty object to use as replacement for null-contexts
1119 nullContext: _Object$seal({}),
1120
1121 noop: env.VM.noop,
1122 compilerInfo: templateSpec.compiler
1123 };
1124
1125 function ret(context) {
1126 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
1127
1128 var data = options.data;
1129
1130 ret._setup(options);
1131 if (!options.partial && templateSpec.useData) {
1132 data = initData(context, data);
1133 }
1134 var depths = undefined,
1135 blockParams = templateSpec.useBlockParams ? [] : undefined;
1136 if (templateSpec.useDepths) {
1137 if (options.depths) {
1138 depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
1139 } else {
1140 depths = [context];
1141 }
1142 }
1143
1144 function main(context /*, options*/) {
1145 return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1146 }
1147 main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1148 return main(context, options);
1149 }
1150 ret.isTop = true;
1151
1152 ret._setup = function (options) {
1153 if (!options.partial) {
1154 container.helpers = container.merge(options.helpers, env.helpers);
1155
1156 if (templateSpec.usePartial) {
1157 container.partials = container.merge(options.partials, env.partials);
1158 }
1159 if (templateSpec.usePartial || templateSpec.useDecorators) {
1160 container.decorators = container.merge(options.decorators, env.decorators);
1161 }
1162 } else {
1163 container.helpers = options.helpers;
1164 container.partials = options.partials;
1165 container.decorators = options.decorators;
1166 }
1167 };
1168
1169 ret._child = function (i, data, blockParams, depths) {
1170 if (templateSpec.useBlockParams && !blockParams) {
1171 throw new _exception2['default']('must pass block params');
1172 }
1173 if (templateSpec.useDepths && !depths) {
1174 throw new _exception2['default']('must pass parent depths');
1175 }
1176
1177 return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
1178 };
1179 return ret;
1180 }
1181
1182 function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
1183 function prog(context) {
1184 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
1185
1186 var currentDepths = depths;
1187 if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
1188 currentDepths = [context].concat(depths);
1189 }
1190
1191 return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
1192 }
1193
1194 prog = executeDecorators(fn, prog, container, depths, data, blockParams);
1195
1196 prog.program = i;
1197 prog.depth = depths ? depths.length : 0;
1198 prog.blockParams = declaredBlockParams || 0;
1199 return prog;
1200 }
1201
1202 function resolvePartial(partial, context, options) {
1203 if (!partial) {
1204 if (options.name === '@partial-block') {
1205 partial = options.data['partial-block'];
1206 } else {
1207 partial = options.partials[options.name];
1208 }
1209 } else if (!partial.call && !options.name) {
1210 // This is a dynamic partial that returned a string
1211 options.name = partial;
1212 partial = options.partials[partial];
1213 }
1214 return partial;
1215 }
1216
1217 function invokePartial(partial, context, options) {
1218 // Use the current closure context to save the partial-block if this partial
1219 var currentPartialBlock = options.data && options.data['partial-block'];
1220 options.partial = true;
1221 if (options.ids) {
1222 options.data.contextPath = options.ids[0] || options.data.contextPath;
1223 }
1224
1225 var partialBlock = undefined;
1226 if (options.fn && options.fn !== noop) {
1227 (function () {
1228 options.data = _base.createFrame(options.data);
1229 // Wrapper function to get access to currentPartialBlock from the closure
1230 var fn = options.fn;
1231 partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
1232 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
1233
1234 // Restore the partial-block from the closure for the execution of the block
1235 // i.e. the part inside the block of the partial call.
1236 options.data = _base.createFrame(options.data);
1237 options.data['partial-block'] = currentPartialBlock;
1238 return fn(context, options);
1239 };
1240 if (fn.partials) {
1241 options.partials = Utils.extend({}, options.partials, fn.partials);
1242 }
1243 })();
1244 }
1245
1246 if (partial === undefined && partialBlock) {
1247 partial = partialBlock;
1248 }
1249
1250 if (partial === undefined) {
1251 throw new _exception2['default']('The partial ' + options.name + ' could not be found');
1252 } else if (partial instanceof Function) {
1253 return partial(context, options);
1254 }
1255 }
1256
1257 function noop() {
1258 return '';
1259 }
1260
1261 function initData(context, data) {
1262 if (!data || !('root' in data)) {
1263 data = data ? _base.createFrame(data) : {};
1264 data.root = context;
1265 }
1266 return data;
1267 }
1268
1269 function executeDecorators(fn, prog, container, depths, data, blockParams) {
1270 if (fn.decorator) {
1271 var props = {};
1272 prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
1273 Utils.extend(prog, props);
1274 }
1275 return prog;
1276 }
1277
1278 /***/ }),
1279 /* 22 */
1280 /***/ (function(module, exports, __webpack_require__) {
1281
1282 module.exports = { "default": __webpack_require__(23), __esModule: true };
1283
1284 /***/ }),
1285 /* 23 */
1286 /***/ (function(module, exports, __webpack_require__) {
1287
1288 __webpack_require__(24);
1289 module.exports = __webpack_require__(29).Object.seal;
1290
1291 /***/ }),
1292 /* 24 */
1293 /***/ (function(module, exports, __webpack_require__) {
1294
1295 // 19.1.2.17 Object.seal(O)
1296 var isObject = __webpack_require__(25);
1297
1298 __webpack_require__(26)('seal', function($seal){
1299 return function seal(it){
1300 return $seal && isObject(it) ? $seal(it) : it;
1301 };
1302 });
1303
1304 /***/ }),
1305 /* 25 */
1306 /***/ (function(module, exports) {
1307
1308 module.exports = function(it){
1309 return typeof it === 'object' ? it !== null : typeof it === 'function';
1310 };
1311
1312 /***/ }),
1313 /* 26 */
1314 /***/ (function(module, exports, __webpack_require__) {
1315
1316 // most Object methods by ES6 should accept primitives
1317 var $export = __webpack_require__(27)
1318 , core = __webpack_require__(29)
1319 , fails = __webpack_require__(32);
1320 module.exports = function(KEY, exec){
1321 var fn = (core.Object || {})[KEY] || Object[KEY]
1322 , exp = {};
1323 exp[KEY] = exec(fn);
1324 $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
1325 };
1326
1327 /***/ }),
1328 /* 27 */
1329 /***/ (function(module, exports, __webpack_require__) {
1330
1331 var global = __webpack_require__(28)
1332 , core = __webpack_require__(29)
1333 , ctx = __webpack_require__(30)
1334 , PROTOTYPE = 'prototype';
1335
1336 var $export = function(type, name, source){
1337 var IS_FORCED = type & $export.F
1338 , IS_GLOBAL = type & $export.G
1339 , IS_STATIC = type & $export.S
1340 , IS_PROTO = type & $export.P
1341 , IS_BIND = type & $export.B
1342 , IS_WRAP = type & $export.W
1343 , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
1344 , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
1345 , key, own, out;
1346 if(IS_GLOBAL)source = name;
1347 for(key in source){
1348 // contains in native
1349 own = !IS_FORCED && target && key in target;
1350 if(own && key in exports)continue;
1351 // export native or passed
1352 out = own ? target[key] : source[key];
1353 // prevent global pollution for namespaces
1354 exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
1355 // bind timers to global for call from export context
1356 : IS_BIND && own ? ctx(out, global)
1357 // wrap global constructors for prevent change them in library
1358 : IS_WRAP && target[key] == out ? (function(C){
1359 var F = function(param){
1360 return this instanceof C ? new C(param) : C(param);
1361 };
1362 F[PROTOTYPE] = C[PROTOTYPE];
1363 return F;
1364 // make static versions for prototype methods
1365 })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
1366 if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
1367 }
1368 };
1369 // type bitmap
1370 $export.F = 1; // forced
1371 $export.G = 2; // global
1372 $export.S = 4; // static
1373 $export.P = 8; // proto
1374 $export.B = 16; // bind
1375 $export.W = 32; // wrap
1376 module.exports = $export;
1377
1378 /***/ }),
1379 /* 28 */
1380 /***/ (function(module, exports) {
1381
1382 // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
1383 var global = module.exports = typeof window != 'undefined' && window.Math == Math
1384 ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
1385 if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
1386
1387 /***/ }),
1388 /* 29 */
1389 /***/ (function(module, exports) {
1390
1391 var core = module.exports = {version: '1.2.6'};
1392 if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
1393
1394 /***/ }),
1395 /* 30 */
1396 /***/ (function(module, exports, __webpack_require__) {
1397
1398 // optional / simple context binding
1399 var aFunction = __webpack_require__(31);
1400 module.exports = function(fn, that, length){
1401 aFunction(fn);
1402 if(that === undefined)return fn;
1403 switch(length){
1404 case 1: return function(a){
1405 return fn.call(that, a);
1406 };
1407 case 2: return function(a, b){
1408 return fn.call(that, a, b);
1409 };
1410 case 3: return function(a, b, c){
1411 return fn.call(that, a, b, c);
1412 };
1413 }
1414 return function(/* ...args */){
1415 return fn.apply(that, arguments);
1416 };
1417 };
1418
1419 /***/ }),
1420 /* 31 */
1421 /***/ (function(module, exports) {
1422
1423 module.exports = function(it){
1424 if(typeof it != 'function')throw TypeError(it + ' is not a function!');
1425 return it;
1426 };
1427
1428 /***/ }),
1429 /* 32 */
1430 /***/ (function(module, exports) {
1431
1432 module.exports = function(exec){
1433 try {
1434 return !!exec();
1435 } catch(e){
1436 return true;
1437 }
1438 };
1439
1440 /***/ }),
1441 /* 33 */
1442 /***/ (function(module, exports) {
1443
1444 /* WEBPACK VAR INJECTION */(function(global) {/* global window */
1445 'use strict';
1446
1447 exports.__esModule = true;
1448
1449 exports['default'] = function (Handlebars) {
1450 /* istanbul ignore next */
1451 var root = typeof global !== 'undefined' ? global : window,
1452 $Handlebars = root.Handlebars;
1453 /* istanbul ignore next */
1454 Handlebars.noConflict = function () {
1455 if (root.Handlebars === Handlebars) {
1456 root.Handlebars = $Handlebars;
1457 }
1458 return Handlebars;
1459 };
1460 };
1461
1462 module.exports = exports['default'];
1463 /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
1464
1465 /***/ })
1466 /******/ ])
1467 });
1468 ;
...\ No newline at end of file ...\ No newline at end of file
1 /**!
2
3 @license
4 handlebars v4.0.10
5
6 Copyright (C) 2011-2016 by Yehuda Katz
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25
26 */
27 !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(20),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(21),p=e(o),q=c(33),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(17),k=c(19),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(6)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(7),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(10),g=e(f),h=c(11),i=e(h),j=c(12),k=e(j),l=c(13),m=e(l),n=c(14),o=e(n),p=c(15),q=e(p),r=c(16),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(5),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(18),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(22)["default"],m=c(1)["default"],n=c(2)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(4),p=m(o),q=c(5),r=n(q),s=c(3)},function(a,b,c){a.exports={"default":c(23),__esModule:!0}},function(a,b,c){c(24),a.exports=c(29).Object.seal},function(a,b,c){var d=c(25);c(26)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(27),e=c(29),f=c(32);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(28),e=c(29),f=c(30),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(31);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())}])});
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 /*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */
2 (function (window, document, Math) {
3 var rAF = window.requestAnimationFrame ||
4 window.webkitRequestAnimationFrame ||
5 window.mozRequestAnimationFrame ||
6 window.oRequestAnimationFrame ||
7 window.msRequestAnimationFrame ||
8 function (callback) { window.setTimeout(callback, 1000 / 60); };
9
10 var utils = (function () {
11 var me = {};
12
13 var _elementStyle = document.createElement('div').style;
14 var _vendor = (function () {
15 var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],
16 transform,
17 i = 0,
18 l = vendors.length;
19
20 for ( ; i < l; i++ ) {
21 transform = vendors[i] + 'ransform';
22 if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);
23 }
24
25 return false;
26 })();
27
28 function _prefixStyle (style) {
29 if ( _vendor === false ) return false;
30 if ( _vendor === '' ) return style;
31 return _vendor + style.charAt(0).toUpperCase() + style.substr(1);
32 }
33
34 me.getTime = Date.now || function getTime () { return new Date().getTime(); };
35
36 me.extend = function (target, obj) {
37 for ( var i in obj ) {
38 target[i] = obj[i];
39 }
40 };
41
42 me.addEvent = function (el, type, fn, capture) {
43 el.addEventListener(type, fn, !!capture);
44 };
45
46 me.removeEvent = function (el, type, fn, capture) {
47 el.removeEventListener(type, fn, !!capture);
48 };
49
50 me.prefixPointerEvent = function (pointerEvent) {
51 return window.MSPointerEvent ?
52 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):
53 pointerEvent;
54 };
55
56 me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {
57 var distance = current - start,
58 speed = Math.abs(distance) / time,
59 destination,
60 duration;
61
62 deceleration = deceleration === undefined ? 0.0006 : deceleration;
63
64 destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );
65 duration = speed / deceleration;
66
67 if ( destination < lowerMargin ) {
68 destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;
69 distance = Math.abs(destination - current);
70 duration = distance / speed;
71 } else if ( destination > 0 ) {
72 destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;
73 distance = Math.abs(current) + destination;
74 duration = distance / speed;
75 }
76
77 return {
78 destination: Math.round(destination),
79 duration: duration
80 };
81 };
82
83 var _transform = _prefixStyle('transform');
84
85 me.extend(me, {
86 hasTransform: _transform !== false,
87 hasPerspective: _prefixStyle('perspective') in _elementStyle,
88 hasTouch: 'ontouchstart' in window,
89 hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed
90 hasTransition: _prefixStyle('transition') in _elementStyle
91 });
92
93 /*
94 This should find all Android browsers lower than build 535.19 (both stock browser and webview)
95 - galaxy S2 is ok
96 - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`
97 - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
98 - galaxy S3 is badAndroid (stock brower, webview)
99 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
100 - galaxy S4 is badAndroid (stock brower, webview)
101 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
102 - galaxy S5 is OK
103 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
104 - galaxy S6 is OK
105 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
106 */
107 me.isBadAndroid = (function() {
108 var appVersion = window.navigator.appVersion;
109 // Android browser is not a chrome browser.
110 if (/Android/.test(appVersion) && !(/Chrome\/\d/.test(appVersion))) {
111 var safariVersion = appVersion.match(/Safari\/(\d+.\d)/);
112 if(safariVersion && typeof safariVersion === "object" && safariVersion.length >= 2) {
113 return parseFloat(safariVersion[1]) < 535.19;
114 } else {
115 return true;
116 }
117 } else {
118 return false;
119 }
120 })();
121
122 me.extend(me.style = {}, {
123 transform: _transform,
124 transitionTimingFunction: _prefixStyle('transitionTimingFunction'),
125 transitionDuration: _prefixStyle('transitionDuration'),
126 transitionDelay: _prefixStyle('transitionDelay'),
127 transformOrigin: _prefixStyle('transformOrigin')
128 });
129
130 me.hasClass = function (e, c) {
131 var re = new RegExp("(^|\\s)" + c + "(\\s|$)");
132 return re.test(e.className);
133 };
134
135 me.addClass = function (e, c) {
136 if ( me.hasClass(e, c) ) {
137 return;
138 }
139
140 var newclass = e.className.split(' ');
141 newclass.push(c);
142 e.className = newclass.join(' ');
143 };
144
145 me.removeClass = function (e, c) {
146 if ( !me.hasClass(e, c) ) {
147 return;
148 }
149
150 var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g');
151 e.className = e.className.replace(re, ' ');
152 };
153
154 me.offset = function (el) {
155 var left = -el.offsetLeft,
156 top = -el.offsetTop;
157
158 // jshint -W084
159 while (el = el.offsetParent) {
160 left -= el.offsetLeft;
161 top -= el.offsetTop;
162 }
163 // jshint +W084
164
165 return {
166 left: left,
167 top: top
168 };
169 };
170
171 me.preventDefaultException = function (el, exceptions) {
172 for ( var i in exceptions ) {
173 if ( exceptions[i].test(el[i]) ) {
174 return true;
175 }
176 }
177
178 return false;
179 };
180
181 me.extend(me.eventType = {}, {
182 touchstart: 1,
183 touchmove: 1,
184 touchend: 1,
185
186 mousedown: 2,
187 mousemove: 2,
188 mouseup: 2,
189
190 pointerdown: 3,
191 pointermove: 3,
192 pointerup: 3,
193
194 MSPointerDown: 3,
195 MSPointerMove: 3,
196 MSPointerUp: 3
197 });
198
199 me.extend(me.ease = {}, {
200 quadratic: {
201 style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
202 fn: function (k) {
203 return k * ( 2 - k );
204 }
205 },
206 circular: {
207 style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1)
208 fn: function (k) {
209 return Math.sqrt( 1 - ( --k * k ) );
210 }
211 },
212 back: {
213 style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
214 fn: function (k) {
215 var b = 4;
216 return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;
217 }
218 },
219 bounce: {
220 style: '',
221 fn: function (k) {
222 if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {
223 return 7.5625 * k * k;
224 } else if ( k < ( 2 / 2.75 ) ) {
225 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
226 } else if ( k < ( 2.5 / 2.75 ) ) {
227 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
228 } else {
229 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
230 }
231 }
232 },
233 elastic: {
234 style: '',
235 fn: function (k) {
236 var f = 0.22,
237 e = 0.4;
238
239 if ( k === 0 ) { return 0; }
240 if ( k == 1 ) { return 1; }
241
242 return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );
243 }
244 }
245 });
246
247 me.tap = function (e, eventName) {
248 var ev = document.createEvent('Event');
249 ev.initEvent(eventName, true, true);
250 ev.pageX = e.pageX;
251 ev.pageY = e.pageY;
252 e.target.dispatchEvent(ev);
253 };
254
255 me.click = function (e) {
256 var target = e.target,
257 ev;
258
259 if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {
260 ev = document.createEvent('MouseEvents');
261 ev.initMouseEvent('click', true, true, e.view, 1,
262 target.screenX, target.screenY, target.clientX, target.clientY,
263 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
264 0, null);
265
266 ev._constructed = true;
267 target.dispatchEvent(ev);
268 }
269 };
270
271 return me;
272 })();
273 function IScroll (el, options) {
274 this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;
275 this.scroller = this.wrapper.children[0];
276 this.scrollerStyle = this.scroller.style; // cache style for better performance
277
278 this.options = {
279
280 mouseWheelSpeed: 20,
281
282 snapThreshold: 0.334,
283
284 infiniteUseTransform: true,
285 deceleration: 0.004,
286
287 // INSERT POINT: OPTIONS
288 disablePointer : !utils.hasPointer,
289 disableTouch : utils.hasPointer || !utils.hasTouch,
290 disableMouse : utils.hasPointer || utils.hasTouch,
291 startX: 0,
292 startY: 0,
293 scrollY: true,
294 directionLockThreshold: 5,
295 momentum: true,
296
297 bounce: true,
298 bounceTime: 600,
299 bounceEasing: '',
300
301 preventDefault: true,
302 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },
303
304 HWCompositing: true,
305 useTransition: true,
306 useTransform: true,
307 bindToWrapper: typeof window.onmousedown === "undefined"
308 };
309
310 for ( var i in options ) {
311 this.options[i] = options[i];
312 }
313
314 // Normalize options
315 this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';
316
317 this.options.useTransition = utils.hasTransition && this.options.useTransition;
318 this.options.useTransform = utils.hasTransform && this.options.useTransform;
319
320 this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;
321 this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;
322
323 // If you want eventPassthrough I have to lock one of the axes
324 this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;
325 this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;
326
327 // With eventPassthrough we also need lockDirection mechanism
328 this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;
329 this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;
330
331 this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;
332
333 this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;
334
335 if ( this.options.tap === true ) {
336 this.options.tap = 'tap';
337 }
338
339 this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;
340
341 if ( this.options.infiniteElements ) {
342 this.options.probeType = 3;
343 }
344 this.options.infiniteUseTransform = this.options.infiniteUseTransform && this.options.useTransform;
345
346 if ( this.options.probeType == 3 ) {
347 this.options.useTransition = false; }
348
349 // INSERT POINT: NORMALIZATION
350
351 // Some defaults
352 this.x = 0;
353 this.y = 0;
354 this.directionX = 0;
355 this.directionY = 0;
356 this._events = {};
357
358 // INSERT POINT: DEFAULTS
359
360 this._init();
361 this.refresh();
362
363 this.scrollTo(this.options.startX, this.options.startY);
364 this.enable();
365 }
366
367 IScroll.prototype = {
368 version: '5.2.0',
369
370 _init: function () {
371 this._initEvents();
372
373 if ( this.options.mouseWheel ) {
374 this._initWheel();
375 }
376
377 if ( this.options.snap ) {
378 this._initSnap();
379 }
380
381 if ( this.options.keyBindings ) {
382 this._initKeys();
383 }
384
385 if ( this.options.infiniteElements ) {
386 this._initInfinite();
387 }
388
389 // INSERT POINT: _init
390
391 },
392
393 destroy: function () {
394 this._initEvents(true);
395 clearTimeout(this.resizeTimeout);
396 this.resizeTimeout = null;
397 this._execEvent('destroy');
398 },
399
400 _transitionEnd: function (e) {
401 if ( e.target != this.scroller || !this.isInTransition ) {
402 return;
403 }
404
405 this._transitionTime();
406 if ( !this.resetPosition(this.options.bounceTime) ) {
407 this.isInTransition = false;
408 this._execEvent('scrollEnd');
409 }
410 },
411
412 _start: function (e) {
413 // React to left mouse button only
414 if ( utils.eventType[e.type] != 1 ) {
415 // for button property
416 // http://unixpapa.com/js/mouse.html
417 var button;
418 if (!e.which) {
419 /* IE case */
420 button = (e.button < 2) ? 0 :
421 ((e.button == 4) ? 1 : 2);
422 } else {
423 /* All others */
424 button = e.button;
425 }
426 if ( button !== 0 ) {
427 return;
428 }
429 }
430
431 if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {
432 return;
433 }
434
435 if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
436 e.preventDefault();
437 }
438
439 var point = e.touches ? e.touches[0] : e,
440 pos;
441
442 this.initiated = utils.eventType[e.type];
443 this.moved = false;
444 this.distX = 0;
445 this.distY = 0;
446 this.directionX = 0;
447 this.directionY = 0;
448 this.directionLocked = 0;
449
450 this.startTime = utils.getTime();
451
452 if ( this.options.useTransition && this.isInTransition ) {
453 this._transitionTime();
454 this.isInTransition = false;
455 pos = this.getComputedPosition();
456 this._translate(Math.round(pos.x), Math.round(pos.y));
457 this._execEvent('scrollEnd');
458 } else if ( !this.options.useTransition && this.isAnimating ) {
459 this.isAnimating = false;
460 this._execEvent('scrollEnd');
461 }
462
463 this.startX = this.x;
464 this.startY = this.y;
465 this.absStartX = this.x;
466 this.absStartY = this.y;
467 this.pointX = point.pageX;
468 this.pointY = point.pageY;
469
470 this._execEvent('beforeScrollStart');
471 },
472
473 _move: function (e) {
474 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
475 return;
476 }
477
478 if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!
479 e.preventDefault();
480 }
481
482 var point = e.touches ? e.touches[0] : e,
483 deltaX = point.pageX - this.pointX,
484 deltaY = point.pageY - this.pointY,
485 timestamp = utils.getTime(),
486 newX, newY,
487 absDistX, absDistY;
488
489 this.pointX = point.pageX;
490 this.pointY = point.pageY;
491
492 this.distX += deltaX;
493 this.distY += deltaY;
494 absDistX = Math.abs(this.distX);
495 absDistY = Math.abs(this.distY);
496
497 // We need to move at least 10 pixels for the scrolling to initiate
498 if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {
499 return;
500 }
501
502 // If you are scrolling in one direction lock the other
503 if ( !this.directionLocked && !this.options.freeScroll ) {
504 if ( absDistX > absDistY + this.options.directionLockThreshold ) {
505 this.directionLocked = 'h'; // lock horizontally
506 } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {
507 this.directionLocked = 'v'; // lock vertically
508 } else {
509 this.directionLocked = 'n'; // no lock
510 }
511 }
512
513 if ( this.directionLocked == 'h' ) {
514 if ( this.options.eventPassthrough == 'vertical' ) {
515 e.preventDefault();
516 } else if ( this.options.eventPassthrough == 'horizontal' ) {
517 this.initiated = false;
518 return;
519 }
520
521 deltaY = 0;
522 } else if ( this.directionLocked == 'v' ) {
523 if ( this.options.eventPassthrough == 'horizontal' ) {
524 e.preventDefault();
525 } else if ( this.options.eventPassthrough == 'vertical' ) {
526 this.initiated = false;
527 return;
528 }
529
530 deltaX = 0;
531 }
532
533 deltaX = this.hasHorizontalScroll ? deltaX : 0;
534 deltaY = this.hasVerticalScroll ? deltaY : 0;
535
536 newX = this.x + deltaX;
537 newY = this.y + deltaY;
538
539 // Slow down if outside of the boundaries
540 if ( newX > 0 || newX < this.maxScrollX ) {
541 newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;
542 }
543 if ( newY > 0 || newY < this.maxScrollY ) {
544 newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;
545 }
546
547 this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
548 this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
549
550 if ( !this.moved ) {
551 this._execEvent('scrollStart');
552 }
553
554 this.moved = true;
555
556 this._translate(newX, newY);
557
558 /* REPLACE START: _move */
559 if ( timestamp - this.startTime > 300 ) {
560 this.startTime = timestamp;
561 this.startX = this.x;
562 this.startY = this.y;
563
564 if ( this.options.probeType == 1 ) {
565 this._execEvent('scroll');
566 }
567 }
568
569 if ( this.options.probeType > 1 ) {
570 this._execEvent('scroll');
571 }
572 /* REPLACE END: _move */
573
574 },
575
576 _end: function (e) {
577 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
578 return;
579 }
580
581 if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
582 e.preventDefault();
583 }
584
585 var point = e.changedTouches ? e.changedTouches[0] : e,
586 momentumX,
587 momentumY,
588 duration = utils.getTime() - this.startTime,
589 newX = Math.round(this.x),
590 newY = Math.round(this.y),
591 distanceX = Math.abs(newX - this.startX),
592 distanceY = Math.abs(newY - this.startY),
593 time = 0,
594 easing = '';
595
596 this.isInTransition = 0;
597 this.initiated = 0;
598 this.endTime = utils.getTime();
599
600 // reset if we are outside of the boundaries
601 if ( this.resetPosition(this.options.bounceTime) ) {
602 return;
603 }
604
605 this.scrollTo(newX, newY); // ensures that the last position is rounded
606
607 // we scrolled less than 10 pixels
608 if ( !this.moved ) {
609 if ( this.options.tap ) {
610 utils.tap(e, this.options.tap);
611 }
612
613 if ( this.options.click ) {
614 utils.click(e);
615 }
616
617 this._execEvent('scrollCancel');
618 return;
619 }
620
621 if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {
622 this._execEvent('flick');
623 return;
624 }
625
626 // start momentum animation if needed
627 if ( this.options.momentum && duration < 300 ) {
628 momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };
629 momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };
630 newX = momentumX.destination;
631 newY = momentumY.destination;
632 time = Math.max(momentumX.duration, momentumY.duration);
633 this.isInTransition = 1;
634 }
635
636
637 if ( this.options.snap ) {
638 var snap = this._nearestSnap(newX, newY);
639 this.currentPage = snap;
640 time = this.options.snapSpeed || Math.max(
641 Math.max(
642 Math.min(Math.abs(newX - snap.x), 1000),
643 Math.min(Math.abs(newY - snap.y), 1000)
644 ), 300);
645 newX = snap.x;
646 newY = snap.y;
647
648 this.directionX = 0;
649 this.directionY = 0;
650 easing = this.options.bounceEasing;
651 }
652
653 // INSERT POINT: _end
654
655 if ( newX != this.x || newY != this.y ) {
656 // change easing function when scroller goes out of the boundaries
657 if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {
658 easing = utils.ease.quadratic;
659 }
660
661 this.scrollTo(newX, newY, time, easing);
662 return;
663 }
664
665 this._execEvent('scrollEnd');
666 },
667
668 _resize: function () {
669 var that = this;
670
671 clearTimeout(this.resizeTimeout);
672
673 this.resizeTimeout = setTimeout(function () {
674 that.refresh();
675 }, this.options.resizePolling);
676 },
677
678 resetPosition: function (time) {
679 var x = this.x,
680 y = this.y;
681
682 time = time || 0;
683
684 if ( !this.hasHorizontalScroll || this.x > 0 ) {
685 x = 0;
686 } else if ( this.x < this.maxScrollX ) {
687 x = this.maxScrollX;
688 }
689
690 if ( !this.hasVerticalScroll || this.y > 0 ) {
691 y = 0;
692 } else if ( this.y < this.maxScrollY ) {
693 y = this.maxScrollY;
694 }
695
696 if ( x == this.x && y == this.y ) {
697 return false;
698 }
699
700 this.scrollTo(x, y, time, this.options.bounceEasing);
701
702 return true;
703 },
704
705 disable: function () {
706 this.enabled = false;
707 },
708
709 enable: function () {
710 this.enabled = true;
711 },
712
713 refresh: function () {
714 var rf = this.wrapper.offsetHeight; // Force reflow
715
716 this.wrapperWidth = this.wrapper.clientWidth;
717 this.wrapperHeight = this.wrapper.clientHeight;
718
719 /* REPLACE START: refresh */
720 this.scrollerWidth = this.scroller.offsetWidth;
721 this.scrollerHeight = this.scroller.offsetHeight;
722
723 this.maxScrollX = this.wrapperWidth - this.scrollerWidth;
724
725 var limit;
726 if ( this.options.infiniteElements ) {
727 this.options.infiniteLimit = this.options.infiniteLimit || Math.floor(2147483645 / this.infiniteElementHeight);
728 limit = -this.options.infiniteLimit * this.infiniteElementHeight + this.wrapperHeight;
729 }
730 this.maxScrollY = limit !== undefined ? limit : this.wrapperHeight - this.scrollerHeight;
731 /* REPLACE END: refresh */
732
733 this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;
734 this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;
735
736 if ( !this.hasHorizontalScroll ) {
737 this.maxScrollX = 0;
738 this.scrollerWidth = this.wrapperWidth;
739 }
740
741 if ( !this.hasVerticalScroll ) {
742 this.maxScrollY = 0;
743 this.scrollerHeight = this.wrapperHeight;
744 }
745
746 this.endTime = 0;
747 this.directionX = 0;
748 this.directionY = 0;
749
750 this.wrapperOffset = utils.offset(this.wrapper);
751
752 this._execEvent('refresh');
753
754 this.resetPosition();
755
756 // INSERT POINT: _refresh
757
758 },
759
760 on: function (type, fn) {
761 if ( !this._events[type] ) {
762 this._events[type] = [];
763 }
764
765 this._events[type].push(fn);
766 },
767
768 off: function (type, fn) {
769 if ( !this._events[type] ) {
770 return;
771 }
772
773 var index = this._events[type].indexOf(fn);
774
775 if ( index > -1 ) {
776 this._events[type].splice(index, 1);
777 }
778 },
779
780 _execEvent: function (type) {
781 if ( !this._events[type] ) {
782 return;
783 }
784
785 var i = 0,
786 l = this._events[type].length;
787
788 if ( !l ) {
789 return;
790 }
791
792 for ( ; i < l; i++ ) {
793 this._events[type][i].apply(this, [].slice.call(arguments, 1));
794 }
795 },
796
797 scrollBy: function (x, y, time, easing) {
798 x = this.x + x;
799 y = this.y + y;
800 time = time || 0;
801
802 this.scrollTo(x, y, time, easing);
803 },
804
805 scrollTo: function (x, y, time, easing) {
806 easing = easing || utils.ease.circular;
807
808 this.isInTransition = this.options.useTransition && time > 0;
809 var transitionType = this.options.useTransition && easing.style;
810 if ( !time || transitionType ) {
811 if(transitionType) {
812 this._transitionTimingFunction(easing.style);
813 this._transitionTime(time);
814 }
815 this._translate(x, y);
816 } else {
817 this._animate(x, y, time, easing.fn);
818 }
819 },
820
821 scrollToElement: function (el, time, offsetX, offsetY, easing) {
822 el = el.nodeType ? el : this.scroller.querySelector(el);
823
824 if ( !el ) {
825 return;
826 }
827
828 var pos = utils.offset(el);
829
830 pos.left -= this.wrapperOffset.left;
831 pos.top -= this.wrapperOffset.top;
832
833 // if offsetX/Y are true we center the element to the screen
834 if ( offsetX === true ) {
835 offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);
836 }
837 if ( offsetY === true ) {
838 offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);
839 }
840
841 pos.left -= offsetX || 0;
842 pos.top -= offsetY || 0;
843
844 pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;
845 pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;
846
847 time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;
848
849 this.scrollTo(pos.left, pos.top, time, easing);
850 },
851
852 _transitionTime: function (time) {
853 time = time || 0;
854
855 var durationProp = utils.style.transitionDuration;
856 this.scrollerStyle[durationProp] = time + 'ms';
857
858 if ( !time && utils.isBadAndroid ) {
859 this.scrollerStyle[durationProp] = '0.0001ms';
860 // remove 0.0001ms
861 var self = this;
862 rAF(function() {
863 if(self.scrollerStyle[durationProp] === '0.0001ms') {
864 self.scrollerStyle[durationProp] = '0s';
865 }
866 });
867 }
868
869 // INSERT POINT: _transitionTime
870
871 },
872
873 _transitionTimingFunction: function (easing) {
874 this.scrollerStyle[utils.style.transitionTimingFunction] = easing;
875
876 // INSERT POINT: _transitionTimingFunction
877
878 },
879
880 _translate: function (x, y) {
881 if ( this.options.useTransform ) {
882
883 /* REPLACE START: _translate */
884
885 this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;
886
887 /* REPLACE END: _translate */
888
889 } else {
890 x = Math.round(x);
891 y = Math.round(y);
892 this.scrollerStyle.left = x + 'px';
893 this.scrollerStyle.top = y + 'px';
894 }
895
896 this.x = x;
897 this.y = y;
898
899 // INSERT POINT: _translate
900
901 },
902
903 _initEvents: function (remove) {
904 var eventType = remove ? utils.removeEvent : utils.addEvent,
905 target = this.options.bindToWrapper ? this.wrapper : window;
906
907 eventType(window, 'orientationchange', this);
908 eventType(window, 'resize', this);
909
910 if ( this.options.click ) {
911 eventType(this.wrapper, 'click', this, true);
912 }
913
914 if ( !this.options.disableMouse ) {
915 eventType(this.wrapper, 'mousedown', this);
916 eventType(target, 'mousemove', this);
917 eventType(target, 'mousecancel', this);
918 eventType(target, 'mouseup', this);
919 }
920
921 if ( utils.hasPointer && !this.options.disablePointer ) {
922 eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);
923 eventType(target, utils.prefixPointerEvent('pointermove'), this);
924 eventType(target, utils.prefixPointerEvent('pointercancel'), this);
925 eventType(target, utils.prefixPointerEvent('pointerup'), this);
926 }
927
928 if ( utils.hasTouch && !this.options.disableTouch ) {
929 eventType(this.wrapper, 'touchstart', this);
930 eventType(target, 'touchmove', this);
931 eventType(target, 'touchcancel', this);
932 eventType(target, 'touchend', this);
933 }
934
935 eventType(this.scroller, 'transitionend', this);
936 eventType(this.scroller, 'webkitTransitionEnd', this);
937 eventType(this.scroller, 'oTransitionEnd', this);
938 eventType(this.scroller, 'MSTransitionEnd', this);
939 },
940
941 getComputedPosition: function () {
942 var matrix = window.getComputedStyle(this.scroller, null),
943 x, y;
944
945 if ( this.options.useTransform ) {
946 matrix = matrix[utils.style.transform].split(')')[0].split(', ');
947 x = +(matrix[12] || matrix[4]);
948 y = +(matrix[13] || matrix[5]);
949 } else {
950 x = +matrix.left.replace(/[^-\d.]/g, '');
951 y = +matrix.top.replace(/[^-\d.]/g, '');
952 }
953
954 return { x: x, y: y };
955 },
956 _initWheel: function () {
957 utils.addEvent(this.wrapper, 'wheel', this);
958 utils.addEvent(this.wrapper, 'mousewheel', this);
959 utils.addEvent(this.wrapper, 'DOMMouseScroll', this);
960
961 this.on('destroy', function () {
962 clearTimeout(this.wheelTimeout);
963 this.wheelTimeout = null;
964 utils.removeEvent(this.wrapper, 'wheel', this);
965 utils.removeEvent(this.wrapper, 'mousewheel', this);
966 utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);
967 });
968 },
969
970 _wheel: function (e) {
971 if ( !this.enabled ) {
972 return;
973 }
974
975 e.preventDefault();
976
977 var wheelDeltaX, wheelDeltaY,
978 newX, newY,
979 that = this;
980
981 if ( this.wheelTimeout === undefined ) {
982 that._execEvent('scrollStart');
983 }
984
985 // Execute the scrollEnd event after 400ms the wheel stopped scrolling
986 clearTimeout(this.wheelTimeout);
987 this.wheelTimeout = setTimeout(function () {
988 if(!that.options.snap) {
989 that._execEvent('scrollEnd');
990 }
991 that.wheelTimeout = undefined;
992 }, 400);
993
994 if ( 'deltaX' in e ) {
995 if (e.deltaMode === 1) {
996 wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;
997 wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;
998 } else {
999 wheelDeltaX = -e.deltaX;
1000 wheelDeltaY = -e.deltaY;
1001 }
1002 } else if ( 'wheelDeltaX' in e ) {
1003 wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;
1004 wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;
1005 } else if ( 'wheelDelta' in e ) {
1006 wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;
1007 } else if ( 'detail' in e ) {
1008 wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;
1009 } else {
1010 return;
1011 }
1012
1013 wheelDeltaX *= this.options.invertWheelDirection;
1014 wheelDeltaY *= this.options.invertWheelDirection;
1015
1016 if ( !this.hasVerticalScroll ) {
1017 wheelDeltaX = wheelDeltaY;
1018 wheelDeltaY = 0;
1019 }
1020
1021 if ( this.options.snap ) {
1022 newX = this.currentPage.pageX;
1023 newY = this.currentPage.pageY;
1024
1025 if ( wheelDeltaX > 0 ) {
1026 newX--;
1027 } else if ( wheelDeltaX < 0 ) {
1028 newX++;
1029 }
1030
1031 if ( wheelDeltaY > 0 ) {
1032 newY--;
1033 } else if ( wheelDeltaY < 0 ) {
1034 newY++;
1035 }
1036
1037 this.goToPage(newX, newY);
1038
1039 return;
1040 }
1041
1042 newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);
1043 newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);
1044
1045 this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;
1046 this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;
1047
1048 if ( newX > 0 ) {
1049 newX = 0;
1050 } else if ( newX < this.maxScrollX ) {
1051 newX = this.maxScrollX;
1052 }
1053
1054 if ( newY > 0 ) {
1055 newY = 0;
1056 } else if ( newY < this.maxScrollY ) {
1057 newY = this.maxScrollY;
1058 }
1059
1060 this.scrollTo(newX, newY, 0);
1061
1062 if ( this.options.probeType > 1 ) {
1063 this._execEvent('scroll');
1064 }
1065
1066 // INSERT POINT: _wheel
1067 },
1068
1069 _initSnap: function () {
1070 this.currentPage = {};
1071
1072 if ( typeof this.options.snap == 'string' ) {
1073 this.options.snap = this.scroller.querySelectorAll(this.options.snap);
1074 }
1075
1076 this.on('refresh', function () {
1077 var i = 0, l,
1078 m = 0, n,
1079 cx, cy,
1080 x = 0, y,
1081 stepX = this.options.snapStepX || this.wrapperWidth,
1082 stepY = this.options.snapStepY || this.wrapperHeight,
1083 el;
1084
1085 this.pages = [];
1086
1087 if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {
1088 return;
1089 }
1090
1091 if ( this.options.snap === true ) {
1092 cx = Math.round( stepX / 2 );
1093 cy = Math.round( stepY / 2 );
1094
1095 while ( x > -this.scrollerWidth ) {
1096 this.pages[i] = [];
1097 l = 0;
1098 y = 0;
1099
1100 while ( y > -this.scrollerHeight ) {
1101 this.pages[i][l] = {
1102 x: Math.max(x, this.maxScrollX),
1103 y: Math.max(y, this.maxScrollY),
1104 width: stepX,
1105 height: stepY,
1106 cx: x - cx,
1107 cy: y - cy
1108 };
1109
1110 y -= stepY;
1111 l++;
1112 }
1113
1114 x -= stepX;
1115 i++;
1116 }
1117 } else {
1118 el = this.options.snap;
1119 l = el.length;
1120 n = -1;
1121
1122 for ( ; i < l; i++ ) {
1123 if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {
1124 m = 0;
1125 n++;
1126 }
1127
1128 if ( !this.pages[m] ) {
1129 this.pages[m] = [];
1130 }
1131
1132 x = Math.max(-el[i].offsetLeft, this.maxScrollX);
1133 y = Math.max(-el[i].offsetTop, this.maxScrollY);
1134 cx = x - Math.round(el[i].offsetWidth / 2);
1135 cy = y - Math.round(el[i].offsetHeight / 2);
1136
1137 this.pages[m][n] = {
1138 x: x,
1139 y: y,
1140 width: el[i].offsetWidth,
1141 height: el[i].offsetHeight,
1142 cx: cx,
1143 cy: cy
1144 };
1145
1146 if ( x > this.maxScrollX ) {
1147 m++;
1148 }
1149 }
1150 }
1151
1152 this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);
1153
1154 // Update snap threshold if needed
1155 if ( this.options.snapThreshold % 1 === 0 ) {
1156 this.snapThresholdX = this.options.snapThreshold;
1157 this.snapThresholdY = this.options.snapThreshold;
1158 } else {
1159 this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);
1160 this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);
1161 }
1162 });
1163
1164 this.on('flick', function () {
1165 var time = this.options.snapSpeed || Math.max(
1166 Math.max(
1167 Math.min(Math.abs(this.x - this.startX), 1000),
1168 Math.min(Math.abs(this.y - this.startY), 1000)
1169 ), 300);
1170
1171 this.goToPage(
1172 this.currentPage.pageX + this.directionX,
1173 this.currentPage.pageY + this.directionY,
1174 time
1175 );
1176 });
1177 },
1178
1179 _nearestSnap: function (x, y) {
1180 if ( !this.pages.length ) {
1181 return { x: 0, y: 0, pageX: 0, pageY: 0 };
1182 }
1183
1184 var i = 0,
1185 l = this.pages.length,
1186 m = 0;
1187
1188 // Check if we exceeded the snap threshold
1189 if ( Math.abs(x - this.absStartX) < this.snapThresholdX &&
1190 Math.abs(y - this.absStartY) < this.snapThresholdY ) {
1191 return this.currentPage;
1192 }
1193
1194 if ( x > 0 ) {
1195 x = 0;
1196 } else if ( x < this.maxScrollX ) {
1197 x = this.maxScrollX;
1198 }
1199
1200 if ( y > 0 ) {
1201 y = 0;
1202 } else if ( y < this.maxScrollY ) {
1203 y = this.maxScrollY;
1204 }
1205
1206 for ( ; i < l; i++ ) {
1207 if ( x >= this.pages[i][0].cx ) {
1208 x = this.pages[i][0].x;
1209 break;
1210 }
1211 }
1212
1213 l = this.pages[i].length;
1214
1215 for ( ; m < l; m++ ) {
1216 if ( y >= this.pages[0][m].cy ) {
1217 y = this.pages[0][m].y;
1218 break;
1219 }
1220 }
1221
1222 if ( i == this.currentPage.pageX ) {
1223 i += this.directionX;
1224
1225 if ( i < 0 ) {
1226 i = 0;
1227 } else if ( i >= this.pages.length ) {
1228 i = this.pages.length - 1;
1229 }
1230
1231 x = this.pages[i][0].x;
1232 }
1233
1234 if ( m == this.currentPage.pageY ) {
1235 m += this.directionY;
1236
1237 if ( m < 0 ) {
1238 m = 0;
1239 } else if ( m >= this.pages[0].length ) {
1240 m = this.pages[0].length - 1;
1241 }
1242
1243 y = this.pages[0][m].y;
1244 }
1245
1246 return {
1247 x: x,
1248 y: y,
1249 pageX: i,
1250 pageY: m
1251 };
1252 },
1253
1254 goToPage: function (x, y, time, easing) {
1255 easing = easing || this.options.bounceEasing;
1256
1257 if ( x >= this.pages.length ) {
1258 x = this.pages.length - 1;
1259 } else if ( x < 0 ) {
1260 x = 0;
1261 }
1262
1263 if ( y >= this.pages[x].length ) {
1264 y = this.pages[x].length - 1;
1265 } else if ( y < 0 ) {
1266 y = 0;
1267 }
1268
1269 var posX = this.pages[x][y].x,
1270 posY = this.pages[x][y].y;
1271
1272 time = time === undefined ? this.options.snapSpeed || Math.max(
1273 Math.max(
1274 Math.min(Math.abs(posX - this.x), 1000),
1275 Math.min(Math.abs(posY - this.y), 1000)
1276 ), 300) : time;
1277
1278 this.currentPage = {
1279 x: posX,
1280 y: posY,
1281 pageX: x,
1282 pageY: y
1283 };
1284
1285 this.scrollTo(posX, posY, time, easing);
1286 },
1287
1288 next: function (time, easing) {
1289 var x = this.currentPage.pageX,
1290 y = this.currentPage.pageY;
1291
1292 x++;
1293
1294 if ( x >= this.pages.length && this.hasVerticalScroll ) {
1295 x = 0;
1296 y++;
1297 }
1298
1299 this.goToPage(x, y, time, easing);
1300 },
1301
1302 prev: function (time, easing) {
1303 var x = this.currentPage.pageX,
1304 y = this.currentPage.pageY;
1305
1306 x--;
1307
1308 if ( x < 0 && this.hasVerticalScroll ) {
1309 x = 0;
1310 y--;
1311 }
1312
1313 this.goToPage(x, y, time, easing);
1314 },
1315
1316 _initKeys: function (e) {
1317 // default key bindings
1318 var keys = {
1319 pageUp: 33,
1320 pageDown: 34,
1321 end: 35,
1322 home: 36,
1323 left: 37,
1324 up: 38,
1325 right: 39,
1326 down: 40
1327 };
1328 var i;
1329
1330 // if you give me characters I give you keycode
1331 if ( typeof this.options.keyBindings == 'object' ) {
1332 for ( i in this.options.keyBindings ) {
1333 if ( typeof this.options.keyBindings[i] == 'string' ) {
1334 this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);
1335 }
1336 }
1337 } else {
1338 this.options.keyBindings = {};
1339 }
1340
1341 for ( i in keys ) {
1342 this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];
1343 }
1344
1345 utils.addEvent(window, 'keydown', this);
1346
1347 this.on('destroy', function () {
1348 utils.removeEvent(window, 'keydown', this);
1349 });
1350 },
1351
1352 _key: function (e) {
1353 if ( !this.enabled ) {
1354 return;
1355 }
1356
1357 var snap = this.options.snap, // we are using this alot, better to cache it
1358 newX = snap ? this.currentPage.pageX : this.x,
1359 newY = snap ? this.currentPage.pageY : this.y,
1360 now = utils.getTime(),
1361 prevTime = this.keyTime || 0,
1362 acceleration = 0.250,
1363 pos;
1364
1365 if ( this.options.useTransition && this.isInTransition ) {
1366 pos = this.getComputedPosition();
1367
1368 this._translate(Math.round(pos.x), Math.round(pos.y));
1369 this.isInTransition = false;
1370 }
1371
1372 this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;
1373
1374 switch ( e.keyCode ) {
1375 case this.options.keyBindings.pageUp:
1376 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1377 newX += snap ? 1 : this.wrapperWidth;
1378 } else {
1379 newY += snap ? 1 : this.wrapperHeight;
1380 }
1381 break;
1382 case this.options.keyBindings.pageDown:
1383 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1384 newX -= snap ? 1 : this.wrapperWidth;
1385 } else {
1386 newY -= snap ? 1 : this.wrapperHeight;
1387 }
1388 break;
1389 case this.options.keyBindings.end:
1390 newX = snap ? this.pages.length-1 : this.maxScrollX;
1391 newY = snap ? this.pages[0].length-1 : this.maxScrollY;
1392 break;
1393 case this.options.keyBindings.home:
1394 newX = 0;
1395 newY = 0;
1396 break;
1397 case this.options.keyBindings.left:
1398 newX += snap ? -1 : 5 + this.keyAcceleration>>0;
1399 break;
1400 case this.options.keyBindings.up:
1401 newY += snap ? 1 : 5 + this.keyAcceleration>>0;
1402 break;
1403 case this.options.keyBindings.right:
1404 newX -= snap ? -1 : 5 + this.keyAcceleration>>0;
1405 break;
1406 case this.options.keyBindings.down:
1407 newY -= snap ? 1 : 5 + this.keyAcceleration>>0;
1408 break;
1409 default:
1410 return;
1411 }
1412
1413 if ( snap ) {
1414 this.goToPage(newX, newY);
1415 return;
1416 }
1417
1418 if ( newX > 0 ) {
1419 newX = 0;
1420 this.keyAcceleration = 0;
1421 } else if ( newX < this.maxScrollX ) {
1422 newX = this.maxScrollX;
1423 this.keyAcceleration = 0;
1424 }
1425
1426 if ( newY > 0 ) {
1427 newY = 0;
1428 this.keyAcceleration = 0;
1429 } else if ( newY < this.maxScrollY ) {
1430 newY = this.maxScrollY;
1431 this.keyAcceleration = 0;
1432 }
1433
1434 this.scrollTo(newX, newY, 0);
1435
1436 this.keyTime = now;
1437 },
1438
1439 _animate: function (destX, destY, duration, easingFn) {
1440 var that = this,
1441 startX = this.x,
1442 startY = this.y,
1443 startTime = utils.getTime(),
1444 destTime = startTime + duration;
1445
1446 function step () {
1447 var now = utils.getTime(),
1448 newX, newY,
1449 easing;
1450
1451 if ( now >= destTime ) {
1452 that.isAnimating = false;
1453 that._translate(destX, destY);
1454
1455 if ( !that.resetPosition(that.options.bounceTime) ) {
1456 that._execEvent('scrollEnd');
1457 }
1458
1459 return;
1460 }
1461
1462 now = ( now - startTime ) / duration;
1463 easing = easingFn(now);
1464 newX = ( destX - startX ) * easing + startX;
1465 newY = ( destY - startY ) * easing + startY;
1466 that._translate(newX, newY);
1467
1468 if ( that.isAnimating ) {
1469 rAF(step);
1470 }
1471
1472 if ( that.options.probeType == 3 ) {
1473 that._execEvent('scroll');
1474 }
1475 }
1476
1477 this.isAnimating = true;
1478 step();
1479 },
1480
1481 _initInfinite: function () {
1482 var el = this.options.infiniteElements;
1483
1484 this.infiniteElements = typeof el == 'string' ? document.querySelectorAll(el) : el;
1485 this.infiniteLength = this.infiniteElements.length;
1486 this.infiniteMaster = this.infiniteElements[0];
1487 this.infiniteElementHeight = this.infiniteMaster.offsetHeight;
1488 this.infiniteHeight = this.infiniteLength * this.infiniteElementHeight;
1489
1490 this.options.cacheSize = this.options.cacheSize || 1000;
1491 this.infiniteCacheBuffer = Math.round(this.options.cacheSize / 4);
1492
1493 //this.infiniteCache = {};
1494 this.options.dataset.call(this, 0, this.options.cacheSize);
1495
1496 this.on('refresh', function () {
1497 var elementsPerPage = Math.ceil(this.wrapperHeight / this.infiniteElementHeight);
1498 this.infiniteUpperBufferSize = Math.floor((this.infiniteLength - elementsPerPage) / 2);
1499 this.reorderInfinite();
1500 });
1501
1502 this.on('scroll', this.reorderInfinite);
1503 },
1504
1505 // TO-DO: clean up the mess
1506 reorderInfinite: function () {
1507 var center = -this.y + this.wrapperHeight / 2;
1508
1509 var minorPhase = Math.max(Math.floor(-this.y / this.infiniteElementHeight) - this.infiniteUpperBufferSize, 0),
1510 majorPhase = Math.floor(minorPhase / this.infiniteLength),
1511 phase = minorPhase - majorPhase * this.infiniteLength;
1512
1513 var top = 0;
1514 var i = 0;
1515 var update = [];
1516
1517 //var cachePhase = Math.floor((minorPhase + this.infiniteLength / 2) / this.infiniteCacheBuffer);
1518 var cachePhase = Math.floor(minorPhase / this.infiniteCacheBuffer);
1519
1520 while ( i < this.infiniteLength ) {
1521 top = i * this.infiniteElementHeight + majorPhase * this.infiniteHeight;
1522
1523 if ( phase > i ) {
1524 top += this.infiniteElementHeight * this.infiniteLength;
1525 }
1526
1527 if ( this.infiniteElements[i]._top !== top ) {
1528 this.infiniteElements[i]._phase = top / this.infiniteElementHeight;
1529
1530 if ( this.infiniteElements[i]._phase < this.options.infiniteLimit ) {
1531 this.infiniteElements[i]._top = top;
1532 if ( this.options.infiniteUseTransform ) {
1533 this.infiniteElements[i].style[utils.style.transform] = 'translate(0, ' + top + 'px)' + this.translateZ;
1534 } else {
1535 this.infiniteElements[i].style.top = top + 'px';
1536 }
1537 update.push(this.infiniteElements[i]);
1538 }
1539 }
1540
1541 i++;
1542 }
1543
1544 if ( this.cachePhase != cachePhase && (cachePhase === 0 || minorPhase - this.infiniteCacheBuffer > 0) ) {
1545 this.options.dataset.call(this, Math.max(cachePhase * this.infiniteCacheBuffer - this.infiniteCacheBuffer, 0), this.options.cacheSize);
1546 }
1547
1548 this.cachePhase = cachePhase;
1549
1550 this.updateContent(update);
1551 },
1552
1553 updateContent: function (els) {
1554 if ( this.infiniteCache === undefined ) {
1555 return;
1556 }
1557
1558 for ( var i = 0, l = els.length; i < l; i++ ) {
1559 this.options.dataFiller.call(this, els[i], this.infiniteCache[els[i]._phase]);
1560 }
1561 },
1562
1563 updateCache: function (start, data) {
1564 var firstRun = this.infiniteCache === undefined;
1565
1566 this.infiniteCache = {};
1567
1568 for ( var i = 0, l = data.length; i < l; i++ ) {
1569 this.infiniteCache[start++] = data[i];
1570 }
1571
1572 if ( firstRun ) {
1573 this.updateContent(this.infiniteElements);
1574 }
1575
1576 },
1577
1578
1579 handleEvent: function (e) {
1580 switch ( e.type ) {
1581 case 'touchstart':
1582 case 'pointerdown':
1583 case 'MSPointerDown':
1584 case 'mousedown':
1585 this._start(e);
1586 break;
1587 case 'touchmove':
1588 case 'pointermove':
1589 case 'MSPointerMove':
1590 case 'mousemove':
1591 this._move(e);
1592 break;
1593 case 'touchend':
1594 case 'pointerup':
1595 case 'MSPointerUp':
1596 case 'mouseup':
1597 case 'touchcancel':
1598 case 'pointercancel':
1599 case 'MSPointerCancel':
1600 case 'mousecancel':
1601 this._end(e);
1602 break;
1603 case 'orientationchange':
1604 case 'resize':
1605 this._resize();
1606 break;
1607 case 'transitionend':
1608 case 'webkitTransitionEnd':
1609 case 'oTransitionEnd':
1610 case 'MSTransitionEnd':
1611 this._transitionEnd(e);
1612 break;
1613 case 'wheel':
1614 case 'DOMMouseScroll':
1615 case 'mousewheel':
1616 this._wheel(e);
1617 break;
1618 case 'keydown':
1619 this._key(e);
1620 break;
1621 case 'click':
1622 if ( this.enabled && !e._constructed ) {
1623 e.preventDefault();
1624 e.stopPropagation();
1625 }
1626 break;
1627 }
1628 }
1629 };
1630 IScroll.utils = utils;
1631
1632 if ( typeof module != 'undefined' && module.exports ) {
1633 module.exports = IScroll;
1634 } else if ( typeof define == 'function' && define.amd ) {
1635 define( function () { return IScroll; } );
1636 } else {
1637 window.IScroll = IScroll;
1638 }
1639
1640 })(window, document, Math);
1 /*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */
2 (function (window, document, Math) {
3 var rAF = window.requestAnimationFrame ||
4 window.webkitRequestAnimationFrame ||
5 window.mozRequestAnimationFrame ||
6 window.oRequestAnimationFrame ||
7 window.msRequestAnimationFrame ||
8 function (callback) { window.setTimeout(callback, 1000 / 60); };
9
10 var utils = (function () {
11 var me = {};
12
13 var _elementStyle = document.createElement('div').style;
14 var _vendor = (function () {
15 var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],
16 transform,
17 i = 0,
18 l = vendors.length;
19
20 for ( ; i < l; i++ ) {
21 transform = vendors[i] + 'ransform';
22 if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);
23 }
24
25 return false;
26 })();
27
28 function _prefixStyle (style) {
29 if ( _vendor === false ) return false;
30 if ( _vendor === '' ) return style;
31 return _vendor + style.charAt(0).toUpperCase() + style.substr(1);
32 }
33
34 me.getTime = Date.now || function getTime () { return new Date().getTime(); };
35
36 me.extend = function (target, obj) {
37 for ( var i in obj ) {
38 target[i] = obj[i];
39 }
40 };
41
42 me.addEvent = function (el, type, fn, capture) {
43 el.addEventListener(type, fn, !!capture);
44 };
45
46 me.removeEvent = function (el, type, fn, capture) {
47 el.removeEventListener(type, fn, !!capture);
48 };
49
50 me.prefixPointerEvent = function (pointerEvent) {
51 return window.MSPointerEvent ?
52 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):
53 pointerEvent;
54 };
55
56 me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {
57 var distance = current - start,
58 speed = Math.abs(distance) / time,
59 destination,
60 duration;
61
62 deceleration = deceleration === undefined ? 0.0006 : deceleration;
63
64 destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );
65 duration = speed / deceleration;
66
67 if ( destination < lowerMargin ) {
68 destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;
69 distance = Math.abs(destination - current);
70 duration = distance / speed;
71 } else if ( destination > 0 ) {
72 destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;
73 distance = Math.abs(current) + destination;
74 duration = distance / speed;
75 }
76
77 return {
78 destination: Math.round(destination),
79 duration: duration
80 };
81 };
82
83 var _transform = _prefixStyle('transform');
84
85 me.extend(me, {
86 hasTransform: _transform !== false,
87 hasPerspective: _prefixStyle('perspective') in _elementStyle,
88 hasTouch: 'ontouchstart' in window,
89 hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed
90 hasTransition: _prefixStyle('transition') in _elementStyle
91 });
92
93 /*
94 This should find all Android browsers lower than build 535.19 (both stock browser and webview)
95 - galaxy S2 is ok
96 - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`
97 - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
98 - galaxy S3 is badAndroid (stock brower, webview)
99 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
100 - galaxy S4 is badAndroid (stock brower, webview)
101 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
102 - galaxy S5 is OK
103 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
104 - galaxy S6 is OK
105 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
106 */
107 me.isBadAndroid = (function() {
108 var appVersion = window.navigator.appVersion;
109 // Android browser is not a chrome browser.
110 if (/Android/.test(appVersion) && !(/Chrome\/\d/.test(appVersion))) {
111 var safariVersion = appVersion.match(/Safari\/(\d+.\d)/);
112 if(safariVersion && typeof safariVersion === "object" && safariVersion.length >= 2) {
113 return parseFloat(safariVersion[1]) < 535.19;
114 } else {
115 return true;
116 }
117 } else {
118 return false;
119 }
120 })();
121
122 me.extend(me.style = {}, {
123 transform: _transform,
124 transitionTimingFunction: _prefixStyle('transitionTimingFunction'),
125 transitionDuration: _prefixStyle('transitionDuration'),
126 transitionDelay: _prefixStyle('transitionDelay'),
127 transformOrigin: _prefixStyle('transformOrigin')
128 });
129
130 me.hasClass = function (e, c) {
131 var re = new RegExp("(^|\\s)" + c + "(\\s|$)");
132 return re.test(e.className);
133 };
134
135 me.addClass = function (e, c) {
136 if ( me.hasClass(e, c) ) {
137 return;
138 }
139
140 var newclass = e.className.split(' ');
141 newclass.push(c);
142 e.className = newclass.join(' ');
143 };
144
145 me.removeClass = function (e, c) {
146 if ( !me.hasClass(e, c) ) {
147 return;
148 }
149
150 var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g');
151 e.className = e.className.replace(re, ' ');
152 };
153
154 me.offset = function (el) {
155 var left = -el.offsetLeft,
156 top = -el.offsetTop;
157
158 // jshint -W084
159 while (el = el.offsetParent) {
160 left -= el.offsetLeft;
161 top -= el.offsetTop;
162 }
163 // jshint +W084
164
165 return {
166 left: left,
167 top: top
168 };
169 };
170
171 me.preventDefaultException = function (el, exceptions) {
172 for ( var i in exceptions ) {
173 if ( exceptions[i].test(el[i]) ) {
174 return true;
175 }
176 }
177
178 return false;
179 };
180
181 me.extend(me.eventType = {}, {
182 touchstart: 1,
183 touchmove: 1,
184 touchend: 1,
185
186 mousedown: 2,
187 mousemove: 2,
188 mouseup: 2,
189
190 pointerdown: 3,
191 pointermove: 3,
192 pointerup: 3,
193
194 MSPointerDown: 3,
195 MSPointerMove: 3,
196 MSPointerUp: 3
197 });
198
199 me.extend(me.ease = {}, {
200 quadratic: {
201 style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
202 fn: function (k) {
203 return k * ( 2 - k );
204 }
205 },
206 circular: {
207 style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1)
208 fn: function (k) {
209 return Math.sqrt( 1 - ( --k * k ) );
210 }
211 },
212 back: {
213 style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
214 fn: function (k) {
215 var b = 4;
216 return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;
217 }
218 },
219 bounce: {
220 style: '',
221 fn: function (k) {
222 if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {
223 return 7.5625 * k * k;
224 } else if ( k < ( 2 / 2.75 ) ) {
225 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
226 } else if ( k < ( 2.5 / 2.75 ) ) {
227 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
228 } else {
229 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
230 }
231 }
232 },
233 elastic: {
234 style: '',
235 fn: function (k) {
236 var f = 0.22,
237 e = 0.4;
238
239 if ( k === 0 ) { return 0; }
240 if ( k == 1 ) { return 1; }
241
242 return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );
243 }
244 }
245 });
246
247 me.tap = function (e, eventName) {
248 var ev = document.createEvent('Event');
249 ev.initEvent(eventName, true, true);
250 ev.pageX = e.pageX;
251 ev.pageY = e.pageY;
252 e.target.dispatchEvent(ev);
253 };
254
255 me.click = function (e) {
256 var target = e.target,
257 ev;
258
259 if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {
260 ev = document.createEvent('MouseEvents');
261 ev.initMouseEvent('click', true, true, e.view, 1,
262 target.screenX, target.screenY, target.clientX, target.clientY,
263 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
264 0, null);
265
266 ev._constructed = true;
267 target.dispatchEvent(ev);
268 }
269 };
270
271 return me;
272 })();
273 function IScroll (el, options) {
274 this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;
275 this.scroller = this.wrapper.children[0];
276 this.scrollerStyle = this.scroller.style; // cache style for better performance
277
278 this.options = {
279
280 // INSERT POINT: OPTIONS
281 disablePointer : !utils.hasPointer,
282 disableTouch : utils.hasPointer || !utils.hasTouch,
283 disableMouse : utils.hasPointer || utils.hasTouch,
284 startX: 0,
285 startY: 0,
286 scrollY: true,
287 directionLockThreshold: 5,
288 momentum: true,
289
290 bounce: true,
291 bounceTime: 600,
292 bounceEasing: '',
293
294 preventDefault: true,
295 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },
296
297 HWCompositing: true,
298 useTransition: true,
299 useTransform: true,
300 bindToWrapper: typeof window.onmousedown === "undefined"
301 };
302
303 for ( var i in options ) {
304 this.options[i] = options[i];
305 }
306
307 // Normalize options
308 this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';
309
310 this.options.useTransition = utils.hasTransition && this.options.useTransition;
311 this.options.useTransform = utils.hasTransform && this.options.useTransform;
312
313 this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;
314 this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;
315
316 // If you want eventPassthrough I have to lock one of the axes
317 this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;
318 this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;
319
320 // With eventPassthrough we also need lockDirection mechanism
321 this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;
322 this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;
323
324 this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;
325
326 this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;
327
328 if ( this.options.tap === true ) {
329 this.options.tap = 'tap';
330 }
331
332 // INSERT POINT: NORMALIZATION
333
334 // Some defaults
335 this.x = 0;
336 this.y = 0;
337 this.directionX = 0;
338 this.directionY = 0;
339 this._events = {};
340
341 // INSERT POINT: DEFAULTS
342
343 this._init();
344 this.refresh();
345
346 this.scrollTo(this.options.startX, this.options.startY);
347 this.enable();
348 }
349
350 IScroll.prototype = {
351 version: '5.2.0',
352
353 _init: function () {
354 this._initEvents();
355
356 // INSERT POINT: _init
357
358 },
359
360 destroy: function () {
361 this._initEvents(true);
362 clearTimeout(this.resizeTimeout);
363 this.resizeTimeout = null;
364 this._execEvent('destroy');
365 },
366
367 _transitionEnd: function (e) {
368 if ( e.target != this.scroller || !this.isInTransition ) {
369 return;
370 }
371
372 this._transitionTime();
373 if ( !this.resetPosition(this.options.bounceTime) ) {
374 this.isInTransition = false;
375 this._execEvent('scrollEnd');
376 }
377 },
378
379 _start: function (e) {
380 // React to left mouse button only
381 if ( utils.eventType[e.type] != 1 ) {
382 // for button property
383 // http://unixpapa.com/js/mouse.html
384 var button;
385 if (!e.which) {
386 /* IE case */
387 button = (e.button < 2) ? 0 :
388 ((e.button == 4) ? 1 : 2);
389 } else {
390 /* All others */
391 button = e.button;
392 }
393 if ( button !== 0 ) {
394 return;
395 }
396 }
397
398 if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {
399 return;
400 }
401
402 if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
403 e.preventDefault();
404 }
405
406 var point = e.touches ? e.touches[0] : e,
407 pos;
408
409 this.initiated = utils.eventType[e.type];
410 this.moved = false;
411 this.distX = 0;
412 this.distY = 0;
413 this.directionX = 0;
414 this.directionY = 0;
415 this.directionLocked = 0;
416
417 this.startTime = utils.getTime();
418
419 if ( this.options.useTransition && this.isInTransition ) {
420 this._transitionTime();
421 this.isInTransition = false;
422 pos = this.getComputedPosition();
423 this._translate(Math.round(pos.x), Math.round(pos.y));
424 this._execEvent('scrollEnd');
425 } else if ( !this.options.useTransition && this.isAnimating ) {
426 this.isAnimating = false;
427 this._execEvent('scrollEnd');
428 }
429
430 this.startX = this.x;
431 this.startY = this.y;
432 this.absStartX = this.x;
433 this.absStartY = this.y;
434 this.pointX = point.pageX;
435 this.pointY = point.pageY;
436
437 this._execEvent('beforeScrollStart');
438 },
439
440 _move: function (e) {
441 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
442 return;
443 }
444
445 if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!
446 e.preventDefault();
447 }
448
449 var point = e.touches ? e.touches[0] : e,
450 deltaX = point.pageX - this.pointX,
451 deltaY = point.pageY - this.pointY,
452 timestamp = utils.getTime(),
453 newX, newY,
454 absDistX, absDistY;
455
456 this.pointX = point.pageX;
457 this.pointY = point.pageY;
458
459 this.distX += deltaX;
460 this.distY += deltaY;
461 absDistX = Math.abs(this.distX);
462 absDistY = Math.abs(this.distY);
463
464 // We need to move at least 10 pixels for the scrolling to initiate
465 if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {
466 return;
467 }
468
469 // If you are scrolling in one direction lock the other
470 if ( !this.directionLocked && !this.options.freeScroll ) {
471 if ( absDistX > absDistY + this.options.directionLockThreshold ) {
472 this.directionLocked = 'h'; // lock horizontally
473 } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {
474 this.directionLocked = 'v'; // lock vertically
475 } else {
476 this.directionLocked = 'n'; // no lock
477 }
478 }
479
480 if ( this.directionLocked == 'h' ) {
481 if ( this.options.eventPassthrough == 'vertical' ) {
482 e.preventDefault();
483 } else if ( this.options.eventPassthrough == 'horizontal' ) {
484 this.initiated = false;
485 return;
486 }
487
488 deltaY = 0;
489 } else if ( this.directionLocked == 'v' ) {
490 if ( this.options.eventPassthrough == 'horizontal' ) {
491 e.preventDefault();
492 } else if ( this.options.eventPassthrough == 'vertical' ) {
493 this.initiated = false;
494 return;
495 }
496
497 deltaX = 0;
498 }
499
500 deltaX = this.hasHorizontalScroll ? deltaX : 0;
501 deltaY = this.hasVerticalScroll ? deltaY : 0;
502
503 newX = this.x + deltaX;
504 newY = this.y + deltaY;
505
506 // Slow down if outside of the boundaries
507 if ( newX > 0 || newX < this.maxScrollX ) {
508 newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;
509 }
510 if ( newY > 0 || newY < this.maxScrollY ) {
511 newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;
512 }
513
514 this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
515 this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
516
517 if ( !this.moved ) {
518 this._execEvent('scrollStart');
519 }
520
521 this.moved = true;
522
523 this._translate(newX, newY);
524
525 /* REPLACE START: _move */
526
527 if ( timestamp - this.startTime > 300 ) {
528 this.startTime = timestamp;
529 this.startX = this.x;
530 this.startY = this.y;
531 }
532
533 /* REPLACE END: _move */
534
535 },
536
537 _end: function (e) {
538 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
539 return;
540 }
541
542 if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
543 e.preventDefault();
544 }
545
546 var point = e.changedTouches ? e.changedTouches[0] : e,
547 momentumX,
548 momentumY,
549 duration = utils.getTime() - this.startTime,
550 newX = Math.round(this.x),
551 newY = Math.round(this.y),
552 distanceX = Math.abs(newX - this.startX),
553 distanceY = Math.abs(newY - this.startY),
554 time = 0,
555 easing = '';
556
557 this.isInTransition = 0;
558 this.initiated = 0;
559 this.endTime = utils.getTime();
560
561 // reset if we are outside of the boundaries
562 if ( this.resetPosition(this.options.bounceTime) ) {
563 return;
564 }
565
566 this.scrollTo(newX, newY); // ensures that the last position is rounded
567
568 // we scrolled less than 10 pixels
569 if ( !this.moved ) {
570 if ( this.options.tap ) {
571 utils.tap(e, this.options.tap);
572 }
573
574 if ( this.options.click ) {
575 utils.click(e);
576 }
577
578 this._execEvent('scrollCancel');
579 return;
580 }
581
582 if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {
583 this._execEvent('flick');
584 return;
585 }
586
587 // start momentum animation if needed
588 if ( this.options.momentum && duration < 300 ) {
589 momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };
590 momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };
591 newX = momentumX.destination;
592 newY = momentumY.destination;
593 time = Math.max(momentumX.duration, momentumY.duration);
594 this.isInTransition = 1;
595 }
596
597 // INSERT POINT: _end
598
599 if ( newX != this.x || newY != this.y ) {
600 // change easing function when scroller goes out of the boundaries
601 if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {
602 easing = utils.ease.quadratic;
603 }
604
605 this.scrollTo(newX, newY, time, easing);
606 return;
607 }
608
609 this._execEvent('scrollEnd');
610 },
611
612 _resize: function () {
613 var that = this;
614
615 clearTimeout(this.resizeTimeout);
616
617 this.resizeTimeout = setTimeout(function () {
618 that.refresh();
619 }, this.options.resizePolling);
620 },
621
622 resetPosition: function (time) {
623 var x = this.x,
624 y = this.y;
625
626 time = time || 0;
627
628 if ( !this.hasHorizontalScroll || this.x > 0 ) {
629 x = 0;
630 } else if ( this.x < this.maxScrollX ) {
631 x = this.maxScrollX;
632 }
633
634 if ( !this.hasVerticalScroll || this.y > 0 ) {
635 y = 0;
636 } else if ( this.y < this.maxScrollY ) {
637 y = this.maxScrollY;
638 }
639
640 if ( x == this.x && y == this.y ) {
641 return false;
642 }
643
644 this.scrollTo(x, y, time, this.options.bounceEasing);
645
646 return true;
647 },
648
649 disable: function () {
650 this.enabled = false;
651 },
652
653 enable: function () {
654 this.enabled = true;
655 },
656
657 refresh: function () {
658 var rf = this.wrapper.offsetHeight; // Force reflow
659
660 this.wrapperWidth = this.wrapper.clientWidth;
661 this.wrapperHeight = this.wrapper.clientHeight;
662
663 /* REPLACE START: refresh */
664
665 this.scrollerWidth = this.scroller.offsetWidth;
666 this.scrollerHeight = this.scroller.offsetHeight;
667
668 this.maxScrollX = this.wrapperWidth - this.scrollerWidth;
669 this.maxScrollY = this.wrapperHeight - this.scrollerHeight;
670
671 /* REPLACE END: refresh */
672
673 this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;
674 this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;
675
676 if ( !this.hasHorizontalScroll ) {
677 this.maxScrollX = 0;
678 this.scrollerWidth = this.wrapperWidth;
679 }
680
681 if ( !this.hasVerticalScroll ) {
682 this.maxScrollY = 0;
683 this.scrollerHeight = this.wrapperHeight;
684 }
685
686 this.endTime = 0;
687 this.directionX = 0;
688 this.directionY = 0;
689
690 this.wrapperOffset = utils.offset(this.wrapper);
691
692 this._execEvent('refresh');
693
694 this.resetPosition();
695
696 // INSERT POINT: _refresh
697
698 },
699
700 on: function (type, fn) {
701 if ( !this._events[type] ) {
702 this._events[type] = [];
703 }
704
705 this._events[type].push(fn);
706 },
707
708 off: function (type, fn) {
709 if ( !this._events[type] ) {
710 return;
711 }
712
713 var index = this._events[type].indexOf(fn);
714
715 if ( index > -1 ) {
716 this._events[type].splice(index, 1);
717 }
718 },
719
720 _execEvent: function (type) {
721 if ( !this._events[type] ) {
722 return;
723 }
724
725 var i = 0,
726 l = this._events[type].length;
727
728 if ( !l ) {
729 return;
730 }
731
732 for ( ; i < l; i++ ) {
733 this._events[type][i].apply(this, [].slice.call(arguments, 1));
734 }
735 },
736
737 scrollBy: function (x, y, time, easing) {
738 x = this.x + x;
739 y = this.y + y;
740 time = time || 0;
741
742 this.scrollTo(x, y, time, easing);
743 },
744
745 scrollTo: function (x, y, time, easing) {
746 easing = easing || utils.ease.circular;
747
748 this.isInTransition = this.options.useTransition && time > 0;
749 var transitionType = this.options.useTransition && easing.style;
750 if ( !time || transitionType ) {
751 if(transitionType) {
752 this._transitionTimingFunction(easing.style);
753 this._transitionTime(time);
754 }
755 this._translate(x, y);
756 } else {
757 this._animate(x, y, time, easing.fn);
758 }
759 },
760
761 scrollToElement: function (el, time, offsetX, offsetY, easing) {
762 el = el.nodeType ? el : this.scroller.querySelector(el);
763
764 if ( !el ) {
765 return;
766 }
767
768 var pos = utils.offset(el);
769
770 pos.left -= this.wrapperOffset.left;
771 pos.top -= this.wrapperOffset.top;
772
773 // if offsetX/Y are true we center the element to the screen
774 if ( offsetX === true ) {
775 offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);
776 }
777 if ( offsetY === true ) {
778 offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);
779 }
780
781 pos.left -= offsetX || 0;
782 pos.top -= offsetY || 0;
783
784 pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;
785 pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;
786
787 time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;
788
789 this.scrollTo(pos.left, pos.top, time, easing);
790 },
791
792 _transitionTime: function (time) {
793 time = time || 0;
794
795 var durationProp = utils.style.transitionDuration;
796 this.scrollerStyle[durationProp] = time + 'ms';
797
798 if ( !time && utils.isBadAndroid ) {
799 this.scrollerStyle[durationProp] = '0.0001ms';
800 // remove 0.0001ms
801 var self = this;
802 rAF(function() {
803 if(self.scrollerStyle[durationProp] === '0.0001ms') {
804 self.scrollerStyle[durationProp] = '0s';
805 }
806 });
807 }
808
809 // INSERT POINT: _transitionTime
810
811 },
812
813 _transitionTimingFunction: function (easing) {
814 this.scrollerStyle[utils.style.transitionTimingFunction] = easing;
815
816 // INSERT POINT: _transitionTimingFunction
817
818 },
819
820 _translate: function (x, y) {
821 if ( this.options.useTransform ) {
822
823 /* REPLACE START: _translate */
824
825 this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;
826
827 /* REPLACE END: _translate */
828
829 } else {
830 x = Math.round(x);
831 y = Math.round(y);
832 this.scrollerStyle.left = x + 'px';
833 this.scrollerStyle.top = y + 'px';
834 }
835
836 this.x = x;
837 this.y = y;
838
839 // INSERT POINT: _translate
840
841 },
842
843 _initEvents: function (remove) {
844 var eventType = remove ? utils.removeEvent : utils.addEvent,
845 target = this.options.bindToWrapper ? this.wrapper : window;
846
847 eventType(window, 'orientationchange', this);
848 eventType(window, 'resize', this);
849
850 if ( this.options.click ) {
851 eventType(this.wrapper, 'click', this, true);
852 }
853
854 if ( !this.options.disableMouse ) {
855 eventType(this.wrapper, 'mousedown', this);
856 eventType(target, 'mousemove', this);
857 eventType(target, 'mousecancel', this);
858 eventType(target, 'mouseup', this);
859 }
860
861 if ( utils.hasPointer && !this.options.disablePointer ) {
862 eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);
863 eventType(target, utils.prefixPointerEvent('pointermove'), this);
864 eventType(target, utils.prefixPointerEvent('pointercancel'), this);
865 eventType(target, utils.prefixPointerEvent('pointerup'), this);
866 }
867
868 if ( utils.hasTouch && !this.options.disableTouch ) {
869 eventType(this.wrapper, 'touchstart', this);
870 eventType(target, 'touchmove', this);
871 eventType(target, 'touchcancel', this);
872 eventType(target, 'touchend', this);
873 }
874
875 eventType(this.scroller, 'transitionend', this);
876 eventType(this.scroller, 'webkitTransitionEnd', this);
877 eventType(this.scroller, 'oTransitionEnd', this);
878 eventType(this.scroller, 'MSTransitionEnd', this);
879 },
880
881 getComputedPosition: function () {
882 var matrix = window.getComputedStyle(this.scroller, null),
883 x, y;
884
885 if ( this.options.useTransform ) {
886 matrix = matrix[utils.style.transform].split(')')[0].split(', ');
887 x = +(matrix[12] || matrix[4]);
888 y = +(matrix[13] || matrix[5]);
889 } else {
890 x = +matrix.left.replace(/[^-\d.]/g, '');
891 y = +matrix.top.replace(/[^-\d.]/g, '');
892 }
893
894 return { x: x, y: y };
895 },
896 _animate: function (destX, destY, duration, easingFn) {
897 var that = this,
898 startX = this.x,
899 startY = this.y,
900 startTime = utils.getTime(),
901 destTime = startTime + duration;
902
903 function step () {
904 var now = utils.getTime(),
905 newX, newY,
906 easing;
907
908 if ( now >= destTime ) {
909 that.isAnimating = false;
910 that._translate(destX, destY);
911
912 if ( !that.resetPosition(that.options.bounceTime) ) {
913 that._execEvent('scrollEnd');
914 }
915
916 return;
917 }
918
919 now = ( now - startTime ) / duration;
920 easing = easingFn(now);
921 newX = ( destX - startX ) * easing + startX;
922 newY = ( destY - startY ) * easing + startY;
923 that._translate(newX, newY);
924
925 if ( that.isAnimating ) {
926 rAF(step);
927 }
928 }
929
930 this.isAnimating = true;
931 step();
932 },
933 handleEvent: function (e) {
934 switch ( e.type ) {
935 case 'touchstart':
936 case 'pointerdown':
937 case 'MSPointerDown':
938 case 'mousedown':
939 this._start(e);
940 break;
941 case 'touchmove':
942 case 'pointermove':
943 case 'MSPointerMove':
944 case 'mousemove':
945 this._move(e);
946 break;
947 case 'touchend':
948 case 'pointerup':
949 case 'MSPointerUp':
950 case 'mouseup':
951 case 'touchcancel':
952 case 'pointercancel':
953 case 'MSPointerCancel':
954 case 'mousecancel':
955 this._end(e);
956 break;
957 case 'orientationchange':
958 case 'resize':
959 this._resize();
960 break;
961 case 'transitionend':
962 case 'webkitTransitionEnd':
963 case 'oTransitionEnd':
964 case 'MSTransitionEnd':
965 this._transitionEnd(e);
966 break;
967 case 'wheel':
968 case 'DOMMouseScroll':
969 case 'mousewheel':
970 this._wheel(e);
971 break;
972 case 'keydown':
973 this._key(e);
974 break;
975 case 'click':
976 if ( this.enabled && !e._constructed ) {
977 e.preventDefault();
978 e.stopPropagation();
979 }
980 break;
981 }
982 }
983 };
984 IScroll.utils = utils;
985
986 if ( typeof module != 'undefined' && module.exports ) {
987 module.exports = IScroll;
988 } else if ( typeof define == 'function' && define.amd ) {
989 define( function () { return IScroll; } );
990 } else {
991 window.IScroll = IScroll;
992 }
993
994 })(window, document, Math);
1 /*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */
2 (function (window, document, Math) {
3 var rAF = window.requestAnimationFrame ||
4 window.webkitRequestAnimationFrame ||
5 window.mozRequestAnimationFrame ||
6 window.oRequestAnimationFrame ||
7 window.msRequestAnimationFrame ||
8 function (callback) { window.setTimeout(callback, 1000 / 60); };
9
10 var utils = (function () {
11 var me = {};
12
13 var _elementStyle = document.createElement('div').style;
14 var _vendor = (function () {
15 var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],
16 transform,
17 i = 0,
18 l = vendors.length;
19
20 for ( ; i < l; i++ ) {
21 transform = vendors[i] + 'ransform';
22 if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);
23 }
24
25 return false;
26 })();
27
28 function _prefixStyle (style) {
29 if ( _vendor === false ) return false;
30 if ( _vendor === '' ) return style;
31 return _vendor + style.charAt(0).toUpperCase() + style.substr(1);
32 }
33
34 me.getTime = Date.now || function getTime () { return new Date().getTime(); };
35
36 me.extend = function (target, obj) {
37 for ( var i in obj ) {
38 target[i] = obj[i];
39 }
40 };
41
42 me.addEvent = function (el, type, fn, capture) {
43 el.addEventListener(type, fn, !!capture);
44 };
45
46 me.removeEvent = function (el, type, fn, capture) {
47 el.removeEventListener(type, fn, !!capture);
48 };
49
50 me.prefixPointerEvent = function (pointerEvent) {
51 return window.MSPointerEvent ?
52 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):
53 pointerEvent;
54 };
55
56 me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {
57 var distance = current - start,
58 speed = Math.abs(distance) / time,
59 destination,
60 duration;
61
62 deceleration = deceleration === undefined ? 0.0006 : deceleration;
63
64 destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );
65 duration = speed / deceleration;
66
67 if ( destination < lowerMargin ) {
68 destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;
69 distance = Math.abs(destination - current);
70 duration = distance / speed;
71 } else if ( destination > 0 ) {
72 destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;
73 distance = Math.abs(current) + destination;
74 duration = distance / speed;
75 }
76
77 return {
78 destination: Math.round(destination),
79 duration: duration
80 };
81 };
82
83 var _transform = _prefixStyle('transform');
84
85 me.extend(me, {
86 hasTransform: _transform !== false,
87 hasPerspective: _prefixStyle('perspective') in _elementStyle,
88 hasTouch: 'ontouchstart' in window,
89 hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed
90 hasTransition: _prefixStyle('transition') in _elementStyle
91 });
92
93 /*
94 This should find all Android browsers lower than build 535.19 (both stock browser and webview)
95 - galaxy S2 is ok
96 - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`
97 - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
98 - galaxy S3 is badAndroid (stock brower, webview)
99 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
100 - galaxy S4 is badAndroid (stock brower, webview)
101 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
102 - galaxy S5 is OK
103 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
104 - galaxy S6 is OK
105 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
106 */
107 me.isBadAndroid = (function() {
108 var appVersion = window.navigator.appVersion;
109 // Android browser is not a chrome browser.
110 if (/Android/.test(appVersion) && !(/Chrome\/\d/.test(appVersion))) {
111 var safariVersion = appVersion.match(/Safari\/(\d+.\d)/);
112 if(safariVersion && typeof safariVersion === "object" && safariVersion.length >= 2) {
113 return parseFloat(safariVersion[1]) < 535.19;
114 } else {
115 return true;
116 }
117 } else {
118 return false;
119 }
120 })();
121
122 me.extend(me.style = {}, {
123 transform: _transform,
124 transitionTimingFunction: _prefixStyle('transitionTimingFunction'),
125 transitionDuration: _prefixStyle('transitionDuration'),
126 transitionDelay: _prefixStyle('transitionDelay'),
127 transformOrigin: _prefixStyle('transformOrigin')
128 });
129
130 me.hasClass = function (e, c) {
131 var re = new RegExp("(^|\\s)" + c + "(\\s|$)");
132 return re.test(e.className);
133 };
134
135 me.addClass = function (e, c) {
136 if ( me.hasClass(e, c) ) {
137 return;
138 }
139
140 var newclass = e.className.split(' ');
141 newclass.push(c);
142 e.className = newclass.join(' ');
143 };
144
145 me.removeClass = function (e, c) {
146 if ( !me.hasClass(e, c) ) {
147 return;
148 }
149
150 var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g');
151 e.className = e.className.replace(re, ' ');
152 };
153
154 me.offset = function (el) {
155 var left = -el.offsetLeft,
156 top = -el.offsetTop;
157
158 // jshint -W084
159 while (el = el.offsetParent) {
160 left -= el.offsetLeft;
161 top -= el.offsetTop;
162 }
163 // jshint +W084
164
165 return {
166 left: left,
167 top: top
168 };
169 };
170
171 me.preventDefaultException = function (el, exceptions) {
172 for ( var i in exceptions ) {
173 if ( exceptions[i].test(el[i]) ) {
174 return true;
175 }
176 }
177
178 return false;
179 };
180
181 me.extend(me.eventType = {}, {
182 touchstart: 1,
183 touchmove: 1,
184 touchend: 1,
185
186 mousedown: 2,
187 mousemove: 2,
188 mouseup: 2,
189
190 pointerdown: 3,
191 pointermove: 3,
192 pointerup: 3,
193
194 MSPointerDown: 3,
195 MSPointerMove: 3,
196 MSPointerUp: 3
197 });
198
199 me.extend(me.ease = {}, {
200 quadratic: {
201 style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
202 fn: function (k) {
203 return k * ( 2 - k );
204 }
205 },
206 circular: {
207 style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1)
208 fn: function (k) {
209 return Math.sqrt( 1 - ( --k * k ) );
210 }
211 },
212 back: {
213 style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
214 fn: function (k) {
215 var b = 4;
216 return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;
217 }
218 },
219 bounce: {
220 style: '',
221 fn: function (k) {
222 if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {
223 return 7.5625 * k * k;
224 } else if ( k < ( 2 / 2.75 ) ) {
225 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
226 } else if ( k < ( 2.5 / 2.75 ) ) {
227 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
228 } else {
229 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
230 }
231 }
232 },
233 elastic: {
234 style: '',
235 fn: function (k) {
236 var f = 0.22,
237 e = 0.4;
238
239 if ( k === 0 ) { return 0; }
240 if ( k == 1 ) { return 1; }
241
242 return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );
243 }
244 }
245 });
246
247 me.tap = function (e, eventName) {
248 var ev = document.createEvent('Event');
249 ev.initEvent(eventName, true, true);
250 ev.pageX = e.pageX;
251 ev.pageY = e.pageY;
252 e.target.dispatchEvent(ev);
253 };
254
255 me.click = function (e) {
256 var target = e.target,
257 ev;
258
259 if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {
260 ev = document.createEvent('MouseEvents');
261 ev.initMouseEvent('click', true, true, e.view, 1,
262 target.screenX, target.screenY, target.clientX, target.clientY,
263 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
264 0, null);
265
266 ev._constructed = true;
267 target.dispatchEvent(ev);
268 }
269 };
270
271 return me;
272 })();
273 function IScroll (el, options) {
274 this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;
275 this.scroller = this.wrapper.children[0];
276 this.scrollerStyle = this.scroller.style; // cache style for better performance
277
278 this.options = {
279
280 resizeScrollbars: true,
281
282 mouseWheelSpeed: 20,
283
284 snapThreshold: 0.334,
285
286 // INSERT POINT: OPTIONS
287 disablePointer : !utils.hasPointer,
288 disableTouch : utils.hasPointer || !utils.hasTouch,
289 disableMouse : utils.hasPointer || utils.hasTouch,
290 startX: 0,
291 startY: 0,
292 scrollY: true,
293 directionLockThreshold: 5,
294 momentum: true,
295
296 bounce: true,
297 bounceTime: 600,
298 bounceEasing: '',
299
300 preventDefault: true,
301 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },
302
303 HWCompositing: true,
304 useTransition: true,
305 useTransform: true,
306 bindToWrapper: typeof window.onmousedown === "undefined"
307 };
308
309 for ( var i in options ) {
310 this.options[i] = options[i];
311 }
312
313 // Normalize options
314 this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';
315
316 this.options.useTransition = utils.hasTransition && this.options.useTransition;
317 this.options.useTransform = utils.hasTransform && this.options.useTransform;
318
319 this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;
320 this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;
321
322 // If you want eventPassthrough I have to lock one of the axes
323 this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;
324 this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;
325
326 // With eventPassthrough we also need lockDirection mechanism
327 this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;
328 this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;
329
330 this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;
331
332 this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;
333
334 if ( this.options.tap === true ) {
335 this.options.tap = 'tap';
336 }
337
338 if ( this.options.shrinkScrollbars == 'scale' ) {
339 this.options.useTransition = false;
340 }
341
342 this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;
343
344 if ( this.options.probeType == 3 ) {
345 this.options.useTransition = false; }
346
347 // INSERT POINT: NORMALIZATION
348
349 // Some defaults
350 this.x = 0;
351 this.y = 0;
352 this.directionX = 0;
353 this.directionY = 0;
354 this._events = {};
355
356 // INSERT POINT: DEFAULTS
357
358 this._init();
359 this.refresh();
360
361 this.scrollTo(this.options.startX, this.options.startY);
362 this.enable();
363 }
364
365 IScroll.prototype = {
366 version: '5.2.0',
367
368 _init: function () {
369 this._initEvents();
370
371 if ( this.options.scrollbars || this.options.indicators ) {
372 this._initIndicators();
373 }
374
375 if ( this.options.mouseWheel ) {
376 this._initWheel();
377 }
378
379 if ( this.options.snap ) {
380 this._initSnap();
381 }
382
383 if ( this.options.keyBindings ) {
384 this._initKeys();
385 }
386
387 // INSERT POINT: _init
388
389 },
390
391 destroy: function () {
392 this._initEvents(true);
393 clearTimeout(this.resizeTimeout);
394 this.resizeTimeout = null;
395 this._execEvent('destroy');
396 },
397
398 _transitionEnd: function (e) {
399 if ( e.target != this.scroller || !this.isInTransition ) {
400 return;
401 }
402
403 this._transitionTime();
404 if ( !this.resetPosition(this.options.bounceTime) ) {
405 this.isInTransition = false;
406 this._execEvent('scrollEnd');
407 }
408 },
409
410 _start: function (e) {
411 // React to left mouse button only
412 if ( utils.eventType[e.type] != 1 ) {
413 // for button property
414 // http://unixpapa.com/js/mouse.html
415 var button;
416 if (!e.which) {
417 /* IE case */
418 button = (e.button < 2) ? 0 :
419 ((e.button == 4) ? 1 : 2);
420 } else {
421 /* All others */
422 button = e.button;
423 }
424 if ( button !== 0 ) {
425 return;
426 }
427 }
428
429 if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {
430 return;
431 }
432
433 if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
434 e.preventDefault();
435 }
436
437 var point = e.touches ? e.touches[0] : e,
438 pos;
439
440 this.initiated = utils.eventType[e.type];
441 this.moved = false;
442 this.distX = 0;
443 this.distY = 0;
444 this.directionX = 0;
445 this.directionY = 0;
446 this.directionLocked = 0;
447
448 this.startTime = utils.getTime();
449
450 if ( this.options.useTransition && this.isInTransition ) {
451 this._transitionTime();
452 this.isInTransition = false;
453 pos = this.getComputedPosition();
454 this._translate(Math.round(pos.x), Math.round(pos.y));
455 this._execEvent('scrollEnd');
456 } else if ( !this.options.useTransition && this.isAnimating ) {
457 this.isAnimating = false;
458 this._execEvent('scrollEnd');
459 }
460
461 this.startX = this.x;
462 this.startY = this.y;
463 this.absStartX = this.x;
464 this.absStartY = this.y;
465 this.pointX = point.pageX;
466 this.pointY = point.pageY;
467
468 this._execEvent('beforeScrollStart');
469 },
470
471 _move: function (e) {
472 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
473 return;
474 }
475
476 if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!
477 e.preventDefault();
478 }
479
480 var point = e.touches ? e.touches[0] : e,
481 deltaX = point.pageX - this.pointX,
482 deltaY = point.pageY - this.pointY,
483 timestamp = utils.getTime(),
484 newX, newY,
485 absDistX, absDistY;
486
487 this.pointX = point.pageX;
488 this.pointY = point.pageY;
489
490 this.distX += deltaX;
491 this.distY += deltaY;
492 absDistX = Math.abs(this.distX);
493 absDistY = Math.abs(this.distY);
494
495 // We need to move at least 10 pixels for the scrolling to initiate
496 if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {
497 return;
498 }
499
500 // If you are scrolling in one direction lock the other
501 if ( !this.directionLocked && !this.options.freeScroll ) {
502 if ( absDistX > absDistY + this.options.directionLockThreshold ) {
503 this.directionLocked = 'h'; // lock horizontally
504 } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {
505 this.directionLocked = 'v'; // lock vertically
506 } else {
507 this.directionLocked = 'n'; // no lock
508 }
509 }
510
511 if ( this.directionLocked == 'h' ) {
512 if ( this.options.eventPassthrough == 'vertical' ) {
513 e.preventDefault();
514 } else if ( this.options.eventPassthrough == 'horizontal' ) {
515 this.initiated = false;
516 return;
517 }
518
519 deltaY = 0;
520 } else if ( this.directionLocked == 'v' ) {
521 if ( this.options.eventPassthrough == 'horizontal' ) {
522 e.preventDefault();
523 } else if ( this.options.eventPassthrough == 'vertical' ) {
524 this.initiated = false;
525 return;
526 }
527
528 deltaX = 0;
529 }
530
531 deltaX = this.hasHorizontalScroll ? deltaX : 0;
532 deltaY = this.hasVerticalScroll ? deltaY : 0;
533
534 newX = this.x + deltaX;
535 newY = this.y + deltaY;
536
537 // Slow down if outside of the boundaries
538 if ( newX > 0 || newX < this.maxScrollX ) {
539 newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;
540 }
541 if ( newY > 0 || newY < this.maxScrollY ) {
542 newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;
543 }
544
545 this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
546 this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
547
548 if ( !this.moved ) {
549 this._execEvent('scrollStart');
550 }
551
552 this.moved = true;
553
554 this._translate(newX, newY);
555
556 /* REPLACE START: _move */
557 if ( timestamp - this.startTime > 300 ) {
558 this.startTime = timestamp;
559 this.startX = this.x;
560 this.startY = this.y;
561
562 if ( this.options.probeType == 1 ) {
563 this._execEvent('scroll');
564 }
565 }
566
567 if ( this.options.probeType > 1 ) {
568 this._execEvent('scroll');
569 }
570 /* REPLACE END: _move */
571
572 },
573
574 _end: function (e) {
575 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
576 return;
577 }
578
579 if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
580 e.preventDefault();
581 }
582
583 var point = e.changedTouches ? e.changedTouches[0] : e,
584 momentumX,
585 momentumY,
586 duration = utils.getTime() - this.startTime,
587 newX = Math.round(this.x),
588 newY = Math.round(this.y),
589 distanceX = Math.abs(newX - this.startX),
590 distanceY = Math.abs(newY - this.startY),
591 time = 0,
592 easing = '';
593
594 this.isInTransition = 0;
595 this.initiated = 0;
596 this.endTime = utils.getTime();
597
598 // reset if we are outside of the boundaries
599 if ( this.resetPosition(this.options.bounceTime) ) {
600 return;
601 }
602
603 this.scrollTo(newX, newY); // ensures that the last position is rounded
604
605 // we scrolled less than 10 pixels
606 if ( !this.moved ) {
607 if ( this.options.tap ) {
608 utils.tap(e, this.options.tap);
609 }
610
611 if ( this.options.click ) {
612 utils.click(e);
613 }
614
615 this._execEvent('scrollCancel');
616 return;
617 }
618
619 if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {
620 this._execEvent('flick');
621 return;
622 }
623
624 // start momentum animation if needed
625 if ( this.options.momentum && duration < 300 ) {
626 momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };
627 momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };
628 newX = momentumX.destination;
629 newY = momentumY.destination;
630 time = Math.max(momentumX.duration, momentumY.duration);
631 this.isInTransition = 1;
632 }
633
634
635 if ( this.options.snap ) {
636 var snap = this._nearestSnap(newX, newY);
637 this.currentPage = snap;
638 time = this.options.snapSpeed || Math.max(
639 Math.max(
640 Math.min(Math.abs(newX - snap.x), 1000),
641 Math.min(Math.abs(newY - snap.y), 1000)
642 ), 300);
643 newX = snap.x;
644 newY = snap.y;
645
646 this.directionX = 0;
647 this.directionY = 0;
648 easing = this.options.bounceEasing;
649 }
650
651 // INSERT POINT: _end
652
653 if ( newX != this.x || newY != this.y ) {
654 // change easing function when scroller goes out of the boundaries
655 if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {
656 easing = utils.ease.quadratic;
657 }
658
659 this.scrollTo(newX, newY, time, easing);
660 return;
661 }
662
663 this._execEvent('scrollEnd');
664 },
665
666 _resize: function () {
667 var that = this;
668
669 clearTimeout(this.resizeTimeout);
670
671 this.resizeTimeout = setTimeout(function () {
672 that.refresh();
673 }, this.options.resizePolling);
674 },
675
676 resetPosition: function (time) {
677 var x = this.x,
678 y = this.y;
679
680 time = time || 0;
681
682 if ( !this.hasHorizontalScroll || this.x > 0 ) {
683 x = 0;
684 } else if ( this.x < this.maxScrollX ) {
685 x = this.maxScrollX;
686 }
687
688 if ( !this.hasVerticalScroll || this.y > 0 ) {
689 y = 0;
690 } else if ( this.y < this.maxScrollY ) {
691 y = this.maxScrollY;
692 }
693
694 if ( x == this.x && y == this.y ) {
695 return false;
696 }
697
698 this.scrollTo(x, y, time, this.options.bounceEasing);
699
700 return true;
701 },
702
703 disable: function () {
704 this.enabled = false;
705 },
706
707 enable: function () {
708 this.enabled = true;
709 },
710
711 refresh: function () {
712 var rf = this.wrapper.offsetHeight; // Force reflow
713
714 this.wrapperWidth = this.wrapper.clientWidth;
715 this.wrapperHeight = this.wrapper.clientHeight;
716
717 /* REPLACE START: refresh */
718
719 this.scrollerWidth = this.scroller.offsetWidth;
720 this.scrollerHeight = this.scroller.offsetHeight;
721
722 this.maxScrollX = this.wrapperWidth - this.scrollerWidth;
723 this.maxScrollY = this.wrapperHeight - this.scrollerHeight;
724
725 /* REPLACE END: refresh */
726
727 this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;
728 this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;
729
730 if ( !this.hasHorizontalScroll ) {
731 this.maxScrollX = 0;
732 this.scrollerWidth = this.wrapperWidth;
733 }
734
735 if ( !this.hasVerticalScroll ) {
736 this.maxScrollY = 0;
737 this.scrollerHeight = this.wrapperHeight;
738 }
739
740 this.endTime = 0;
741 this.directionX = 0;
742 this.directionY = 0;
743
744 this.wrapperOffset = utils.offset(this.wrapper);
745
746 this._execEvent('refresh');
747
748 this.resetPosition();
749
750 // INSERT POINT: _refresh
751
752 },
753
754 on: function (type, fn) {
755 if ( !this._events[type] ) {
756 this._events[type] = [];
757 }
758
759 this._events[type].push(fn);
760 },
761
762 off: function (type, fn) {
763 if ( !this._events[type] ) {
764 return;
765 }
766
767 var index = this._events[type].indexOf(fn);
768
769 if ( index > -1 ) {
770 this._events[type].splice(index, 1);
771 }
772 },
773
774 _execEvent: function (type) {
775 if ( !this._events[type] ) {
776 return;
777 }
778
779 var i = 0,
780 l = this._events[type].length;
781
782 if ( !l ) {
783 return;
784 }
785
786 for ( ; i < l; i++ ) {
787 this._events[type][i].apply(this, [].slice.call(arguments, 1));
788 }
789 },
790
791 scrollBy: function (x, y, time, easing) {
792 x = this.x + x;
793 y = this.y + y;
794 time = time || 0;
795
796 this.scrollTo(x, y, time, easing);
797 },
798
799 scrollTo: function (x, y, time, easing) {
800 easing = easing || utils.ease.circular;
801
802 this.isInTransition = this.options.useTransition && time > 0;
803 var transitionType = this.options.useTransition && easing.style;
804 if ( !time || transitionType ) {
805 if(transitionType) {
806 this._transitionTimingFunction(easing.style);
807 this._transitionTime(time);
808 }
809 this._translate(x, y);
810 } else {
811 this._animate(x, y, time, easing.fn);
812 }
813 },
814
815 scrollToElement: function (el, time, offsetX, offsetY, easing) {
816 el = el.nodeType ? el : this.scroller.querySelector(el);
817
818 if ( !el ) {
819 return;
820 }
821
822 var pos = utils.offset(el);
823
824 pos.left -= this.wrapperOffset.left;
825 pos.top -= this.wrapperOffset.top;
826
827 // if offsetX/Y are true we center the element to the screen
828 if ( offsetX === true ) {
829 offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);
830 }
831 if ( offsetY === true ) {
832 offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);
833 }
834
835 pos.left -= offsetX || 0;
836 pos.top -= offsetY || 0;
837
838 pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;
839 pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;
840
841 time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;
842
843 this.scrollTo(pos.left, pos.top, time, easing);
844 },
845
846 _transitionTime: function (time) {
847 time = time || 0;
848
849 var durationProp = utils.style.transitionDuration;
850 this.scrollerStyle[durationProp] = time + 'ms';
851
852 if ( !time && utils.isBadAndroid ) {
853 this.scrollerStyle[durationProp] = '0.0001ms';
854 // remove 0.0001ms
855 var self = this;
856 rAF(function() {
857 if(self.scrollerStyle[durationProp] === '0.0001ms') {
858 self.scrollerStyle[durationProp] = '0s';
859 }
860 });
861 }
862
863
864 if ( this.indicators ) {
865 for ( var i = this.indicators.length; i--; ) {
866 this.indicators[i].transitionTime(time);
867 }
868 }
869
870
871 // INSERT POINT: _transitionTime
872
873 },
874
875 _transitionTimingFunction: function (easing) {
876 this.scrollerStyle[utils.style.transitionTimingFunction] = easing;
877
878
879 if ( this.indicators ) {
880 for ( var i = this.indicators.length; i--; ) {
881 this.indicators[i].transitionTimingFunction(easing);
882 }
883 }
884
885
886 // INSERT POINT: _transitionTimingFunction
887
888 },
889
890 _translate: function (x, y) {
891 if ( this.options.useTransform ) {
892
893 /* REPLACE START: _translate */
894
895 this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;
896
897 /* REPLACE END: _translate */
898
899 } else {
900 x = Math.round(x);
901 y = Math.round(y);
902 this.scrollerStyle.left = x + 'px';
903 this.scrollerStyle.top = y + 'px';
904 }
905
906 this.x = x;
907 this.y = y;
908
909
910 if ( this.indicators ) {
911 for ( var i = this.indicators.length; i--; ) {
912 this.indicators[i].updatePosition();
913 }
914 }
915
916
917 // INSERT POINT: _translate
918
919 },
920
921 _initEvents: function (remove) {
922 var eventType = remove ? utils.removeEvent : utils.addEvent,
923 target = this.options.bindToWrapper ? this.wrapper : window;
924
925 eventType(window, 'orientationchange', this);
926 eventType(window, 'resize', this);
927
928 if ( this.options.click ) {
929 eventType(this.wrapper, 'click', this, true);
930 }
931
932 if ( !this.options.disableMouse ) {
933 eventType(this.wrapper, 'mousedown', this);
934 eventType(target, 'mousemove', this);
935 eventType(target, 'mousecancel', this);
936 eventType(target, 'mouseup', this);
937 }
938
939 if ( utils.hasPointer && !this.options.disablePointer ) {
940 eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);
941 eventType(target, utils.prefixPointerEvent('pointermove'), this);
942 eventType(target, utils.prefixPointerEvent('pointercancel'), this);
943 eventType(target, utils.prefixPointerEvent('pointerup'), this);
944 }
945
946 if ( utils.hasTouch && !this.options.disableTouch ) {
947 eventType(this.wrapper, 'touchstart', this);
948 eventType(target, 'touchmove', this);
949 eventType(target, 'touchcancel', this);
950 eventType(target, 'touchend', this);
951 }
952
953 eventType(this.scroller, 'transitionend', this);
954 eventType(this.scroller, 'webkitTransitionEnd', this);
955 eventType(this.scroller, 'oTransitionEnd', this);
956 eventType(this.scroller, 'MSTransitionEnd', this);
957 },
958
959 getComputedPosition: function () {
960 var matrix = window.getComputedStyle(this.scroller, null),
961 x, y;
962
963 if ( this.options.useTransform ) {
964 matrix = matrix[utils.style.transform].split(')')[0].split(', ');
965 x = +(matrix[12] || matrix[4]);
966 y = +(matrix[13] || matrix[5]);
967 } else {
968 x = +matrix.left.replace(/[^-\d.]/g, '');
969 y = +matrix.top.replace(/[^-\d.]/g, '');
970 }
971
972 return { x: x, y: y };
973 },
974 _initIndicators: function () {
975 var interactive = this.options.interactiveScrollbars,
976 customStyle = typeof this.options.scrollbars != 'string',
977 indicators = [],
978 indicator;
979
980 var that = this;
981
982 this.indicators = [];
983
984 if ( this.options.scrollbars ) {
985 // Vertical scrollbar
986 if ( this.options.scrollY ) {
987 indicator = {
988 el: createDefaultScrollbar('v', interactive, this.options.scrollbars),
989 interactive: interactive,
990 defaultScrollbars: true,
991 customStyle: customStyle,
992 resize: this.options.resizeScrollbars,
993 shrink: this.options.shrinkScrollbars,
994 fade: this.options.fadeScrollbars,
995 listenX: false
996 };
997
998 this.wrapper.appendChild(indicator.el);
999 indicators.push(indicator);
1000 }
1001
1002 // Horizontal scrollbar
1003 if ( this.options.scrollX ) {
1004 indicator = {
1005 el: createDefaultScrollbar('h', interactive, this.options.scrollbars),
1006 interactive: interactive,
1007 defaultScrollbars: true,
1008 customStyle: customStyle,
1009 resize: this.options.resizeScrollbars,
1010 shrink: this.options.shrinkScrollbars,
1011 fade: this.options.fadeScrollbars,
1012 listenY: false
1013 };
1014
1015 this.wrapper.appendChild(indicator.el);
1016 indicators.push(indicator);
1017 }
1018 }
1019
1020 if ( this.options.indicators ) {
1021 // TODO: check concat compatibility
1022 indicators = indicators.concat(this.options.indicators);
1023 }
1024
1025 for ( var i = indicators.length; i--; ) {
1026 this.indicators.push( new Indicator(this, indicators[i]) );
1027 }
1028
1029 // TODO: check if we can use array.map (wide compatibility and performance issues)
1030 function _indicatorsMap (fn) {
1031 if (that.indicators) {
1032 for ( var i = that.indicators.length; i--; ) {
1033 fn.call(that.indicators[i]);
1034 }
1035 }
1036 }
1037
1038 if ( this.options.fadeScrollbars ) {
1039 this.on('scrollEnd', function () {
1040 _indicatorsMap(function () {
1041 this.fade();
1042 });
1043 });
1044
1045 this.on('scrollCancel', function () {
1046 _indicatorsMap(function () {
1047 this.fade();
1048 });
1049 });
1050
1051 this.on('scrollStart', function () {
1052 _indicatorsMap(function () {
1053 this.fade(1);
1054 });
1055 });
1056
1057 this.on('beforeScrollStart', function () {
1058 _indicatorsMap(function () {
1059 this.fade(1, true);
1060 });
1061 });
1062 }
1063
1064
1065 this.on('refresh', function () {
1066 _indicatorsMap(function () {
1067 this.refresh();
1068 });
1069 });
1070
1071 this.on('destroy', function () {
1072 _indicatorsMap(function () {
1073 this.destroy();
1074 });
1075
1076 delete this.indicators;
1077 });
1078 },
1079
1080 _initWheel: function () {
1081 utils.addEvent(this.wrapper, 'wheel', this);
1082 utils.addEvent(this.wrapper, 'mousewheel', this);
1083 utils.addEvent(this.wrapper, 'DOMMouseScroll', this);
1084
1085 this.on('destroy', function () {
1086 clearTimeout(this.wheelTimeout);
1087 this.wheelTimeout = null;
1088 utils.removeEvent(this.wrapper, 'wheel', this);
1089 utils.removeEvent(this.wrapper, 'mousewheel', this);
1090 utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);
1091 });
1092 },
1093
1094 _wheel: function (e) {
1095 if ( !this.enabled ) {
1096 return;
1097 }
1098
1099 e.preventDefault();
1100
1101 var wheelDeltaX, wheelDeltaY,
1102 newX, newY,
1103 that = this;
1104
1105 if ( this.wheelTimeout === undefined ) {
1106 that._execEvent('scrollStart');
1107 }
1108
1109 // Execute the scrollEnd event after 400ms the wheel stopped scrolling
1110 clearTimeout(this.wheelTimeout);
1111 this.wheelTimeout = setTimeout(function () {
1112 if(!that.options.snap) {
1113 that._execEvent('scrollEnd');
1114 }
1115 that.wheelTimeout = undefined;
1116 }, 400);
1117
1118 if ( 'deltaX' in e ) {
1119 if (e.deltaMode === 1) {
1120 wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;
1121 wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;
1122 } else {
1123 wheelDeltaX = -e.deltaX;
1124 wheelDeltaY = -e.deltaY;
1125 }
1126 } else if ( 'wheelDeltaX' in e ) {
1127 wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;
1128 wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;
1129 } else if ( 'wheelDelta' in e ) {
1130 wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;
1131 } else if ( 'detail' in e ) {
1132 wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;
1133 } else {
1134 return;
1135 }
1136
1137 wheelDeltaX *= this.options.invertWheelDirection;
1138 wheelDeltaY *= this.options.invertWheelDirection;
1139
1140 if ( !this.hasVerticalScroll ) {
1141 wheelDeltaX = wheelDeltaY;
1142 wheelDeltaY = 0;
1143 }
1144
1145 if ( this.options.snap ) {
1146 newX = this.currentPage.pageX;
1147 newY = this.currentPage.pageY;
1148
1149 if ( wheelDeltaX > 0 ) {
1150 newX--;
1151 } else if ( wheelDeltaX < 0 ) {
1152 newX++;
1153 }
1154
1155 if ( wheelDeltaY > 0 ) {
1156 newY--;
1157 } else if ( wheelDeltaY < 0 ) {
1158 newY++;
1159 }
1160
1161 this.goToPage(newX, newY);
1162
1163 return;
1164 }
1165
1166 newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);
1167 newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);
1168
1169 this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;
1170 this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;
1171
1172 if ( newX > 0 ) {
1173 newX = 0;
1174 } else if ( newX < this.maxScrollX ) {
1175 newX = this.maxScrollX;
1176 }
1177
1178 if ( newY > 0 ) {
1179 newY = 0;
1180 } else if ( newY < this.maxScrollY ) {
1181 newY = this.maxScrollY;
1182 }
1183
1184 this.scrollTo(newX, newY, 0);
1185
1186 if ( this.options.probeType > 1 ) {
1187 this._execEvent('scroll');
1188 }
1189
1190 // INSERT POINT: _wheel
1191 },
1192
1193 _initSnap: function () {
1194 this.currentPage = {};
1195
1196 if ( typeof this.options.snap == 'string' ) {
1197 this.options.snap = this.scroller.querySelectorAll(this.options.snap);
1198 }
1199
1200 this.on('refresh', function () {
1201 var i = 0, l,
1202 m = 0, n,
1203 cx, cy,
1204 x = 0, y,
1205 stepX = this.options.snapStepX || this.wrapperWidth,
1206 stepY = this.options.snapStepY || this.wrapperHeight,
1207 el;
1208
1209 this.pages = [];
1210
1211 if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {
1212 return;
1213 }
1214
1215 if ( this.options.snap === true ) {
1216 cx = Math.round( stepX / 2 );
1217 cy = Math.round( stepY / 2 );
1218
1219 while ( x > -this.scrollerWidth ) {
1220 this.pages[i] = [];
1221 l = 0;
1222 y = 0;
1223
1224 while ( y > -this.scrollerHeight ) {
1225 this.pages[i][l] = {
1226 x: Math.max(x, this.maxScrollX),
1227 y: Math.max(y, this.maxScrollY),
1228 width: stepX,
1229 height: stepY,
1230 cx: x - cx,
1231 cy: y - cy
1232 };
1233
1234 y -= stepY;
1235 l++;
1236 }
1237
1238 x -= stepX;
1239 i++;
1240 }
1241 } else {
1242 el = this.options.snap;
1243 l = el.length;
1244 n = -1;
1245
1246 for ( ; i < l; i++ ) {
1247 if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {
1248 m = 0;
1249 n++;
1250 }
1251
1252 if ( !this.pages[m] ) {
1253 this.pages[m] = [];
1254 }
1255
1256 x = Math.max(-el[i].offsetLeft, this.maxScrollX);
1257 y = Math.max(-el[i].offsetTop, this.maxScrollY);
1258 cx = x - Math.round(el[i].offsetWidth / 2);
1259 cy = y - Math.round(el[i].offsetHeight / 2);
1260
1261 this.pages[m][n] = {
1262 x: x,
1263 y: y,
1264 width: el[i].offsetWidth,
1265 height: el[i].offsetHeight,
1266 cx: cx,
1267 cy: cy
1268 };
1269
1270 if ( x > this.maxScrollX ) {
1271 m++;
1272 }
1273 }
1274 }
1275
1276 this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);
1277
1278 // Update snap threshold if needed
1279 if ( this.options.snapThreshold % 1 === 0 ) {
1280 this.snapThresholdX = this.options.snapThreshold;
1281 this.snapThresholdY = this.options.snapThreshold;
1282 } else {
1283 this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);
1284 this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);
1285 }
1286 });
1287
1288 this.on('flick', function () {
1289 var time = this.options.snapSpeed || Math.max(
1290 Math.max(
1291 Math.min(Math.abs(this.x - this.startX), 1000),
1292 Math.min(Math.abs(this.y - this.startY), 1000)
1293 ), 300);
1294
1295 this.goToPage(
1296 this.currentPage.pageX + this.directionX,
1297 this.currentPage.pageY + this.directionY,
1298 time
1299 );
1300 });
1301 },
1302
1303 _nearestSnap: function (x, y) {
1304 if ( !this.pages.length ) {
1305 return { x: 0, y: 0, pageX: 0, pageY: 0 };
1306 }
1307
1308 var i = 0,
1309 l = this.pages.length,
1310 m = 0;
1311
1312 // Check if we exceeded the snap threshold
1313 if ( Math.abs(x - this.absStartX) < this.snapThresholdX &&
1314 Math.abs(y - this.absStartY) < this.snapThresholdY ) {
1315 return this.currentPage;
1316 }
1317
1318 if ( x > 0 ) {
1319 x = 0;
1320 } else if ( x < this.maxScrollX ) {
1321 x = this.maxScrollX;
1322 }
1323
1324 if ( y > 0 ) {
1325 y = 0;
1326 } else if ( y < this.maxScrollY ) {
1327 y = this.maxScrollY;
1328 }
1329
1330 for ( ; i < l; i++ ) {
1331 if ( x >= this.pages[i][0].cx ) {
1332 x = this.pages[i][0].x;
1333 break;
1334 }
1335 }
1336
1337 l = this.pages[i].length;
1338
1339 for ( ; m < l; m++ ) {
1340 if ( y >= this.pages[0][m].cy ) {
1341 y = this.pages[0][m].y;
1342 break;
1343 }
1344 }
1345
1346 if ( i == this.currentPage.pageX ) {
1347 i += this.directionX;
1348
1349 if ( i < 0 ) {
1350 i = 0;
1351 } else if ( i >= this.pages.length ) {
1352 i = this.pages.length - 1;
1353 }
1354
1355 x = this.pages[i][0].x;
1356 }
1357
1358 if ( m == this.currentPage.pageY ) {
1359 m += this.directionY;
1360
1361 if ( m < 0 ) {
1362 m = 0;
1363 } else if ( m >= this.pages[0].length ) {
1364 m = this.pages[0].length - 1;
1365 }
1366
1367 y = this.pages[0][m].y;
1368 }
1369
1370 return {
1371 x: x,
1372 y: y,
1373 pageX: i,
1374 pageY: m
1375 };
1376 },
1377
1378 goToPage: function (x, y, time, easing) {
1379 easing = easing || this.options.bounceEasing;
1380
1381 if ( x >= this.pages.length ) {
1382 x = this.pages.length - 1;
1383 } else if ( x < 0 ) {
1384 x = 0;
1385 }
1386
1387 if ( y >= this.pages[x].length ) {
1388 y = this.pages[x].length - 1;
1389 } else if ( y < 0 ) {
1390 y = 0;
1391 }
1392
1393 var posX = this.pages[x][y].x,
1394 posY = this.pages[x][y].y;
1395
1396 time = time === undefined ? this.options.snapSpeed || Math.max(
1397 Math.max(
1398 Math.min(Math.abs(posX - this.x), 1000),
1399 Math.min(Math.abs(posY - this.y), 1000)
1400 ), 300) : time;
1401
1402 this.currentPage = {
1403 x: posX,
1404 y: posY,
1405 pageX: x,
1406 pageY: y
1407 };
1408
1409 this.scrollTo(posX, posY, time, easing);
1410 },
1411
1412 next: function (time, easing) {
1413 var x = this.currentPage.pageX,
1414 y = this.currentPage.pageY;
1415
1416 x++;
1417
1418 if ( x >= this.pages.length && this.hasVerticalScroll ) {
1419 x = 0;
1420 y++;
1421 }
1422
1423 this.goToPage(x, y, time, easing);
1424 },
1425
1426 prev: function (time, easing) {
1427 var x = this.currentPage.pageX,
1428 y = this.currentPage.pageY;
1429
1430 x--;
1431
1432 if ( x < 0 && this.hasVerticalScroll ) {
1433 x = 0;
1434 y--;
1435 }
1436
1437 this.goToPage(x, y, time, easing);
1438 },
1439
1440 _initKeys: function (e) {
1441 // default key bindings
1442 var keys = {
1443 pageUp: 33,
1444 pageDown: 34,
1445 end: 35,
1446 home: 36,
1447 left: 37,
1448 up: 38,
1449 right: 39,
1450 down: 40
1451 };
1452 var i;
1453
1454 // if you give me characters I give you keycode
1455 if ( typeof this.options.keyBindings == 'object' ) {
1456 for ( i in this.options.keyBindings ) {
1457 if ( typeof this.options.keyBindings[i] == 'string' ) {
1458 this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);
1459 }
1460 }
1461 } else {
1462 this.options.keyBindings = {};
1463 }
1464
1465 for ( i in keys ) {
1466 this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];
1467 }
1468
1469 utils.addEvent(window, 'keydown', this);
1470
1471 this.on('destroy', function () {
1472 utils.removeEvent(window, 'keydown', this);
1473 });
1474 },
1475
1476 _key: function (e) {
1477 if ( !this.enabled ) {
1478 return;
1479 }
1480
1481 var snap = this.options.snap, // we are using this alot, better to cache it
1482 newX = snap ? this.currentPage.pageX : this.x,
1483 newY = snap ? this.currentPage.pageY : this.y,
1484 now = utils.getTime(),
1485 prevTime = this.keyTime || 0,
1486 acceleration = 0.250,
1487 pos;
1488
1489 if ( this.options.useTransition && this.isInTransition ) {
1490 pos = this.getComputedPosition();
1491
1492 this._translate(Math.round(pos.x), Math.round(pos.y));
1493 this.isInTransition = false;
1494 }
1495
1496 this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;
1497
1498 switch ( e.keyCode ) {
1499 case this.options.keyBindings.pageUp:
1500 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1501 newX += snap ? 1 : this.wrapperWidth;
1502 } else {
1503 newY += snap ? 1 : this.wrapperHeight;
1504 }
1505 break;
1506 case this.options.keyBindings.pageDown:
1507 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1508 newX -= snap ? 1 : this.wrapperWidth;
1509 } else {
1510 newY -= snap ? 1 : this.wrapperHeight;
1511 }
1512 break;
1513 case this.options.keyBindings.end:
1514 newX = snap ? this.pages.length-1 : this.maxScrollX;
1515 newY = snap ? this.pages[0].length-1 : this.maxScrollY;
1516 break;
1517 case this.options.keyBindings.home:
1518 newX = 0;
1519 newY = 0;
1520 break;
1521 case this.options.keyBindings.left:
1522 newX += snap ? -1 : 5 + this.keyAcceleration>>0;
1523 break;
1524 case this.options.keyBindings.up:
1525 newY += snap ? 1 : 5 + this.keyAcceleration>>0;
1526 break;
1527 case this.options.keyBindings.right:
1528 newX -= snap ? -1 : 5 + this.keyAcceleration>>0;
1529 break;
1530 case this.options.keyBindings.down:
1531 newY -= snap ? 1 : 5 + this.keyAcceleration>>0;
1532 break;
1533 default:
1534 return;
1535 }
1536
1537 if ( snap ) {
1538 this.goToPage(newX, newY);
1539 return;
1540 }
1541
1542 if ( newX > 0 ) {
1543 newX = 0;
1544 this.keyAcceleration = 0;
1545 } else if ( newX < this.maxScrollX ) {
1546 newX = this.maxScrollX;
1547 this.keyAcceleration = 0;
1548 }
1549
1550 if ( newY > 0 ) {
1551 newY = 0;
1552 this.keyAcceleration = 0;
1553 } else if ( newY < this.maxScrollY ) {
1554 newY = this.maxScrollY;
1555 this.keyAcceleration = 0;
1556 }
1557
1558 this.scrollTo(newX, newY, 0);
1559
1560 this.keyTime = now;
1561 },
1562
1563 _animate: function (destX, destY, duration, easingFn) {
1564 var that = this,
1565 startX = this.x,
1566 startY = this.y,
1567 startTime = utils.getTime(),
1568 destTime = startTime + duration;
1569
1570 function step () {
1571 var now = utils.getTime(),
1572 newX, newY,
1573 easing;
1574
1575 if ( now >= destTime ) {
1576 that.isAnimating = false;
1577 that._translate(destX, destY);
1578
1579 if ( !that.resetPosition(that.options.bounceTime) ) {
1580 that._execEvent('scrollEnd');
1581 }
1582
1583 return;
1584 }
1585
1586 now = ( now - startTime ) / duration;
1587 easing = easingFn(now);
1588 newX = ( destX - startX ) * easing + startX;
1589 newY = ( destY - startY ) * easing + startY;
1590 that._translate(newX, newY);
1591
1592 if ( that.isAnimating ) {
1593 rAF(step);
1594 }
1595
1596 if ( that.options.probeType == 3 ) {
1597 that._execEvent('scroll');
1598 }
1599 }
1600
1601 this.isAnimating = true;
1602 step();
1603 },
1604
1605 handleEvent: function (e) {
1606 switch ( e.type ) {
1607 case 'touchstart':
1608 case 'pointerdown':
1609 case 'MSPointerDown':
1610 case 'mousedown':
1611 this._start(e);
1612 break;
1613 case 'touchmove':
1614 case 'pointermove':
1615 case 'MSPointerMove':
1616 case 'mousemove':
1617 this._move(e);
1618 break;
1619 case 'touchend':
1620 case 'pointerup':
1621 case 'MSPointerUp':
1622 case 'mouseup':
1623 case 'touchcancel':
1624 case 'pointercancel':
1625 case 'MSPointerCancel':
1626 case 'mousecancel':
1627 this._end(e);
1628 break;
1629 case 'orientationchange':
1630 case 'resize':
1631 this._resize();
1632 break;
1633 case 'transitionend':
1634 case 'webkitTransitionEnd':
1635 case 'oTransitionEnd':
1636 case 'MSTransitionEnd':
1637 this._transitionEnd(e);
1638 break;
1639 case 'wheel':
1640 case 'DOMMouseScroll':
1641 case 'mousewheel':
1642 this._wheel(e);
1643 break;
1644 case 'keydown':
1645 this._key(e);
1646 break;
1647 case 'click':
1648 if ( this.enabled && !e._constructed ) {
1649 e.preventDefault();
1650 e.stopPropagation();
1651 }
1652 break;
1653 }
1654 }
1655 };
1656 function createDefaultScrollbar (direction, interactive, type) {
1657 var scrollbar = document.createElement('div'),
1658 indicator = document.createElement('div');
1659
1660 if ( type === true ) {
1661 scrollbar.style.cssText = 'position:absolute;z-index:9999';
1662 indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';
1663 }
1664
1665 indicator.className = 'iScrollIndicator';
1666
1667 if ( direction == 'h' ) {
1668 if ( type === true ) {
1669 scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';
1670 indicator.style.height = '100%';
1671 }
1672 scrollbar.className = 'iScrollHorizontalScrollbar';
1673 } else {
1674 if ( type === true ) {
1675 scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';
1676 indicator.style.width = '100%';
1677 }
1678 scrollbar.className = 'iScrollVerticalScrollbar';
1679 }
1680
1681 scrollbar.style.cssText += ';overflow:hidden';
1682
1683 if ( !interactive ) {
1684 scrollbar.style.pointerEvents = 'none';
1685 }
1686
1687 scrollbar.appendChild(indicator);
1688
1689 return scrollbar;
1690 }
1691
1692 function Indicator (scroller, options) {
1693 this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;
1694 this.wrapperStyle = this.wrapper.style;
1695 this.indicator = this.wrapper.children[0];
1696 this.indicatorStyle = this.indicator.style;
1697 this.scroller = scroller;
1698
1699 this.options = {
1700 listenX: true,
1701 listenY: true,
1702 interactive: false,
1703 resize: true,
1704 defaultScrollbars: false,
1705 shrink: false,
1706 fade: false,
1707 speedRatioX: 0,
1708 speedRatioY: 0
1709 };
1710
1711 for ( var i in options ) {
1712 this.options[i] = options[i];
1713 }
1714
1715 this.sizeRatioX = 1;
1716 this.sizeRatioY = 1;
1717 this.maxPosX = 0;
1718 this.maxPosY = 0;
1719
1720 if ( this.options.interactive ) {
1721 if ( !this.options.disableTouch ) {
1722 utils.addEvent(this.indicator, 'touchstart', this);
1723 utils.addEvent(window, 'touchend', this);
1724 }
1725 if ( !this.options.disablePointer ) {
1726 utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);
1727 utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);
1728 }
1729 if ( !this.options.disableMouse ) {
1730 utils.addEvent(this.indicator, 'mousedown', this);
1731 utils.addEvent(window, 'mouseup', this);
1732 }
1733 }
1734
1735 if ( this.options.fade ) {
1736 this.wrapperStyle[utils.style.transform] = this.scroller.translateZ;
1737 var durationProp = utils.style.transitionDuration;
1738 this.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';
1739 // remove 0.0001ms
1740 var self = this;
1741 if(utils.isBadAndroid) {
1742 rAF(function() {
1743 if(self.wrapperStyle[durationProp] === '0.0001ms') {
1744 self.wrapperStyle[durationProp] = '0s';
1745 }
1746 });
1747 }
1748 this.wrapperStyle.opacity = '0';
1749 }
1750 }
1751
1752 Indicator.prototype = {
1753 handleEvent: function (e) {
1754 switch ( e.type ) {
1755 case 'touchstart':
1756 case 'pointerdown':
1757 case 'MSPointerDown':
1758 case 'mousedown':
1759 this._start(e);
1760 break;
1761 case 'touchmove':
1762 case 'pointermove':
1763 case 'MSPointerMove':
1764 case 'mousemove':
1765 this._move(e);
1766 break;
1767 case 'touchend':
1768 case 'pointerup':
1769 case 'MSPointerUp':
1770 case 'mouseup':
1771 case 'touchcancel':
1772 case 'pointercancel':
1773 case 'MSPointerCancel':
1774 case 'mousecancel':
1775 this._end(e);
1776 break;
1777 }
1778 },
1779
1780 destroy: function () {
1781 if ( this.options.fadeScrollbars ) {
1782 clearTimeout(this.fadeTimeout);
1783 this.fadeTimeout = null;
1784 }
1785 if ( this.options.interactive ) {
1786 utils.removeEvent(this.indicator, 'touchstart', this);
1787 utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);
1788 utils.removeEvent(this.indicator, 'mousedown', this);
1789
1790 utils.removeEvent(window, 'touchmove', this);
1791 utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);
1792 utils.removeEvent(window, 'mousemove', this);
1793
1794 utils.removeEvent(window, 'touchend', this);
1795 utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);
1796 utils.removeEvent(window, 'mouseup', this);
1797 }
1798
1799 if ( this.options.defaultScrollbars ) {
1800 this.wrapper.parentNode.removeChild(this.wrapper);
1801 }
1802 },
1803
1804 _start: function (e) {
1805 var point = e.touches ? e.touches[0] : e;
1806
1807 e.preventDefault();
1808 e.stopPropagation();
1809
1810 this.transitionTime();
1811
1812 this.initiated = true;
1813 this.moved = false;
1814 this.lastPointX = point.pageX;
1815 this.lastPointY = point.pageY;
1816
1817 this.startTime = utils.getTime();
1818
1819 if ( !this.options.disableTouch ) {
1820 utils.addEvent(window, 'touchmove', this);
1821 }
1822 if ( !this.options.disablePointer ) {
1823 utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);
1824 }
1825 if ( !this.options.disableMouse ) {
1826 utils.addEvent(window, 'mousemove', this);
1827 }
1828
1829 this.scroller._execEvent('beforeScrollStart');
1830 },
1831
1832 _move: function (e) {
1833 var point = e.touches ? e.touches[0] : e,
1834 deltaX, deltaY,
1835 newX, newY,
1836 timestamp = utils.getTime();
1837
1838 if ( !this.moved ) {
1839 this.scroller._execEvent('scrollStart');
1840 }
1841
1842 this.moved = true;
1843
1844 deltaX = point.pageX - this.lastPointX;
1845 this.lastPointX = point.pageX;
1846
1847 deltaY = point.pageY - this.lastPointY;
1848 this.lastPointY = point.pageY;
1849
1850 newX = this.x + deltaX;
1851 newY = this.y + deltaY;
1852
1853 this._pos(newX, newY);
1854
1855
1856 if ( this.scroller.options.probeType == 1 && timestamp - this.startTime > 300 ) {
1857 this.startTime = timestamp;
1858 this.scroller._execEvent('scroll');
1859 } else if ( this.scroller.options.probeType > 1 ) {
1860 this.scroller._execEvent('scroll');
1861 }
1862
1863
1864 // INSERT POINT: indicator._move
1865
1866 e.preventDefault();
1867 e.stopPropagation();
1868 },
1869
1870 _end: function (e) {
1871 if ( !this.initiated ) {
1872 return;
1873 }
1874
1875 this.initiated = false;
1876
1877 e.preventDefault();
1878 e.stopPropagation();
1879
1880 utils.removeEvent(window, 'touchmove', this);
1881 utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);
1882 utils.removeEvent(window, 'mousemove', this);
1883
1884 if ( this.scroller.options.snap ) {
1885 var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);
1886
1887 var time = this.options.snapSpeed || Math.max(
1888 Math.max(
1889 Math.min(Math.abs(this.scroller.x - snap.x), 1000),
1890 Math.min(Math.abs(this.scroller.y - snap.y), 1000)
1891 ), 300);
1892
1893 if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {
1894 this.scroller.directionX = 0;
1895 this.scroller.directionY = 0;
1896 this.scroller.currentPage = snap;
1897 this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);
1898 }
1899 }
1900
1901 if ( this.moved ) {
1902 this.scroller._execEvent('scrollEnd');
1903 }
1904 },
1905
1906 transitionTime: function (time) {
1907 time = time || 0;
1908 var durationProp = utils.style.transitionDuration;
1909 this.indicatorStyle[durationProp] = time + 'ms';
1910
1911 if ( !time && utils.isBadAndroid ) {
1912 this.indicatorStyle[durationProp] = '0.0001ms';
1913 // remove 0.0001ms
1914 var self = this;
1915 rAF(function() {
1916 if(self.indicatorStyle[durationProp] === '0.0001ms') {
1917 self.indicatorStyle[durationProp] = '0s';
1918 }
1919 });
1920 }
1921 },
1922
1923 transitionTimingFunction: function (easing) {
1924 this.indicatorStyle[utils.style.transitionTimingFunction] = easing;
1925 },
1926
1927 refresh: function () {
1928 this.transitionTime();
1929
1930 if ( this.options.listenX && !this.options.listenY ) {
1931 this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
1932 } else if ( this.options.listenY && !this.options.listenX ) {
1933 this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
1934 } else {
1935 this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
1936 }
1937
1938 if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {
1939 utils.addClass(this.wrapper, 'iScrollBothScrollbars');
1940 utils.removeClass(this.wrapper, 'iScrollLoneScrollbar');
1941
1942 if ( this.options.defaultScrollbars && this.options.customStyle ) {
1943 if ( this.options.listenX ) {
1944 this.wrapper.style.right = '8px';
1945 } else {
1946 this.wrapper.style.bottom = '8px';
1947 }
1948 }
1949 } else {
1950 utils.removeClass(this.wrapper, 'iScrollBothScrollbars');
1951 utils.addClass(this.wrapper, 'iScrollLoneScrollbar');
1952
1953 if ( this.options.defaultScrollbars && this.options.customStyle ) {
1954 if ( this.options.listenX ) {
1955 this.wrapper.style.right = '2px';
1956 } else {
1957 this.wrapper.style.bottom = '2px';
1958 }
1959 }
1960 }
1961
1962 var r = this.wrapper.offsetHeight; // force refresh
1963
1964 if ( this.options.listenX ) {
1965 this.wrapperWidth = this.wrapper.clientWidth;
1966 if ( this.options.resize ) {
1967 this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);
1968 this.indicatorStyle.width = this.indicatorWidth + 'px';
1969 } else {
1970 this.indicatorWidth = this.indicator.clientWidth;
1971 }
1972
1973 this.maxPosX = this.wrapperWidth - this.indicatorWidth;
1974
1975 if ( this.options.shrink == 'clip' ) {
1976 this.minBoundaryX = -this.indicatorWidth + 8;
1977 this.maxBoundaryX = this.wrapperWidth - 8;
1978 } else {
1979 this.minBoundaryX = 0;
1980 this.maxBoundaryX = this.maxPosX;
1981 }
1982
1983 this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));
1984 }
1985
1986 if ( this.options.listenY ) {
1987 this.wrapperHeight = this.wrapper.clientHeight;
1988 if ( this.options.resize ) {
1989 this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);
1990 this.indicatorStyle.height = this.indicatorHeight + 'px';
1991 } else {
1992 this.indicatorHeight = this.indicator.clientHeight;
1993 }
1994
1995 this.maxPosY = this.wrapperHeight - this.indicatorHeight;
1996
1997 if ( this.options.shrink == 'clip' ) {
1998 this.minBoundaryY = -this.indicatorHeight + 8;
1999 this.maxBoundaryY = this.wrapperHeight - 8;
2000 } else {
2001 this.minBoundaryY = 0;
2002 this.maxBoundaryY = this.maxPosY;
2003 }
2004
2005 this.maxPosY = this.wrapperHeight - this.indicatorHeight;
2006 this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));
2007 }
2008
2009 this.updatePosition();
2010 },
2011
2012 updatePosition: function () {
2013 var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,
2014 y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;
2015
2016 if ( !this.options.ignoreBoundaries ) {
2017 if ( x < this.minBoundaryX ) {
2018 if ( this.options.shrink == 'scale' ) {
2019 this.width = Math.max(this.indicatorWidth + x, 8);
2020 this.indicatorStyle.width = this.width + 'px';
2021 }
2022 x = this.minBoundaryX;
2023 } else if ( x > this.maxBoundaryX ) {
2024 if ( this.options.shrink == 'scale' ) {
2025 this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);
2026 this.indicatorStyle.width = this.width + 'px';
2027 x = this.maxPosX + this.indicatorWidth - this.width;
2028 } else {
2029 x = this.maxBoundaryX;
2030 }
2031 } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {
2032 this.width = this.indicatorWidth;
2033 this.indicatorStyle.width = this.width + 'px';
2034 }
2035
2036 if ( y < this.minBoundaryY ) {
2037 if ( this.options.shrink == 'scale' ) {
2038 this.height = Math.max(this.indicatorHeight + y * 3, 8);
2039 this.indicatorStyle.height = this.height + 'px';
2040 }
2041 y = this.minBoundaryY;
2042 } else if ( y > this.maxBoundaryY ) {
2043 if ( this.options.shrink == 'scale' ) {
2044 this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);
2045 this.indicatorStyle.height = this.height + 'px';
2046 y = this.maxPosY + this.indicatorHeight - this.height;
2047 } else {
2048 y = this.maxBoundaryY;
2049 }
2050 } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {
2051 this.height = this.indicatorHeight;
2052 this.indicatorStyle.height = this.height + 'px';
2053 }
2054 }
2055
2056 this.x = x;
2057 this.y = y;
2058
2059 if ( this.scroller.options.useTransform ) {
2060 this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;
2061 } else {
2062 this.indicatorStyle.left = x + 'px';
2063 this.indicatorStyle.top = y + 'px';
2064 }
2065 },
2066
2067 _pos: function (x, y) {
2068 if ( x < 0 ) {
2069 x = 0;
2070 } else if ( x > this.maxPosX ) {
2071 x = this.maxPosX;
2072 }
2073
2074 if ( y < 0 ) {
2075 y = 0;
2076 } else if ( y > this.maxPosY ) {
2077 y = this.maxPosY;
2078 }
2079
2080 x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;
2081 y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;
2082
2083 this.scroller.scrollTo(x, y);
2084 },
2085
2086 fade: function (val, hold) {
2087 if ( hold && !this.visible ) {
2088 return;
2089 }
2090
2091 clearTimeout(this.fadeTimeout);
2092 this.fadeTimeout = null;
2093
2094 var time = val ? 250 : 500,
2095 delay = val ? 0 : 300;
2096
2097 val = val ? '1' : '0';
2098
2099 this.wrapperStyle[utils.style.transitionDuration] = time + 'ms';
2100
2101 this.fadeTimeout = setTimeout((function (val) {
2102 this.wrapperStyle.opacity = val;
2103 this.visible = +val;
2104 }).bind(this, val), delay);
2105 }
2106 };
2107
2108 IScroll.utils = utils;
2109
2110 if ( typeof module != 'undefined' && module.exports ) {
2111 module.exports = IScroll;
2112 } else if ( typeof define == 'function' && define.amd ) {
2113 define( function () { return IScroll; } );
2114 } else {
2115 window.IScroll = IScroll;
2116 }
2117
2118 })(window, document, Math);
1 /*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */
2 (function (window, document, Math) {
3 var rAF = window.requestAnimationFrame ||
4 window.webkitRequestAnimationFrame ||
5 window.mozRequestAnimationFrame ||
6 window.oRequestAnimationFrame ||
7 window.msRequestAnimationFrame ||
8 function (callback) { window.setTimeout(callback, 1000 / 60); };
9
10 var utils = (function () {
11 var me = {};
12
13 var _elementStyle = document.createElement('div').style;
14 var _vendor = (function () {
15 var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],
16 transform,
17 i = 0,
18 l = vendors.length;
19
20 for ( ; i < l; i++ ) {
21 transform = vendors[i] + 'ransform';
22 if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);
23 }
24
25 return false;
26 })();
27
28 function _prefixStyle (style) {
29 if ( _vendor === false ) return false;
30 if ( _vendor === '' ) return style;
31 return _vendor + style.charAt(0).toUpperCase() + style.substr(1);
32 }
33
34 me.getTime = Date.now || function getTime () { return new Date().getTime(); };
35
36 me.extend = function (target, obj) {
37 for ( var i in obj ) {
38 target[i] = obj[i];
39 }
40 };
41
42 me.addEvent = function (el, type, fn, capture) {
43 el.addEventListener(type, fn, !!capture);
44 };
45
46 me.removeEvent = function (el, type, fn, capture) {
47 el.removeEventListener(type, fn, !!capture);
48 };
49
50 me.prefixPointerEvent = function (pointerEvent) {
51 return window.MSPointerEvent ?
52 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):
53 pointerEvent;
54 };
55
56 me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {
57 var distance = current - start,
58 speed = Math.abs(distance) / time,
59 destination,
60 duration;
61
62 deceleration = deceleration === undefined ? 0.0006 : deceleration;
63
64 destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );
65 duration = speed / deceleration;
66
67 if ( destination < lowerMargin ) {
68 destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;
69 distance = Math.abs(destination - current);
70 duration = distance / speed;
71 } else if ( destination > 0 ) {
72 destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;
73 distance = Math.abs(current) + destination;
74 duration = distance / speed;
75 }
76
77 return {
78 destination: Math.round(destination),
79 duration: duration
80 };
81 };
82
83 var _transform = _prefixStyle('transform');
84
85 me.extend(me, {
86 hasTransform: _transform !== false,
87 hasPerspective: _prefixStyle('perspective') in _elementStyle,
88 hasTouch: 'ontouchstart' in window,
89 hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed
90 hasTransition: _prefixStyle('transition') in _elementStyle
91 });
92
93 /*
94 This should find all Android browsers lower than build 535.19 (both stock browser and webview)
95 - galaxy S2 is ok
96 - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`
97 - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
98 - galaxy S3 is badAndroid (stock brower, webview)
99 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
100 - galaxy S4 is badAndroid (stock brower, webview)
101 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
102 - galaxy S5 is OK
103 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
104 - galaxy S6 is OK
105 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
106 */
107 me.isBadAndroid = (function() {
108 var appVersion = window.navigator.appVersion;
109 // Android browser is not a chrome browser.
110 if (/Android/.test(appVersion) && !(/Chrome\/\d/.test(appVersion))) {
111 var safariVersion = appVersion.match(/Safari\/(\d+.\d)/);
112 if(safariVersion && typeof safariVersion === "object" && safariVersion.length >= 2) {
113 return parseFloat(safariVersion[1]) < 535.19;
114 } else {
115 return true;
116 }
117 } else {
118 return false;
119 }
120 })();
121
122 me.extend(me.style = {}, {
123 transform: _transform,
124 transitionTimingFunction: _prefixStyle('transitionTimingFunction'),
125 transitionDuration: _prefixStyle('transitionDuration'),
126 transitionDelay: _prefixStyle('transitionDelay'),
127 transformOrigin: _prefixStyle('transformOrigin')
128 });
129
130 me.hasClass = function (e, c) {
131 var re = new RegExp("(^|\\s)" + c + "(\\s|$)");
132 return re.test(e.className);
133 };
134
135 me.addClass = function (e, c) {
136 if ( me.hasClass(e, c) ) {
137 return;
138 }
139
140 var newclass = e.className.split(' ');
141 newclass.push(c);
142 e.className = newclass.join(' ');
143 };
144
145 me.removeClass = function (e, c) {
146 if ( !me.hasClass(e, c) ) {
147 return;
148 }
149
150 var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g');
151 e.className = e.className.replace(re, ' ');
152 };
153
154 me.offset = function (el) {
155 var left = -el.offsetLeft,
156 top = -el.offsetTop;
157
158 // jshint -W084
159 while (el = el.offsetParent) {
160 left -= el.offsetLeft;
161 top -= el.offsetTop;
162 }
163 // jshint +W084
164
165 return {
166 left: left,
167 top: top
168 };
169 };
170
171 me.preventDefaultException = function (el, exceptions) {
172 for ( var i in exceptions ) {
173 if ( exceptions[i].test(el[i]) ) {
174 return true;
175 }
176 }
177
178 return false;
179 };
180
181 me.extend(me.eventType = {}, {
182 touchstart: 1,
183 touchmove: 1,
184 touchend: 1,
185
186 mousedown: 2,
187 mousemove: 2,
188 mouseup: 2,
189
190 pointerdown: 3,
191 pointermove: 3,
192 pointerup: 3,
193
194 MSPointerDown: 3,
195 MSPointerMove: 3,
196 MSPointerUp: 3
197 });
198
199 me.extend(me.ease = {}, {
200 quadratic: {
201 style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
202 fn: function (k) {
203 return k * ( 2 - k );
204 }
205 },
206 circular: {
207 style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1)
208 fn: function (k) {
209 return Math.sqrt( 1 - ( --k * k ) );
210 }
211 },
212 back: {
213 style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
214 fn: function (k) {
215 var b = 4;
216 return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;
217 }
218 },
219 bounce: {
220 style: '',
221 fn: function (k) {
222 if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {
223 return 7.5625 * k * k;
224 } else if ( k < ( 2 / 2.75 ) ) {
225 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
226 } else if ( k < ( 2.5 / 2.75 ) ) {
227 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
228 } else {
229 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
230 }
231 }
232 },
233 elastic: {
234 style: '',
235 fn: function (k) {
236 var f = 0.22,
237 e = 0.4;
238
239 if ( k === 0 ) { return 0; }
240 if ( k == 1 ) { return 1; }
241
242 return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );
243 }
244 }
245 });
246
247 me.tap = function (e, eventName) {
248 var ev = document.createEvent('Event');
249 ev.initEvent(eventName, true, true);
250 ev.pageX = e.pageX;
251 ev.pageY = e.pageY;
252 e.target.dispatchEvent(ev);
253 };
254
255 me.click = function (e) {
256 var target = e.target,
257 ev;
258
259 if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {
260 ev = document.createEvent('MouseEvents');
261 ev.initMouseEvent('click', true, true, e.view, 1,
262 target.screenX, target.screenY, target.clientX, target.clientY,
263 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
264 0, null);
265
266 ev._constructed = true;
267 target.dispatchEvent(ev);
268 }
269 };
270
271 return me;
272 })();
273 function IScroll (el, options) {
274 this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;
275 this.scroller = this.wrapper.children[0];
276 this.scrollerStyle = this.scroller.style; // cache style for better performance
277
278 this.options = {
279
280 zoomMin: 1,
281 zoomMax: 4, startZoom: 1,
282
283 resizeScrollbars: true,
284
285 mouseWheelSpeed: 20,
286
287 snapThreshold: 0.334,
288
289 // INSERT POINT: OPTIONS
290 disablePointer : !utils.hasPointer,
291 disableTouch : utils.hasPointer || !utils.hasTouch,
292 disableMouse : utils.hasPointer || utils.hasTouch,
293 startX: 0,
294 startY: 0,
295 scrollY: true,
296 directionLockThreshold: 5,
297 momentum: true,
298
299 bounce: true,
300 bounceTime: 600,
301 bounceEasing: '',
302
303 preventDefault: true,
304 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },
305
306 HWCompositing: true,
307 useTransition: true,
308 useTransform: true,
309 bindToWrapper: typeof window.onmousedown === "undefined"
310 };
311
312 for ( var i in options ) {
313 this.options[i] = options[i];
314 }
315
316 // Normalize options
317 this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';
318
319 this.options.useTransition = utils.hasTransition && this.options.useTransition;
320 this.options.useTransform = utils.hasTransform && this.options.useTransform;
321
322 this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;
323 this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;
324
325 // If you want eventPassthrough I have to lock one of the axes
326 this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;
327 this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;
328
329 // With eventPassthrough we also need lockDirection mechanism
330 this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;
331 this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;
332
333 this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;
334
335 this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;
336
337 if ( this.options.tap === true ) {
338 this.options.tap = 'tap';
339 }
340
341 if ( this.options.shrinkScrollbars == 'scale' ) {
342 this.options.useTransition = false;
343 }
344
345 this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;
346
347 // INSERT POINT: NORMALIZATION
348
349 // Some defaults
350 this.x = 0;
351 this.y = 0;
352 this.directionX = 0;
353 this.directionY = 0;
354 this._events = {};
355
356 this.scale = Math.min(Math.max(this.options.startZoom, this.options.zoomMin), this.options.zoomMax);
357
358 // INSERT POINT: DEFAULTS
359
360 this._init();
361 this.refresh();
362
363 this.scrollTo(this.options.startX, this.options.startY);
364 this.enable();
365 }
366
367 IScroll.prototype = {
368 version: '5.2.0',
369
370 _init: function () {
371 this._initEvents();
372
373 if ( this.options.zoom ) {
374 this._initZoom();
375 }
376
377 if ( this.options.scrollbars || this.options.indicators ) {
378 this._initIndicators();
379 }
380
381 if ( this.options.mouseWheel ) {
382 this._initWheel();
383 }
384
385 if ( this.options.snap ) {
386 this._initSnap();
387 }
388
389 if ( this.options.keyBindings ) {
390 this._initKeys();
391 }
392
393 // INSERT POINT: _init
394
395 },
396
397 destroy: function () {
398 this._initEvents(true);
399 clearTimeout(this.resizeTimeout);
400 this.resizeTimeout = null;
401 this._execEvent('destroy');
402 },
403
404 _transitionEnd: function (e) {
405 if ( e.target != this.scroller || !this.isInTransition ) {
406 return;
407 }
408
409 this._transitionTime();
410 if ( !this.resetPosition(this.options.bounceTime) ) {
411 this.isInTransition = false;
412 this._execEvent('scrollEnd');
413 }
414 },
415
416 _start: function (e) {
417 // React to left mouse button only
418 if ( utils.eventType[e.type] != 1 ) {
419 // for button property
420 // http://unixpapa.com/js/mouse.html
421 var button;
422 if (!e.which) {
423 /* IE case */
424 button = (e.button < 2) ? 0 :
425 ((e.button == 4) ? 1 : 2);
426 } else {
427 /* All others */
428 button = e.button;
429 }
430 if ( button !== 0 ) {
431 return;
432 }
433 }
434
435 if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {
436 return;
437 }
438
439 if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
440 e.preventDefault();
441 }
442
443 var point = e.touches ? e.touches[0] : e,
444 pos;
445
446 this.initiated = utils.eventType[e.type];
447 this.moved = false;
448 this.distX = 0;
449 this.distY = 0;
450 this.directionX = 0;
451 this.directionY = 0;
452 this.directionLocked = 0;
453
454 this.startTime = utils.getTime();
455
456 if ( this.options.useTransition && this.isInTransition ) {
457 this._transitionTime();
458 this.isInTransition = false;
459 pos = this.getComputedPosition();
460 this._translate(Math.round(pos.x), Math.round(pos.y));
461 this._execEvent('scrollEnd');
462 } else if ( !this.options.useTransition && this.isAnimating ) {
463 this.isAnimating = false;
464 this._execEvent('scrollEnd');
465 }
466
467 this.startX = this.x;
468 this.startY = this.y;
469 this.absStartX = this.x;
470 this.absStartY = this.y;
471 this.pointX = point.pageX;
472 this.pointY = point.pageY;
473
474 this._execEvent('beforeScrollStart');
475 },
476
477 _move: function (e) {
478 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
479 return;
480 }
481
482 if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!
483 e.preventDefault();
484 }
485
486 var point = e.touches ? e.touches[0] : e,
487 deltaX = point.pageX - this.pointX,
488 deltaY = point.pageY - this.pointY,
489 timestamp = utils.getTime(),
490 newX, newY,
491 absDistX, absDistY;
492
493 this.pointX = point.pageX;
494 this.pointY = point.pageY;
495
496 this.distX += deltaX;
497 this.distY += deltaY;
498 absDistX = Math.abs(this.distX);
499 absDistY = Math.abs(this.distY);
500
501 // We need to move at least 10 pixels for the scrolling to initiate
502 if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {
503 return;
504 }
505
506 // If you are scrolling in one direction lock the other
507 if ( !this.directionLocked && !this.options.freeScroll ) {
508 if ( absDistX > absDistY + this.options.directionLockThreshold ) {
509 this.directionLocked = 'h'; // lock horizontally
510 } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {
511 this.directionLocked = 'v'; // lock vertically
512 } else {
513 this.directionLocked = 'n'; // no lock
514 }
515 }
516
517 if ( this.directionLocked == 'h' ) {
518 if ( this.options.eventPassthrough == 'vertical' ) {
519 e.preventDefault();
520 } else if ( this.options.eventPassthrough == 'horizontal' ) {
521 this.initiated = false;
522 return;
523 }
524
525 deltaY = 0;
526 } else if ( this.directionLocked == 'v' ) {
527 if ( this.options.eventPassthrough == 'horizontal' ) {
528 e.preventDefault();
529 } else if ( this.options.eventPassthrough == 'vertical' ) {
530 this.initiated = false;
531 return;
532 }
533
534 deltaX = 0;
535 }
536
537 deltaX = this.hasHorizontalScroll ? deltaX : 0;
538 deltaY = this.hasVerticalScroll ? deltaY : 0;
539
540 newX = this.x + deltaX;
541 newY = this.y + deltaY;
542
543 // Slow down if outside of the boundaries
544 if ( newX > 0 || newX < this.maxScrollX ) {
545 newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;
546 }
547 if ( newY > 0 || newY < this.maxScrollY ) {
548 newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;
549 }
550
551 this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
552 this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
553
554 if ( !this.moved ) {
555 this._execEvent('scrollStart');
556 }
557
558 this.moved = true;
559
560 this._translate(newX, newY);
561
562 /* REPLACE START: _move */
563
564 if ( timestamp - this.startTime > 300 ) {
565 this.startTime = timestamp;
566 this.startX = this.x;
567 this.startY = this.y;
568 }
569
570 /* REPLACE END: _move */
571
572 },
573
574 _end: function (e) {
575 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
576 return;
577 }
578
579 if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
580 e.preventDefault();
581 }
582
583 var point = e.changedTouches ? e.changedTouches[0] : e,
584 momentumX,
585 momentumY,
586 duration = utils.getTime() - this.startTime,
587 newX = Math.round(this.x),
588 newY = Math.round(this.y),
589 distanceX = Math.abs(newX - this.startX),
590 distanceY = Math.abs(newY - this.startY),
591 time = 0,
592 easing = '';
593
594 this.isInTransition = 0;
595 this.initiated = 0;
596 this.endTime = utils.getTime();
597
598 // reset if we are outside of the boundaries
599 if ( this.resetPosition(this.options.bounceTime) ) {
600 return;
601 }
602
603 this.scrollTo(newX, newY); // ensures that the last position is rounded
604
605 // we scrolled less than 10 pixels
606 if ( !this.moved ) {
607 if ( this.options.tap ) {
608 utils.tap(e, this.options.tap);
609 }
610
611 if ( this.options.click ) {
612 utils.click(e);
613 }
614
615 this._execEvent('scrollCancel');
616 return;
617 }
618
619 if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {
620 this._execEvent('flick');
621 return;
622 }
623
624 // start momentum animation if needed
625 if ( this.options.momentum && duration < 300 ) {
626 momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };
627 momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };
628 newX = momentumX.destination;
629 newY = momentumY.destination;
630 time = Math.max(momentumX.duration, momentumY.duration);
631 this.isInTransition = 1;
632 }
633
634
635 if ( this.options.snap ) {
636 var snap = this._nearestSnap(newX, newY);
637 this.currentPage = snap;
638 time = this.options.snapSpeed || Math.max(
639 Math.max(
640 Math.min(Math.abs(newX - snap.x), 1000),
641 Math.min(Math.abs(newY - snap.y), 1000)
642 ), 300);
643 newX = snap.x;
644 newY = snap.y;
645
646 this.directionX = 0;
647 this.directionY = 0;
648 easing = this.options.bounceEasing;
649 }
650
651 // INSERT POINT: _end
652
653 if ( newX != this.x || newY != this.y ) {
654 // change easing function when scroller goes out of the boundaries
655 if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {
656 easing = utils.ease.quadratic;
657 }
658
659 this.scrollTo(newX, newY, time, easing);
660 return;
661 }
662
663 this._execEvent('scrollEnd');
664 },
665
666 _resize: function () {
667 var that = this;
668
669 clearTimeout(this.resizeTimeout);
670
671 this.resizeTimeout = setTimeout(function () {
672 that.refresh();
673 }, this.options.resizePolling);
674 },
675
676 resetPosition: function (time) {
677 var x = this.x,
678 y = this.y;
679
680 time = time || 0;
681
682 if ( !this.hasHorizontalScroll || this.x > 0 ) {
683 x = 0;
684 } else if ( this.x < this.maxScrollX ) {
685 x = this.maxScrollX;
686 }
687
688 if ( !this.hasVerticalScroll || this.y > 0 ) {
689 y = 0;
690 } else if ( this.y < this.maxScrollY ) {
691 y = this.maxScrollY;
692 }
693
694 if ( x == this.x && y == this.y ) {
695 return false;
696 }
697
698 this.scrollTo(x, y, time, this.options.bounceEasing);
699
700 return true;
701 },
702
703 disable: function () {
704 this.enabled = false;
705 },
706
707 enable: function () {
708 this.enabled = true;
709 },
710
711 refresh: function () {
712 var rf = this.wrapper.offsetHeight; // Force reflow
713
714 this.wrapperWidth = this.wrapper.clientWidth;
715 this.wrapperHeight = this.wrapper.clientHeight;
716
717 /* REPLACE START: refresh */
718 this.scrollerWidth = Math.round(this.scroller.offsetWidth * this.scale);
719 this.scrollerHeight = Math.round(this.scroller.offsetHeight * this.scale);
720
721 this.maxScrollX = this.wrapperWidth - this.scrollerWidth;
722 this.maxScrollY = this.wrapperHeight - this.scrollerHeight;
723 /* REPLACE END: refresh */
724
725 this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;
726 this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;
727
728 if ( !this.hasHorizontalScroll ) {
729 this.maxScrollX = 0;
730 this.scrollerWidth = this.wrapperWidth;
731 }
732
733 if ( !this.hasVerticalScroll ) {
734 this.maxScrollY = 0;
735 this.scrollerHeight = this.wrapperHeight;
736 }
737
738 this.endTime = 0;
739 this.directionX = 0;
740 this.directionY = 0;
741
742 this.wrapperOffset = utils.offset(this.wrapper);
743
744 this._execEvent('refresh');
745
746 this.resetPosition();
747
748 // INSERT POINT: _refresh
749
750 },
751
752 on: function (type, fn) {
753 if ( !this._events[type] ) {
754 this._events[type] = [];
755 }
756
757 this._events[type].push(fn);
758 },
759
760 off: function (type, fn) {
761 if ( !this._events[type] ) {
762 return;
763 }
764
765 var index = this._events[type].indexOf(fn);
766
767 if ( index > -1 ) {
768 this._events[type].splice(index, 1);
769 }
770 },
771
772 _execEvent: function (type) {
773 if ( !this._events[type] ) {
774 return;
775 }
776
777 var i = 0,
778 l = this._events[type].length;
779
780 if ( !l ) {
781 return;
782 }
783
784 for ( ; i < l; i++ ) {
785 this._events[type][i].apply(this, [].slice.call(arguments, 1));
786 }
787 },
788
789 scrollBy: function (x, y, time, easing) {
790 x = this.x + x;
791 y = this.y + y;
792 time = time || 0;
793
794 this.scrollTo(x, y, time, easing);
795 },
796
797 scrollTo: function (x, y, time, easing) {
798 easing = easing || utils.ease.circular;
799
800 this.isInTransition = this.options.useTransition && time > 0;
801 var transitionType = this.options.useTransition && easing.style;
802 if ( !time || transitionType ) {
803 if(transitionType) {
804 this._transitionTimingFunction(easing.style);
805 this._transitionTime(time);
806 }
807 this._translate(x, y);
808 } else {
809 this._animate(x, y, time, easing.fn);
810 }
811 },
812
813 scrollToElement: function (el, time, offsetX, offsetY, easing) {
814 el = el.nodeType ? el : this.scroller.querySelector(el);
815
816 if ( !el ) {
817 return;
818 }
819
820 var pos = utils.offset(el);
821
822 pos.left -= this.wrapperOffset.left;
823 pos.top -= this.wrapperOffset.top;
824
825 // if offsetX/Y are true we center the element to the screen
826 if ( offsetX === true ) {
827 offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);
828 }
829 if ( offsetY === true ) {
830 offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);
831 }
832
833 pos.left -= offsetX || 0;
834 pos.top -= offsetY || 0;
835
836 pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;
837 pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;
838
839 time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;
840
841 this.scrollTo(pos.left, pos.top, time, easing);
842 },
843
844 _transitionTime: function (time) {
845 time = time || 0;
846
847 var durationProp = utils.style.transitionDuration;
848 this.scrollerStyle[durationProp] = time + 'ms';
849
850 if ( !time && utils.isBadAndroid ) {
851 this.scrollerStyle[durationProp] = '0.0001ms';
852 // remove 0.0001ms
853 var self = this;
854 rAF(function() {
855 if(self.scrollerStyle[durationProp] === '0.0001ms') {
856 self.scrollerStyle[durationProp] = '0s';
857 }
858 });
859 }
860
861
862 if ( this.indicators ) {
863 for ( var i = this.indicators.length; i--; ) {
864 this.indicators[i].transitionTime(time);
865 }
866 }
867
868
869 // INSERT POINT: _transitionTime
870
871 },
872
873 _transitionTimingFunction: function (easing) {
874 this.scrollerStyle[utils.style.transitionTimingFunction] = easing;
875
876
877 if ( this.indicators ) {
878 for ( var i = this.indicators.length; i--; ) {
879 this.indicators[i].transitionTimingFunction(easing);
880 }
881 }
882
883
884 // INSERT POINT: _transitionTimingFunction
885
886 },
887
888 _translate: function (x, y) {
889 if ( this.options.useTransform ) {
890
891 /* REPLACE START: _translate */ this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ') ' + this.translateZ;/* REPLACE END: _translate */
892
893 } else {
894 x = Math.round(x);
895 y = Math.round(y);
896 this.scrollerStyle.left = x + 'px';
897 this.scrollerStyle.top = y + 'px';
898 }
899
900 this.x = x;
901 this.y = y;
902
903
904 if ( this.indicators ) {
905 for ( var i = this.indicators.length; i--; ) {
906 this.indicators[i].updatePosition();
907 }
908 }
909
910
911 // INSERT POINT: _translate
912
913 },
914
915 _initEvents: function (remove) {
916 var eventType = remove ? utils.removeEvent : utils.addEvent,
917 target = this.options.bindToWrapper ? this.wrapper : window;
918
919 eventType(window, 'orientationchange', this);
920 eventType(window, 'resize', this);
921
922 if ( this.options.click ) {
923 eventType(this.wrapper, 'click', this, true);
924 }
925
926 if ( !this.options.disableMouse ) {
927 eventType(this.wrapper, 'mousedown', this);
928 eventType(target, 'mousemove', this);
929 eventType(target, 'mousecancel', this);
930 eventType(target, 'mouseup', this);
931 }
932
933 if ( utils.hasPointer && !this.options.disablePointer ) {
934 eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);
935 eventType(target, utils.prefixPointerEvent('pointermove'), this);
936 eventType(target, utils.prefixPointerEvent('pointercancel'), this);
937 eventType(target, utils.prefixPointerEvent('pointerup'), this);
938 }
939
940 if ( utils.hasTouch && !this.options.disableTouch ) {
941 eventType(this.wrapper, 'touchstart', this);
942 eventType(target, 'touchmove', this);
943 eventType(target, 'touchcancel', this);
944 eventType(target, 'touchend', this);
945 }
946
947 eventType(this.scroller, 'transitionend', this);
948 eventType(this.scroller, 'webkitTransitionEnd', this);
949 eventType(this.scroller, 'oTransitionEnd', this);
950 eventType(this.scroller, 'MSTransitionEnd', this);
951 },
952
953 getComputedPosition: function () {
954 var matrix = window.getComputedStyle(this.scroller, null),
955 x, y;
956
957 if ( this.options.useTransform ) {
958 matrix = matrix[utils.style.transform].split(')')[0].split(', ');
959 x = +(matrix[12] || matrix[4]);
960 y = +(matrix[13] || matrix[5]);
961 } else {
962 x = +matrix.left.replace(/[^-\d.]/g, '');
963 y = +matrix.top.replace(/[^-\d.]/g, '');
964 }
965
966 return { x: x, y: y };
967 },
968 _initIndicators: function () {
969 var interactive = this.options.interactiveScrollbars,
970 customStyle = typeof this.options.scrollbars != 'string',
971 indicators = [],
972 indicator;
973
974 var that = this;
975
976 this.indicators = [];
977
978 if ( this.options.scrollbars ) {
979 // Vertical scrollbar
980 if ( this.options.scrollY ) {
981 indicator = {
982 el: createDefaultScrollbar('v', interactive, this.options.scrollbars),
983 interactive: interactive,
984 defaultScrollbars: true,
985 customStyle: customStyle,
986 resize: this.options.resizeScrollbars,
987 shrink: this.options.shrinkScrollbars,
988 fade: this.options.fadeScrollbars,
989 listenX: false
990 };
991
992 this.wrapper.appendChild(indicator.el);
993 indicators.push(indicator);
994 }
995
996 // Horizontal scrollbar
997 if ( this.options.scrollX ) {
998 indicator = {
999 el: createDefaultScrollbar('h', interactive, this.options.scrollbars),
1000 interactive: interactive,
1001 defaultScrollbars: true,
1002 customStyle: customStyle,
1003 resize: this.options.resizeScrollbars,
1004 shrink: this.options.shrinkScrollbars,
1005 fade: this.options.fadeScrollbars,
1006 listenY: false
1007 };
1008
1009 this.wrapper.appendChild(indicator.el);
1010 indicators.push(indicator);
1011 }
1012 }
1013
1014 if ( this.options.indicators ) {
1015 // TODO: check concat compatibility
1016 indicators = indicators.concat(this.options.indicators);
1017 }
1018
1019 for ( var i = indicators.length; i--; ) {
1020 this.indicators.push( new Indicator(this, indicators[i]) );
1021 }
1022
1023 // TODO: check if we can use array.map (wide compatibility and performance issues)
1024 function _indicatorsMap (fn) {
1025 if (that.indicators) {
1026 for ( var i = that.indicators.length; i--; ) {
1027 fn.call(that.indicators[i]);
1028 }
1029 }
1030 }
1031
1032 if ( this.options.fadeScrollbars ) {
1033 this.on('scrollEnd', function () {
1034 _indicatorsMap(function () {
1035 this.fade();
1036 });
1037 });
1038
1039 this.on('scrollCancel', function () {
1040 _indicatorsMap(function () {
1041 this.fade();
1042 });
1043 });
1044
1045 this.on('scrollStart', function () {
1046 _indicatorsMap(function () {
1047 this.fade(1);
1048 });
1049 });
1050
1051 this.on('beforeScrollStart', function () {
1052 _indicatorsMap(function () {
1053 this.fade(1, true);
1054 });
1055 });
1056 }
1057
1058
1059 this.on('refresh', function () {
1060 _indicatorsMap(function () {
1061 this.refresh();
1062 });
1063 });
1064
1065 this.on('destroy', function () {
1066 _indicatorsMap(function () {
1067 this.destroy();
1068 });
1069
1070 delete this.indicators;
1071 });
1072 },
1073
1074 _initZoom: function () {
1075 this.scrollerStyle[utils.style.transformOrigin] = '0 0';
1076 },
1077
1078 _zoomStart: function (e) {
1079 var c1 = Math.abs( e.touches[0].pageX - e.touches[1].pageX ),
1080 c2 = Math.abs( e.touches[0].pageY - e.touches[1].pageY );
1081
1082 this.touchesDistanceStart = Math.sqrt(c1 * c1 + c2 * c2);
1083 this.startScale = this.scale;
1084
1085 this.originX = Math.abs(e.touches[0].pageX + e.touches[1].pageX) / 2 + this.wrapperOffset.left - this.x;
1086 this.originY = Math.abs(e.touches[0].pageY + e.touches[1].pageY) / 2 + this.wrapperOffset.top - this.y;
1087
1088 this._execEvent('zoomStart');
1089 },
1090
1091 _zoom: function (e) {
1092 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
1093 return;
1094 }
1095
1096 if ( this.options.preventDefault ) {
1097 e.preventDefault();
1098 }
1099
1100 var c1 = Math.abs( e.touches[0].pageX - e.touches[1].pageX ),
1101 c2 = Math.abs( e.touches[0].pageY - e.touches[1].pageY ),
1102 distance = Math.sqrt( c1 * c1 + c2 * c2 ),
1103 scale = 1 / this.touchesDistanceStart * distance * this.startScale,
1104 lastScale,
1105 x, y;
1106
1107 this.scaled = true;
1108
1109 if ( scale < this.options.zoomMin ) {
1110 scale = 0.5 * this.options.zoomMin * Math.pow(2.0, scale / this.options.zoomMin);
1111 } else if ( scale > this.options.zoomMax ) {
1112 scale = 2.0 * this.options.zoomMax * Math.pow(0.5, this.options.zoomMax / scale);
1113 }
1114
1115 lastScale = scale / this.startScale;
1116 x = this.originX - this.originX * lastScale + this.startX;
1117 y = this.originY - this.originY * lastScale + this.startY;
1118
1119 this.scale = scale;
1120
1121 this.scrollTo(x, y, 0);
1122 },
1123
1124 _zoomEnd: function (e) {
1125 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
1126 return;
1127 }
1128
1129 if ( this.options.preventDefault ) {
1130 e.preventDefault();
1131 }
1132
1133 var newX, newY,
1134 lastScale;
1135
1136 this.isInTransition = 0;
1137 this.initiated = 0;
1138
1139 if ( this.scale > this.options.zoomMax ) {
1140 this.scale = this.options.zoomMax;
1141 } else if ( this.scale < this.options.zoomMin ) {
1142 this.scale = this.options.zoomMin;
1143 }
1144
1145 // Update boundaries
1146 this.refresh();
1147
1148 lastScale = this.scale / this.startScale;
1149
1150 newX = this.originX - this.originX * lastScale + this.startX;
1151 newY = this.originY - this.originY * lastScale + this.startY;
1152
1153 if ( newX > 0 ) {
1154 newX = 0;
1155 } else if ( newX < this.maxScrollX ) {
1156 newX = this.maxScrollX;
1157 }
1158
1159 if ( newY > 0 ) {
1160 newY = 0;
1161 } else if ( newY < this.maxScrollY ) {
1162 newY = this.maxScrollY;
1163 }
1164
1165 if ( this.x != newX || this.y != newY ) {
1166 this.scrollTo(newX, newY, this.options.bounceTime);
1167 }
1168
1169 this.scaled = false;
1170
1171 this._execEvent('zoomEnd');
1172 },
1173
1174 zoom: function (scale, x, y, time) {
1175 if ( scale < this.options.zoomMin ) {
1176 scale = this.options.zoomMin;
1177 } else if ( scale > this.options.zoomMax ) {
1178 scale = this.options.zoomMax;
1179 }
1180
1181 if ( scale == this.scale ) {
1182 return;
1183 }
1184
1185 var relScale = scale / this.scale;
1186
1187 x = x === undefined ? this.wrapperWidth / 2 : x;
1188 y = y === undefined ? this.wrapperHeight / 2 : y;
1189 time = time === undefined ? 300 : time;
1190
1191 x = x + this.wrapperOffset.left - this.x;
1192 y = y + this.wrapperOffset.top - this.y;
1193
1194 x = x - x * relScale + this.x;
1195 y = y - y * relScale + this.y;
1196
1197 this.scale = scale;
1198
1199 this.refresh(); // update boundaries
1200
1201 if ( x > 0 ) {
1202 x = 0;
1203 } else if ( x < this.maxScrollX ) {
1204 x = this.maxScrollX;
1205 }
1206
1207 if ( y > 0 ) {
1208 y = 0;
1209 } else if ( y < this.maxScrollY ) {
1210 y = this.maxScrollY;
1211 }
1212
1213 this.scrollTo(x, y, time);
1214 },
1215
1216 _wheelZoom: function (e) {
1217 var wheelDeltaY,
1218 deltaScale,
1219 that = this;
1220
1221 // Execute the zoomEnd event after 400ms the wheel stopped scrolling
1222 clearTimeout(this.wheelTimeout);
1223 this.wheelTimeout = setTimeout(function () {
1224 that._execEvent('zoomEnd');
1225 }, 400);
1226
1227 if ( 'deltaX' in e ) {
1228 wheelDeltaY = -e.deltaY / Math.abs(e.deltaY);
1229 } else if ('wheelDeltaX' in e) {
1230 wheelDeltaY = e.wheelDeltaY / Math.abs(e.wheelDeltaY);
1231 } else if('wheelDelta' in e) {
1232 wheelDeltaY = e.wheelDelta / Math.abs(e.wheelDelta);
1233 } else if ('detail' in e) {
1234 wheelDeltaY = -e.detail / Math.abs(e.wheelDelta);
1235 } else {
1236 return;
1237 }
1238
1239 deltaScale = this.scale + wheelDeltaY / 5;
1240
1241 this.zoom(deltaScale, e.pageX, e.pageY, 0);
1242 },
1243
1244 _initWheel: function () {
1245 utils.addEvent(this.wrapper, 'wheel', this);
1246 utils.addEvent(this.wrapper, 'mousewheel', this);
1247 utils.addEvent(this.wrapper, 'DOMMouseScroll', this);
1248
1249 this.on('destroy', function () {
1250 clearTimeout(this.wheelTimeout);
1251 this.wheelTimeout = null;
1252 utils.removeEvent(this.wrapper, 'wheel', this);
1253 utils.removeEvent(this.wrapper, 'mousewheel', this);
1254 utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);
1255 });
1256 },
1257
1258 _wheel: function (e) {
1259 if ( !this.enabled ) {
1260 return;
1261 }
1262
1263 e.preventDefault();
1264
1265 var wheelDeltaX, wheelDeltaY,
1266 newX, newY,
1267 that = this;
1268
1269 if ( this.wheelTimeout === undefined ) {
1270 that._execEvent('scrollStart');
1271 }
1272
1273 // Execute the scrollEnd event after 400ms the wheel stopped scrolling
1274 clearTimeout(this.wheelTimeout);
1275 this.wheelTimeout = setTimeout(function () {
1276 if(!that.options.snap) {
1277 that._execEvent('scrollEnd');
1278 }
1279 that.wheelTimeout = undefined;
1280 }, 400);
1281
1282 if ( 'deltaX' in e ) {
1283 if (e.deltaMode === 1) {
1284 wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;
1285 wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;
1286 } else {
1287 wheelDeltaX = -e.deltaX;
1288 wheelDeltaY = -e.deltaY;
1289 }
1290 } else if ( 'wheelDeltaX' in e ) {
1291 wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;
1292 wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;
1293 } else if ( 'wheelDelta' in e ) {
1294 wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;
1295 } else if ( 'detail' in e ) {
1296 wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;
1297 } else {
1298 return;
1299 }
1300
1301 wheelDeltaX *= this.options.invertWheelDirection;
1302 wheelDeltaY *= this.options.invertWheelDirection;
1303
1304 if ( !this.hasVerticalScroll ) {
1305 wheelDeltaX = wheelDeltaY;
1306 wheelDeltaY = 0;
1307 }
1308
1309 if ( this.options.snap ) {
1310 newX = this.currentPage.pageX;
1311 newY = this.currentPage.pageY;
1312
1313 if ( wheelDeltaX > 0 ) {
1314 newX--;
1315 } else if ( wheelDeltaX < 0 ) {
1316 newX++;
1317 }
1318
1319 if ( wheelDeltaY > 0 ) {
1320 newY--;
1321 } else if ( wheelDeltaY < 0 ) {
1322 newY++;
1323 }
1324
1325 this.goToPage(newX, newY);
1326
1327 return;
1328 }
1329
1330 newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);
1331 newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);
1332
1333 this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;
1334 this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;
1335
1336 if ( newX > 0 ) {
1337 newX = 0;
1338 } else if ( newX < this.maxScrollX ) {
1339 newX = this.maxScrollX;
1340 }
1341
1342 if ( newY > 0 ) {
1343 newY = 0;
1344 } else if ( newY < this.maxScrollY ) {
1345 newY = this.maxScrollY;
1346 }
1347
1348 this.scrollTo(newX, newY, 0);
1349
1350 // INSERT POINT: _wheel
1351 },
1352
1353 _initSnap: function () {
1354 this.currentPage = {};
1355
1356 if ( typeof this.options.snap == 'string' ) {
1357 this.options.snap = this.scroller.querySelectorAll(this.options.snap);
1358 }
1359
1360 this.on('refresh', function () {
1361 var i = 0, l,
1362 m = 0, n,
1363 cx, cy,
1364 x = 0, y,
1365 stepX = this.options.snapStepX || this.wrapperWidth,
1366 stepY = this.options.snapStepY || this.wrapperHeight,
1367 el;
1368
1369 this.pages = [];
1370
1371 if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {
1372 return;
1373 }
1374
1375 if ( this.options.snap === true ) {
1376 cx = Math.round( stepX / 2 );
1377 cy = Math.round( stepY / 2 );
1378
1379 while ( x > -this.scrollerWidth ) {
1380 this.pages[i] = [];
1381 l = 0;
1382 y = 0;
1383
1384 while ( y > -this.scrollerHeight ) {
1385 this.pages[i][l] = {
1386 x: Math.max(x, this.maxScrollX),
1387 y: Math.max(y, this.maxScrollY),
1388 width: stepX,
1389 height: stepY,
1390 cx: x - cx,
1391 cy: y - cy
1392 };
1393
1394 y -= stepY;
1395 l++;
1396 }
1397
1398 x -= stepX;
1399 i++;
1400 }
1401 } else {
1402 el = this.options.snap;
1403 l = el.length;
1404 n = -1;
1405
1406 for ( ; i < l; i++ ) {
1407 if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {
1408 m = 0;
1409 n++;
1410 }
1411
1412 if ( !this.pages[m] ) {
1413 this.pages[m] = [];
1414 }
1415
1416 x = Math.max(-el[i].offsetLeft, this.maxScrollX);
1417 y = Math.max(-el[i].offsetTop, this.maxScrollY);
1418 cx = x - Math.round(el[i].offsetWidth / 2);
1419 cy = y - Math.round(el[i].offsetHeight / 2);
1420
1421 this.pages[m][n] = {
1422 x: x,
1423 y: y,
1424 width: el[i].offsetWidth,
1425 height: el[i].offsetHeight,
1426 cx: cx,
1427 cy: cy
1428 };
1429
1430 if ( x > this.maxScrollX ) {
1431 m++;
1432 }
1433 }
1434 }
1435
1436 this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);
1437
1438 // Update snap threshold if needed
1439 if ( this.options.snapThreshold % 1 === 0 ) {
1440 this.snapThresholdX = this.options.snapThreshold;
1441 this.snapThresholdY = this.options.snapThreshold;
1442 } else {
1443 this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);
1444 this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);
1445 }
1446 });
1447
1448 this.on('flick', function () {
1449 var time = this.options.snapSpeed || Math.max(
1450 Math.max(
1451 Math.min(Math.abs(this.x - this.startX), 1000),
1452 Math.min(Math.abs(this.y - this.startY), 1000)
1453 ), 300);
1454
1455 this.goToPage(
1456 this.currentPage.pageX + this.directionX,
1457 this.currentPage.pageY + this.directionY,
1458 time
1459 );
1460 });
1461 },
1462
1463 _nearestSnap: function (x, y) {
1464 if ( !this.pages.length ) {
1465 return { x: 0, y: 0, pageX: 0, pageY: 0 };
1466 }
1467
1468 var i = 0,
1469 l = this.pages.length,
1470 m = 0;
1471
1472 // Check if we exceeded the snap threshold
1473 if ( Math.abs(x - this.absStartX) < this.snapThresholdX &&
1474 Math.abs(y - this.absStartY) < this.snapThresholdY ) {
1475 return this.currentPage;
1476 }
1477
1478 if ( x > 0 ) {
1479 x = 0;
1480 } else if ( x < this.maxScrollX ) {
1481 x = this.maxScrollX;
1482 }
1483
1484 if ( y > 0 ) {
1485 y = 0;
1486 } else if ( y < this.maxScrollY ) {
1487 y = this.maxScrollY;
1488 }
1489
1490 for ( ; i < l; i++ ) {
1491 if ( x >= this.pages[i][0].cx ) {
1492 x = this.pages[i][0].x;
1493 break;
1494 }
1495 }
1496
1497 l = this.pages[i].length;
1498
1499 for ( ; m < l; m++ ) {
1500 if ( y >= this.pages[0][m].cy ) {
1501 y = this.pages[0][m].y;
1502 break;
1503 }
1504 }
1505
1506 if ( i == this.currentPage.pageX ) {
1507 i += this.directionX;
1508
1509 if ( i < 0 ) {
1510 i = 0;
1511 } else if ( i >= this.pages.length ) {
1512 i = this.pages.length - 1;
1513 }
1514
1515 x = this.pages[i][0].x;
1516 }
1517
1518 if ( m == this.currentPage.pageY ) {
1519 m += this.directionY;
1520
1521 if ( m < 0 ) {
1522 m = 0;
1523 } else if ( m >= this.pages[0].length ) {
1524 m = this.pages[0].length - 1;
1525 }
1526
1527 y = this.pages[0][m].y;
1528 }
1529
1530 return {
1531 x: x,
1532 y: y,
1533 pageX: i,
1534 pageY: m
1535 };
1536 },
1537
1538 goToPage: function (x, y, time, easing) {
1539 easing = easing || this.options.bounceEasing;
1540
1541 if ( x >= this.pages.length ) {
1542 x = this.pages.length - 1;
1543 } else if ( x < 0 ) {
1544 x = 0;
1545 }
1546
1547 if ( y >= this.pages[x].length ) {
1548 y = this.pages[x].length - 1;
1549 } else if ( y < 0 ) {
1550 y = 0;
1551 }
1552
1553 var posX = this.pages[x][y].x,
1554 posY = this.pages[x][y].y;
1555
1556 time = time === undefined ? this.options.snapSpeed || Math.max(
1557 Math.max(
1558 Math.min(Math.abs(posX - this.x), 1000),
1559 Math.min(Math.abs(posY - this.y), 1000)
1560 ), 300) : time;
1561
1562 this.currentPage = {
1563 x: posX,
1564 y: posY,
1565 pageX: x,
1566 pageY: y
1567 };
1568
1569 this.scrollTo(posX, posY, time, easing);
1570 },
1571
1572 next: function (time, easing) {
1573 var x = this.currentPage.pageX,
1574 y = this.currentPage.pageY;
1575
1576 x++;
1577
1578 if ( x >= this.pages.length && this.hasVerticalScroll ) {
1579 x = 0;
1580 y++;
1581 }
1582
1583 this.goToPage(x, y, time, easing);
1584 },
1585
1586 prev: function (time, easing) {
1587 var x = this.currentPage.pageX,
1588 y = this.currentPage.pageY;
1589
1590 x--;
1591
1592 if ( x < 0 && this.hasVerticalScroll ) {
1593 x = 0;
1594 y--;
1595 }
1596
1597 this.goToPage(x, y, time, easing);
1598 },
1599
1600 _initKeys: function (e) {
1601 // default key bindings
1602 var keys = {
1603 pageUp: 33,
1604 pageDown: 34,
1605 end: 35,
1606 home: 36,
1607 left: 37,
1608 up: 38,
1609 right: 39,
1610 down: 40
1611 };
1612 var i;
1613
1614 // if you give me characters I give you keycode
1615 if ( typeof this.options.keyBindings == 'object' ) {
1616 for ( i in this.options.keyBindings ) {
1617 if ( typeof this.options.keyBindings[i] == 'string' ) {
1618 this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);
1619 }
1620 }
1621 } else {
1622 this.options.keyBindings = {};
1623 }
1624
1625 for ( i in keys ) {
1626 this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];
1627 }
1628
1629 utils.addEvent(window, 'keydown', this);
1630
1631 this.on('destroy', function () {
1632 utils.removeEvent(window, 'keydown', this);
1633 });
1634 },
1635
1636 _key: function (e) {
1637 if ( !this.enabled ) {
1638 return;
1639 }
1640
1641 var snap = this.options.snap, // we are using this alot, better to cache it
1642 newX = snap ? this.currentPage.pageX : this.x,
1643 newY = snap ? this.currentPage.pageY : this.y,
1644 now = utils.getTime(),
1645 prevTime = this.keyTime || 0,
1646 acceleration = 0.250,
1647 pos;
1648
1649 if ( this.options.useTransition && this.isInTransition ) {
1650 pos = this.getComputedPosition();
1651
1652 this._translate(Math.round(pos.x), Math.round(pos.y));
1653 this.isInTransition = false;
1654 }
1655
1656 this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;
1657
1658 switch ( e.keyCode ) {
1659 case this.options.keyBindings.pageUp:
1660 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1661 newX += snap ? 1 : this.wrapperWidth;
1662 } else {
1663 newY += snap ? 1 : this.wrapperHeight;
1664 }
1665 break;
1666 case this.options.keyBindings.pageDown:
1667 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1668 newX -= snap ? 1 : this.wrapperWidth;
1669 } else {
1670 newY -= snap ? 1 : this.wrapperHeight;
1671 }
1672 break;
1673 case this.options.keyBindings.end:
1674 newX = snap ? this.pages.length-1 : this.maxScrollX;
1675 newY = snap ? this.pages[0].length-1 : this.maxScrollY;
1676 break;
1677 case this.options.keyBindings.home:
1678 newX = 0;
1679 newY = 0;
1680 break;
1681 case this.options.keyBindings.left:
1682 newX += snap ? -1 : 5 + this.keyAcceleration>>0;
1683 break;
1684 case this.options.keyBindings.up:
1685 newY += snap ? 1 : 5 + this.keyAcceleration>>0;
1686 break;
1687 case this.options.keyBindings.right:
1688 newX -= snap ? -1 : 5 + this.keyAcceleration>>0;
1689 break;
1690 case this.options.keyBindings.down:
1691 newY -= snap ? 1 : 5 + this.keyAcceleration>>0;
1692 break;
1693 default:
1694 return;
1695 }
1696
1697 if ( snap ) {
1698 this.goToPage(newX, newY);
1699 return;
1700 }
1701
1702 if ( newX > 0 ) {
1703 newX = 0;
1704 this.keyAcceleration = 0;
1705 } else if ( newX < this.maxScrollX ) {
1706 newX = this.maxScrollX;
1707 this.keyAcceleration = 0;
1708 }
1709
1710 if ( newY > 0 ) {
1711 newY = 0;
1712 this.keyAcceleration = 0;
1713 } else if ( newY < this.maxScrollY ) {
1714 newY = this.maxScrollY;
1715 this.keyAcceleration = 0;
1716 }
1717
1718 this.scrollTo(newX, newY, 0);
1719
1720 this.keyTime = now;
1721 },
1722
1723 _animate: function (destX, destY, duration, easingFn) {
1724 var that = this,
1725 startX = this.x,
1726 startY = this.y,
1727 startTime = utils.getTime(),
1728 destTime = startTime + duration;
1729
1730 function step () {
1731 var now = utils.getTime(),
1732 newX, newY,
1733 easing;
1734
1735 if ( now >= destTime ) {
1736 that.isAnimating = false;
1737 that._translate(destX, destY);
1738
1739 if ( !that.resetPosition(that.options.bounceTime) ) {
1740 that._execEvent('scrollEnd');
1741 }
1742
1743 return;
1744 }
1745
1746 now = ( now - startTime ) / duration;
1747 easing = easingFn(now);
1748 newX = ( destX - startX ) * easing + startX;
1749 newY = ( destY - startY ) * easing + startY;
1750 that._translate(newX, newY);
1751
1752 if ( that.isAnimating ) {
1753 rAF(step);
1754 }
1755 }
1756
1757 this.isAnimating = true;
1758 step();
1759 },
1760 handleEvent: function (e) {
1761 switch ( e.type ) {
1762 case 'touchstart':
1763 case 'pointerdown':
1764 case 'MSPointerDown':
1765 case 'mousedown':
1766 this._start(e);
1767
1768 if ( this.options.zoom && e.touches && e.touches.length > 1 ) {
1769 this._zoomStart(e);
1770 }
1771 break;
1772 case 'touchmove':
1773 case 'pointermove':
1774 case 'MSPointerMove':
1775 case 'mousemove':
1776 if ( this.options.zoom && e.touches && e.touches[1] ) {
1777 this._zoom(e);
1778 return;
1779 }
1780 this._move(e);
1781 break;
1782 case 'touchend':
1783 case 'pointerup':
1784 case 'MSPointerUp':
1785 case 'mouseup':
1786 case 'touchcancel':
1787 case 'pointercancel':
1788 case 'MSPointerCancel':
1789 case 'mousecancel':
1790 if ( this.scaled ) {
1791 this._zoomEnd(e);
1792 return;
1793 }
1794 this._end(e);
1795 break;
1796 case 'orientationchange':
1797 case 'resize':
1798 this._resize();
1799 break;
1800 case 'transitionend':
1801 case 'webkitTransitionEnd':
1802 case 'oTransitionEnd':
1803 case 'MSTransitionEnd':
1804 this._transitionEnd(e);
1805 break;
1806 case 'wheel':
1807 case 'DOMMouseScroll':
1808 case 'mousewheel':
1809 if ( this.options.wheelAction == 'zoom' ) {
1810 this._wheelZoom(e);
1811 return;
1812 }
1813 this._wheel(e);
1814 break;
1815 case 'keydown':
1816 this._key(e);
1817 break;
1818 }
1819 }
1820
1821 };
1822 function createDefaultScrollbar (direction, interactive, type) {
1823 var scrollbar = document.createElement('div'),
1824 indicator = document.createElement('div');
1825
1826 if ( type === true ) {
1827 scrollbar.style.cssText = 'position:absolute;z-index:9999';
1828 indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';
1829 }
1830
1831 indicator.className = 'iScrollIndicator';
1832
1833 if ( direction == 'h' ) {
1834 if ( type === true ) {
1835 scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';
1836 indicator.style.height = '100%';
1837 }
1838 scrollbar.className = 'iScrollHorizontalScrollbar';
1839 } else {
1840 if ( type === true ) {
1841 scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';
1842 indicator.style.width = '100%';
1843 }
1844 scrollbar.className = 'iScrollVerticalScrollbar';
1845 }
1846
1847 scrollbar.style.cssText += ';overflow:hidden';
1848
1849 if ( !interactive ) {
1850 scrollbar.style.pointerEvents = 'none';
1851 }
1852
1853 scrollbar.appendChild(indicator);
1854
1855 return scrollbar;
1856 }
1857
1858 function Indicator (scroller, options) {
1859 this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;
1860 this.wrapperStyle = this.wrapper.style;
1861 this.indicator = this.wrapper.children[0];
1862 this.indicatorStyle = this.indicator.style;
1863 this.scroller = scroller;
1864
1865 this.options = {
1866 listenX: true,
1867 listenY: true,
1868 interactive: false,
1869 resize: true,
1870 defaultScrollbars: false,
1871 shrink: false,
1872 fade: false,
1873 speedRatioX: 0,
1874 speedRatioY: 0
1875 };
1876
1877 for ( var i in options ) {
1878 this.options[i] = options[i];
1879 }
1880
1881 this.sizeRatioX = 1;
1882 this.sizeRatioY = 1;
1883 this.maxPosX = 0;
1884 this.maxPosY = 0;
1885
1886 if ( this.options.interactive ) {
1887 if ( !this.options.disableTouch ) {
1888 utils.addEvent(this.indicator, 'touchstart', this);
1889 utils.addEvent(window, 'touchend', this);
1890 }
1891 if ( !this.options.disablePointer ) {
1892 utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);
1893 utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);
1894 }
1895 if ( !this.options.disableMouse ) {
1896 utils.addEvent(this.indicator, 'mousedown', this);
1897 utils.addEvent(window, 'mouseup', this);
1898 }
1899 }
1900
1901 if ( this.options.fade ) {
1902 this.wrapperStyle[utils.style.transform] = this.scroller.translateZ;
1903 var durationProp = utils.style.transitionDuration;
1904 this.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';
1905 // remove 0.0001ms
1906 var self = this;
1907 if(utils.isBadAndroid) {
1908 rAF(function() {
1909 if(self.wrapperStyle[durationProp] === '0.0001ms') {
1910 self.wrapperStyle[durationProp] = '0s';
1911 }
1912 });
1913 }
1914 this.wrapperStyle.opacity = '0';
1915 }
1916 }
1917
1918 Indicator.prototype = {
1919 handleEvent: function (e) {
1920 switch ( e.type ) {
1921 case 'touchstart':
1922 case 'pointerdown':
1923 case 'MSPointerDown':
1924 case 'mousedown':
1925 this._start(e);
1926 break;
1927 case 'touchmove':
1928 case 'pointermove':
1929 case 'MSPointerMove':
1930 case 'mousemove':
1931 this._move(e);
1932 break;
1933 case 'touchend':
1934 case 'pointerup':
1935 case 'MSPointerUp':
1936 case 'mouseup':
1937 case 'touchcancel':
1938 case 'pointercancel':
1939 case 'MSPointerCancel':
1940 case 'mousecancel':
1941 this._end(e);
1942 break;
1943 }
1944 },
1945
1946 destroy: function () {
1947 if ( this.options.fadeScrollbars ) {
1948 clearTimeout(this.fadeTimeout);
1949 this.fadeTimeout = null;
1950 }
1951 if ( this.options.interactive ) {
1952 utils.removeEvent(this.indicator, 'touchstart', this);
1953 utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);
1954 utils.removeEvent(this.indicator, 'mousedown', this);
1955
1956 utils.removeEvent(window, 'touchmove', this);
1957 utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);
1958 utils.removeEvent(window, 'mousemove', this);
1959
1960 utils.removeEvent(window, 'touchend', this);
1961 utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);
1962 utils.removeEvent(window, 'mouseup', this);
1963 }
1964
1965 if ( this.options.defaultScrollbars ) {
1966 this.wrapper.parentNode.removeChild(this.wrapper);
1967 }
1968 },
1969
1970 _start: function (e) {
1971 var point = e.touches ? e.touches[0] : e;
1972
1973 e.preventDefault();
1974 e.stopPropagation();
1975
1976 this.transitionTime();
1977
1978 this.initiated = true;
1979 this.moved = false;
1980 this.lastPointX = point.pageX;
1981 this.lastPointY = point.pageY;
1982
1983 this.startTime = utils.getTime();
1984
1985 if ( !this.options.disableTouch ) {
1986 utils.addEvent(window, 'touchmove', this);
1987 }
1988 if ( !this.options.disablePointer ) {
1989 utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);
1990 }
1991 if ( !this.options.disableMouse ) {
1992 utils.addEvent(window, 'mousemove', this);
1993 }
1994
1995 this.scroller._execEvent('beforeScrollStart');
1996 },
1997
1998 _move: function (e) {
1999 var point = e.touches ? e.touches[0] : e,
2000 deltaX, deltaY,
2001 newX, newY,
2002 timestamp = utils.getTime();
2003
2004 if ( !this.moved ) {
2005 this.scroller._execEvent('scrollStart');
2006 }
2007
2008 this.moved = true;
2009
2010 deltaX = point.pageX - this.lastPointX;
2011 this.lastPointX = point.pageX;
2012
2013 deltaY = point.pageY - this.lastPointY;
2014 this.lastPointY = point.pageY;
2015
2016 newX = this.x + deltaX;
2017 newY = this.y + deltaY;
2018
2019 this._pos(newX, newY);
2020
2021 // INSERT POINT: indicator._move
2022
2023 e.preventDefault();
2024 e.stopPropagation();
2025 },
2026
2027 _end: function (e) {
2028 if ( !this.initiated ) {
2029 return;
2030 }
2031
2032 this.initiated = false;
2033
2034 e.preventDefault();
2035 e.stopPropagation();
2036
2037 utils.removeEvent(window, 'touchmove', this);
2038 utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);
2039 utils.removeEvent(window, 'mousemove', this);
2040
2041 if ( this.scroller.options.snap ) {
2042 var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);
2043
2044 var time = this.options.snapSpeed || Math.max(
2045 Math.max(
2046 Math.min(Math.abs(this.scroller.x - snap.x), 1000),
2047 Math.min(Math.abs(this.scroller.y - snap.y), 1000)
2048 ), 300);
2049
2050 if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {
2051 this.scroller.directionX = 0;
2052 this.scroller.directionY = 0;
2053 this.scroller.currentPage = snap;
2054 this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);
2055 }
2056 }
2057
2058 if ( this.moved ) {
2059 this.scroller._execEvent('scrollEnd');
2060 }
2061 },
2062
2063 transitionTime: function (time) {
2064 time = time || 0;
2065 var durationProp = utils.style.transitionDuration;
2066 this.indicatorStyle[durationProp] = time + 'ms';
2067
2068 if ( !time && utils.isBadAndroid ) {
2069 this.indicatorStyle[durationProp] = '0.0001ms';
2070 // remove 0.0001ms
2071 var self = this;
2072 rAF(function() {
2073 if(self.indicatorStyle[durationProp] === '0.0001ms') {
2074 self.indicatorStyle[durationProp] = '0s';
2075 }
2076 });
2077 }
2078 },
2079
2080 transitionTimingFunction: function (easing) {
2081 this.indicatorStyle[utils.style.transitionTimingFunction] = easing;
2082 },
2083
2084 refresh: function () {
2085 this.transitionTime();
2086
2087 if ( this.options.listenX && !this.options.listenY ) {
2088 this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
2089 } else if ( this.options.listenY && !this.options.listenX ) {
2090 this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
2091 } else {
2092 this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
2093 }
2094
2095 if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {
2096 utils.addClass(this.wrapper, 'iScrollBothScrollbars');
2097 utils.removeClass(this.wrapper, 'iScrollLoneScrollbar');
2098
2099 if ( this.options.defaultScrollbars && this.options.customStyle ) {
2100 if ( this.options.listenX ) {
2101 this.wrapper.style.right = '8px';
2102 } else {
2103 this.wrapper.style.bottom = '8px';
2104 }
2105 }
2106 } else {
2107 utils.removeClass(this.wrapper, 'iScrollBothScrollbars');
2108 utils.addClass(this.wrapper, 'iScrollLoneScrollbar');
2109
2110 if ( this.options.defaultScrollbars && this.options.customStyle ) {
2111 if ( this.options.listenX ) {
2112 this.wrapper.style.right = '2px';
2113 } else {
2114 this.wrapper.style.bottom = '2px';
2115 }
2116 }
2117 }
2118
2119 var r = this.wrapper.offsetHeight; // force refresh
2120
2121 if ( this.options.listenX ) {
2122 this.wrapperWidth = this.wrapper.clientWidth;
2123 if ( this.options.resize ) {
2124 this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);
2125 this.indicatorStyle.width = this.indicatorWidth + 'px';
2126 } else {
2127 this.indicatorWidth = this.indicator.clientWidth;
2128 }
2129
2130 this.maxPosX = this.wrapperWidth - this.indicatorWidth;
2131
2132 if ( this.options.shrink == 'clip' ) {
2133 this.minBoundaryX = -this.indicatorWidth + 8;
2134 this.maxBoundaryX = this.wrapperWidth - 8;
2135 } else {
2136 this.minBoundaryX = 0;
2137 this.maxBoundaryX = this.maxPosX;
2138 }
2139
2140 this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));
2141 }
2142
2143 if ( this.options.listenY ) {
2144 this.wrapperHeight = this.wrapper.clientHeight;
2145 if ( this.options.resize ) {
2146 this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);
2147 this.indicatorStyle.height = this.indicatorHeight + 'px';
2148 } else {
2149 this.indicatorHeight = this.indicator.clientHeight;
2150 }
2151
2152 this.maxPosY = this.wrapperHeight - this.indicatorHeight;
2153
2154 if ( this.options.shrink == 'clip' ) {
2155 this.minBoundaryY = -this.indicatorHeight + 8;
2156 this.maxBoundaryY = this.wrapperHeight - 8;
2157 } else {
2158 this.minBoundaryY = 0;
2159 this.maxBoundaryY = this.maxPosY;
2160 }
2161
2162 this.maxPosY = this.wrapperHeight - this.indicatorHeight;
2163 this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));
2164 }
2165
2166 this.updatePosition();
2167 },
2168
2169 updatePosition: function () {
2170 var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,
2171 y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;
2172
2173 if ( !this.options.ignoreBoundaries ) {
2174 if ( x < this.minBoundaryX ) {
2175 if ( this.options.shrink == 'scale' ) {
2176 this.width = Math.max(this.indicatorWidth + x, 8);
2177 this.indicatorStyle.width = this.width + 'px';
2178 }
2179 x = this.minBoundaryX;
2180 } else if ( x > this.maxBoundaryX ) {
2181 if ( this.options.shrink == 'scale' ) {
2182 this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);
2183 this.indicatorStyle.width = this.width + 'px';
2184 x = this.maxPosX + this.indicatorWidth - this.width;
2185 } else {
2186 x = this.maxBoundaryX;
2187 }
2188 } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {
2189 this.width = this.indicatorWidth;
2190 this.indicatorStyle.width = this.width + 'px';
2191 }
2192
2193 if ( y < this.minBoundaryY ) {
2194 if ( this.options.shrink == 'scale' ) {
2195 this.height = Math.max(this.indicatorHeight + y * 3, 8);
2196 this.indicatorStyle.height = this.height + 'px';
2197 }
2198 y = this.minBoundaryY;
2199 } else if ( y > this.maxBoundaryY ) {
2200 if ( this.options.shrink == 'scale' ) {
2201 this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);
2202 this.indicatorStyle.height = this.height + 'px';
2203 y = this.maxPosY + this.indicatorHeight - this.height;
2204 } else {
2205 y = this.maxBoundaryY;
2206 }
2207 } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {
2208 this.height = this.indicatorHeight;
2209 this.indicatorStyle.height = this.height + 'px';
2210 }
2211 }
2212
2213 this.x = x;
2214 this.y = y;
2215
2216 if ( this.scroller.options.useTransform ) {
2217 this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;
2218 } else {
2219 this.indicatorStyle.left = x + 'px';
2220 this.indicatorStyle.top = y + 'px';
2221 }
2222 },
2223
2224 _pos: function (x, y) {
2225 if ( x < 0 ) {
2226 x = 0;
2227 } else if ( x > this.maxPosX ) {
2228 x = this.maxPosX;
2229 }
2230
2231 if ( y < 0 ) {
2232 y = 0;
2233 } else if ( y > this.maxPosY ) {
2234 y = this.maxPosY;
2235 }
2236
2237 x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;
2238 y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;
2239
2240 this.scroller.scrollTo(x, y);
2241 },
2242
2243 fade: function (val, hold) {
2244 if ( hold && !this.visible ) {
2245 return;
2246 }
2247
2248 clearTimeout(this.fadeTimeout);
2249 this.fadeTimeout = null;
2250
2251 var time = val ? 250 : 500,
2252 delay = val ? 0 : 300;
2253
2254 val = val ? '1' : '0';
2255
2256 this.wrapperStyle[utils.style.transitionDuration] = time + 'ms';
2257
2258 this.fadeTimeout = setTimeout((function (val) {
2259 this.wrapperStyle.opacity = val;
2260 this.visible = +val;
2261 }).bind(this, val), delay);
2262 }
2263 };
2264
2265 IScroll.utils = utils;
2266
2267 if ( typeof module != 'undefined' && module.exports ) {
2268 module.exports = IScroll;
2269 } else if ( typeof define == 'function' && define.amd ) {
2270 define( function () { return IScroll; } );
2271 } else {
2272 window.IScroll = IScroll;
2273 }
2274
2275 })(window, document, Math);
1 /*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */
2 (function (window, document, Math) {
3 var rAF = window.requestAnimationFrame ||
4 window.webkitRequestAnimationFrame ||
5 window.mozRequestAnimationFrame ||
6 window.oRequestAnimationFrame ||
7 window.msRequestAnimationFrame ||
8 function (callback) { window.setTimeout(callback, 1000 / 60); };
9
10 var utils = (function () {
11 var me = {};
12
13 var _elementStyle = document.createElement('div').style;
14 var _vendor = (function () {
15 var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],
16 transform,
17 i = 0,
18 l = vendors.length;
19
20 for ( ; i < l; i++ ) {
21 transform = vendors[i] + 'ransform';
22 if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);
23 }
24
25 return false;
26 })();
27
28 function _prefixStyle (style) {
29 if ( _vendor === false ) return false;
30 if ( _vendor === '' ) return style;
31 return _vendor + style.charAt(0).toUpperCase() + style.substr(1);
32 }
33
34 me.getTime = Date.now || function getTime () { return new Date().getTime(); };
35
36 me.extend = function (target, obj) {
37 for ( var i in obj ) {
38 target[i] = obj[i];
39 }
40 };
41
42 me.addEvent = function (el, type, fn, capture) {
43 el.addEventListener(type, fn, !!capture);
44 };
45
46 me.removeEvent = function (el, type, fn, capture) {
47 el.removeEventListener(type, fn, !!capture);
48 };
49
50 me.prefixPointerEvent = function (pointerEvent) {
51 return window.MSPointerEvent ?
52 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):
53 pointerEvent;
54 };
55
56 me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {
57 var distance = current - start,
58 speed = Math.abs(distance) / time,
59 destination,
60 duration;
61
62 deceleration = deceleration === undefined ? 0.0006 : deceleration;
63
64 destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );
65 duration = speed / deceleration;
66
67 if ( destination < lowerMargin ) {
68 destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;
69 distance = Math.abs(destination - current);
70 duration = distance / speed;
71 } else if ( destination > 0 ) {
72 destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;
73 distance = Math.abs(current) + destination;
74 duration = distance / speed;
75 }
76
77 return {
78 destination: Math.round(destination),
79 duration: duration
80 };
81 };
82
83 var _transform = _prefixStyle('transform');
84
85 me.extend(me, {
86 hasTransform: _transform !== false,
87 hasPerspective: _prefixStyle('perspective') in _elementStyle,
88 hasTouch: 'ontouchstart' in window,
89 hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed
90 hasTransition: _prefixStyle('transition') in _elementStyle
91 });
92
93 /*
94 This should find all Android browsers lower than build 535.19 (both stock browser and webview)
95 - galaxy S2 is ok
96 - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`
97 - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
98 - galaxy S3 is badAndroid (stock brower, webview)
99 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
100 - galaxy S4 is badAndroid (stock brower, webview)
101 `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`
102 - galaxy S5 is OK
103 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
104 - galaxy S6 is OK
105 `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`
106 */
107 me.isBadAndroid = (function() {
108 var appVersion = window.navigator.appVersion;
109 // Android browser is not a chrome browser.
110 if (/Android/.test(appVersion) && !(/Chrome\/\d/.test(appVersion))) {
111 var safariVersion = appVersion.match(/Safari\/(\d+.\d)/);
112 if(safariVersion && typeof safariVersion === "object" && safariVersion.length >= 2) {
113 return parseFloat(safariVersion[1]) < 535.19;
114 } else {
115 return true;
116 }
117 } else {
118 return false;
119 }
120 })();
121
122 me.extend(me.style = {}, {
123 transform: _transform,
124 transitionTimingFunction: _prefixStyle('transitionTimingFunction'),
125 transitionDuration: _prefixStyle('transitionDuration'),
126 transitionDelay: _prefixStyle('transitionDelay'),
127 transformOrigin: _prefixStyle('transformOrigin')
128 });
129
130 me.hasClass = function (e, c) {
131 var re = new RegExp("(^|\\s)" + c + "(\\s|$)");
132 return re.test(e.className);
133 };
134
135 me.addClass = function (e, c) {
136 if ( me.hasClass(e, c) ) {
137 return;
138 }
139
140 var newclass = e.className.split(' ');
141 newclass.push(c);
142 e.className = newclass.join(' ');
143 };
144
145 me.removeClass = function (e, c) {
146 if ( !me.hasClass(e, c) ) {
147 return;
148 }
149
150 var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g');
151 e.className = e.className.replace(re, ' ');
152 };
153
154 me.offset = function (el) {
155 var left = -el.offsetLeft,
156 top = -el.offsetTop;
157
158 // jshint -W084
159 while (el = el.offsetParent) {
160 left -= el.offsetLeft;
161 top -= el.offsetTop;
162 }
163 // jshint +W084
164
165 return {
166 left: left,
167 top: top
168 };
169 };
170
171 me.preventDefaultException = function (el, exceptions) {
172 for ( var i in exceptions ) {
173 if ( exceptions[i].test(el[i]) ) {
174 return true;
175 }
176 }
177
178 return false;
179 };
180
181 me.extend(me.eventType = {}, {
182 touchstart: 1,
183 touchmove: 1,
184 touchend: 1,
185
186 mousedown: 2,
187 mousemove: 2,
188 mouseup: 2,
189
190 pointerdown: 3,
191 pointermove: 3,
192 pointerup: 3,
193
194 MSPointerDown: 3,
195 MSPointerMove: 3,
196 MSPointerUp: 3
197 });
198
199 me.extend(me.ease = {}, {
200 quadratic: {
201 style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
202 fn: function (k) {
203 return k * ( 2 - k );
204 }
205 },
206 circular: {
207 style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1)
208 fn: function (k) {
209 return Math.sqrt( 1 - ( --k * k ) );
210 }
211 },
212 back: {
213 style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
214 fn: function (k) {
215 var b = 4;
216 return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;
217 }
218 },
219 bounce: {
220 style: '',
221 fn: function (k) {
222 if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {
223 return 7.5625 * k * k;
224 } else if ( k < ( 2 / 2.75 ) ) {
225 return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;
226 } else if ( k < ( 2.5 / 2.75 ) ) {
227 return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;
228 } else {
229 return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;
230 }
231 }
232 },
233 elastic: {
234 style: '',
235 fn: function (k) {
236 var f = 0.22,
237 e = 0.4;
238
239 if ( k === 0 ) { return 0; }
240 if ( k == 1 ) { return 1; }
241
242 return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );
243 }
244 }
245 });
246
247 me.tap = function (e, eventName) {
248 var ev = document.createEvent('Event');
249 ev.initEvent(eventName, true, true);
250 ev.pageX = e.pageX;
251 ev.pageY = e.pageY;
252 e.target.dispatchEvent(ev);
253 };
254
255 me.click = function (e) {
256 var target = e.target,
257 ev;
258
259 if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {
260 ev = document.createEvent('MouseEvents');
261 ev.initMouseEvent('click', true, true, e.view, 1,
262 target.screenX, target.screenY, target.clientX, target.clientY,
263 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
264 0, null);
265
266 ev._constructed = true;
267 target.dispatchEvent(ev);
268 }
269 };
270
271 return me;
272 })();
273 function IScroll (el, options) {
274 this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;
275 this.scroller = this.wrapper.children[0];
276 this.scrollerStyle = this.scroller.style; // cache style for better performance
277
278 this.options = {
279
280 resizeScrollbars: true,
281
282 mouseWheelSpeed: 20,
283
284 snapThreshold: 0.334,
285
286 // INSERT POINT: OPTIONS
287 disablePointer : !utils.hasPointer,
288 disableTouch : utils.hasPointer || !utils.hasTouch,
289 disableMouse : utils.hasPointer || utils.hasTouch,
290 startX: 0,
291 startY: 0,
292 scrollY: true,
293 directionLockThreshold: 5,
294 momentum: true,
295
296 bounce: true,
297 bounceTime: 600,
298 bounceEasing: '',
299
300 preventDefault: true,
301 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ },
302
303 HWCompositing: true,
304 useTransition: true,
305 useTransform: true,
306 bindToWrapper: typeof window.onmousedown === "undefined"
307 };
308
309 for ( var i in options ) {
310 this.options[i] = options[i];
311 }
312
313 // Normalize options
314 this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';
315
316 this.options.useTransition = utils.hasTransition && this.options.useTransition;
317 this.options.useTransform = utils.hasTransform && this.options.useTransform;
318
319 this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;
320 this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;
321
322 // If you want eventPassthrough I have to lock one of the axes
323 this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;
324 this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;
325
326 // With eventPassthrough we also need lockDirection mechanism
327 this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;
328 this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;
329
330 this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;
331
332 this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;
333
334 if ( this.options.tap === true ) {
335 this.options.tap = 'tap';
336 }
337
338 if ( this.options.shrinkScrollbars == 'scale' ) {
339 this.options.useTransition = false;
340 }
341
342 this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;
343
344 // INSERT POINT: NORMALIZATION
345
346 // Some defaults
347 this.x = 0;
348 this.y = 0;
349 this.directionX = 0;
350 this.directionY = 0;
351 this._events = {};
352
353 // INSERT POINT: DEFAULTS
354
355 this._init();
356 this.refresh();
357
358 this.scrollTo(this.options.startX, this.options.startY);
359 this.enable();
360 }
361
362 IScroll.prototype = {
363 version: '5.2.0',
364
365 _init: function () {
366 this._initEvents();
367
368 if ( this.options.scrollbars || this.options.indicators ) {
369 this._initIndicators();
370 }
371
372 if ( this.options.mouseWheel ) {
373 this._initWheel();
374 }
375
376 if ( this.options.snap ) {
377 this._initSnap();
378 }
379
380 if ( this.options.keyBindings ) {
381 this._initKeys();
382 }
383
384 // INSERT POINT: _init
385
386 },
387
388 destroy: function () {
389 this._initEvents(true);
390 clearTimeout(this.resizeTimeout);
391 this.resizeTimeout = null;
392 this._execEvent('destroy');
393 },
394
395 _transitionEnd: function (e) {
396 if ( e.target != this.scroller || !this.isInTransition ) {
397 return;
398 }
399
400 this._transitionTime();
401 if ( !this.resetPosition(this.options.bounceTime) ) {
402 this.isInTransition = false;
403 this._execEvent('scrollEnd');
404 }
405 },
406
407 _start: function (e) {
408 // React to left mouse button only
409 if ( utils.eventType[e.type] != 1 ) {
410 // for button property
411 // http://unixpapa.com/js/mouse.html
412 var button;
413 if (!e.which) {
414 /* IE case */
415 button = (e.button < 2) ? 0 :
416 ((e.button == 4) ? 1 : 2);
417 } else {
418 /* All others */
419 button = e.button;
420 }
421 if ( button !== 0 ) {
422 return;
423 }
424 }
425
426 if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {
427 return;
428 }
429
430 if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
431 e.preventDefault();
432 }
433
434 var point = e.touches ? e.touches[0] : e,
435 pos;
436
437 this.initiated = utils.eventType[e.type];
438 this.moved = false;
439 this.distX = 0;
440 this.distY = 0;
441 this.directionX = 0;
442 this.directionY = 0;
443 this.directionLocked = 0;
444
445 this.startTime = utils.getTime();
446
447 if ( this.options.useTransition && this.isInTransition ) {
448 this._transitionTime();
449 this.isInTransition = false;
450 pos = this.getComputedPosition();
451 this._translate(Math.round(pos.x), Math.round(pos.y));
452 this._execEvent('scrollEnd');
453 } else if ( !this.options.useTransition && this.isAnimating ) {
454 this.isAnimating = false;
455 this._execEvent('scrollEnd');
456 }
457
458 this.startX = this.x;
459 this.startY = this.y;
460 this.absStartX = this.x;
461 this.absStartY = this.y;
462 this.pointX = point.pageX;
463 this.pointY = point.pageY;
464
465 this._execEvent('beforeScrollStart');
466 },
467
468 _move: function (e) {
469 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
470 return;
471 }
472
473 if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!
474 e.preventDefault();
475 }
476
477 var point = e.touches ? e.touches[0] : e,
478 deltaX = point.pageX - this.pointX,
479 deltaY = point.pageY - this.pointY,
480 timestamp = utils.getTime(),
481 newX, newY,
482 absDistX, absDistY;
483
484 this.pointX = point.pageX;
485 this.pointY = point.pageY;
486
487 this.distX += deltaX;
488 this.distY += deltaY;
489 absDistX = Math.abs(this.distX);
490 absDistY = Math.abs(this.distY);
491
492 // We need to move at least 10 pixels for the scrolling to initiate
493 if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {
494 return;
495 }
496
497 // If you are scrolling in one direction lock the other
498 if ( !this.directionLocked && !this.options.freeScroll ) {
499 if ( absDistX > absDistY + this.options.directionLockThreshold ) {
500 this.directionLocked = 'h'; // lock horizontally
501 } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {
502 this.directionLocked = 'v'; // lock vertically
503 } else {
504 this.directionLocked = 'n'; // no lock
505 }
506 }
507
508 if ( this.directionLocked == 'h' ) {
509 if ( this.options.eventPassthrough == 'vertical' ) {
510 e.preventDefault();
511 } else if ( this.options.eventPassthrough == 'horizontal' ) {
512 this.initiated = false;
513 return;
514 }
515
516 deltaY = 0;
517 } else if ( this.directionLocked == 'v' ) {
518 if ( this.options.eventPassthrough == 'horizontal' ) {
519 e.preventDefault();
520 } else if ( this.options.eventPassthrough == 'vertical' ) {
521 this.initiated = false;
522 return;
523 }
524
525 deltaX = 0;
526 }
527
528 deltaX = this.hasHorizontalScroll ? deltaX : 0;
529 deltaY = this.hasVerticalScroll ? deltaY : 0;
530
531 newX = this.x + deltaX;
532 newY = this.y + deltaY;
533
534 // Slow down if outside of the boundaries
535 if ( newX > 0 || newX < this.maxScrollX ) {
536 newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;
537 }
538 if ( newY > 0 || newY < this.maxScrollY ) {
539 newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;
540 }
541
542 this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
543 this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
544
545 if ( !this.moved ) {
546 this._execEvent('scrollStart');
547 }
548
549 this.moved = true;
550
551 this._translate(newX, newY);
552
553 /* REPLACE START: _move */
554
555 if ( timestamp - this.startTime > 300 ) {
556 this.startTime = timestamp;
557 this.startX = this.x;
558 this.startY = this.y;
559 }
560
561 /* REPLACE END: _move */
562
563 },
564
565 _end: function (e) {
566 if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {
567 return;
568 }
569
570 if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {
571 e.preventDefault();
572 }
573
574 var point = e.changedTouches ? e.changedTouches[0] : e,
575 momentumX,
576 momentumY,
577 duration = utils.getTime() - this.startTime,
578 newX = Math.round(this.x),
579 newY = Math.round(this.y),
580 distanceX = Math.abs(newX - this.startX),
581 distanceY = Math.abs(newY - this.startY),
582 time = 0,
583 easing = '';
584
585 this.isInTransition = 0;
586 this.initiated = 0;
587 this.endTime = utils.getTime();
588
589 // reset if we are outside of the boundaries
590 if ( this.resetPosition(this.options.bounceTime) ) {
591 return;
592 }
593
594 this.scrollTo(newX, newY); // ensures that the last position is rounded
595
596 // we scrolled less than 10 pixels
597 if ( !this.moved ) {
598 if ( this.options.tap ) {
599 utils.tap(e, this.options.tap);
600 }
601
602 if ( this.options.click ) {
603 utils.click(e);
604 }
605
606 this._execEvent('scrollCancel');
607 return;
608 }
609
610 if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {
611 this._execEvent('flick');
612 return;
613 }
614
615 // start momentum animation if needed
616 if ( this.options.momentum && duration < 300 ) {
617 momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };
618 momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };
619 newX = momentumX.destination;
620 newY = momentumY.destination;
621 time = Math.max(momentumX.duration, momentumY.duration);
622 this.isInTransition = 1;
623 }
624
625
626 if ( this.options.snap ) {
627 var snap = this._nearestSnap(newX, newY);
628 this.currentPage = snap;
629 time = this.options.snapSpeed || Math.max(
630 Math.max(
631 Math.min(Math.abs(newX - snap.x), 1000),
632 Math.min(Math.abs(newY - snap.y), 1000)
633 ), 300);
634 newX = snap.x;
635 newY = snap.y;
636
637 this.directionX = 0;
638 this.directionY = 0;
639 easing = this.options.bounceEasing;
640 }
641
642 // INSERT POINT: _end
643
644 if ( newX != this.x || newY != this.y ) {
645 // change easing function when scroller goes out of the boundaries
646 if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {
647 easing = utils.ease.quadratic;
648 }
649
650 this.scrollTo(newX, newY, time, easing);
651 return;
652 }
653
654 this._execEvent('scrollEnd');
655 },
656
657 _resize: function () {
658 var that = this;
659
660 clearTimeout(this.resizeTimeout);
661
662 this.resizeTimeout = setTimeout(function () {
663 that.refresh();
664 }, this.options.resizePolling);
665 },
666
667 resetPosition: function (time) {
668 var x = this.x,
669 y = this.y;
670
671 time = time || 0;
672
673 if ( !this.hasHorizontalScroll || this.x > 0 ) {
674 x = 0;
675 } else if ( this.x < this.maxScrollX ) {
676 x = this.maxScrollX;
677 }
678
679 if ( !this.hasVerticalScroll || this.y > 0 ) {
680 y = 0;
681 } else if ( this.y < this.maxScrollY ) {
682 y = this.maxScrollY;
683 }
684
685 if ( x == this.x && y == this.y ) {
686 return false;
687 }
688
689 this.scrollTo(x, y, time, this.options.bounceEasing);
690
691 return true;
692 },
693
694 disable: function () {
695 this.enabled = false;
696 },
697
698 enable: function () {
699 this.enabled = true;
700 },
701
702 refresh: function () {
703 var rf = this.wrapper.offsetHeight; // Force reflow
704
705 this.wrapperWidth = this.wrapper.clientWidth;
706 this.wrapperHeight = this.wrapper.clientHeight;
707
708 /* REPLACE START: refresh */
709
710 this.scrollerWidth = this.scroller.offsetWidth;
711 this.scrollerHeight = this.scroller.offsetHeight;
712
713 this.maxScrollX = this.wrapperWidth - this.scrollerWidth;
714 this.maxScrollY = this.wrapperHeight - this.scrollerHeight;
715
716 /* REPLACE END: refresh */
717
718 this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;
719 this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;
720
721 if ( !this.hasHorizontalScroll ) {
722 this.maxScrollX = 0;
723 this.scrollerWidth = this.wrapperWidth;
724 }
725
726 if ( !this.hasVerticalScroll ) {
727 this.maxScrollY = 0;
728 this.scrollerHeight = this.wrapperHeight;
729 }
730
731 this.endTime = 0;
732 this.directionX = 0;
733 this.directionY = 0;
734
735 this.wrapperOffset = utils.offset(this.wrapper);
736
737 this._execEvent('refresh');
738
739 this.resetPosition();
740
741 // INSERT POINT: _refresh
742
743 },
744
745 on: function (type, fn) {
746 if ( !this._events[type] ) {
747 this._events[type] = [];
748 }
749
750 this._events[type].push(fn);
751 },
752
753 off: function (type, fn) {
754 if ( !this._events[type] ) {
755 return;
756 }
757
758 var index = this._events[type].indexOf(fn);
759
760 if ( index > -1 ) {
761 this._events[type].splice(index, 1);
762 }
763 },
764
765 _execEvent: function (type) {
766 if ( !this._events[type] ) {
767 return;
768 }
769
770 var i = 0,
771 l = this._events[type].length;
772
773 if ( !l ) {
774 return;
775 }
776
777 for ( ; i < l; i++ ) {
778 this._events[type][i].apply(this, [].slice.call(arguments, 1));
779 }
780 },
781
782 scrollBy: function (x, y, time, easing) {
783 x = this.x + x;
784 y = this.y + y;
785 time = time || 0;
786
787 this.scrollTo(x, y, time, easing);
788 },
789
790 scrollTo: function (x, y, time, easing) {
791 easing = easing || utils.ease.circular;
792
793 this.isInTransition = this.options.useTransition && time > 0;
794 var transitionType = this.options.useTransition && easing.style;
795 if ( !time || transitionType ) {
796 if(transitionType) {
797 this._transitionTimingFunction(easing.style);
798 this._transitionTime(time);
799 }
800 this._translate(x, y);
801 } else {
802 this._animate(x, y, time, easing.fn);
803 }
804 },
805
806 scrollToElement: function (el, time, offsetX, offsetY, easing) {
807 el = el.nodeType ? el : this.scroller.querySelector(el);
808
809 if ( !el ) {
810 return;
811 }
812
813 var pos = utils.offset(el);
814
815 pos.left -= this.wrapperOffset.left;
816 pos.top -= this.wrapperOffset.top;
817
818 // if offsetX/Y are true we center the element to the screen
819 if ( offsetX === true ) {
820 offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);
821 }
822 if ( offsetY === true ) {
823 offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);
824 }
825
826 pos.left -= offsetX || 0;
827 pos.top -= offsetY || 0;
828
829 pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;
830 pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;
831
832 time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;
833
834 this.scrollTo(pos.left, pos.top, time, easing);
835 },
836
837 _transitionTime: function (time) {
838 time = time || 0;
839
840 var durationProp = utils.style.transitionDuration;
841 this.scrollerStyle[durationProp] = time + 'ms';
842
843 if ( !time && utils.isBadAndroid ) {
844 this.scrollerStyle[durationProp] = '0.0001ms';
845 // remove 0.0001ms
846 var self = this;
847 rAF(function() {
848 if(self.scrollerStyle[durationProp] === '0.0001ms') {
849 self.scrollerStyle[durationProp] = '0s';
850 }
851 });
852 }
853
854
855 if ( this.indicators ) {
856 for ( var i = this.indicators.length; i--; ) {
857 this.indicators[i].transitionTime(time);
858 }
859 }
860
861
862 // INSERT POINT: _transitionTime
863
864 },
865
866 _transitionTimingFunction: function (easing) {
867 this.scrollerStyle[utils.style.transitionTimingFunction] = easing;
868
869
870 if ( this.indicators ) {
871 for ( var i = this.indicators.length; i--; ) {
872 this.indicators[i].transitionTimingFunction(easing);
873 }
874 }
875
876
877 // INSERT POINT: _transitionTimingFunction
878
879 },
880
881 _translate: function (x, y) {
882 if ( this.options.useTransform ) {
883
884 /* REPLACE START: _translate */
885
886 this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;
887
888 /* REPLACE END: _translate */
889
890 } else {
891 x = Math.round(x);
892 y = Math.round(y);
893 this.scrollerStyle.left = x + 'px';
894 this.scrollerStyle.top = y + 'px';
895 }
896
897 this.x = x;
898 this.y = y;
899
900
901 if ( this.indicators ) {
902 for ( var i = this.indicators.length; i--; ) {
903 this.indicators[i].updatePosition();
904 }
905 }
906
907
908 // INSERT POINT: _translate
909
910 },
911
912 _initEvents: function (remove) {
913 var eventType = remove ? utils.removeEvent : utils.addEvent,
914 target = this.options.bindToWrapper ? this.wrapper : window;
915
916 eventType(window, 'orientationchange', this);
917 eventType(window, 'resize', this);
918
919 if ( this.options.click ) {
920 eventType(this.wrapper, 'click', this, true);
921 }
922
923 if ( !this.options.disableMouse ) {
924 eventType(this.wrapper, 'mousedown', this);
925 eventType(target, 'mousemove', this);
926 eventType(target, 'mousecancel', this);
927 eventType(target, 'mouseup', this);
928 }
929
930 if ( utils.hasPointer && !this.options.disablePointer ) {
931 eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);
932 eventType(target, utils.prefixPointerEvent('pointermove'), this);
933 eventType(target, utils.prefixPointerEvent('pointercancel'), this);
934 eventType(target, utils.prefixPointerEvent('pointerup'), this);
935 }
936
937 if ( utils.hasTouch && !this.options.disableTouch ) {
938 eventType(this.wrapper, 'touchstart', this);
939 eventType(target, 'touchmove', this);
940 eventType(target, 'touchcancel', this);
941 eventType(target, 'touchend', this);
942 }
943
944 eventType(this.scroller, 'transitionend', this);
945 eventType(this.scroller, 'webkitTransitionEnd', this);
946 eventType(this.scroller, 'oTransitionEnd', this);
947 eventType(this.scroller, 'MSTransitionEnd', this);
948 },
949
950 getComputedPosition: function () {
951 var matrix = window.getComputedStyle(this.scroller, null),
952 x, y;
953
954 if ( this.options.useTransform ) {
955 matrix = matrix[utils.style.transform].split(')')[0].split(', ');
956 x = +(matrix[12] || matrix[4]);
957 y = +(matrix[13] || matrix[5]);
958 } else {
959 x = +matrix.left.replace(/[^-\d.]/g, '');
960 y = +matrix.top.replace(/[^-\d.]/g, '');
961 }
962
963 return { x: x, y: y };
964 },
965 _initIndicators: function () {
966 var interactive = this.options.interactiveScrollbars,
967 customStyle = typeof this.options.scrollbars != 'string',
968 indicators = [],
969 indicator;
970
971 var that = this;
972
973 this.indicators = [];
974
975 if ( this.options.scrollbars ) {
976 // Vertical scrollbar
977 if ( this.options.scrollY ) {
978 indicator = {
979 el: createDefaultScrollbar('v', interactive, this.options.scrollbars),
980 interactive: interactive,
981 defaultScrollbars: true,
982 customStyle: customStyle,
983 resize: this.options.resizeScrollbars,
984 shrink: this.options.shrinkScrollbars,
985 fade: this.options.fadeScrollbars,
986 listenX: false
987 };
988
989 this.wrapper.appendChild(indicator.el);
990 indicators.push(indicator);
991 }
992
993 // Horizontal scrollbar
994 if ( this.options.scrollX ) {
995 indicator = {
996 el: createDefaultScrollbar('h', interactive, this.options.scrollbars),
997 interactive: interactive,
998 defaultScrollbars: true,
999 customStyle: customStyle,
1000 resize: this.options.resizeScrollbars,
1001 shrink: this.options.shrinkScrollbars,
1002 fade: this.options.fadeScrollbars,
1003 listenY: false
1004 };
1005
1006 this.wrapper.appendChild(indicator.el);
1007 indicators.push(indicator);
1008 }
1009 }
1010
1011 if ( this.options.indicators ) {
1012 // TODO: check concat compatibility
1013 indicators = indicators.concat(this.options.indicators);
1014 }
1015
1016 for ( var i = indicators.length; i--; ) {
1017 this.indicators.push( new Indicator(this, indicators[i]) );
1018 }
1019
1020 // TODO: check if we can use array.map (wide compatibility and performance issues)
1021 function _indicatorsMap (fn) {
1022 if (that.indicators) {
1023 for ( var i = that.indicators.length; i--; ) {
1024 fn.call(that.indicators[i]);
1025 }
1026 }
1027 }
1028
1029 if ( this.options.fadeScrollbars ) {
1030 this.on('scrollEnd', function () {
1031 _indicatorsMap(function () {
1032 this.fade();
1033 });
1034 });
1035
1036 this.on('scrollCancel', function () {
1037 _indicatorsMap(function () {
1038 this.fade();
1039 });
1040 });
1041
1042 this.on('scrollStart', function () {
1043 _indicatorsMap(function () {
1044 this.fade(1);
1045 });
1046 });
1047
1048 this.on('beforeScrollStart', function () {
1049 _indicatorsMap(function () {
1050 this.fade(1, true);
1051 });
1052 });
1053 }
1054
1055
1056 this.on('refresh', function () {
1057 _indicatorsMap(function () {
1058 this.refresh();
1059 });
1060 });
1061
1062 this.on('destroy', function () {
1063 _indicatorsMap(function () {
1064 this.destroy();
1065 });
1066
1067 delete this.indicators;
1068 });
1069 },
1070
1071 _initWheel: function () {
1072 utils.addEvent(this.wrapper, 'wheel', this);
1073 utils.addEvent(this.wrapper, 'mousewheel', this);
1074 utils.addEvent(this.wrapper, 'DOMMouseScroll', this);
1075
1076 this.on('destroy', function () {
1077 clearTimeout(this.wheelTimeout);
1078 this.wheelTimeout = null;
1079 utils.removeEvent(this.wrapper, 'wheel', this);
1080 utils.removeEvent(this.wrapper, 'mousewheel', this);
1081 utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);
1082 });
1083 },
1084
1085 _wheel: function (e) {
1086 if ( !this.enabled ) {
1087 return;
1088 }
1089
1090 e.preventDefault();
1091
1092 var wheelDeltaX, wheelDeltaY,
1093 newX, newY,
1094 that = this;
1095
1096 if ( this.wheelTimeout === undefined ) {
1097 that._execEvent('scrollStart');
1098 }
1099
1100 // Execute the scrollEnd event after 400ms the wheel stopped scrolling
1101 clearTimeout(this.wheelTimeout);
1102 this.wheelTimeout = setTimeout(function () {
1103 if(!that.options.snap) {
1104 that._execEvent('scrollEnd');
1105 }
1106 that.wheelTimeout = undefined;
1107 }, 400);
1108
1109 if ( 'deltaX' in e ) {
1110 if (e.deltaMode === 1) {
1111 wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;
1112 wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;
1113 } else {
1114 wheelDeltaX = -e.deltaX;
1115 wheelDeltaY = -e.deltaY;
1116 }
1117 } else if ( 'wheelDeltaX' in e ) {
1118 wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;
1119 wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;
1120 } else if ( 'wheelDelta' in e ) {
1121 wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;
1122 } else if ( 'detail' in e ) {
1123 wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;
1124 } else {
1125 return;
1126 }
1127
1128 wheelDeltaX *= this.options.invertWheelDirection;
1129 wheelDeltaY *= this.options.invertWheelDirection;
1130
1131 if ( !this.hasVerticalScroll ) {
1132 wheelDeltaX = wheelDeltaY;
1133 wheelDeltaY = 0;
1134 }
1135
1136 if ( this.options.snap ) {
1137 newX = this.currentPage.pageX;
1138 newY = this.currentPage.pageY;
1139
1140 if ( wheelDeltaX > 0 ) {
1141 newX--;
1142 } else if ( wheelDeltaX < 0 ) {
1143 newX++;
1144 }
1145
1146 if ( wheelDeltaY > 0 ) {
1147 newY--;
1148 } else if ( wheelDeltaY < 0 ) {
1149 newY++;
1150 }
1151
1152 this.goToPage(newX, newY);
1153
1154 return;
1155 }
1156
1157 newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);
1158 newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);
1159
1160 this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;
1161 this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;
1162
1163 if ( newX > 0 ) {
1164 newX = 0;
1165 } else if ( newX < this.maxScrollX ) {
1166 newX = this.maxScrollX;
1167 }
1168
1169 if ( newY > 0 ) {
1170 newY = 0;
1171 } else if ( newY < this.maxScrollY ) {
1172 newY = this.maxScrollY;
1173 }
1174
1175 this.scrollTo(newX, newY, 0);
1176
1177 // INSERT POINT: _wheel
1178 },
1179
1180 _initSnap: function () {
1181 this.currentPage = {};
1182
1183 if ( typeof this.options.snap == 'string' ) {
1184 this.options.snap = this.scroller.querySelectorAll(this.options.snap);
1185 }
1186
1187 this.on('refresh', function () {
1188 var i = 0, l,
1189 m = 0, n,
1190 cx, cy,
1191 x = 0, y,
1192 stepX = this.options.snapStepX || this.wrapperWidth,
1193 stepY = this.options.snapStepY || this.wrapperHeight,
1194 el;
1195
1196 this.pages = [];
1197
1198 if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {
1199 return;
1200 }
1201
1202 if ( this.options.snap === true ) {
1203 cx = Math.round( stepX / 2 );
1204 cy = Math.round( stepY / 2 );
1205
1206 while ( x > -this.scrollerWidth ) {
1207 this.pages[i] = [];
1208 l = 0;
1209 y = 0;
1210
1211 while ( y > -this.scrollerHeight ) {
1212 this.pages[i][l] = {
1213 x: Math.max(x, this.maxScrollX),
1214 y: Math.max(y, this.maxScrollY),
1215 width: stepX,
1216 height: stepY,
1217 cx: x - cx,
1218 cy: y - cy
1219 };
1220
1221 y -= stepY;
1222 l++;
1223 }
1224
1225 x -= stepX;
1226 i++;
1227 }
1228 } else {
1229 el = this.options.snap;
1230 l = el.length;
1231 n = -1;
1232
1233 for ( ; i < l; i++ ) {
1234 if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {
1235 m = 0;
1236 n++;
1237 }
1238
1239 if ( !this.pages[m] ) {
1240 this.pages[m] = [];
1241 }
1242
1243 x = Math.max(-el[i].offsetLeft, this.maxScrollX);
1244 y = Math.max(-el[i].offsetTop, this.maxScrollY);
1245 cx = x - Math.round(el[i].offsetWidth / 2);
1246 cy = y - Math.round(el[i].offsetHeight / 2);
1247
1248 this.pages[m][n] = {
1249 x: x,
1250 y: y,
1251 width: el[i].offsetWidth,
1252 height: el[i].offsetHeight,
1253 cx: cx,
1254 cy: cy
1255 };
1256
1257 if ( x > this.maxScrollX ) {
1258 m++;
1259 }
1260 }
1261 }
1262
1263 this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);
1264
1265 // Update snap threshold if needed
1266 if ( this.options.snapThreshold % 1 === 0 ) {
1267 this.snapThresholdX = this.options.snapThreshold;
1268 this.snapThresholdY = this.options.snapThreshold;
1269 } else {
1270 this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);
1271 this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);
1272 }
1273 });
1274
1275 this.on('flick', function () {
1276 var time = this.options.snapSpeed || Math.max(
1277 Math.max(
1278 Math.min(Math.abs(this.x - this.startX), 1000),
1279 Math.min(Math.abs(this.y - this.startY), 1000)
1280 ), 300);
1281
1282 this.goToPage(
1283 this.currentPage.pageX + this.directionX,
1284 this.currentPage.pageY + this.directionY,
1285 time
1286 );
1287 });
1288 },
1289
1290 _nearestSnap: function (x, y) {
1291 if ( !this.pages.length ) {
1292 return { x: 0, y: 0, pageX: 0, pageY: 0 };
1293 }
1294
1295 var i = 0,
1296 l = this.pages.length,
1297 m = 0;
1298
1299 // Check if we exceeded the snap threshold
1300 if ( Math.abs(x - this.absStartX) < this.snapThresholdX &&
1301 Math.abs(y - this.absStartY) < this.snapThresholdY ) {
1302 return this.currentPage;
1303 }
1304
1305 if ( x > 0 ) {
1306 x = 0;
1307 } else if ( x < this.maxScrollX ) {
1308 x = this.maxScrollX;
1309 }
1310
1311 if ( y > 0 ) {
1312 y = 0;
1313 } else if ( y < this.maxScrollY ) {
1314 y = this.maxScrollY;
1315 }
1316
1317 for ( ; i < l; i++ ) {
1318 if ( x >= this.pages[i][0].cx ) {
1319 x = this.pages[i][0].x;
1320 break;
1321 }
1322 }
1323
1324 l = this.pages[i].length;
1325
1326 for ( ; m < l; m++ ) {
1327 if ( y >= this.pages[0][m].cy ) {
1328 y = this.pages[0][m].y;
1329 break;
1330 }
1331 }
1332
1333 if ( i == this.currentPage.pageX ) {
1334 i += this.directionX;
1335
1336 if ( i < 0 ) {
1337 i = 0;
1338 } else if ( i >= this.pages.length ) {
1339 i = this.pages.length - 1;
1340 }
1341
1342 x = this.pages[i][0].x;
1343 }
1344
1345 if ( m == this.currentPage.pageY ) {
1346 m += this.directionY;
1347
1348 if ( m < 0 ) {
1349 m = 0;
1350 } else if ( m >= this.pages[0].length ) {
1351 m = this.pages[0].length - 1;
1352 }
1353
1354 y = this.pages[0][m].y;
1355 }
1356
1357 return {
1358 x: x,
1359 y: y,
1360 pageX: i,
1361 pageY: m
1362 };
1363 },
1364
1365 goToPage: function (x, y, time, easing) {
1366 easing = easing || this.options.bounceEasing;
1367
1368 if ( x >= this.pages.length ) {
1369 x = this.pages.length - 1;
1370 } else if ( x < 0 ) {
1371 x = 0;
1372 }
1373
1374 if ( y >= this.pages[x].length ) {
1375 y = this.pages[x].length - 1;
1376 } else if ( y < 0 ) {
1377 y = 0;
1378 }
1379
1380 var posX = this.pages[x][y].x,
1381 posY = this.pages[x][y].y;
1382
1383 time = time === undefined ? this.options.snapSpeed || Math.max(
1384 Math.max(
1385 Math.min(Math.abs(posX - this.x), 1000),
1386 Math.min(Math.abs(posY - this.y), 1000)
1387 ), 300) : time;
1388
1389 this.currentPage = {
1390 x: posX,
1391 y: posY,
1392 pageX: x,
1393 pageY: y
1394 };
1395
1396 this.scrollTo(posX, posY, time, easing);
1397 },
1398
1399 next: function (time, easing) {
1400 var x = this.currentPage.pageX,
1401 y = this.currentPage.pageY;
1402
1403 x++;
1404
1405 if ( x >= this.pages.length && this.hasVerticalScroll ) {
1406 x = 0;
1407 y++;
1408 }
1409
1410 this.goToPage(x, y, time, easing);
1411 },
1412
1413 prev: function (time, easing) {
1414 var x = this.currentPage.pageX,
1415 y = this.currentPage.pageY;
1416
1417 x--;
1418
1419 if ( x < 0 && this.hasVerticalScroll ) {
1420 x = 0;
1421 y--;
1422 }
1423
1424 this.goToPage(x, y, time, easing);
1425 },
1426
1427 _initKeys: function (e) {
1428 // default key bindings
1429 var keys = {
1430 pageUp: 33,
1431 pageDown: 34,
1432 end: 35,
1433 home: 36,
1434 left: 37,
1435 up: 38,
1436 right: 39,
1437 down: 40
1438 };
1439 var i;
1440
1441 // if you give me characters I give you keycode
1442 if ( typeof this.options.keyBindings == 'object' ) {
1443 for ( i in this.options.keyBindings ) {
1444 if ( typeof this.options.keyBindings[i] == 'string' ) {
1445 this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);
1446 }
1447 }
1448 } else {
1449 this.options.keyBindings = {};
1450 }
1451
1452 for ( i in keys ) {
1453 this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];
1454 }
1455
1456 utils.addEvent(window, 'keydown', this);
1457
1458 this.on('destroy', function () {
1459 utils.removeEvent(window, 'keydown', this);
1460 });
1461 },
1462
1463 _key: function (e) {
1464 if ( !this.enabled ) {
1465 return;
1466 }
1467
1468 var snap = this.options.snap, // we are using this alot, better to cache it
1469 newX = snap ? this.currentPage.pageX : this.x,
1470 newY = snap ? this.currentPage.pageY : this.y,
1471 now = utils.getTime(),
1472 prevTime = this.keyTime || 0,
1473 acceleration = 0.250,
1474 pos;
1475
1476 if ( this.options.useTransition && this.isInTransition ) {
1477 pos = this.getComputedPosition();
1478
1479 this._translate(Math.round(pos.x), Math.round(pos.y));
1480 this.isInTransition = false;
1481 }
1482
1483 this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;
1484
1485 switch ( e.keyCode ) {
1486 case this.options.keyBindings.pageUp:
1487 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1488 newX += snap ? 1 : this.wrapperWidth;
1489 } else {
1490 newY += snap ? 1 : this.wrapperHeight;
1491 }
1492 break;
1493 case this.options.keyBindings.pageDown:
1494 if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {
1495 newX -= snap ? 1 : this.wrapperWidth;
1496 } else {
1497 newY -= snap ? 1 : this.wrapperHeight;
1498 }
1499 break;
1500 case this.options.keyBindings.end:
1501 newX = snap ? this.pages.length-1 : this.maxScrollX;
1502 newY = snap ? this.pages[0].length-1 : this.maxScrollY;
1503 break;
1504 case this.options.keyBindings.home:
1505 newX = 0;
1506 newY = 0;
1507 break;
1508 case this.options.keyBindings.left:
1509 newX += snap ? -1 : 5 + this.keyAcceleration>>0;
1510 break;
1511 case this.options.keyBindings.up:
1512 newY += snap ? 1 : 5 + this.keyAcceleration>>0;
1513 break;
1514 case this.options.keyBindings.right:
1515 newX -= snap ? -1 : 5 + this.keyAcceleration>>0;
1516 break;
1517 case this.options.keyBindings.down:
1518 newY -= snap ? 1 : 5 + this.keyAcceleration>>0;
1519 break;
1520 default:
1521 return;
1522 }
1523
1524 if ( snap ) {
1525 this.goToPage(newX, newY);
1526 return;
1527 }
1528
1529 if ( newX > 0 ) {
1530 newX = 0;
1531 this.keyAcceleration = 0;
1532 } else if ( newX < this.maxScrollX ) {
1533 newX = this.maxScrollX;
1534 this.keyAcceleration = 0;
1535 }
1536
1537 if ( newY > 0 ) {
1538 newY = 0;
1539 this.keyAcceleration = 0;
1540 } else if ( newY < this.maxScrollY ) {
1541 newY = this.maxScrollY;
1542 this.keyAcceleration = 0;
1543 }
1544
1545 this.scrollTo(newX, newY, 0);
1546
1547 this.keyTime = now;
1548 },
1549
1550 _animate: function (destX, destY, duration, easingFn) {
1551 var that = this,
1552 startX = this.x,
1553 startY = this.y,
1554 startTime = utils.getTime(),
1555 destTime = startTime + duration;
1556
1557 function step () {
1558 var now = utils.getTime(),
1559 newX, newY,
1560 easing;
1561
1562 if ( now >= destTime ) {
1563 that.isAnimating = false;
1564 that._translate(destX, destY);
1565
1566 if ( !that.resetPosition(that.options.bounceTime) ) {
1567 that._execEvent('scrollEnd');
1568 }
1569
1570 return;
1571 }
1572
1573 now = ( now - startTime ) / duration;
1574 easing = easingFn(now);
1575 newX = ( destX - startX ) * easing + startX;
1576 newY = ( destY - startY ) * easing + startY;
1577 that._translate(newX, newY);
1578
1579 if ( that.isAnimating ) {
1580 rAF(step);
1581 }
1582 }
1583
1584 this.isAnimating = true;
1585 step();
1586 },
1587 handleEvent: function (e) {
1588 switch ( e.type ) {
1589 case 'touchstart':
1590 case 'pointerdown':
1591 case 'MSPointerDown':
1592 case 'mousedown':
1593 this._start(e);
1594 break;
1595 case 'touchmove':
1596 case 'pointermove':
1597 case 'MSPointerMove':
1598 case 'mousemove':
1599 this._move(e);
1600 break;
1601 case 'touchend':
1602 case 'pointerup':
1603 case 'MSPointerUp':
1604 case 'mouseup':
1605 case 'touchcancel':
1606 case 'pointercancel':
1607 case 'MSPointerCancel':
1608 case 'mousecancel':
1609 this._end(e);
1610 break;
1611 case 'orientationchange':
1612 case 'resize':
1613 this._resize();
1614 break;
1615 case 'transitionend':
1616 case 'webkitTransitionEnd':
1617 case 'oTransitionEnd':
1618 case 'MSTransitionEnd':
1619 this._transitionEnd(e);
1620 break;
1621 case 'wheel':
1622 case 'DOMMouseScroll':
1623 case 'mousewheel':
1624 this._wheel(e);
1625 break;
1626 case 'keydown':
1627 this._key(e);
1628 break;
1629 case 'click':
1630 if ( this.enabled && !e._constructed ) {
1631 e.preventDefault();
1632 e.stopPropagation();
1633 }
1634 break;
1635 }
1636 }
1637 };
1638 function createDefaultScrollbar (direction, interactive, type) {
1639 var scrollbar = document.createElement('div'),
1640 indicator = document.createElement('div');
1641
1642 if ( type === true ) {
1643 scrollbar.style.cssText = 'position:absolute;z-index:9999';
1644 indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';
1645 }
1646
1647 indicator.className = 'iScrollIndicator';
1648
1649 if ( direction == 'h' ) {
1650 if ( type === true ) {
1651 scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';
1652 indicator.style.height = '100%';
1653 }
1654 scrollbar.className = 'iScrollHorizontalScrollbar';
1655 } else {
1656 if ( type === true ) {
1657 scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';
1658 indicator.style.width = '100%';
1659 }
1660 scrollbar.className = 'iScrollVerticalScrollbar';
1661 }
1662
1663 scrollbar.style.cssText += ';overflow:hidden';
1664
1665 if ( !interactive ) {
1666 scrollbar.style.pointerEvents = 'none';
1667 }
1668
1669 scrollbar.appendChild(indicator);
1670
1671 return scrollbar;
1672 }
1673
1674 function Indicator (scroller, options) {
1675 this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;
1676 this.wrapperStyle = this.wrapper.style;
1677 this.indicator = this.wrapper.children[0];
1678 this.indicatorStyle = this.indicator.style;
1679 this.scroller = scroller;
1680
1681 this.options = {
1682 listenX: true,
1683 listenY: true,
1684 interactive: false,
1685 resize: true,
1686 defaultScrollbars: false,
1687 shrink: false,
1688 fade: false,
1689 speedRatioX: 0,
1690 speedRatioY: 0
1691 };
1692
1693 for ( var i in options ) {
1694 this.options[i] = options[i];
1695 }
1696
1697 this.sizeRatioX = 1;
1698 this.sizeRatioY = 1;
1699 this.maxPosX = 0;
1700 this.maxPosY = 0;
1701
1702 if ( this.options.interactive ) {
1703 if ( !this.options.disableTouch ) {
1704 utils.addEvent(this.indicator, 'touchstart', this);
1705 utils.addEvent(window, 'touchend', this);
1706 }
1707 if ( !this.options.disablePointer ) {
1708 utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);
1709 utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);
1710 }
1711 if ( !this.options.disableMouse ) {
1712 utils.addEvent(this.indicator, 'mousedown', this);
1713 utils.addEvent(window, 'mouseup', this);
1714 }
1715 }
1716
1717 if ( this.options.fade ) {
1718 this.wrapperStyle[utils.style.transform] = this.scroller.translateZ;
1719 var durationProp = utils.style.transitionDuration;
1720 this.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';
1721 // remove 0.0001ms
1722 var self = this;
1723 if(utils.isBadAndroid) {
1724 rAF(function() {
1725 if(self.wrapperStyle[durationProp] === '0.0001ms') {
1726 self.wrapperStyle[durationProp] = '0s';
1727 }
1728 });
1729 }
1730 this.wrapperStyle.opacity = '0';
1731 }
1732 }
1733
1734 Indicator.prototype = {
1735 handleEvent: function (e) {
1736 switch ( e.type ) {
1737 case 'touchstart':
1738 case 'pointerdown':
1739 case 'MSPointerDown':
1740 case 'mousedown':
1741 this._start(e);
1742 break;
1743 case 'touchmove':
1744 case 'pointermove':
1745 case 'MSPointerMove':
1746 case 'mousemove':
1747 this._move(e);
1748 break;
1749 case 'touchend':
1750 case 'pointerup':
1751 case 'MSPointerUp':
1752 case 'mouseup':
1753 case 'touchcancel':
1754 case 'pointercancel':
1755 case 'MSPointerCancel':
1756 case 'mousecancel':
1757 this._end(e);
1758 break;
1759 }
1760 },
1761
1762 destroy: function () {
1763 if ( this.options.fadeScrollbars ) {
1764 clearTimeout(this.fadeTimeout);
1765 this.fadeTimeout = null;
1766 }
1767 if ( this.options.interactive ) {
1768 utils.removeEvent(this.indicator, 'touchstart', this);
1769 utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);
1770 utils.removeEvent(this.indicator, 'mousedown', this);
1771
1772 utils.removeEvent(window, 'touchmove', this);
1773 utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);
1774 utils.removeEvent(window, 'mousemove', this);
1775
1776 utils.removeEvent(window, 'touchend', this);
1777 utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);
1778 utils.removeEvent(window, 'mouseup', this);
1779 }
1780
1781 if ( this.options.defaultScrollbars ) {
1782 this.wrapper.parentNode.removeChild(this.wrapper);
1783 }
1784 },
1785
1786 _start: function (e) {
1787 var point = e.touches ? e.touches[0] : e;
1788
1789 e.preventDefault();
1790 e.stopPropagation();
1791
1792 this.transitionTime();
1793
1794 this.initiated = true;
1795 this.moved = false;
1796 this.lastPointX = point.pageX;
1797 this.lastPointY = point.pageY;
1798
1799 this.startTime = utils.getTime();
1800
1801 if ( !this.options.disableTouch ) {
1802 utils.addEvent(window, 'touchmove', this);
1803 }
1804 if ( !this.options.disablePointer ) {
1805 utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);
1806 }
1807 if ( !this.options.disableMouse ) {
1808 utils.addEvent(window, 'mousemove', this);
1809 }
1810
1811 this.scroller._execEvent('beforeScrollStart');
1812 },
1813
1814 _move: function (e) {
1815 var point = e.touches ? e.touches[0] : e,
1816 deltaX, deltaY,
1817 newX, newY,
1818 timestamp = utils.getTime();
1819
1820 if ( !this.moved ) {
1821 this.scroller._execEvent('scrollStart');
1822 }
1823
1824 this.moved = true;
1825
1826 deltaX = point.pageX - this.lastPointX;
1827 this.lastPointX = point.pageX;
1828
1829 deltaY = point.pageY - this.lastPointY;
1830 this.lastPointY = point.pageY;
1831
1832 newX = this.x + deltaX;
1833 newY = this.y + deltaY;
1834
1835 this._pos(newX, newY);
1836
1837 // INSERT POINT: indicator._move
1838
1839 e.preventDefault();
1840 e.stopPropagation();
1841 },
1842
1843 _end: function (e) {
1844 if ( !this.initiated ) {
1845 return;
1846 }
1847
1848 this.initiated = false;
1849
1850 e.preventDefault();
1851 e.stopPropagation();
1852
1853 utils.removeEvent(window, 'touchmove', this);
1854 utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);
1855 utils.removeEvent(window, 'mousemove', this);
1856
1857 if ( this.scroller.options.snap ) {
1858 var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);
1859
1860 var time = this.options.snapSpeed || Math.max(
1861 Math.max(
1862 Math.min(Math.abs(this.scroller.x - snap.x), 1000),
1863 Math.min(Math.abs(this.scroller.y - snap.y), 1000)
1864 ), 300);
1865
1866 if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {
1867 this.scroller.directionX = 0;
1868 this.scroller.directionY = 0;
1869 this.scroller.currentPage = snap;
1870 this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);
1871 }
1872 }
1873
1874 if ( this.moved ) {
1875 this.scroller._execEvent('scrollEnd');
1876 }
1877 },
1878
1879 transitionTime: function (time) {
1880 time = time || 0;
1881 var durationProp = utils.style.transitionDuration;
1882 this.indicatorStyle[durationProp] = time + 'ms';
1883
1884 if ( !time && utils.isBadAndroid ) {
1885 this.indicatorStyle[durationProp] = '0.0001ms';
1886 // remove 0.0001ms
1887 var self = this;
1888 rAF(function() {
1889 if(self.indicatorStyle[durationProp] === '0.0001ms') {
1890 self.indicatorStyle[durationProp] = '0s';
1891 }
1892 });
1893 }
1894 },
1895
1896 transitionTimingFunction: function (easing) {
1897 this.indicatorStyle[utils.style.transitionTimingFunction] = easing;
1898 },
1899
1900 refresh: function () {
1901 this.transitionTime();
1902
1903 if ( this.options.listenX && !this.options.listenY ) {
1904 this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
1905 } else if ( this.options.listenY && !this.options.listenX ) {
1906 this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
1907 } else {
1908 this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
1909 }
1910
1911 if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {
1912 utils.addClass(this.wrapper, 'iScrollBothScrollbars');
1913 utils.removeClass(this.wrapper, 'iScrollLoneScrollbar');
1914
1915 if ( this.options.defaultScrollbars && this.options.customStyle ) {
1916 if ( this.options.listenX ) {
1917 this.wrapper.style.right = '8px';
1918 } else {
1919 this.wrapper.style.bottom = '8px';
1920 }
1921 }
1922 } else {
1923 utils.removeClass(this.wrapper, 'iScrollBothScrollbars');
1924 utils.addClass(this.wrapper, 'iScrollLoneScrollbar');
1925
1926 if ( this.options.defaultScrollbars && this.options.customStyle ) {
1927 if ( this.options.listenX ) {
1928 this.wrapper.style.right = '2px';
1929 } else {
1930 this.wrapper.style.bottom = '2px';
1931 }
1932 }
1933 }
1934
1935 var r = this.wrapper.offsetHeight; // force refresh
1936
1937 if ( this.options.listenX ) {
1938 this.wrapperWidth = this.wrapper.clientWidth;
1939 if ( this.options.resize ) {
1940 this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);
1941 this.indicatorStyle.width = this.indicatorWidth + 'px';
1942 } else {
1943 this.indicatorWidth = this.indicator.clientWidth;
1944 }
1945
1946 this.maxPosX = this.wrapperWidth - this.indicatorWidth;
1947
1948 if ( this.options.shrink == 'clip' ) {
1949 this.minBoundaryX = -this.indicatorWidth + 8;
1950 this.maxBoundaryX = this.wrapperWidth - 8;
1951 } else {
1952 this.minBoundaryX = 0;
1953 this.maxBoundaryX = this.maxPosX;
1954 }
1955
1956 this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));
1957 }
1958
1959 if ( this.options.listenY ) {
1960 this.wrapperHeight = this.wrapper.clientHeight;
1961 if ( this.options.resize ) {
1962 this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);
1963 this.indicatorStyle.height = this.indicatorHeight + 'px';
1964 } else {
1965 this.indicatorHeight = this.indicator.clientHeight;
1966 }
1967
1968 this.maxPosY = this.wrapperHeight - this.indicatorHeight;
1969
1970 if ( this.options.shrink == 'clip' ) {
1971 this.minBoundaryY = -this.indicatorHeight + 8;
1972 this.maxBoundaryY = this.wrapperHeight - 8;
1973 } else {
1974 this.minBoundaryY = 0;
1975 this.maxBoundaryY = this.maxPosY;
1976 }
1977
1978 this.maxPosY = this.wrapperHeight - this.indicatorHeight;
1979 this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));
1980 }
1981
1982 this.updatePosition();
1983 },
1984
1985 updatePosition: function () {
1986 var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,
1987 y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;
1988
1989 if ( !this.options.ignoreBoundaries ) {
1990 if ( x < this.minBoundaryX ) {
1991 if ( this.options.shrink == 'scale' ) {
1992 this.width = Math.max(this.indicatorWidth + x, 8);
1993 this.indicatorStyle.width = this.width + 'px';
1994 }
1995 x = this.minBoundaryX;
1996 } else if ( x > this.maxBoundaryX ) {
1997 if ( this.options.shrink == 'scale' ) {
1998 this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);
1999 this.indicatorStyle.width = this.width + 'px';
2000 x = this.maxPosX + this.indicatorWidth - this.width;
2001 } else {
2002 x = this.maxBoundaryX;
2003 }
2004 } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {
2005 this.width = this.indicatorWidth;
2006 this.indicatorStyle.width = this.width + 'px';
2007 }
2008
2009 if ( y < this.minBoundaryY ) {
2010 if ( this.options.shrink == 'scale' ) {
2011 this.height = Math.max(this.indicatorHeight + y * 3, 8);
2012 this.indicatorStyle.height = this.height + 'px';
2013 }
2014 y = this.minBoundaryY;
2015 } else if ( y > this.maxBoundaryY ) {
2016 if ( this.options.shrink == 'scale' ) {
2017 this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);
2018 this.indicatorStyle.height = this.height + 'px';
2019 y = this.maxPosY + this.indicatorHeight - this.height;
2020 } else {
2021 y = this.maxBoundaryY;
2022 }
2023 } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {
2024 this.height = this.indicatorHeight;
2025 this.indicatorStyle.height = this.height + 'px';
2026 }
2027 }
2028
2029 this.x = x;
2030 this.y = y;
2031
2032 if ( this.scroller.options.useTransform ) {
2033 this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;
2034 } else {
2035 this.indicatorStyle.left = x + 'px';
2036 this.indicatorStyle.top = y + 'px';
2037 }
2038 },
2039
2040 _pos: function (x, y) {
2041 if ( x < 0 ) {
2042 x = 0;
2043 } else if ( x > this.maxPosX ) {
2044 x = this.maxPosX;
2045 }
2046
2047 if ( y < 0 ) {
2048 y = 0;
2049 } else if ( y > this.maxPosY ) {
2050 y = this.maxPosY;
2051 }
2052
2053 x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;
2054 y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;
2055
2056 this.scroller.scrollTo(x, y);
2057 },
2058
2059 fade: function (val, hold) {
2060 if ( hold && !this.visible ) {
2061 return;
2062 }
2063
2064 clearTimeout(this.fadeTimeout);
2065 this.fadeTimeout = null;
2066
2067 var time = val ? 250 : 500,
2068 delay = val ? 0 : 300;
2069
2070 val = val ? '1' : '0';
2071
2072 this.wrapperStyle[utils.style.transitionDuration] = time + 'ms';
2073
2074 this.fadeTimeout = setTimeout((function (val) {
2075 this.wrapperStyle.opacity = val;
2076 this.visible = +val;
2077 }).bind(this, val), delay);
2078 }
2079 };
2080
2081 IScroll.utils = utils;
2082
2083 if ( typeof module != 'undefined' && module.exports ) {
2084 module.exports = IScroll;
2085 } else if ( typeof define == 'function' && define.amd ) {
2086 define( function () { return IScroll; } );
2087 } else {
2088 window.IScroll = IScroll;
2089 }
2090
2091 })(window, document, Math);