1"use strict"; 2 3if (!window.console) { 4 window.console = { 5 log: function() {}, 6 warn: function() {}, 7 error: function() {}, 8 time: function() {}, 9 timeEnd: function() {} 10 } 11} 12 13var cartBypassAddressChecks = false; 14 15var Kernel = function () { var m, c = {}, q = {}, s = {}, j = {}, a = "main"; function b(u) { if (f(u)) { u = [u] } return u } function f(u) { return Object.prototype.toString.call(u) == "[object String]" } function p(w, v) { var u, x; if (!w) { return } for (u in w) { if (w.hasOwnProperty(u) || v) { if (u === "decorateMethod" || u === "decorateMethods") { return } if (!w._decoratedMethods) { w._decoratedMethods = {} } if (!w._decoratedMethods[u]) { x = w[u]; if (typeof x === "function") { w[u] = m.decorateMethod(w, u, x); w._decoratedMethods[u] = true } } } } } function e(u) { a = u } function k(w) { var v, x, u = {}; if (w.extend) { v = b(w.extend); for (i = 0; i < v.length; i += 1) { x = v[i]; x = q[x]; if (x) { Kernel.extend(u, x, true) } } } return Kernel.extend(u, w, true) } function n(v, u) { q[v] = k(u) } function l(w, u) { var z = { event: 0 }, v = { event: 0 }, y = { event: 0 }, x = u; x._internals = { type: "hub" }; x.id = w; x.broadcast = function (I, E, L, B) { var F, C, G = j.event, N, K, A, J, H = 0, M = [], D; if (x.beforeBroadcast) { D = x.beforeBroadcast(I, E, B); if (D.type) { I = D.type } if (D.data) { E = D.data } } C = j[I]; z[I] = z[I] || 0; z[I] += 1; z.event += 1; v[I] = v[I] || 0; y[I] = y[I] || 0; if (C) { for (F = 0, N = C.length; F < N; F += 1) { A = (new Date()).getTime(); j[I][F].callback(E, B); J = (new Date()).getTime() - A; H += J; y[I] += J; y.event += J; v[I] += 1; v.event += 1; M.push({ id: j[I][F].id, elapseTime: J, callback: j[I][F].callback }) } } if (G) { K = { type: I, data: E, time: new Date(), listeners: M, broadcastCount: z[I], callbackCount: v[I], elapseTime: H, totalElapseTime: y[I], all: { broadcastCount: z.event, callbackCount: v.event, totalElapseTime: y.event } }; for (F = 0, N = G.length; F < N; F += 1) { j.event[F].callback(K) } } if (L) { L() } }; x.authorized = x.authorized || function (A, B) { return true }; x.listen = function (D, F, E) { E = E || "hub-" + x.id; var C, B, A; D = b(D); for (C = 0, B = D.length; C < B; C += 1) { A = D[C]; if (x.authorized(D, E)) { j[A] = j[A] || []; j[A].push({ callback: F, id: E }) } } }; x.getStats = function () { return { broadcastCount: z, callbackCount: v, totalElapseTime: y } }; x.share = function (A) { Kernel.extend(x, A) }; p(x); c[w] = x }
15 function t(v) { try { if (v instanceof RegExp) { return true } if (v instanceof Node) { return true } if (v instanceof jQuery) { return true } } catch (u) { } return false } function o(B, A, v, z, w) { var y, x, u; if (A === null) { return B } if (typeof B !== "object" || !B) { B = (A instanceof Array) ? [] : {} } if (B._internals && (B._internals.type === "module" || B._internals.type === "hub")) { v = true; p(B, true) } if (B instanceof Array && A instanceof Array && (!w)) { B = [] } for (y in A) { if (A.hasOwnProperty(y) || z) { if (B[y] === A[y]) { continue } if (y === "_internals") { continue } if (y === "_parent") { continue } if (y === "_children") { continue } if (B === A[y]) { continue } if (y === "hub" && A[y]._internals && A[y]._internals.type === "hub") { continue } if (t(A[y])) { B[y] = A[y]; continue } if (v && typeof A[y] === "object") { B[y] = Kernel.extend(B[y], A[y], v, z, w) } else { if (B._internals && B._internals.type === "Kernel") { switch (y) { case "extend": case "decorateMethods": case "module": case "register": case "hub": case "start": case "stop": case "version": case "_internals": throw "You can't extend '" + y + "', it's part of Kernel's base functionality."; default: } } else { if (B._internals && B._internals.type === "module") { if (y === "id") { throw "You can't overwrite a module instance id. [" + B.id + "]" } } } if (B instanceof Array && A instanceof Array && w) { for (x = 0, u = B.length; x < u; x += 1) { if (B[x] === A[y]) { continue } } B.push(A[y]) } else { B[y] = A[y] } } } } return B } function g(B, z, y, w, v) { var y = y || a, u; s[B] = { hub: c[y], started: false, Definition: q[z] }; try { u = Kernel.extend(k(s[B].Definition), s[B].Definition, true) } catch (A) { throw "Couldn't register module: [" + B + "] - missing or broken Definition: " + A.message } if (w) { Kernel.extend(u, w, true) } u._internals = { type: "module", moduleType: z }; u.kill = u.kill || function () { }; u.id = B; var x = function () { }; x.prototype = s[B].hub; u.hub = new x; u.hub.broadcast = function (C, D, E) { s[B].hub.broadcast(C, D, E, B) }; u.hub.listen = function (C, D) { s[B].hub.listen(C, D, B) }; u.hub._internals = Kernel.extend(s[B].hub._internals, { moduleId: B, moduleType: z }); p(u, true); s[B].instance = u; if (v.onRegister) { v.onRegister(s[B].instance) } if (s[B].instance.onRegister) { s[B].instance.onRegister() } } function r(v) { var u; v = v || function (w) { return w.toString().replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase() }; for (u in m._internals.modules) { m.register(v(u), u) } } function d(u) { if (s[u].instance.started) { Kernel.stop(u) } delete s[u] } function h(w, v, u) { if (u.module.isStarted(w)) { return } if (v) { o(s[w].instance, v, true) } s[w].started = true; return u.onStart(s[w].instance) } m = { extend: o, decorateMethods: p, module: { define: n, get: function (u) { if (!s[u]) { throw "Couldn't get instance for: " + u + ", is it registered?" } return s[u].instance }, getDefinition: function (u) { return q[u] }, isStarted: function (u) { return s[u].started } }, hub: { define: l, get: function (u) { return c[u] } }, register: function (y, x, w, u) { var v; if (f(y)) { g(y, x, w, u, this) } else { for (v = 0; v < y.length; v += 1) { g(y[v].id, y[v].type, y[v].hub, y[v].config, this) } } }, unregister: d, autoRegisterModules: r, start: function (w, u) { var v; if (f(w)) { return h(w, u, this) } else { for (v = 0; v < w.length; v += 1) { h(w[v].id, w[v].config, this) } } }, startAll: function () { var u; for (u in s) { h(u, null, this) } }, onStart: function (u, v) { u.init(); if (v) { v() } }, decorateMethod: function (u, v, w) { return function () { return w.apply(u, arguments) } }, stop: function (y) { var w, v, u, x; this.onStop(s[y].instance); for (w in j) { for (v = 0, u = j[w].length; v < u; v += 1) { x = j[w][v]; if (x.id === y) { j[w].splice(v, 1) } } } s[y].started = false }, onStop: function (u) { u.kill() }, version: "2.7.5", _internals: { PRIVATE: "FOR DEBUGGING ONLY", type: "Kernel", hubs: c, modules: q, registered: s, listeners: j } }; return m } (); 16Kernel.hub.define("main", {}); 17 18(function(factory) { 19 if (typeof define === 'function' && define.amd) { 20 define(factory); 21 } else if (typeof exports === 'object') { 22 module.exports = factory(); 23 } else { 24 var _OldCookies = window.Cookies; 25 var api = window.Cookies = factory(); 26 api.noConflict = function() { 27 window.Cookies = _OldCookies; 28 return api; 29 }; 30 } 31}(function() { 32 function extend() { 33 var i = 0; 34 var result = {}; 35 for (; i < arguments.length; i++) { 36 var attributes = arguments[i]; 37 for (var key in attributes) { 38 result[key] = attributes[key]; 39 } 40 } 41 return result; 42 } 43 44 function init(converter) { 45 function api(key, value, attributes) { 46 var result; 47 48 if (arguments.length > 1) { 49 attributes = extend({ 50 path: '/' 51 }, api.defaults, attributes); 52 53 if (typeof attributes.expires === 'number') { 54 var expires = new Date(); 55 expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); 56 attributes.expires = expires; 57 } 58 59 try { 60 result = JSON.stringify(value); 61 if (/^[\{\[]/.test(result)) { 62 value = result; 63 } 64 } catch (e) {} 65 66 value = encodeURIComponent(String(value)); 67 value = value.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); 68 69 key = encodeURIComponent(String(key)); 70 key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); 71 key = key.replace(/[\(\)]/g, escape); 72 73 return (document.cookie = [ 74 key, '=', value, 75 attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE 76 attributes.path && '; path=' + attributes.path, 77 attributes.domain && '; domain=' + attributes.domain, 78 attributes.secure ? '; secure' : '' 79 ].join(''));
vendor: 1,219 bytes, lines 80-125
80 } 81 82 83 if (!key) { 84 result = {}; 85 } 86 87 var cookies = document.cookie ? document.cookie.split('; ') : []; 88 var rdecode = /(%[0-9A-Z]{2})+/g; 89 var i = 0; 90 91 for (; i < cookies.length; i++) { 92 var parts = cookies[i].split('='); 93 var name = parts[0].replace(rdecode, decodeURIComponent); 94 var cookie = parts.slice(1).join('='); 95 96 if (cookie.charAt(0) === '"') { 97 cookie = cookie.slice(1, -1); 98 } 99 100 try { 101 cookie = converter && converter(cookie, name) || cookie.replace(rdecode, decodeURIComponent); 102 103 if (this.json) { 104 try { 105 cookie = JSON.parse(cookie); 106 } catch (e) {} 107 } 108 109 if (key === name) { 110 result = cookie; 111 break; 112 } 113 114 if (!key) { 115 result[name] = cookie; 116 } 117 } catch (e) {} 118 } 119 120 return result; 121 } 122 123 api.get = api.set = api; 124 api.getJSON = function() { 125 return api.apply({
126 json: true 127 }, [].slice.call(arguments)); 128 }; 129 api.defaults = {}; 130 131 api.remove = function(key, attributes) { 132 api(key, '', extend(attributes, { 133 expires: -1 134 })); 135 }; 136 137 api.withConverter = init; 138 139 return api; 140 } 141 142 return init(); 143})); 144 145var rates = { 146 "AUD": 1.53, 147 "CAD": 1.40, 148 "EUR": 0.86, 149 "GBP": 0.76, 150 "NZD": 1.75, 151 "USD": 1 152} 153 154var utils = { 155 getRowsForViewport: function(){ 156 const w = window.innerWidth; 157 if (w < 640) return 12; // mobile 158 if (w < 1024) return 24; // tablet 159 return 48; // desktop 160 }, 161 mobileCheck: function() { 162 var check = false; 163 (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); 164 return check; 165 }, 166 getParam: function(name) { 167 return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null 168 }, 169 numberWithCommas: function(x) { 170 return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 171 }, 172 numberWithCommasAndSpans: function(x) { 173 if (x >= 100) { 174 return "<span class=\"price-whole\">" + x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",").split(".").join("</span><span class=\"price-over-hundred price-part\">.<span class=\"price-fraction\">") + "</span></span>"; 175 } else { 176 return "<span class=\"price-whole\">" + x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",").split(".").join("</span><span class=\"price-part\">.<span class=\"price-fraction\">") + "</span></span>"; 177 } 178 }, 179 getCheckboxFilter: function(elClass, type) { 180 var checkedValue = null; 181 var names = []; 182 var inputElements = document.querySelectorAll(elClass + " input"); 183 for (var i = 0; inputElements[i]; ++i) { 184 if (inputElements[i].checked) { 185 names.push(inputElements[i].getAttribute("data-" + type).replace(/&/g, '&').replace(/"/g, '"')); 186 } 187 } 188 return names; 189 }, 190 setCheckboxFilter: function(elClass, type, clickHandler) { 191 var v = app.state[type].split(","); 192 var inputElements = document.querySelectorAll(elClass + " input"); 193 for (var i = 0; i < inputElements.length; i++) { 194 for (var j = 0; j < v.length; j++) { 195 if (v[j].replace(/&/g, '&').replace(/"/g, '"') == inputElements[i].getAttribute("data-" + type)) { 196 inputElements[i].checked = true; 197 } 198 } 199 inputElements[i].addEventListener('click', function(e) { 200 clickHandler(e); 201 }); 202 } 203 }, 204 isBS5: function() {
205 try { 206 return $.fn.tooltip.Constructor.VERSION.substr(0,1) == "5"; 207 } 208 catch (e) { 209 return false; 210 } 211 }, 212 navigateTo: function(url) { 213 if (!utils.getParam("cms")) { 214 location.href = url; 215 } 216 } 217} 218var prices = { 219 initPrices: function(dcurr, useShort) { 220 if (dcurr == "37") dcurr = "NZD"; 221 if (dcurr == "39") dcurr = "USD"; 222 var fld, amt, type, scurr, text, prefix, shortPrefix, percentChange; 223 var pitems = document.querySelectorAll(".price"); 224 fld = pitems[0]; 225 if (dcurr == "" && fld) { 226 dcurr = fld.getAttribute("data-cur"); 227 } 228 229 switch (dcurr) { 230 case "NZD": 231 prefix = '<span class="price-prefix"><small class="prefix-nzd">NZ</small>$</span>'; 232 shortPrefix = "$"; 233 break; 234 case "USD": 235 prefix = '<span class="price-prefix"><small class="prefix-usd">US</small>$</span>'; 236 shortPrefix = "$"; 237 break; 238 case "AUD": 239 prefix = '<span class="price-prefix"><small class="prefix-aud">AU</small>$</span>'; 240 shortPrefix = "$"; 241 break; 242 case "CAD": 243 prefix = '<span class="price-prefix"><small class="prefix-cad">CA</small>$</span>'; 244 shortPrefix = "$"; 245 break; 246 case "EUR": 247 prefix = '<span class="price-prefix">€</span>'; 248 shortPrefix = "€"; 249 break; 250 case "GBP": 251 prefix = '<span class="price-prefix">£</span>'; 252 shortPrefix = "£"; 253 break; 254 default: 255 prefix = '<span class="price-prefix">$</span>'; 256 shortPrefix = "$"; 257 break; 258 } 259 260 for (var i = 0; i < pitems.length; i++) { 261 fld = pitems[i]; 262 amt = Number(fld.getAttribute("data-amt")) / 10000; 263 type = fld.getAttribute("data-type"); 264 scurr = fld.getAttribute("data-cur"); 265 percentChange = fld.getAttribute("data-percent-change"); 266 267 if (!ed.disableCurrencyConversion && dcurr) { 268 // console.log("Price init:",type,scurr,dcurr,rates); 269 amt = amt / rates[scurr] * rates[dcurr]; 270 } 271 272 if (isNaN(amt)) amt = 0; 273 274 if (percentChange > 0) { 275 amt = (amt * (percentChange / 100)); 276 } 277 278 text = ""; 279 //console.log("Amt:" + amt + ", type:" + type + ",scurr:" + scurr + ",useShort:" + useShort + ", rates[scurr]:" + rates[scurr] + ",rates[dcurr]:" + rates[scurr]); 280 switch (type) { 281 case "adisc": 282 { 283 if (useShort) { 284 text = '<span style="white-space:nowrap;">' + shortPrefix + utils.numberWithCommasAndSpans(Number(amt).toFixed(2)) + '</span>'; 285 } else { 286 text = '<span style="white-space:nowrap;">' + prefix + utils.numberWithCommasAndSpans(Number(amt).toFixed(2)) + '</span>'; 287 } 288 break; 289 } 290 case "pdisc": 291 { 292 //text = Number(amt) + "%"; 293 var pc = Number(fld.getAttribute("data-pc")) / 10000; 294 if (useShort) { 295 text = '<span style="white-space:nowrap;">' + Number(Math.round(pc)) + '%</span>'; 296 } else { 297 text = '<span style="white-space:nowrap;">' + Number(Math.round(pc)) + '%</span>'; 298 } 299 break; 300 } 301 case "range": 302 { 303 if (useShort) { 304 text = shortPrefix + utils.numberWithCommas(Math.ceil(amt / 10) * 10); 305 } else { 306 text = prefix + utils.numberWithCommas(Math.ceil(amt / 10) * 10); 307 } 308 break; 309 } 310 default: 311 { 312 if (useShort) { 313 text = shortPrefix + utils.numberWithCommasAndSpans(Number(amt).toFixed(2)); 314 } else { 315 text = prefix + utils.numberWithCommasAndSpans(Number(amt).toFixed(2)); 316 } 317 break; 318 } 319 } 320 fld.innerHTML = text; 321 } 322 app.ls.baseCurrency = scurr; 323 app.ls.shortPrefix = shortPrefix; 324 // console.log('initPrices', fld, amt, type, scurr, text, prefix, shortPrefix, percentChange) 325 } 326} 327 328var app = { 329 htmlEncode: function (str) { 330 const div = document.createElement('div'); 331 div.textContent = str; 332 return div.innerHTML; 333 }, 334 335 isSameOrigin: function (url) {
336 try { 337 const current = new URL(window.location.href); 338 const target = new URL(url, window.location.origin); 339 return target.origin === current.origin; 340 } catch (e) { 341 return false; 342 } 343 }, 344 345 safeNavigate: function(url) { 346 var m = this; 347 if (m.isSameOrigin(url)) { 348 window.location.href = url; 349 return true; 350 } 351 return false; 352 }, 353 354 state: { 355 search: (utils.getParam("q") ? utils.getParam("q") : ""), 356 searchAll: false, 357 page: (utils.getParam("page") ? utils.getParam("page") : ""), 358 sort: (utils.getParam("sort") ? utils.getParam("sort") : ""), 359 rows: (utils.getParam("rows") ? utils.getParam("rows") : ""), 360 min: (utils.getParam("min") ? utils.getParam("min") : ""), 361 max: (utils.getParam("max") ? utils.getParam("max") : ""), 362 brand: (utils.getParam("brand") ? utils.getParam("brand") : ""), 363 location: (utils.getParam("location") ? utils.getParam("location") : ""), 364 facets: (utils.getParam("facets") ? utils.getParam("facets") : ""), 365 flags: (utils.getParam("flags") ? utils.getParam("flags") : ""), 366 currency: (utils.getParam("curr") ? utils.getParam("curr") : "") 367 }, 368 getLocalState: function(storeName) { 369 if (!storeName) { 370 storeName = "s"; 371 } 372 var localState = Cookies.getJSON(storeName); 373 374 if (typeof cmsConfig !== 'undefined') { 375 //console.log("cmsConfig", cmsConfig); 376 if (typeof cmsConfig.userGuid !== 'undefined') { 377 localState.sessionGuid = cmsConfig.userGuid; 378 //console.log(localState.sessionGuid); 379 } 380 } 381 return localState; 382 }, 383 setLocalState: function(obj, storeName) { 384 if (!storeName) { 385 storeName = "s"; 386 } 387 if (obj) { 388 var stateObj = JSON.parse(JSON.stringify(obj)); 389 if (stateObj.profile) { 390 var guid = stateObj.profile.guid; 391 stateObj.profile = { 392 guid: guid 393 }; 394 } 395 396 if (window.ec) { 397 if (window.ec[0]) { 398 if (!stateObj.v) { 399 stateObj.v = []; 400 } 401 if (stateObj.v.length > 20) { 402 stateObj.v = stateObj.v.slice(Math.max(stateObj.v.length - 20, 0)); 403 } 404 stateObj.v.push(window.ec[0]); 405 } 406 } 407 408 return Cookies.set(storeName, stateObj); 409 } 410 }, 411 updateLocalState: function(name, value) { 412 var m = this; 413 var ls = m.getLocalState(); 414 ls[name] = value; 415 m.setLocalState(ls); 416 }, 417 getLocalVar: function(name) { 418 var m = this; 419 var ls = m.getLocalState(); 420 return ls[name]; 421 }, 422 changeCurrency: function(dcurr) { 423 var m = this; 424 m.ls.currency = dcurr; 425 prices.initPrices(m.ls.currency); 426 m.setLocalState(m.ls); 427 }, 428 changeView: function(clearFilter) { 429 var m = this; 430 var params = []; 431 if (m.state.page > 1) { 432 params.push("page=" + m.state.page); 433 } 434 if (m.state.search != "") { 435 params.push("q=" + encodeURIComponent(m.state.search)); 436 } 437 if (!clearFilter) { 438 if (m.state.brand != "") { 439 params.push("brand=" + encodeURIComponent(m.state.brand)); 440 } 441 if (m.state.location != "") { 442 params.push("location=" + encodeURIComponent(m.state.location)); 443 } 444 if (m.state.flags != "") { 445 params.push("flags=" + encodeURIComponent(m.state.flags)); 446 } 447 if (m.state.facets != "") { 448 params.push("facets=" + encodeURIComponent(m.state.facets)); 449 } 450 if (m.state.sort != "") { 451 params.push("sort=" + encodeURIComponent(m.state.sort)); 452 } 453 if (Number(m.state.rows) < 5) { 454 m.state.rows = 48; 455 } 456 if (m.state.rows != 48) { 457 params.push("rows=" + encodeURIComponent(m.state.rows)); 458 } 459 if (m.state.min > 0) { 460 params.push("min=" + m.state.min); 461 } 462 if (m.state.max > 0) { 463 params.push("max=" + m.state.max); 464 } 465 if (m.state.nc > 0) {
466 params.push("nc=" + m.state.nc); 467 } 468 } 469 var p = ""; 470 for (var i = 0; i < params.length; i++) { 471 p += params[i] + ((i < (params.length - 1)) ? "&" : ""); 472 } 473 // console.log("changeView", JSON.stringify(m.state)); 474 if (m.state.url) { 475 if (m.state.url == "") { 476 window.location = window.location.pathname + ((p != "") ? "?" + p : ""); 477 } else { 478 window.location = m.state.url + ((p != "") ? "?" + p : ""); 479 } 480 } else { 481 window.location = window.location.pathname + ((p != "") ? "?" + p : ""); 482 } 483 }, 484 g: function(a) { 485 return a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, this.g) 486 }, 487 488 resetTotals: function() { 489 var m = this; 490 m.ls.total = { 491 amount: 0, 492 tax: 0, 493 shipping: 0, 494 discounts: 0, 495 weight: 0, 496 volume: 0, 497 due: 0, 498 lineCount: 0, 499 itemCount: 0, 500 loyaltyReward: 0, 501 loyaltyCost: 0 502 }; 503 }, 504 renderTotals: function() { 505 var m = this; 506 var pitems; 507 // console.log("renderTotals", m.ls.total); 508 // find and fill in various total types 509 pitems = document.querySelectorAll(".cart-total"); 510 511 if (!m.ls.total) { 512 m.resetTotals(); 513 m.setLocalState(m.ls); 514 } 515 516 for (var i = 0; i < pitems.length; i++) { 517 var type = pitems[i].getAttribute("data-type"); 518 switch (type) { 519 case "amount": 520 pitems[i].innerHTML = '<span class="price" data-amt="' + (+m.ls.total.amount || 0) + '" data-cur="' + m.ls.baseCurrency + '" data-type="total" data-tax="' + (+m.ls.baseTaxRate || 0) + '"></span>'; 521 break; 522 case "tax": 523 pitems[i].innerHTML = '<span class="price" data-amt="' + (+m.ls.total.tax || 0) + '" data-cur="' + m.ls.baseCurrency + '" data-type="tax" data-tax="' + (+m.ls.baseTaxRate || 0) + '"></span>'; 524 break; 525 case "shipping": 526 pitems[i].innerHTML = '<span class="price" data-amt="' + (+m.ls.total.shipping || 0) + '" data-cur="' + m.ls.baseCurrency + '" data-type="shipping" data-tax="' + (+m.ls.baseTaxRate || 0) + '"></span>'; 527 break; 528 case "discounts": 529 pitems[i].innerHTML = '<span class="price" data-amt="' + (+m.ls.total.discounts || 0) + '" data-cur="' + m.ls.baseCurrency + '" data-type="discounts" data-tax="' + (+m.ls.baseTaxRate || 0) + '"></span>'; 530 break; 531 case "due": 532 pitems[i].innerHTML = '<span class="price" data-amt="' + (+m.ls.total.due || 0) + '" data-cur="' + m.ls.baseCurrency + '" data-type="due" data-tax="' + (+m.ls.baseTaxRate || 0) + '"></span>'; 533 break; 534 case "loyaltyReward": 535 pitems[i].innerHTML = (+m.ls.total.loyaltyReward || 0); 536 break; 537 case "loyaltyCost": 538 pitems[i].innerHTML = (+m.ls.total.loyaltyCost || 0); 539 break; 540 case "itemCount": 541 pitems[i].innerHTML = (+m.ls.total.itemCount || 0); 542 break; 543 case "itemCountLabel": 544 pitems[i].innerHTML = "item" + ((+m.ls.total.itemCount || 0) == 1 ? "" : "s"); 545 break; 546 case "lineCount": 547 pitems[i].innerHTML = (+m.ls.total.lineCount || 0); 548 break; 549 case "lineCountLabel": 550 pitems[i].innerHTML = "line" + ((+m.ls.total.lineCount || 0) == 1 ? "" : "s"); 551 break; 552 default: 553 pitems[i].innerHTML = "Invalid type " + type; 554 break; 555 } 556 } 557 558 // hide or statuses based on if there are things in the cart 559 pitems = document.querySelectorAll(".cart-status"); 560 for (var i = 0; i < pitems.length; i++) { 561 var type = pitems[i].getAttribute("data-type"); 562 563 if (type == "empty") { 564 if (m.ls.total.itemCount > 0) { 565 pitems[i].style.display = "none"; 566 } else { 567 if (pitems[i].getAttribute("data-style")) { 568 pitems[i].style.display = pitems[i].getAttribute("data-style"); 569 } else { 570 pitems[i].style.display = "inline-block"; 571 } 572 } 573 } else { 574 if (m.ls.total.itemCount > 0) { 575 if (pitems[i].getAttribute("data-style")) { 576 pitems[i].style.display = pitems[i].getAttribute("data-style"); 577 } else { 578 pitems[i].style.display = "inline-block"; 579 } 580 } else { 581 pitems[i].style.display = "none"; 582 } 583 } 584 } 585 }, 586 init: function(prefixId) { 587 var m = this; 588 var pitems; 589 m.ls = m.getLocalState(); 590 591 if (!m.ls) { 592 m.ls = {}; 593 m.ls.currency = ed.currency; 594 m.ls.profile = {}; 595 m.ls.sessionGuid = m.g(0); 596 m.ls.saleGuid = m.g(0); 597 m.ls.baseCurrency = ed.currency; 598 m.ls.baseTaxRate = ed.tax; 599 m.ls.geoCountry = ""; 600 m.ls.rows = utils.getRowsForViewport(); 601 m.resetTotals(); 602 m.setLocalState(m.ls); 603 } else { 604 if (m.ls.rows != utils.getRowsForViewport()) { 605 m.ls.rows = utils.getRowsForViewport(); 606 m.setLocalState(m.ls); 607 } 608 // if there was an error, redo the setup 609 // if (typeof m.ls.saleGuid === "undefined") { 610 // m.ls = {}; 611 // m.ls.currency = ed.currency; 612 // m.ls.profile = {}; 613 // m.ls.sessionGuid = m.g(0); 614 // m.ls.saleGuid = m.g(0); 615 // m.ls.baseCurrency = ed.currency; 616 // m.ls.baseTaxRate = ed.tax; 617 // m.ls.geoCountry = ""; 618 // m.resetTotals(); 619 // m.setLocalState(m.ls); 620 // } 621 622 m.renderTotals(); 623 prices.initPrices(m.ls.currency); 624 } 625 626 if (!prefixId) { 627 prefixId = "#desktop-filter-menu"; 628 } 629
630 pitems = document.querySelectorAll(".fnc-currency"); 631 for (var i = 0; i < pitems.length; i++) { 632 pitems[i].value = m.ls.currency; 633 } 634 635 utils.setCheckboxFilter(prefixId + " .fnc-brand-filter", "brand", function(e) { 636 e.preventDefault(); 637 e.stopPropagation(); 638 m.state.page = 1; 639 m.state.brand = utils.getCheckboxFilter(prefixId + " .fnc-brand-filter", "brand"); 640 m.changeView(); 641 }); 642 643 utils.setCheckboxFilter(prefixId + " .fnc-location-filter", "location", function(e) { 644 e.preventDefault(); 645 e.stopPropagation(); 646 m.state.page = 1; 647 m.state.location = utils.getCheckboxFilter(prefixId + " .fnc-location-filter", "location"); 648 m.changeView(); 649 }); 650 651 utils.setCheckboxFilter(prefixId + " .fnc-facet-filter", "facets", function(e) { 652 e.preventDefault(); 653 e.stopPropagation(); 654 m.state.page = 1; 655 m.state.facets = utils.getCheckboxFilter(prefixId + " .fnc-facet-filter", "facets"); 656 m.changeView(); 657 }); 658 659 utils.setCheckboxFilter(prefixId + " .fnc-flags-filter", "flags", function(e) { 660 e.preventDefault(); 661 e.stopPropagation(); 662 m.state.page = 1; 663 m.state.flags = utils.getCheckboxFilter(prefixId + " .fnc-flags-filter", "flags"); 664 m.changeView(); 665 }); 666 } 667} 668app.init();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.