From 2cdfdf532dc528e78d779aa2747a6480a5b945b5 Mon Sep 17 00:00:00 2001 From: Kevin Fitzgerald Date: Mon, 6 Apr 2015 16:08:11 -0500 Subject: [PATCH] Tagged as v0.2.12 --- bower.json | 2 +- dist/okanjo-bundle.js | 4 ++-- dist/okanjo-bundle.min.js | 6 +++--- dist/okanjo-bundle.min.js.map | 2 +- dist/okanjo-templates.js | 2 +- dist/okanjo-templates.min.js | 4 ++-- dist/okanjo.js | 2 +- dist/okanjo.min.js | 2 +- package.json | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/bower.json b/bower.json index a8c5896..bd496d3 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "okanjo", "main": "build/okanjo.js", - "version": "0.2.11", + "version": "0.2.12", "authors": [ "Okanjo Partners Inc" ], diff --git a/dist/okanjo-bundle.js b/dist/okanjo-bundle.js index d7c4630..2684359 100644 --- a/dist/okanjo-bundle.js +++ b/dist/okanjo-bundle.js @@ -1,4 +1,4 @@ -/*! okanjo-js v0.2.11 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ +/*! okanjo-js v0.2.12 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define([], factory); @@ -2992,7 +2992,7 @@ if (typeof JSON !== 'object') { return okanjo; })); -/*! okanjo-js v0.2.11 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ +/*! okanjo-js v0.2.12 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ (function(okanjo) { okanjo.mvc.registerCss("okanjo.core", "", { id: 'okanjo-core' }); diff --git a/dist/okanjo-bundle.min.js b/dist/okanjo-bundle.min.js index 32d80b9..9a6379b 100644 --- a/dist/okanjo-bundle.min.js +++ b/dist/okanjo-bundle.min.js @@ -1,5 +1,5 @@ -/*! okanjo-js v0.2.11 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ -/*! okanjo-js v0.2.11 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ +/*! okanjo-js v0.2.12 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ +/*! okanjo-js v0.2.12 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */ !function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.okanjo=t()}(this,function(){var okanjo=okanjo||window.okanjo||function(){var e={metrics:{trackEvent:function(){},trackPageView:function(){}},routes:{products:"/products",products_id:"/products/:product_id",products_sense:"/products/sense"},getRoute:function(t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(t=t.replace(":"+r,n[r]+""));return e.config.ads.apiUri+t},exec:function(t,n,r){n=n||{},e.JSONP({url:t,data:n,error:function(t){var n={statusCode:500,error:"Communication Error",message:t.message||"JSONP communication failure."};e.report("core-jsonp",t.error||new Error(n.message)),r(n,null)},success:function(t){var n,o;t?t.error?n=t:o=t:(n={statusCode:500,error:"Invalid Response",message:"Could not interpret the JSONP response."},e.report("core-jsonp",new Error(n.message))),r(n,o)}})},report:function(e,t){var n;"string"==typeof t?n=new Error("[Okanjo"+(e?" "+e:"")+"] "+t):"object"==typeof t&&t instanceof Error&&(n=t),console.error(n)},util:{trim:function(e){(e||"").replace(/^\s+|\s+$/g,"")},empty:function(t){return null===t||void 0===t||"string"==typeof t&&""===e.util.trim(t)},clone:function(e){var t={};e=e||{};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},hash:function(e){var t=0;if(0===e.length)return t;for(var n=0;n=0;r--)0===n[r].name.indexOf("data-")&&(t[n[r].name.substr(5)]=n[r].value);return t},copyIfSet:function(t,n,r,o,i){function s(o){!n||void 0===n[o]||i.stripEmpty&&e.util.empty(n[o])||(t[r]=n[o])}if(o=o||r,i=i||{},"object"==typeof o&&Array.isArray(o))for(var a=0;a"'\/]/g,function(e){return m[e]})}function s(t,r){function i(){if(j&&!_)for(;m.length;)delete g[m.pop()];else m=[];j=!1,_=!1}function s(e){if("string"==typeof e&&(e=e.split(k,2)),!d(e)||2!==e.length)throw new Error("Invalid tags: "+e);p=new RegExp(n(e[0])+"\\s*"),l=new RegExp("\\s*"+n(e[1])),f=new RegExp("\\s*"+n("}"+e[1]))}if(!t)return[];var p,l,f,h=[],g=[],m=[],j=!1,_=!1;s(r||e.tags);for(var x,O,S,E,C,T,P=new u(t);!P.eos();){if(x=P.pos,S=P.scanUntil(p))for(var I=0,N=S.length;N>I;++I)E=S.charAt(I),o(E)?m.push(g.length):_=!0,g.push(["text",E,x,x+1]),x+=1,"\n"===E&&i();if(!P.scan(p))break;if(j=!0,O=P.scan(w)||"name",P.scan(y),"="===O?(S=P.scanUntil(v),P.scan(v),P.scanUntil(l)):"{"===O?(S=P.scanUntil(f),P.scan(b),P.scanUntil(l),O="&"):S=P.scanUntil(l),!P.scan(l))throw new Error("Unclosed tag at "+P.pos);if(C=[O,S,x,P.pos],g.push(C),"#"===O||"^"===O)h.push(C);else if("/"===O){if(T=h.pop(),!T)throw new Error('Unopened section "'+S+'" at '+x);if(T[1]!==S)throw new Error('Unclosed section "'+T[1]+'" at '+x)}else"name"===O||"{"===O||"&"===O?_=!0:"="===O&&s(S)}if(T=h.pop())throw new Error('Unclosed section "'+T[1]+'" at '+P.pos);return c(a(g))}function a(e){for(var t,n,r=[],o=0,i=e.length;i>o;++o)t=e[o],t&&("text"===t[0]&&n&&"text"===n[0]?(n[1]+=t[1],n[3]=t[3]):(r.push(t),n=t));return r}function c(e){for(var t,n,r=[],o=r,i=[],s=0,a=e.length;a>s;++s)switch(t=e[s],t[0]){case"#":case"^":o.push(t),i.push(t),o=t[4]=[];break;case"/":n=i.pop(),n[5]=t[2],o=i.length>0?i[i.length-1][4]:r;break;default:o.push(t)}return r}function u(e){this.string=e,this.tail=e,this.pos=0}function p(e,t){this.view=null==e?{}:e,this.cache={".":this.view},this.parent=t}function l(){this.cache={}}var f=Object.prototype.toString,d=Array.isArray||function(e){return"[object Array]"===f.call(e)},h=RegExp.prototype.test,g=/\S/,m={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},y=/\s*/,k=/\s+/,v=/\s*=/,b=/\s*\}/,w=/#|\^|\/|>|\{|&|=|!/;u.prototype.eos=function(){return""===this.tail},u.prototype.scan=function(e){var t=this.tail.match(e);if(!t||0!==t.index)return"";var n=t[0];return this.tail=this.tail.substring(n.length),this.pos+=n.length,n},u.prototype.scanUntil=function(e){var t,n=this.tail.search(e);switch(n){case-1:t=this.tail,this.tail="";break;case 0:t="";break;default:t=this.tail.substring(0,n),this.tail=this.tail.substring(n)}return this.pos+=t.length,t},p.prototype.push=function(e){return new p(e,this)},p.prototype.lookup=function(e){var n,r=this.cache;if(e in r)n=r[e];else{for(var o,i,s=this;s;){if(e.indexOf(".")>0)for(n=s.view,o=e.split("."),i=0;null!=n&&ic;++c)s=void 0,o=e[c],i=o[0],"#"===i?s=this._renderSection(o,t,n,r):"^"===i?s=this._renderInverted(o,t,n,r):">"===i?s=this._renderPartial(o,t,n,r):"&"===i?s=this._unescapedValue(o,t):"name"===i?s=this._escapedValue(o,t):"text"===i&&(s=this._rawValue(o)),void 0!==s&&(a+=s);return a},l.prototype._renderSection=function(e,n,r,o){function i(e){return s.render(e,n,r)}var s=this,a="",c=n.lookup(e[1]);if(c){if(d(c))for(var u=0,p=c.length;p>u;++u)a+=this.renderTokens(e[4],n.push(c[u]),r,o);else if("object"==typeof c||"string"==typeof c)a+=this.renderTokens(e[4],n.push(c),r,o);else if(t(c)){if("string"!=typeof o)throw new Error("Cannot use higher-order sections without the original template");c=c.call(n.view,o.slice(e[3],e[5]),i),null!=c&&(a+=c)}else a+=this.renderTokens(e[4],n,r,o);return a}},l.prototype._renderInverted=function(e,t,n,r){var o=t.lookup(e[1]);return!o||d(o)&&0===o.length?this.renderTokens(e[4],t,n,r):void 0},l.prototype._renderPartial=function(e,n,r){if(r){var o=t(r)?r(e[1]):r[e[1]];return null!=o?this.renderTokens(this.parse(o),n,r,o):void 0}},l.prototype._unescapedValue=function(e,t){var n=t.lookup(e[1]);return null!=n?n:void 0},l.prototype._escapedValue=function(t,n){var r=n.lookup(t[1]);return null!=r?e.escape(r):void 0},l.prototype._rawValue=function(e){return e[1]},e.name="mustache.js",e.version="1.1.0",e.tags=["{{","}}"];var j=new l;e.clearCache=function(){return j.clearCache()},e.parse=function(e,t){return j.parse(e,t)},e.render=function(e,t,n){return j.render(e,t,n)},e.to_html=function(n,r,o,i){var s=e.render(n,r,o);return t(i)?void i(s):s},e.escape=i,e.Scanner=u,e.Context=p,e.Writer=l})}.apply(okanjo),function(e,t){var n=e.metrics={_trackers:{},events:{},addGoogleTracker:function(e,r){t._gaq=t._gaq||[];var o=t._gaq;r||(r="tracker_"+Object.keys(n._trackers).length),o.push(function(){t._gat._createTracker(e,r)}),o.push([r+"._setDomainName",t.location.host]),o.push([r+"._setAllowLinker",!0])},addDefaultTracker:function(e){n.addTracker(e,function(n){"undefined"==typeof n.type&&(n.type="event"),t._gaq.push([e+"."+("pageview"==n.type?"_trackPageview":"_trackEvent")].concat(n.args))})},addTracker:function(e,t){n._trackers[e]=t},trackEvent:function(){n.track({type:"event",args:arguments})},trackPageView:function(){this.track({type:"pageview",args:arguments})},track:function(e){for(var t in n._trackers)n._trackers.hasOwnProperty(t)&&n._trackers[t](e)}};!function(){if(!document.getElementById("#okanjo-metrics")){var t=document.createElement("script");t.type="text/javascript",t.async=!0,t.src=("https:"==document.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js",t.id="okanjo-metrics",e.qwery("body")[0].appendChild(t),n.addGoogleTracker(e.config.analyticsId,"okanjo")}n.addDefaultTracker("okanjo")}()}(okanjo,this),function(e,t){var n=e.Cache,r=e.Product=function(e,t){if(!e||"object"!=typeof e||void 0===e.nodeType)throw new Error("Invalid element - must be a valid DOM element");if("undefined"!=typeof t&&"object"!=typeof t)throw new Error("Invalid configuration, must be an object or nothing at all, got: "+typeof t);t=t||{},this.items=[],this.element=e,this.config=t||{mode:this.modes.browse,use_cache:!0,cache_ttl:6e4},this.config.nag=void 0===t.nag?!0:t.nag===!0,this.config.use_cache=void 0===t.use_cache?!0:t.use_cache===!0,this.config.cache_ttl=void 0===t.cache_ttl?6e4:t.cache_ttl,t.no_init||this.init()};return r.prototype={cache_key_prefix:"ok_product_block_",modes:{browse:"browse",sense:"sense",single:"single"},templates:{error:"okanjo.error",main:"product.block"},css:{main:"product.block"},cacheKeyAttributes:"mode,url,selectors,text,id,q,marketplace_status,marketplace_id,external_id,sku,sold_by,min_price,max_price,condition,manufacturer,upc,isbn,tags,category,min_donation_percent,max_donation_percent,donation_to,suboptimal,skip,take".split(","),constructor:r,init:function(){if(this.findWidgetKey()){this.ensureTemplates(),this.parseConfiguration(),this.config.id||this.config.mode==this.modes.single?this.config.mode=e.util.empty(this.config.id)?this.modes.browse:this.modes.single:(this.config.url||this.config.text||this.config.mode==this.modes.sense)&&(e.util.empty(this.config.url)&&e.util.empty(this.config.text)&&(this.config.url=this.getCurrentPageUrl()),this.config.mode=this.modes.sense),this.config.use_cache&&this.loadProductsFromCache()||this.getProducts();var n=t.location;e.metrics.trackEvent("Okanjo Product Widget","Loaded",n.protocol+"//"+n.hostname+(n.port?":"+n.port:"")+n.pathname);var r=this;setTimeout(function(){r.cleanCache()},2e3)}},ensureTemplates:function(){var t,n=this.templates,r=this.css;for(t in n)if(n.hasOwnProperty(t)&&!e.mvc.isTemplateRegistered(n[t]))throw new Error("[Okanjo] Missing template: "+n[t]);for(t in r)if(r.hasOwnProperty(t)&&!e.mvc.isCssRegistered(r[t]))throw new Error("[Okanjo] Missing css block: "+r[t])},parseConfiguration:function(){var t=e.util.data(this.element);e.util.copyIfSetMap(this.config,t,{mode:"mode",url:"url",selectors:"selectors",text:"text",id:"id",q:"query",marketplace_status:["marketplace-status"],marketplace_id:["marketplace-id"],external_id:"external-id",sku:"sku",sold_by:"sold-by",min_price:"min-price",max_price:"max-price",condition:"condition",manufacturer:"manufacturer",upc:"upc",isbn:"isbn",tags:"tags",category:"category",min_donation_percent:"min-donation-percent",max_donation_percent:"max-donation-percent",donation_to:"donation-to",suboptimal:"suboptimal",skip:["skip","page-start"],take:["take","page-size"]},{stripEmpty:!0})},getCurrentPageUrl:function(){var e=t.location.href,n=Math.min(e.indexOf("?"),e.indexOf("#")),r=n>0?e.substr(0,n):e;return this.config.nag&&console.info("[Okanjo.Product] No canonical url given for ProductSense. We recommend using a canonical url to ensure page visibility by Okanjo. Using derived url:",r),r},getCacheKey:function(){for(var n=[t.location.host+t.location.pathname],r=this.cacheKeyAttributes,o=0;o=0&&r.push(s)}for(i=0;i"'\/]/g,function(e){return m[e]})}function s(t,r){function i(){if(j&&!_)for(;m.length;)delete g[m.pop()];else m=[];j=!1,_=!1}function s(e){if("string"==typeof e&&(e=e.split(k,2)),!d(e)||2!==e.length)throw new Error("Invalid tags: "+e);p=new RegExp(n(e[0])+"\\s*"),l=new RegExp("\\s*"+n(e[1])),f=new RegExp("\\s*"+n("}"+e[1]))}if(!t)return[];var p,l,f,h=[],g=[],m=[],j=!1,_=!1;s(r||e.tags);for(var x,O,S,E,C,T,P=new u(t);!P.eos();){if(x=P.pos,S=P.scanUntil(p))for(var I=0,N=S.length;N>I;++I)E=S.charAt(I),o(E)?m.push(g.length):_=!0,g.push(["text",E,x,x+1]),x+=1,"\n"===E&&i();if(!P.scan(p))break;if(j=!0,O=P.scan(w)||"name",P.scan(y),"="===O?(S=P.scanUntil(v),P.scan(v),P.scanUntil(l)):"{"===O?(S=P.scanUntil(f),P.scan(b),P.scanUntil(l),O="&"):S=P.scanUntil(l),!P.scan(l))throw new Error("Unclosed tag at "+P.pos);if(C=[O,S,x,P.pos],g.push(C),"#"===O||"^"===O)h.push(C);else if("/"===O){if(T=h.pop(),!T)throw new Error('Unopened section "'+S+'" at '+x);if(T[1]!==S)throw new Error('Unclosed section "'+T[1]+'" at '+x)}else"name"===O||"{"===O||"&"===O?_=!0:"="===O&&s(S)}if(T=h.pop())throw new Error('Unclosed section "'+T[1]+'" at '+P.pos);return c(a(g))}function a(e){for(var t,n,r=[],o=0,i=e.length;i>o;++o)t=e[o],t&&("text"===t[0]&&n&&"text"===n[0]?(n[1]+=t[1],n[3]=t[3]):(r.push(t),n=t));return r}function c(e){for(var t,n,r=[],o=r,i=[],s=0,a=e.length;a>s;++s)switch(t=e[s],t[0]){case"#":case"^":o.push(t),i.push(t),o=t[4]=[];break;case"/":n=i.pop(),n[5]=t[2],o=i.length>0?i[i.length-1][4]:r;break;default:o.push(t)}return r}function u(e){this.string=e,this.tail=e,this.pos=0}function p(e,t){this.view=null==e?{}:e,this.cache={".":this.view},this.parent=t}function l(){this.cache={}}var f=Object.prototype.toString,d=Array.isArray||function(e){return"[object Array]"===f.call(e)},h=RegExp.prototype.test,g=/\S/,m={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},y=/\s*/,k=/\s+/,v=/\s*=/,b=/\s*\}/,w=/#|\^|\/|>|\{|&|=|!/;u.prototype.eos=function(){return""===this.tail},u.prototype.scan=function(e){var t=this.tail.match(e);if(!t||0!==t.index)return"";var n=t[0];return this.tail=this.tail.substring(n.length),this.pos+=n.length,n},u.prototype.scanUntil=function(e){var t,n=this.tail.search(e);switch(n){case-1:t=this.tail,this.tail="";break;case 0:t="";break;default:t=this.tail.substring(0,n),this.tail=this.tail.substring(n)}return this.pos+=t.length,t},p.prototype.push=function(e){return new p(e,this)},p.prototype.lookup=function(e){var n,r=this.cache;if(e in r)n=r[e];else{for(var o,i,s=this;s;){if(e.indexOf(".")>0)for(n=s.view,o=e.split("."),i=0;null!=n&&ic;++c)s=void 0,o=e[c],i=o[0],"#"===i?s=this._renderSection(o,t,n,r):"^"===i?s=this._renderInverted(o,t,n,r):">"===i?s=this._renderPartial(o,t,n,r):"&"===i?s=this._unescapedValue(o,t):"name"===i?s=this._escapedValue(o,t):"text"===i&&(s=this._rawValue(o)),void 0!==s&&(a+=s);return a},l.prototype._renderSection=function(e,n,r,o){function i(e){return s.render(e,n,r)}var s=this,a="",c=n.lookup(e[1]);if(c){if(d(c))for(var u=0,p=c.length;p>u;++u)a+=this.renderTokens(e[4],n.push(c[u]),r,o);else if("object"==typeof c||"string"==typeof c)a+=this.renderTokens(e[4],n.push(c),r,o);else if(t(c)){if("string"!=typeof o)throw new Error("Cannot use higher-order sections without the original template");c=c.call(n.view,o.slice(e[3],e[5]),i),null!=c&&(a+=c)}else a+=this.renderTokens(e[4],n,r,o);return a}},l.prototype._renderInverted=function(e,t,n,r){var o=t.lookup(e[1]);return!o||d(o)&&0===o.length?this.renderTokens(e[4],t,n,r):void 0},l.prototype._renderPartial=function(e,n,r){if(r){var o=t(r)?r(e[1]):r[e[1]];return null!=o?this.renderTokens(this.parse(o),n,r,o):void 0}},l.prototype._unescapedValue=function(e,t){var n=t.lookup(e[1]);return null!=n?n:void 0},l.prototype._escapedValue=function(t,n){var r=n.lookup(t[1]);return null!=r?e.escape(r):void 0},l.prototype._rawValue=function(e){return e[1]},e.name="mustache.js",e.version="1.1.0",e.tags=["{{","}}"];var j=new l;e.clearCache=function(){return j.clearCache()},e.parse=function(e,t){return j.parse(e,t)},e.render=function(e,t,n){return j.render(e,t,n)},e.to_html=function(n,r,o,i){var s=e.render(n,r,o);return t(i)?void i(s):s},e.escape=i,e.Scanner=u,e.Context=p,e.Writer=l})}.apply(okanjo),function(e,t){var n=e.metrics={_trackers:{},events:{},addGoogleTracker:function(e,r){t._gaq=t._gaq||[];var o=t._gaq;r||(r="tracker_"+Object.keys(n._trackers).length),o.push(function(){t._gat._createTracker(e,r)}),o.push([r+"._setDomainName",t.location.host]),o.push([r+"._setAllowLinker",!0])},addDefaultTracker:function(e){n.addTracker(e,function(n){"undefined"==typeof n.type&&(n.type="event"),t._gaq.push([e+"."+("pageview"==n.type?"_trackPageview":"_trackEvent")].concat(n.args))})},addTracker:function(e,t){n._trackers[e]=t},trackEvent:function(){n.track({type:"event",args:arguments})},trackPageView:function(){this.track({type:"pageview",args:arguments})},track:function(e){for(var t in n._trackers)n._trackers.hasOwnProperty(t)&&n._trackers[t](e)}};!function(){if(!document.getElementById("#okanjo-metrics")){var t=document.createElement("script");t.type="text/javascript",t.async=!0,t.src=("https:"==document.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js",t.id="okanjo-metrics",e.qwery("body")[0].appendChild(t),n.addGoogleTracker(e.config.analyticsId,"okanjo")}n.addDefaultTracker("okanjo")}()}(okanjo,this),function(e,t){var n=e.Cache,r=e.Product=function(e,t){if(!e||"object"!=typeof e||void 0===e.nodeType)throw new Error("Invalid element - must be a valid DOM element");if("undefined"!=typeof t&&"object"!=typeof t)throw new Error("Invalid configuration, must be an object or nothing at all, got: "+typeof t);t=t||{},this.items=[],this.element=e,this.config=t||{mode:this.modes.browse,use_cache:!0,cache_ttl:6e4},this.config.nag=void 0===t.nag?!0:t.nag===!0,this.config.use_cache=void 0===t.use_cache?!0:t.use_cache===!0,this.config.cache_ttl=void 0===t.cache_ttl?6e4:t.cache_ttl,t.no_init||this.init()};return r.prototype={cache_key_prefix:"ok_product_block_",modes:{browse:"browse",sense:"sense",single:"single"},templates:{error:"okanjo.error",main:"product.block"},css:{main:"product.block"},cacheKeyAttributes:"mode,url,selectors,text,id,q,marketplace_status,marketplace_id,external_id,sku,sold_by,min_price,max_price,condition,manufacturer,upc,isbn,tags,category,min_donation_percent,max_donation_percent,donation_to,suboptimal,skip,take".split(","),constructor:r,init:function(){if(this.findWidgetKey()){this.ensureTemplates(),this.parseConfiguration(),this.config.id||this.config.mode==this.modes.single?this.config.mode=e.util.empty(this.config.id)?this.modes.browse:this.modes.single:(this.config.url||this.config.text||this.config.mode==this.modes.sense)&&(e.util.empty(this.config.url)&&e.util.empty(this.config.text)&&(this.config.url=this.getCurrentPageUrl()),this.config.mode=this.modes.sense),this.config.use_cache&&this.loadProductsFromCache()||this.getProducts();var n=t.location;e.metrics.trackEvent("Okanjo Product Widget","Loaded",n.protocol+"//"+n.hostname+(n.port?":"+n.port:"")+n.pathname);var r=this;setTimeout(function(){r.cleanCache()},2e3)}},ensureTemplates:function(){var t,n=this.templates,r=this.css;for(t in n)if(n.hasOwnProperty(t)&&!e.mvc.isTemplateRegistered(n[t]))throw new Error("[Okanjo] Missing template: "+n[t]);for(t in r)if(r.hasOwnProperty(t)&&!e.mvc.isCssRegistered(r[t]))throw new Error("[Okanjo] Missing css block: "+r[t])},parseConfiguration:function(){var t=e.util.data(this.element);e.util.copyIfSetMap(this.config,t,{mode:"mode",url:"url",selectors:"selectors",text:"text",id:"id",q:"query",marketplace_status:["marketplace-status"],marketplace_id:["marketplace-id"],external_id:"external-id",sku:"sku",sold_by:"sold-by",min_price:"min-price",max_price:"max-price",condition:"condition",manufacturer:"manufacturer",upc:"upc",isbn:"isbn",tags:"tags",category:"category",min_donation_percent:"min-donation-percent",max_donation_percent:"max-donation-percent",donation_to:"donation-to",suboptimal:"suboptimal",skip:["skip","page-start"],take:["take","page-size"]},{stripEmpty:!0})},getCurrentPageUrl:function(){var e=t.location.href,n=Math.min(e.indexOf("?"),e.indexOf("#")),r=n>0?e.substr(0,n):e;return this.config.nag&&console.info("[Okanjo.Product] No canonical url given for ProductSense. We recommend using a canonical url to ensure page visibility by Okanjo. Using derived url:",r),r},getCacheKey:function(){for(var n=[t.location.host+t.location.pathname],r=this.cacheKeyAttributes,o=0;o=0&&r.push(s)}for(i=0;i{{ message }} {{#code}} Reference: {{ code }} {{/code}}",{css:["okanjo.core"]}),e.mvc.registerCss("product.block",'.lt-ie8.okanjo-product-block .okanjo-product-title,.lt-ie8.okanjo-product-block .okanjo-product-title-container:before{zoom:1}.okanjo-product-block .okanjo-product-list{list-style-type:none;padding:0}.okanjo-product-block .okanjo-product{width:150px;overflow:hidden;text-align:center;border:1px solid #ccc;padding:.5em;display:inline-block;margin:0 .1em;box-shadow:1px 1px 1px 1px #eee;background-color:#fff}.lt-ie8.okanjo-product-block .okanjo-product{display:inline;zoom:1}.okanjo-product-block .okanjo-product-image-container{height:150px}.okanjo-product-block .okanjo-product-image{max-width:100%;max-height:100%;border:0}.okanjo-product-block .okanjo-product-title-container{margin:.5em;height:4em;overflow:auto;vertical-align:middle}.okanjo-product-block .okanjo-product-title-container:before{content:"";display:inline-block;height:100%;vertical-align:middle}.okanjo-product-block .okanjo-product-title{vertical-align:middle;display:inline-block}.okanjo-product-block .okanjo-product-meta{height:0;width:0;text-indent:-100%;overflow:hidden}.lt-ie7.okanjo-product-block .okanjo-product,.lt-ie8.okanjo-product-block .okanjo-product,.lt-ie9.okanjo-product-block .okanjo-product{margin-bottom:.2em}.lt-ie7.okanjo-product-block .okanjo-product-title-container:before,.lt-ie8.okanjo-product-block .okanjo-product-title-container:before,.lt-ie9.okanjo-product-block .okanjo-product-title-container:before{display:block;height:0}.lt-ie7.okanjo-product-block .okanjo-product-title,.lt-ie8.okanjo-product-block .okanjo-product-title,.lt-ie9.okanjo-product-block .okanjo-product-title{display:block}',{id:"okanjo-product-block"}),e.mvc.registerTemplate("product.block",'',function(t,n){return t=t||{products:[],config:{}},n=e.util.clone(n),n.config=t.config,n.products=e.mvc.formats.product(t.products),n},{css:["product.block"]})}(okanjo); //# sourceMappingURL=okanjo-bundle.min.js.map \ No newline at end of file diff --git a/dist/okanjo-bundle.min.js.map b/dist/okanjo-bundle.min.js.map index b6350f2..ebe7b2e 100644 --- a/dist/okanjo-bundle.min.js.map +++ b/dist/okanjo-bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["okanjo.js","okanjo-templates.js"],"names":["root","factory","define","amd","exports","module","okanjo","this","window","metrics","trackEvent","trackPageView","routes","products","products_id","products_sense","getRoute","route","params","i","hasOwnProperty","replace","config","ads","apiUri","exec","url","data","callback","JSONP","error","err","statusCode","message","report","Error","success","res","context","mixed","console","util","trim","val","empty","undefined","clone","obj","k","hash","str","length","char","charCodeAt","toString","element","attrs","attributes","name","indexOf","substr","value","copyIfSet","target","source","targetKey","sourceKey","options","doCopy","stripEmpty","Array","isArray","copyIfSetMap","map","keys","Object","inherits","create","ctor","superCtor","super_","prototype","constructor","enumerable","writable","configurable","TempCtor","key","analyticsId","marketplace","uri","routerUri","balancedMarketplacePath","socketIOUri","configure","every","TemplateEngine","templates","css","_templates","_css","classDetects","navigator","appVersion","push","join","registerTemplate","template","viewClosure","nodeType","Mustache","parse","arguments","markup","registerCss","isTemplateRegistered","isCssRegistered","ensureCss","id","elements","qwery","head","style","document","createElement","setAttribute","innerHTML","styleSheet","cssText","appendChild","body","render","templateName","view","okanjoConfig","okanjoMetricUrl","now","Date","getTime","formats","currency","decimals","decimalSeparator","thousandsSeparator","isNaN","Math","abs","s","parseInt","toFixed","j","slice","product","image_url","image_urls","escaped_buy_url","encodeURIComponent","buy_url","price","mvc","computedUrl","encode","noop","objectToURI","makeUniqueCallback","requestCounter","done","script","timeoutHandle","removeCallback","beforeSend","complete","timeout","callbackName","clearTimeout","_error","src","async","setTimeout","onerror","evt","event","onload","onreadystatechange","log","readyState","parentNode","removeChild","getElementsByTagName","documentElement","insertBefore","firstChild","call","hasDontEnumBug","propertyIsEnumerable","dontEnums","dontEnumsLength","TypeError","prop","result","arg","searchElement","fromIndex","O","len","n","Infinity","max","con","method","dummy","properties","split","methods","pop","c","isLocalStorageNameSupported","testKey","storage","sessionStorage","setItem","removeItem","OkanjoCache","localStorage","_data","_updateLen","String","getItem","clear","index","Cache","w","cookie","Cookie","set","cookieName","expireDays","expireDate","setDate","getDate","cookieValue","encodeURI","toUTCString","get","idx","nameTest","cookieArray","decodeURI","JSON","f","quote","string","escapable","lastIndex","test","a","meta","holder","v","partial","mind","gap","toJSON","rep","isFinite","indent","apply","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","cx","\b","\t","\n","\f","\r","\"","\\","stringify","replacer","space","text","reviver","walk","eval","SyntaxError","callbackfn","thisArg","T","kValue","testResult","definition","cache","classRegex","classCache","g","each","fn","l","flatten","ar","r","arrayLike","concat","arrayify","previous","previousSibling","q","query","match","chunker","interpret","whole","tag","idsAndClasses","wholeAttribute","attribute","qualifier","wholePseudo","pseudo","wholePseudoVal","pseudoVal","m","o","classes","tagName","toLowerCase","clas","className","pseudos","checkAttr","getAttr","clean","cleanCache","specialChars","qualify","actual","attrCache","_qwery","selector","_root","token","els","intr","item","ret","tokens","tokenCache","tokenizr","dividedTokens","dividers","idOnly","byId","nextSibling","byTag","e","ancestorMatch","is","el","isNode","selectors","crawl","p","walker","cand","isAncestor","t","uniq","normalizeRoot","doc","getElementById","ownerDocument","select","easy","hasByClass","byClass","collectSelector","collector","oid","nid","splittable","getAttribute","removeAttribute","html","qSA","useNativeQSA","classOnly","tagOnly","tagAndOrClass","normalizr","splitters","splittersMore","simple","attr","RegExp"," ","node",">","contestant","~","+","p1","p2","container","compareDocumentPosition","contains","hasQSA","querySelector","selectQSA","ss","ctx","ex","selectNonNative","items","rewrite","onDomReady","ready","isReady","defer","callbacks","shift","completed","w3c","type","LOAD","READYSTATE","COMPLETE","detach","REMOVEEVENTLISTENER","DOMCONTENTLOADED","FALSE","win","DETACHEVENT","ONREADYSTATECHANGE","ONLOAD","wait","docElem","ATTACHEVENT","ADDEVENTLISTENER","top","frameElement","doScroll","doScrollCheck","version","global","mustache","isFunction","object","escapeRegExp","testRegExp","re","RegExp_test","isWhitespace","nonSpaceRe","escapeHtml","entityMap","parseTemplate","tags","stripSpace","hasTag","nonSpace","spaces","compileTags","spaceRe","openingTagRe","closingTagRe","closingCurlyRe","sections","start","chr","openSection","scanner","Scanner","eos","pos","scanUntil","valueLength","charAt","scan","tagRe","whiteRe","equalsRe","curlyRe","nestTokens","squashTokens","lastToken","squashedTokens","numTokens","section","nestedTokens","tail","Context","parentContext",".","parent","Writer","Object_toString","&","<","'","/","substring","search","lookup","names","clearCache","partials","renderTokens","originalTemplate","symbol","buffer","_renderSection","_renderInverted","_renderPartial","_unescapedValue","_escapedValue","_rawValue","subRender","self","escape","defaultWriter","to_html","send","_trackers","events","addGoogleTracker","prefix","_gaq","_gat","_createTracker","location","host","addDefaultTracker","addTracker","event_data","args","tracker","track","ga","protocol","OkanjoProduct","Product","mode","modes","browse","use_cache","cache_ttl","nag","no_init","init","cache_key_prefix","sense","single","main","cacheKeyAttributes","findWidgetKey","ensureTemplates","parseConfiguration","getCurrentPageUrl","loadProductsFromCache","getProducts","loc","hostname","port","pathname","marketplace_status","marketplace_id","external_id","sku","sold_by","min_price","max_price","condition","manufacturer","upc","isbn","category","min_donation_percent","max_donation_percent","donation_to","suboptimal","skip","take","href","stopPos","min","info","getCacheKey","parts","expireKeys","safeExpireKeys","expires","cacheKey","showProducts","executeSearch","product_id"],"mappings":"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","file":"okanjo-bundle.min.js","sourcesContent":["/*! okanjo-js v0.2.11 | (c) 2013 Okanjo Partners Inc | https://okanjo.com/ */\n(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.okanjo = factory();\n }\n}(this, function() {\n\n/**\n * index.js\n * @type {okanjo|*}\n*/\n var okanjo = okanjo || window.okanjo || (function() {\n\n var okanjo = {\n\n /**\n * Placeholder, just in case okanjo-js is built without metrics\n */\n metrics: {\n trackEvent: function() {},\n trackPageView: function() {}\n },\n\n /**\n * API route definitions\n */\n routes: {\n products: '/products',\n products_id: '/products/:product_id',\n products_sense: '/products/sense'\n },\n\n\n /**\n * Compiles a route and parameters into a final URL\n * @param route – The route to use (e.g. okanjo.routes.products )\n * @param [params] - Optional route parameters\n * @returns {*}\n */\n getRoute: function(route, params) {\n if (params) {\n for (var i in params) {\n if (params.hasOwnProperty(i)) {\n route = route.replace(\":\"+i, params[i] + \"\");\n }\n }\n }\n return okanjo.config.ads.apiUri + route;\n },\n\n\n /**\n * Execute a JSONP request\n * @param {string} url – Request URL\n * @param {*} data – Request data\n * @param {function(err:*, res:*)} callback – Closure to fire when completed\n */\n exec: function(url, data, callback) {\n data = data || {};\n okanjo.JSONP({\n url: url,\n data: data,\n error: function(data) {\n var err = { statusCode: 500, error: \"Communication Error\", message: data.message || \"JSONP communication failure.\" };\n okanjo.report(\"core-jsonp\", data.error || new Error(err.message));\n callback(err, null);\n },\n success: function(data) {\n var err, res;\n if (data) {\n if (data.error) {\n err = data;\n } else {\n res = data;\n }\n } else {\n err = { statusCode: 500, error: \"Invalid Response\", message: \"Could not interpret the JSONP response.\"};\n okanjo.report('core-jsonp', new Error(err.message));\n }\n\n callback(err, res);\n }\n });\n },\n\n\n /**\n * Report a message or error back to Okanjo\n * @param {string} context – What module is responsible for emitting the error (e.g. Product)\n * @param {string|Error} mixed – The message or Error to report\n */\n report: function(context, mixed) {\n // REPORT THIS BACK TO OKANJO!\n var error;\n if (typeof mixed === \"string\") {\n error = new Error('[Okanjo' + (context ? ' ' + context : '') + '] ' + mixed);\n } else if (typeof mixed === \"object\" && mixed instanceof Error) {\n error = mixed;\n }\n\n console.error(error);\n //TODO - integrate with Raven\n },\n\n\n /**\n * Utility functions\n */\n util: {\n\n /**\n * Trims leading and trailing whitespace on a string\n * @param val\n */\n trim: function(val) {\n (val || \"\").replace(/^\\s+|\\s+$/g, '');\n },\n\n\n /**\n * Function to test whether the given var has a value\n * @param val - The var to check\n * @returns {boolean} - True when the var has value, false when it does not\n */\n empty: function (val) {\n return (val === null || val === undefined || (typeof val === \"string\" && okanjo.util.trim(val) === \"\"));\n },\n\n /**\n * Helper to shallow clone an object so we don't ruin the top-level object reference\n * Note: If the shallow keys are objects, the references to the keyed objects will be maintained!\n *\n * @param {*} obj – Source object to copy\n * @returns {{}} – Shallow clone of the object\n */\n clone: function (obj) {\n var clone = {};\n obj = obj || {};\n for (var k in obj) {\n if (obj.hasOwnProperty(k)) {\n clone[k] = obj[k];\n }\n }\n return clone;\n },\n\n\n /**\n * Super simple hashing algorithm\n * @see http://jsperf.com/hashing-strings\n * @param str - String to hash\n * @returns {string}\n */\n hash: function(str) {\n var hash = 0;\n if (str.length === 0) return hash;\n for (var i = 0; i < str.length; i++) {\n var char = str.charCodeAt(i);\n hash = ((hash<<5)-hash)+char;\n }\n\n return hash.toString(16).replace(/^-/, 'n');\n\n },\n\n\n /**\n * Instead of using HTML5 dataset, just rip through attributes and return data attributes\n * @param element\n * @returns {{}}\n */\n data: function (element) {\n var data = {};\n if (element) {\n var attrs = element.attributes;\n for(var i = attrs.length - 1; i >= 0; i--) {\n if (attrs[i].name.indexOf('data-') === 0) {\n data[attrs[i].name.substr(5)] = attrs[i].value;\n }\n }\n }\n return data;\n },\n\n\n /**\n * Copies a value to the target if the source contains it\n * @param {*} target – The destination object\n * @param {*} source – The source object\n * @param {string} targetKey – The destination key name\n * @param {string} [sourceKey] – The source key name, if different\n * @param {{stripEmpty:boolean}} [options] – Copy options, e.g. strip empty values\n */\n copyIfSet: function(target, source, targetKey, sourceKey, options) {\n sourceKey = sourceKey || targetKey;\n options = options || { };\n\n function doCopy(sourceKey) {\n if (source && source[sourceKey] !== undefined && (!options.stripEmpty || !okanjo.util.empty(source[sourceKey]))) {\n target[targetKey] = source[sourceKey];\n }\n }\n\n if (typeof sourceKey === \"object\" && Array.isArray(sourceKey)) {\n // Copy the first source key that is found\n for(var k = 0; k < sourceKey.length; k++) {\n doCopy(sourceKey[k]);\n }\n\n } else {\n doCopy(sourceKey);\n }\n },\n\n\n /**\n * Copies a mapping of target-source from source to target\n * @param {*} target – The destination object\n * @param {*} source – The source object\n * @param {*} map – The mapping of targetKey => sourceKey (null if same)\n * @param {{stripEmpty:boolean}} [options] – Copy options, e.g. strip empty values\n */\n copyIfSetMap: function(target, source, map, options) {\n var keys = Object.keys(map);\n for(var k = 0; k < keys.length; k++) {\n okanjo.util.copyIfSet(target, source, keys[k], map[keys[k]], options);\n }\n }\n\n }\n\n\n };\n\n /*! https://github.com/isaacs/inherits/blob/master/inherits_browser.js */\n if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n okanjo.util.inherits = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n } else {\n // old school shim for old browsers\n okanjo.util.inherits = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n }\n\n return okanjo;\n\n })();\n\n\n\n\n\n\n okanjo.config = {\n\n // okanjo-ads api key\n key: undefined,\n\n // Okanjo default UA code\n analyticsId: 'UA-36849843-6',\n\n // Marketplace config\n marketplace: {\n uri: 'https://shop.okanjo.com',\n apiUri: 'https://api.okanjo.com',\n routerUri: 'https://shop.okanjo.com/widgets/router/',\n balancedMarketplacePath: '/v1/marketplaces/MP6vnNdXY7izEEVPs1gl7jSy',\n socketIOUri: 'https://mke-rt.okanjo.com:13443'\n },\n\n // Ads config\n ads: {\n apiUri: 'https://ads-api.okanjo.com'\n }\n };\n\n /**\n * Override the default production configuration\n * @param options\n */\n okanjo.configure = function(options) {\n\n // Merge keys\n Object.keys(options).every(function(root) {\n if (okanjo.config[root] && typeof okanjo.config[root] === \"object\" && typeof options[root] === \"object\") {\n Object.keys(options[root]).every(function(key) {\n okanjo.config[root][key] = options[root][options[key]];\n return true;\n });\n } else {\n okanjo.config[root] = options[root];\n }\n return true;\n });\n\n\n };\n\n//noinspection JSUnusedLocalSymbols\n(function(okanjo, window) {\n\n var TemplateEngine = okanjo.TemplateEngine = function TemplateEngine(options) {\n options = options || { templates: {}, css: {} };\n this._templates = options.templates || {};\n this._css = options.css || {};\n\n // Add special styles for ie 7, 8, 9\n this.classDetects = [];\n if (navigator.appVersion.indexOf(\"MSIE 9.\") != -1) {\n this.classDetects.push('lt-ie10');\n } else if (navigator.appVersion.indexOf(\"MSIE 8.\") != -1) {\n this.classDetects.push('lt-ie9');\n } else if (navigator.appVersion.indexOf(\"MSIE 7.\") != -1) {\n this.classDetects.push('lt-ie8');\n } else if (navigator.appVersion.indexOf(\"MSIE 6.\") != -1) {\n this.classDetects.push('lt-ie7');\n }\n this.classDetects = this.classDetects.join(' ');\n };\n\n TemplateEngine.prototype = {\n\n constructor: TemplateEngine,\n\n /**\n * Register a template\n * @param {string} name – Template name\n * @param {string} template - Template markup string\n * @param {function(data:*):*} [viewClosure] – Optional data manipulation closure\n * @param {*} [options] – Optional hash of template options, e.g. css: [ 'name1', 'name2' ]\n */\n registerTemplate: function(name, template, viewClosure, options) {\n // Example template:\n // {{title}} spends {{calc}}\n\n if (typeof template === \"object\") {\n if (template.nodeType === undefined) {\n throw new Error('Parameter template must be a string or a DOM element');\n } else {\n okanjo.Mustache.parse(template);\n }\n } else if (typeof template !== \"string\") {\n throw new Error('Parameter template must be a string or a DOM element');\n }\n\n // Shift options if only have 3 params\n if (arguments.length === 3 && typeof viewClosure === \"object\") {\n options = viewClosure;\n viewClosure = undefined;\n } else {\n options = options || {};\n }\n\n if (viewClosure !== undefined && typeof viewClosure !== \"function\") {\n throw new Error('Parameter viewClosure must be a function');\n }\n\n // Assign the template\n this._templates[name] = {\n markup: template,\n options: options,\n viewClosure: viewClosure || null\n };\n },\n\n\n /**\n * Registers a CSS block\n *\n * @param {string} name – CSS block name\n * @param {string|HTMLElement} css – The CSS markup or existing style element\n * @param {undefined|{id:string}|null} [options] – Optional hash of KVP settings\n */\n registerCss: function(name, css, options) {\n options = options || {};\n\n if (typeof css === \"object\") {\n if (css.nodeType === undefined) {\n throw new Error('Parameter css must be a string or a DOM element');\n }\n } else if (typeof css !== \"string\") {\n throw new Error('Parameter css must be a string or a DOM element');\n }\n\n this._css[name] = {\n markup: css,\n options: options\n };\n },\n\n\n /**\n * Checks if a template was registered\n * @param {string} name – The template name to look for\n * @returns {boolean} – True if registered, False if not\n */\n isTemplateRegistered: function(name) {\n return this._templates[name] ? true : false;\n },\n\n\n /**\n * Checks if a CSS block was registered\n * @param {string} name – The CSS block name to look for\n * @returns {boolean} – True if registered, False if not\n */\n isCssRegistered: function(name) {\n return this._css[name] ? true : false;\n },\n\n\n /**\n * Ensures that the given CSS block name has been added to the page\n * @param {string|HTMLElement} name - The CSS name that was registered through registerCss\n */\n ensureCss: function(name) {\n\n if (this._css[name]) {\n var css = this._css[name],\n id = css.markup.nodeType === undefined ? css.options.id || \"okanjo-css-\" + name : null; // If it's a DOM element, just forget it cuz it's already on the page\n\n // Check for css element on page, if we have an ID to look for\n if (id) {\n var elements = okanjo.qwery('#' + id);\n if (elements.length === 0) {\n var head = okanjo.qwery('head'),\n style = document.createElement('style');\n\n style.id = id;\n style.setAttribute('type', 'text/css');\n\n if (style.hasOwnProperty) { // old ie\n style.innerHTML = css.markup;\n } else {\n style.styleSheet.cssText = css.markup;\n }\n\n if (head.length > 0) {\n head[0].appendChild(style);\n } else {\n // NO HEAD, just prepend to body then\n var body = okanjo.qwery('body');\n if (body.length > 0) {\n body[0].appendChild(style);\n } // And if this doesn't work, just give up\n }\n }\n }\n }\n\n },\n\n\n /**\n * Renders a template with the given data\n *\n * @param {string} templateName – The template name to render\n * @param {*} data – Data to pass into the controller\n * @param {*} [options] – Optional settings object to pass into the controller closure\n * @returns {*}\n */\n render: function(templateName, data, options) {\n\n options = options || {};\n var template = this._templates[templateName],\n view = data;\n\n // If there's a data controller closure set, and if so, run the data through there\n if (template.viewClosure) {\n view = template.viewClosure(data, options);\n }\n\n // Attach globals\n view.okanjoConfig = okanjo.config;\n view.okanjoMetricUrl = okanjo.config.ads.apiUri.replace(/^https?:\\/\\//,''); // Url w/o scheme to prevent mixed-content warnings\n view.now = function() { return (new Date()).getTime(); };\n view.classDetects = this.classDetects;\n\n\n // Add CSS unless we are told not to\n if (options.css !== false) {\n if (template.options.css && template.options.css.length > 0) {\n for(var i = 0; i < template.options.css.length; i++) {\n this.ensureCss(template.options.css[i]);\n }\n }\n }\n\n // Render the template and return the result\n return okanjo.Mustache.render(template.markup, view);\n },\n\n formats: {\n\n /**\n * Formats a number into a currency string (rounded, decimal points, thousands separators)\n * See: http://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-money-in-javascript\n *\n * @param value – the number to format\n * @param [decimals] - The number of decimals to show\n * @param [decimalSeparator] – The decimals separator, default: .\n * @param [thousandsSeparator] – The thousands separator, default: ,\n * @returns {string} – Formatted currency string\n */\n currency: function(value, decimals, decimalSeparator, thousandsSeparator){\n decimals = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;\n decimalSeparator = decimalSeparator === undefined ? \".\" : decimalSeparator;\n thousandsSeparator = thousandsSeparator === undefined ? \",\" : thousandsSeparator;\n var s = value < 0 ? \"-\" : \"\",\n i = parseInt(value = Math.abs(+value || 0).toFixed(decimals)) + \"\",\n j = i.length;\n j = (j) > 3 ? j % 3 : 0;\n return s + (j ? i.substr(0, j) + thousandsSeparator : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + thousandsSeparator) + (decimals ? decimalSeparator + Math.abs(value - i).toFixed(decimals).slice(2) : \"\");\n },\n\n\n /**\n * Formats a product or an array of product objects for the view\n * @param {*|[]} mixed – Product or an array of product objects\n * @returns {*} – Formatted product array or object\n */\n product: function(mixed) {\n // If we got an array of products, handle each one\n if (typeof mixed === \"object\" && Array.isArray(mixed)) {\n var products = [];\n for(var i = 0; i < mixed.length; i++) {\n products.push(this.product(mixed[i]));\n }\n return products;\n } else if(typeof mixed === \"object\" ) { // Individual product\n // Set first image as the display image\n //noinspection JSUnresolvedVariable\n mixed.image_url = mixed.image_urls ? mixed.image_urls[0] : '' ;\n mixed.escaped_buy_url = encodeURIComponent(mixed.buy_url);\n mixed.price = this.currency(mixed.price);\n return mixed;\n } else { // Unknown value\n return null;\n }\n }\n\n }\n };\n\n // global template engine for all the widgets\n okanjo.mvc = new TemplateEngine();\n\n\n})(okanjo, this);\n\n/*\n\n Adaptation based on https://github.com/larryosborn/JSONP\n\n The MIT License (MIT)\n\n Copyright (c) 2014 Larry Osborn \n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n\n */\n(function() {\n if(this.JSONP) { return; }\n var JSONP, computedUrl, encode, noop, objectToURI, makeUniqueCallback, head;\n\n encode = window.encodeURIComponent;\n\n noop = function() {\n return void 0;\n };\n\n computedUrl = function(params) {\n var url;\n url = params.url;\n url += params.url.indexOf('?') < 0 ? '?' : '&';\n url += objectToURI(params.data);\n return url;\n };\n\n makeUniqueCallback = function() {\n JSONP.requestCounter += 1;\n return (new Date()).getTime() + \"_\" + JSONP.requestCounter;\n };\n\n objectToURI = function(obj) {\n var data, key, value;\n data = [];\n for (key in obj) {\n //noinspection JSUnfilteredForInLoop\n value = obj[key];\n //noinspection JSUnfilteredForInLoop\n data.push(encode(key) + '=' + encode(value));\n }\n return data.join('&');\n };\n\n JSONP = function(options) {\n options = options ? options : {};\n var callback, done, params, script, timeoutHandle, removeCallback;\n params = {\n data: options.data || {},\n error: options.error || noop,\n success: options.success || noop,\n beforeSend: options.beforeSend || noop,\n complete: options.complete || noop,\n url: options.url || '',\n timeout: options.timeout || 30000\n };\n params.computedUrl = computedUrl(params);\n if (params.url.length === 0) {\n throw new Error('MissingUrl');\n }\n done = false;\n if (params.beforeSend({}, params) !== false) {\n //noinspection JSUnresolvedVariable\n callback = params.data[options.callbackName || 'callback'] = '_okanjo_jsonp_' + makeUniqueCallback();\n window[callback] = function(data) {\n\n if (timeoutHandle) { clearTimeout(timeoutHandle); }\n timeoutHandle = null;\n\n params.success(data, params);\n params.complete(data, params);\n removeCallback();\n };\n\n removeCallback = function() {\n try {\n return delete window[callback];\n } catch (_error) {\n window[callback] = void 0;\n return void 0;\n }\n };\n\n script = window.document.createElement('script');\n script.src = computedUrl(params);\n script.async = true;\n\n timeoutHandle = setTimeout(function() {\n timeoutHandle = null;\n var err = new Error(\"JSONP request did not respond in time!\");\n err.url = (script && script.src) || null;\n params.error(err);\n removeCallback();\n return params.complete(err, params);\n }, params.timeout);\n\n script.onerror = function(evt) {\n if (timeoutHandle) { clearTimeout(timeoutHandle); }\n params.error({\n url: script.src,\n event: evt\n });\n return params.complete({\n url: script.src,\n event: evt\n }, params);\n };\n\n script.onload = script.onreadystatechange = function() {\n console.log(this.readyState);\n if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {\n done = true;\n script.onload = script.onreadystatechange = null;\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n //jshint -W093\n return script = null;\n //jshint +W093\n }\n };\n\n head = head || window.document.getElementsByTagName('head')[0] || window.document.documentElement;\n return head.insertBefore(script, head.firstChild);\n }\n };\n\n JSONP.requestCounter = 0;\n\n if ((typeof define !== \"undefined\" && define !== null) && define.amd) {\n define(function() {\n return JSONP;\n });\n } else if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = JSONP;\n } else {\n this.JSONP = JSONP;\n }\n\n}).call(okanjo);\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\nif (!Object.keys) {\n Object.keys = (function() {\n 'use strict';\n var hasOwnProperty = Object.prototype.hasOwnProperty,\n hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),\n dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ],\n dontEnumsLength = dontEnums.length;\n\n return function(obj) {\n if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {\n throw new TypeError('Object.keys called on non-object');\n }\n\n var result = [], prop, i;\n\n for (prop in obj) {\n if (hasOwnProperty.call(obj, prop)) {\n result.push(prop);\n }\n }\n\n if (hasDontEnumBug) {\n for (i = 0; i < dontEnumsLength; i++) {\n if (hasOwnProperty.call(obj, dontEnums[i])) {\n result.push(dontEnums[i]);\n }\n }\n }\n return result;\n };\n }());\n}\n\n// From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\n// Production steps of ECMA-262, Edition 5, 15.4.4.14\n// From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n// Reference: http://es5.github.io/#x15.4.4.14\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function(searchElement, fromIndex) {\n\n var k;\n\n /* jshint ignore:start */\n // 1. Let O be the result of calling ToObject passing\n // the this value as the argument.\n if (this == null) { //\n throw new TypeError('\"this\" is null or not defined');\n }\n /* jshint ignore:end */\n\n var O = Object(this);\n\n // 2. Let lenValue be the result of calling the Get\n // internal method of O with the argument \"length\".\n // 3. Let len be ToUint32(lenValue).\n var len = O.length >>> 0;\n\n // 4. If len is 0, return -1.\n if (len === 0) {\n return -1;\n }\n\n // 5. If argument fromIndex was passed let n be\n // ToInteger(fromIndex); else let n be 0.\n var n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n // 6. If n >= len, return -1.\n if (n >= len) {\n return -1;\n }\n\n // 7. If n >= 0, then Let k be n.\n // 8. Else, n<0, Let k be len - abs(n).\n // If k is less than 0, then let k be 0.\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n // 9. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n // This is implicit for LHS operands of the in operator\n // b. Let kPresent be the result of calling the\n // HasProperty internal method of O with argument Pk.\n // This step can be combined with c\n // c. If kPresent is true, then\n // i. Let elementK be the result of calling the Get\n // internal method of O with the argument ToString(k).\n // ii. Let same be the result of applying the\n // Strict Equality Comparison Algorithm to\n // searchElement and elementK.\n // iii. If same is true, return k.\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n };\n}\n\n // Make it safe to do console.log() always.\n /*! Console-polyfill. | MIT license. | https://github.com/paulmillr/console-polyfill */\n //noinspection ThisExpressionReferencesGlobalObjectJS\n (function (con) {\n 'use strict';\n var prop, method,\n empty = {},\n dummy = function() {},\n properties = 'memory'.split(','),\n methods = ('assert,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,' +\n 'time,timeEnd,trace,warn').split(',');\n // jshint -W084\n while (prop = properties.pop()) {\n if (con[prop] === undefined) {\n con[prop] = con[prop] || empty;\n }\n }\n while (method = methods.pop()) {\n if(con[method] === undefined) {\n con[method] = con[method] || dummy;\n }\n }\n // jshint +W084\n })(this.console || {});\n\n /*! Okanjo Local Storage Polyfill v1.0.0 | (c) 2013 Okanjo Partners Inc | Based on https://gist.github.com/juliocesar/926500/ddb28fb72903be87cb9044a945c6edbe1aa28b3a */\n (function(c, window) {\n var OkanjoCache = null;\n if ('localStorage' in window && window.localStorage !== null && isLocalStorageNameSupported()) {\n OkanjoCache = window.localStorage;\n } else {\n OkanjoCache = {\n _data : {}, // jshint -W093\n length : 0,\n _updateLen : function() { this.length = this._data.length; },\n\n setItem : function(id, val) { var res = this._data[id] = String(val); this._updateLen(); return res; },\n getItem : function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : undefined; },\n removeItem : function(id) { var res = delete this._data[id]; this._updateLen(); return res; },\n clear : function() { return this._data = {}; },\n key : function(index) { return Object.keys(this._data)[index]; } // jshint +W093\n };\n }\n c.Cache = OkanjoCache;\n return OkanjoCache;\n\n // Make sure LocalStorage is usable.\n // Thanks stackoverflow! http://stackoverflow.com/a/17604754/1373782\n function isLocalStorageNameSupported() {\n var testKey = 'test', storage = window.sessionStorage;\n try {\n storage.setItem(testKey, '1');\n storage.removeItem(testKey);\n return true;\n } catch (error) {\n return false;\n }\n }\n })(okanjo || this, this);\n\n /*! Okanjo Cookie Helper v1.0.0 | (c) 2013 Okanjo Partners Inc */\n (function(c, w) {\n\n var document = w.document || { cookie: '' };\n\n c.Cookie = {\n set: function(cookieName, value, expireDays) {\n var expireDate = new Date();\n expireDate.setDate(expireDate.getDate() + expireDays);\n var cookieValue = encodeURI(value) + ((!expireDays) ? \"\" : \"; expires=\" + expireDate.toUTCString() + \"; path=/\");\n document.cookie = cookieName + \"=\" + cookieValue;\n },\n get: function(cookieName) {\n var idx, nameTest, value, cookieArray = document.cookie.split(\";\");\n for (idx = 0; idx < cookieArray.length; idx++) {\n nameTest = cookieArray[idx].substr(0, cookieArray[idx].indexOf(\"=\"));\n value = cookieArray[idx].substr(cookieArray[idx].indexOf(\"=\") + 1);\n nameTest = nameTest.replace(/^\\s+|\\s+$/g, \"\");\n if (nameTest == cookieName) {\n return decodeURI(value);\n }\n }\n return null;\n }\n };\n\n return c.Cookie;\n\n })(okanjo || this, this);\n/* jshint ignore:start */\n\n/*\n json2.js\n 2013-05-26\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n See http://www.JSON.org/js.html\n\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n\n\n This file creates a global JSON object containing two methods: stringify\n and parse.\n\n JSON.stringify(value, replacer, space)\n value any JavaScript value, usually an object or array.\n\n replacer an optional parameter that determines how object\n values are stringified for objects. It can be a\n function or an array of strings.\n\n space an optional parameter that specifies the indentation\n of nested structures. If it is omitted, the text will\n be packed without extra whitespace. If it is a number,\n it will specify the number of spaces to indent at each\n level. If it is a string (such as '\\t' or ' '),\n it contains the characters used to indent at each level.\n\n This method produces a JSON text from a JavaScript value.\n\n When an object value is found, if the object contains a toJSON\n method, its toJSON method will be called and the result will be\n stringified. A toJSON method does not serialize: it returns the\n value represented by the name/value pair that should be serialized,\n or undefined if nothing should be serialized. The toJSON method\n will be passed the key associated with the value, and this will be\n bound to the value\n\n*/\nif (typeof JSON !== 'object') {\n JSON = {};\n\n (function () {\n 'use strict';\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10 ? '0' + n : n;\n }\n\n if (typeof Date.prototype.toJSON !== 'function') {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + '-' +\n f(this.getUTCMonth() + 1) + '-' +\n f(this.getUTCDate()) + 'T' +\n f(this.getUTCHours()) + ':' +\n f(this.getUTCMinutes()) + ':' +\n f(this.getUTCSeconds()) + 'Z'\n : null;\n };\n\n String.prototype.toJSON =\n Number.prototype.toJSON =\n Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n\n function quote(string) {\n\n// If the string contains no control characters, no quote characters, and no\n// backslash characters, then we can safely slap some quotes around it.\n// Otherwise we must also replace the offending characters with safe escape\n// sequences.\n\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string'\n ? c\n : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n\n\n function str(key, holder) {\n\n// Produce a string from holder[key].\n\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n mind = gap,\n partial,\n value = holder[key];\n\n// If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n// If we were called with a replacer function, then call the replacer to\n// obtain a replacement value.\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n// What happens next depends on the value's type.\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n\n// JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n\n// If the value is a boolean or null, convert it to a string. Note:\n// typeof null does not produce 'null'. The case is included here in\n// the remote chance that this gets fixed someday.\n\n return String(value);\n\n// If the type is 'object', we might be dealing with an object or an array or\n// null.\n\n case 'object':\n\n// Due to a specification blunder in ECMAScript, typeof null is 'object',\n// so watch out for that case.\n\n if (!value) {\n return 'null';\n }\n\n// Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n// Is the value an array?\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n// The value is an array. Stringify every element. Use null as a placeholder\n// for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n// Join all of the elements together, separated with commas, and wrap them in\n// brackets.\n\n v = partial.length === 0\n ? '[]'\n : gap\n ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\n : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n// If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === 'string') {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n\n// Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n// Join all of the member texts together, separated with commas,\n// and wrap them in braces.\n\n v = partial.length === 0\n ? '{}'\n : gap\n ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\n : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n// If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== 'function') {\n JSON.stringify = function (value, replacer, space) {\n\n// The stringify method takes a value and an optional replacer, and an optional\n// space parameter, and returns a JSON text. The replacer can be a function\n// that can replace values, or an array of strings that will select the keys.\n// A default replacer method can be provided. Use of the space parameter can\n// produce text that is more easily readable.\n\n var i;\n gap = '';\n indent = '';\n\n// If the space parameter is a number, make an indent string containing that\n// many spaces.\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n\n// If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === 'string') {\n indent = space;\n }\n\n// If there is a replacer, it must be a function or an array.\n// Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n\n// Make a fake root object containing our value under the key of ''.\n// Return the result of stringifying the value.\n\n return str('', {'': value});\n };\n }\n\n\n// If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== 'function') {\n JSON.parse = function (text, reviver) {\n\n// The parse method takes a text and an optional reviver function, and returns\n// a JavaScript value if the text is a valid JSON text.\n\n var j;\n\n function walk(holder, key) {\n\n// The walk method is used to recursively walk the resulting structure so\n// that modifications can be made.\n\n var k, v, value = holder[key];\n if (value && typeof value === 'object') {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = walk(value, k);\n if (v !== undefined) {\n value[k] = v;\n } else {\n delete value[k];\n }\n }\n }\n }\n return reviver.call(holder, key, value);\n }\n\n\n// Parsing happens in four stages. In the first stage, we replace certain\n// Unicode characters with escape sequences. JavaScript handles many characters\n// incorrectly, either silently deleting them, or treating them as line endings.\n\n text = String(text);\n cx.lastIndex = 0;\n if (cx.test(text)) {\n text = text.replace(cx, function (a) {\n return '\\\\u' +\n ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n });\n }\n\n// In the second stage, we run the text against regular expressions that look\n// for non-JSON patterns. We are especially concerned with '()' and 'new'\n// because they can cause invocation, and '=' because it can cause mutation.\n// But just to be safe, we want to reject all unexpected forms.\n\n// We split the second stage into 4 regexp operations in order to work around\n// crippling inefficiencies in IE's and Safari's regexp engines. First we\n// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\n// replace all simple value tokens with ']' characters. Third, we delete all\n// open brackets that follow a colon or comma or that begin the text. Finally,\n// we look to see that the remaining characters are only whitespace or ']' or\n// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\n\n if (/^[\\],:{}\\s]*$/\n .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\n .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\n\n// In the third stage we use the eval function to compile the text into a\n// JavaScript structure. The '{' operator is subject to a syntactic ambiguity\n// in JavaScript: it can begin a block or an object literal. We wrap the text\n// in parens to eliminate the ambiguity.\n\n j = eval('(' + text + ')');\n\n// In the optional fourth stage, we recursively walk the new structure, passing\n// each name/value pair to a reviver function for possible transformation.\n\n return typeof reviver === 'function'\n ? walk({'': j}, '')\n : j;\n }\n\n// If the text is not JSON parseable, then a SyntaxError is thrown.\n\n throw new SyntaxError('JSON.parse');\n };\n }\n }());\n}\n/* jshint ignore:end */\n\n /**! Array.every polyfill | https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every */\n if (!Array.prototype.every) {\n Array.prototype.every = function (callbackfn, thisArg) {\n 'use strict';\n var T, k;\n // jshint -W041\n if (this == null) { // jshint +W041\n throw new TypeError('this is null or not defined');\n }\n\n // 1. Let O be the result of calling ToObject passing the this\n // value as the argument.\n var O = Object(this);\n\n // 2. Let lenValue be the result of calling the Get internal method\n // of O with the argument \"length\".\n // 3. Let len be ToUint32(lenValue).\n var len = O.length >>> 0;\n\n // 4. If IsCallable(callbackfn) is false, throw a TypeError exception.\n if (typeof callbackfn !== 'function') {\n throw new TypeError();\n }\n\n // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n // 6. Let k be 0.\n k = 0;\n\n // 7. Repeat, while k < len\n while (k < len) {\n\n var kValue;\n\n // a. Let Pk be ToString(k).\n // This is implicit for LHS operands of the in operator\n // b. Let kPresent be the result of calling the HasProperty internal\n // method of O with argument Pk.\n // This step can be combined with c\n // c. If kPresent is true, then\n if (k in O) {\n\n // i. Let kValue be the result of calling the Get internal method\n // of O with argument Pk.\n kValue = O[k];\n\n // ii. Let testResult be the result of calling the Call internal method\n // of callbackfn with T as the this value and argument list\n // containing kValue, k, and O.\n var testResult = callbackfn.call(T, kValue, k, O);\n\n // iii. If ToBoolean(testResult) is false, return false.\n if (!testResult) {\n return false;\n }\n }\n k++;\n }\n return true;\n };\n }\n/* jshint ignore:start */\n\n(function() {\n\n/*!\n * @preserve Qwery - A Blazing Fast query selector engine\n * https://github.com/ded/qwery\n * copyright Dustin Diaz 2012\n * MIT License\n */\n\n(function (name, context, definition) {\n if (typeof module != 'undefined' && module.exports) module.exports = definition()\n else if (typeof define == 'function' && define.amd) define(definition)\n else context[name] = definition()\n})('qwery', this, function () {\n var doc = document\n , html = doc.documentElement\n , byClass = 'getElementsByClassName'\n , byTag = 'getElementsByTagName'\n , qSA = 'querySelectorAll'\n , useNativeQSA = 'useNativeQSA'\n , tagName = 'tagName'\n , nodeType = 'nodeType'\n , select // main select() method, assign later\n\n , id = /#([\\w\\-]+)/\n , clas = /\\.[\\w\\-]+/g\n , idOnly = /^#([\\w\\-]+)$/\n , classOnly = /^\\.([\\w\\-]+)$/\n , tagOnly = /^([\\w\\-]+)$/\n , tagAndOrClass = /^([\\w]+)?\\.([\\w\\-]+)$/\n , splittable = /(^|,)\\s*[>~+]/\n , normalizr = /^\\s+|\\s*([,\\s\\+\\~>]|$)\\s*/g\n , splitters = /[\\s\\>\\+\\~]/\n , splittersMore = /(?![\\s\\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^'\"]*\\]|[\\s\\w\\+\\-]*\\))/\n , specialChars = /([.*+?\\^=!:${}()|\\[\\]\\/\\\\])/g\n , simple = /^(\\*|[a-z0-9]+)?(?:([\\.\\#]+[\\w\\-\\.#]+)?)/\n , attr = /\\[([\\w\\-]+)(?:([\\|\\^\\$\\*\\~]?\\=)['\"]?([ \\w\\-\\/\\?\\&\\=\\:\\.\\(\\)\\!,@#%<>\\{\\}\\$\\*\\^]+)[\"']?)?\\]/\n , pseudo = /:([\\w\\-]+)(\\(['\"]?([^()]+)['\"]?\\))?/\n , easy = new RegExp(idOnly.source + '|' + tagOnly.source + '|' + classOnly.source)\n , dividers = new RegExp('(' + splitters.source + ')' + splittersMore.source, 'g')\n , tokenizr = new RegExp(splitters.source + splittersMore.source)\n , chunker = new RegExp(simple.source + '(' + attr.source + ')?' + '(' + pseudo.source + ')?')\n\n var walker = {\n ' ': function (node) {\n return node && node !== html && node.parentNode\n }\n , '>': function (node, contestant) {\n return node && node.parentNode == contestant.parentNode && node.parentNode\n }\n , '~': function (node) {\n return node && node.previousSibling\n }\n , '+': function (node, contestant, p1, p2) {\n if (!node) return false\n return (p1 = previous(node)) && (p2 = previous(contestant)) && p1 == p2 && p1\n }\n }\n\n function cache() {\n this.c = {}\n }\n cache.prototype = {\n g: function (k) {\n return this.c[k] || undefined\n }\n , s: function (k, v, r) {\n v = r ? new RegExp(v) : v\n return (this.c[k] = v)\n }\n }\n\n var classCache = new cache()\n , cleanCache = new cache()\n , attrCache = new cache()\n , tokenCache = new cache()\n\n function classRegex(c) {\n return classCache.g(c) || classCache.s(c, '(^|\\\\s+)' + c + '(\\\\s+|$)', 1)\n }\n\n // not quite as fast as inline loops in older browsers so don't use liberally\n function each(a, fn) {\n var i = 0, l = a.length\n for (; i < l; i++) fn(a[i])\n }\n\n function flatten(ar) {\n for (var r = [], i = 0, l = ar.length; i < l; ++i) arrayLike(ar[i]) ? (r = r.concat(ar[i])) : (r[r.length] = ar[i])\n return r\n }\n\n function arrayify(ar) {\n var i = 0, l = ar.length, r = []\n for (; i < l; i++) r[i] = ar[i]\n return r\n }\n\n function previous(n) {\n while (n = n.previousSibling) if (n[nodeType] == 1) break;\n return n\n }\n\n function q(query) {\n return query.match(chunker)\n }\n\n // called using `this` as element and arguments from regex group results.\n // given => div.hello[title=\"world\"]:foo('bar')\n // div.hello[title=\"world\"]:foo('bar'), div, .hello, [title=\"world\"], title, =, world, :foo('bar'), foo, ('bar'), bar]\n function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value, wholePseudo, pseudo, wholePseudoVal, pseudoVal) {\n var i, m, k, o, classes\n if (this[nodeType] !== 1) return false\n if (tag && tag !== '*' && this[tagName] && this[tagName].toLowerCase() !== tag) return false\n if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) return false\n if (idsAndClasses && (classes = idsAndClasses.match(clas))) {\n for (i = classes.length; i--;) if (!classRegex(classes[i].slice(1)).test(this.className)) return false\n }\n if (pseudo && qwery.pseudos[pseudo] && !qwery.pseudos[pseudo](this, pseudoVal)) return false\n if (wholeAttribute && !value) { // select is just for existance of attrib\n o = this.attributes\n for (k in o) {\n if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {\n return this\n }\n }\n }\n if (wholeAttribute && !checkAttr(qualifier, getAttr(this, attribute) || '', value)) {\n // select is for attrib equality\n return false\n }\n return this\n }\n\n function clean(s) {\n return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\\\$1'))\n }\n\n function checkAttr(qualify, actual, val) {\n switch (qualify) {\n case '=':\n return actual == val\n case '^=':\n return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, '^' + clean(val), 1))\n case '$=':\n return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, clean(val) + '$', 1))\n case '*=':\n return actual.match(attrCache.g(val) || attrCache.s(val, clean(val), 1))\n case '~=':\n return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, '(?:^|\\\\s+)' + clean(val) + '(?:\\\\s+|$)', 1))\n case '|=':\n return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, '^' + clean(val) + '(-|$)', 1))\n }\n return 0\n }\n\n // given a selector, first check for simple cases then collect all base candidate matches and filter\n function _qwery(selector, _root) {\n var r = [], ret = [], i, l, m, token, tag, els, intr, item, root = _root\n , tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr))\n , dividedTokens = selector.match(dividers)\n\n if (!tokens.length) return r\n\n token = (tokens = tokens.slice(0)).pop() // copy cached tokens, take the last one\n if (tokens.length && (m = tokens[tokens.length - 1].match(idOnly))) root = byId(_root, m[1])\n if (!root) return r\n\n intr = q(token)\n // collect base candidates to filter\n els = root !== _root && root[nodeType] !== 9 && dividedTokens && /^[+~]$/.test(dividedTokens[dividedTokens.length - 1]) ?\n function (r) {\n while (root = root.nextSibling) {\n root[nodeType] == 1 && (intr[1] ? intr[1] == root[tagName].toLowerCase() : 1) && (r[r.length] = root)\n }\n return r\n }([]) :\n root[byTag](intr[1] || '*')\n // filter elements according to the right-most part of the selector\n for (i = 0, l = els.length; i < l; i++) {\n if (item = interpret.apply(els[i], intr)) r[r.length] = item\n }\n if (!tokens.length) return r\n\n // filter further according to the rest of the selector (the left side)\n each(r, function (e) { if (ancestorMatch(e, tokens, dividedTokens)) ret[ret.length] = e })\n return ret\n }\n\n // compare element to a selector\n function is(el, selector, root) {\n if (isNode(selector)) return el == selector\n if (arrayLike(selector)) return !!~flatten(selector).indexOf(el) // if selector is an array, is el a member?\n\n var selectors = selector.split(','), tokens, dividedTokens\n while (selector = selectors.pop()) {\n tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr))\n dividedTokens = selector.match(dividers)\n tokens = tokens.slice(0) // copy array\n if (interpret.apply(el, q(tokens.pop())) && (!tokens.length || ancestorMatch(el, tokens, dividedTokens, root))) {\n return true\n }\n }\n return false\n }\n\n // given elements matching the right-most part of a selector, filter out any that don't match the rest\n function ancestorMatch(el, tokens, dividedTokens, root) {\n var cand\n // recursively work backwards through the tokens and up the dom, covering all options\n function crawl(e, i, p) {\n while (p = walker[dividedTokens[i]](p, e)) {\n if (isNode(p) && (interpret.apply(p, q(tokens[i])))) {\n if (i) {\n if (cand = crawl(p, i - 1, p)) return cand\n } else return p\n }\n }\n }\n return (cand = crawl(el, tokens.length - 1, el)) && (!root || isAncestor(cand, root))\n }\n\n function isNode(el, t) {\n return el && typeof el === 'object' && (t = el[nodeType]) && (t == 1 || t == 9)\n }\n\n function uniq(ar) {\n var a = [], i, j;\n o:\n for (i = 0; i < ar.length; ++i) {\n for (j = 0; j < a.length; ++j) if (a[j] == ar[i]) continue o\n a[a.length] = ar[i]\n }\n return a\n }\n\n function arrayLike(o) {\n return (typeof o === 'object' && isFinite(o.length))\n }\n\n function normalizeRoot(root) {\n if (!root) return doc\n if (typeof root == 'string') return qwery(root)[0]\n if (!root[nodeType] && arrayLike(root)) return root[0]\n return root\n }\n\n function byId(root, id, el) {\n // if doc, query on it, else query the parent doc or if a detached fragment rewrite the query and run on the fragment\n return root[nodeType] === 9 ? root.getElementById(id) :\n root.ownerDocument &&\n (((el = root.ownerDocument.getElementById(id)) && isAncestor(el, root) && el) ||\n (!isAncestor(root, root.ownerDocument) && select('[id=\"' + id + '\"]', root)[0]))\n }\n\n function qwery(selector, _root) {\n var m, el, root = normalizeRoot(_root)\n\n // easy, fast cases that we can dispatch with simple DOM calls\n if (!root || !selector) return []\n if (selector === window || isNode(selector)) {\n return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : []\n }\n if (selector && arrayLike(selector)) return flatten(selector)\n if (m = selector.match(easy)) {\n if (m[1]) return (el = byId(root, m[1])) ? [el] : []\n if (m[2]) return arrayify(root[byTag](m[2]))\n if (hasByClass && m[3]) return arrayify(root[byClass](m[3]))\n }\n\n return select(selector, root)\n }\n\n // where the root is not document and a relationship selector is first we have to\n // do some awkward adjustments to get it to work, even with qSA\n function collectSelector(root, collector) {\n return function (s) {\n var oid, nid\n if (splittable.test(s)) {\n if (root[nodeType] !== 9) {\n // make sure the el has an id, rewrite the query, set root to doc and run it\n if (!(nid = oid = root.getAttribute('id'))) root.setAttribute('id', nid = '__qwerymeupscotty')\n s = '[id=\"' + nid + '\"]' + s // avoid byId and allow us to match context element\n collector(root.parentNode || root, s, true)\n oid || root.removeAttribute('id')\n }\n return;\n }\n s.length && collector(root, s, false)\n }\n }\n\n var isAncestor = 'compareDocumentPosition' in html ?\n function (element, container) {\n return (container.compareDocumentPosition(element) & 16) == 16\n } : 'contains' in html ?\n function (element, container) {\n container = container[nodeType] === 9 || container == window ? html : container\n return container !== element && container.contains(element)\n } :\n function (element, container) {\n while (element = element.parentNode) if (element === container) return 1\n return 0\n }\n , getAttr = function () {\n // detect buggy IE src/href getAttribute() call\n var e = doc.createElement('p')\n return ((e.innerHTML = 'x') && e.firstChild.getAttribute('href') != '#x') ?\n function (e, a) {\n return a === 'class' ? e.className : (a === 'href' || a === 'src') ?\n e.getAttribute(a, 2) : e.getAttribute(a)\n } :\n function (e, a) { return e.getAttribute(a) }\n }()\n , hasByClass = !!doc[byClass]\n // has native qSA support\n , hasQSA = doc.querySelector && doc[qSA]\n // use native qSA\n , selectQSA = function (selector, root) {\n var result = [], ss, e\n try {\n if (root[nodeType] === 9 || !splittable.test(selector)) {\n // most work is done right here, defer to qSA\n return arrayify(root[qSA](selector))\n }\n // special case where we need the services of `collectSelector()`\n each(ss = selector.split(','), collectSelector(root, function (ctx, s) {\n e = ctx[qSA](s)\n if (e.length == 1) result[result.length] = e.item(0)\n else if (e.length) result = result.concat(arrayify(e))\n }))\n return ss.length > 1 && result.length > 1 ? uniq(result) : result\n } catch (ex) { }\n return selectNonNative(selector, root)\n }\n // no native selector support\n , selectNonNative = function (selector, root) {\n var result = [], items, m, i, l, r, ss\n selector = selector.replace(normalizr, '$1')\n if (m = selector.match(tagAndOrClass)) {\n r = classRegex(m[2])\n items = root[byTag](m[1] || '*')\n for (i = 0, l = items.length; i < l; i++) {\n if (r.test(items[i].className)) result[result.length] = items[i]\n }\n return result\n }\n // more complex selector, get `_qwery()` to do the work for us\n each(ss = selector.split(','), collectSelector(root, function (ctx, s, rewrite) {\n r = _qwery(s, ctx)\n for (i = 0, l = r.length; i < l; i++) {\n if (ctx[nodeType] === 9 || rewrite || isAncestor(r[i], root)) result[result.length] = r[i]\n }\n }))\n return ss.length > 1 && result.length > 1 ? uniq(result) : result\n }\n , configure = function (options) {\n // configNativeQSA: use fully-internal selector or native qSA where present\n if (typeof options[useNativeQSA] !== 'undefined')\n select = !options[useNativeQSA] ? selectNonNative : hasQSA ? selectQSA : selectNonNative\n }\n\n configure({ useNativeQSA: true })\n\n qwery.configure = configure\n qwery.uniq = uniq\n qwery.is = is\n qwery.pseudos = {}\n\n return qwery\n});\n\n/*! onDomReady.js 1.4.0 (c) 2013 Tubal Martin - MIT license | Wrapped in UMD by Okanjo */\n(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.onDomReady = factory();\n }\n}(this, function() {\n\n 'use strict';\n\n var win = window,\n doc = win.document,\n docElem = doc.documentElement,\n\n LOAD = \"load\",\n FALSE = false,\n ONLOAD = \"on\"+LOAD,\n COMPLETE = \"complete\",\n READYSTATE = \"readyState\",\n ATTACHEVENT = \"attachEvent\",\n DETACHEVENT = \"detachEvent\",\n ADDEVENTLISTENER = \"addEventListener\",\n DOMCONTENTLOADED = \"DOMContentLoaded\",\n ONREADYSTATECHANGE = \"onreadystatechange\",\n REMOVEEVENTLISTENER = \"removeEventListener\",\n\n // W3C Event model\n w3c = ADDEVENTLISTENER in doc,\n top = FALSE,\n\n // isReady: Is the DOM ready to be used? Set to true once it occurs.\n isReady = FALSE,\n\n // Callbacks pending execution until DOM is ready\n callbacks = [];\n\n // Handle when the DOM is ready\n function ready( fn ) {\n if ( !isReady ) {\n\n // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n if ( !doc.body ) {\n return defer( ready );\n }\n\n // Remember that the DOM is ready\n isReady = true;\n\n // Execute all callbacks\n while ( fn = callbacks.shift() ) {\n defer( fn );\n }\n }\n }\n\n // The ready event handler\n function completed( event ) {\n // readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n if ( w3c || event.type === LOAD || doc[READYSTATE] === COMPLETE ) {\n detach();\n ready();\n }\n }\n\n // Clean-up method for dom ready events\n function detach() {\n if ( w3c ) {\n doc[REMOVEEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n win[REMOVEEVENTLISTENER]( LOAD, completed, FALSE );\n } else {\n doc[DETACHEVENT]( ONREADYSTATECHANGE, completed );\n win[DETACHEVENT]( ONLOAD, completed );\n }\n }\n\n // Defers a function, scheduling it to run after the current call stack has cleared.\n function defer( fn, wait ) {\n // Allow 0 to be passed\n setTimeout( fn, +wait >= 0 ? wait : 1 );\n }\n\n // Attach the listeners:\n\n // Catch cases where onDomReady is called after the browser event has already occurred.\n // we once tried to use readyState \"interactive\" here, but it caused issues like the one\n // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n if ( doc[READYSTATE] === COMPLETE ) {\n // Handle it asynchronously to allow scripts the opportunity to delay ready\n defer( ready );\n\n // Standards-based browsers support DOMContentLoaded\n } else if ( w3c ) {\n // Use the handy event callback\n doc[ADDEVENTLISTENER]( DOMCONTENTLOADED, completed, FALSE );\n\n // A fallback to window.onload, that will always work\n win[ADDEVENTLISTENER]( LOAD, completed, FALSE );\n\n // If IE event model is used\n } else {\n // Ensure firing before onload, maybe late but safe also for iframes\n doc[ATTACHEVENT]( ONREADYSTATECHANGE, completed );\n\n // A fallback to window.onload, that will always work\n win[ATTACHEVENT]( ONLOAD, completed );\n\n // If IE and not a frame\n // continually check to see if the document is ready\n try {\n top = win.frameElement == null && docElem;\n } catch(e) {}\n\n if ( top && top.doScroll ) {\n (function doScrollCheck() {\n if ( !isReady ) {\n try {\n // Use the trick by Diego Perini\n // http://javascript.nwbox.com/IEContentLoaded/\n top.doScroll(\"left\");\n } catch(e) {\n return defer( doScrollCheck, 50 );\n }\n\n // detach all dom ready events\n detach();\n\n // and execute any waiting functions\n ready();\n }\n })();\n }\n }\n\n function onDomReady( fn ) {\n // If DOM is ready, execute the function (async), otherwise wait\n isReady ? defer( fn ) : callbacks.push( fn );\n }\n\n // Add version\n onDomReady.version = \"1.4.0\";\n // Add method to check if DOM is ready\n onDomReady.isReady = function(){\n return isReady;\n };\n\n return onDomReady;\n}));\n\n\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n/*global define: false*/\n\n(function (global, factory) {\n if (typeof exports === \"object\" && exports) {\n factory(exports); // CommonJS\n } else if (typeof define === \"function\" && define.amd) {\n define(['exports'], factory); // AMD\n } else {\n factory(global.Mustache = {}); //