(function(){ "use strict"; var DEF={PAGE_SIZE:50,FULL_BLEED:true,ANNOUNCE_SECONDS:0,ANNOUNCEMENT:"",LINKS:[],FOOTER_NOTE:"",HELP_NOTE:""},CFG,C={},KEY,X={}; var log=function(m){try{console.info("[SFB] "+m)}catch(e){}}; function readCfg(){CFG=(window.SFB||{}).CONFIG;Object.assign(C,DEF,CFG||{});KEY="sfb:csv:"+(C.CSV_URL||"")} window.SFB=window.SFB||{};window.SFB.started=true;window.SFB.x=X; readCfg();log("script started"); function download(){ var ctl=window.AbortController?new AbortController():null,to=setTimeout(function(){if(ctl)ctl.abort()},20000); var p=fetch(C.CSV_URL,ctl?{signal:ctl.signal}:undefined).then(function(r){clearTimeout(to);if(!r.ok)throw new Error("The sheet link returned an error ("+r.status+").");return r.text()}); p.catch(function(){});return p; } X.net=null;if(CFG&&C.CSV_URL)X.net=download(); function cacheGet(){try{var v=JSON.parse(localStorage.getItem(KEY));return v&&v.csv?v.csv:null}catch(e){return null}} function cacheSet(t){try{localStorage.setItem(KEY,JSON.stringify({t:Date.now(),csv:t}))}catch(e){}} var esc=function(s){return String(s==null?"":s).replace(/[&<>"']/g,function(c){return{"&":"&","<":"<",">":">",'"':""","'":"'"}[c]})}; var coll=new Intl.Collator(undefined,{numeric:true,sensitivity:"base"}); var rk=function(v){var m=String(v).match(/\d+(\.\d+)?/);return m?parseFloat(m[0])*(/TB/i.test(v)?1024:1):0}; var KEYS=["sku","title","desc","family","line","edition","model","size","cpu","chip","ram","storage","gpu","conn","os","color","refresh","display","keyboard","charger","warranty","stock","price","features"],KNOWN={}; KEYS.forEach(function(k){KNOWN[k]=1}); var AL={partnumber:"sku",part:"sku",partno:"sku",skunumber:"sku",mpn:"sku",description:"desc",partdescription:"desc",productdescription:"desc",productname:"title",name:"title", category:"family",devicecategory:"family",product:"family",productline:"line",modelname:"model",displaysize:"size",screensize:"size",processor:"cpu",cpumodel:"chip",processormodel:"chip", memory:"ram",ssd:"storage",graphics:"gpu",connectivity:"conn",network:"conn",operatingsystem:"os",colour:"color",refreshrate:"refresh",displaytype:"display",keyboardlanguage:"keyboard", msrp:"price",msrpcad:"price",pricecad:"price",srp:"price",status:"stock",stockstatus:"stock",availability:"stock",notes:"features",note:"features",options:"features"}; var FAC=[["line","Product line",1],["edition","Edition",1],["size","Screen size",1],["cpu","Processor",1],["ram","Memory",1],["storage","Storage",1],["color","Color",1],["keyboard","Keyboard",1], ["conn","Connectivity",0],["display","Display type",0],["charger","Charger",0],["refresh","Refresh rate",0],["gpu","Graphics",0],["os","Operating system",0],["warranty","Warranty",0]]; var FK=FAC.map(function(f){return f[0]}).concat("stock"); var NUM={size:1,ram:1,storage:1,refresh:1,price:1}; var sc=function(v){return /^(active|available|in stock)/i.test(v)?"ok":/low|limited|back-?order|pre-?order|coming|last ?buy/i.test(v)?"warn":/disc|end of life|\beol\b|obsolete|out of stock|unavailable|inactive|retired/i.test(v)?"off":"nu"}; var S={all:[],map:{},res:[],cnt:{},f:{},q:"",min:"",max:"",cmp:[],sk:"",dir:1,n:C.PAGE_SIZE,cols:[],pills:[],fg:{}}; FK.forEach(function(k){S.f[k]=new Set()}); function csv(t){ var rows=[],row=[],f="",q=false,i=t.charCodeAt(0)===65279?1:0,n=t.length,c; for(;i1||row[0]!=="")rows.push(row);row=[]} else f+=c} if(f!==""||row.length){row.push(f);if(row.length>1||row[0]!=="")rows.push(row)} return rows; } function norm(cols,r){ var o={extra:[]};KEYS.forEach(function(k){o[k]=""}); cols.forEach(function(c,i){var v=(r[i]||"").trim();if(!v)return;if(c.k)o[c.k]=v;else if(c.l)o.extra.push([c.l,v])}); if(!o.sku)return null; var src=o.title||o.desc,m=/^(.*?)(?:\s+for Business)?\s*,\s*(\d+(?:st|nd|rd|th))\s+Edition/i.exec(src); if(!o.family)o.family=(m?m[1]:src.split(",")[0]).replace(/^Microsoft\s+/i,"").replace(/\s+for Business$/i,"").trim(); if(!o.edition&&m)o.edition=m[2]+" Edition"; o.edition=o.edition.replace(/^(\d+(?:st|nd|rd|th))$/i,"$1 Edition"); if(!o.line)o.line=o.family; if(!o.model)o.model=o.edition?o.line+", "+o.edition:(o.title||o.line); o.desc=o.desc||o.title; o.conn=o.conn.replace(/\bwi-?fi\b/gi,"Wi-Fi"); o.ram=o.ram.replace(/\s+(?=[GT]B$)/i,"");o.storage=o.storage.replace(/\s+(?=[GT]B$)/i,""); if(!o.chip){var cm=/Snapdragon X\d?\s+(?:Plus|Elite)(?:-\d+)?/i.exec(o.desc);o.chip=cm?cm[0]:""} o.proc=o.chip||o.cpu; o.price=parseFloat(o.price.replace(/[^0-9.]/g,""))||0; var f=o.features?o.features.split(/\s*[;|]\s*/).filter(Boolean):[]; if(/smart\s?card/i.test(o.desc)&&!f.some(function(x){return /smart\s?card/i.test(x)}))f.push("SmartCard Reader"); o.features=f; var op=[]; if(o.conn&&!/wi-?fi only/i.test(o.conn))op.push(o.conn); if(o.display&&!/anti-?reflective/i.test(o.display))op.push(o.display); if(/^(no|not)\b/i.test(o.charger))op.push("No charger"); o.opts=op.concat(f); o._n={size:rk(o.size),ram:rk(o.ram),storage:rk(o.storage),refresh:rk(o.refresh),price:o.price,stock:{ok:0,warn:1,nu:2,off:3}[sc(o.stock)]}; o._q=[o.sku,o.sku.replace(/[^a-z0-9]/gi,""),o.model,o.line,o.edition,o.family,o.size,o.proc,o.cpu,o.ram,o.storage,o.gpu,o.conn,o.os,o.color,o.refresh,o.display,o.keyboard,o.charger,o.warranty,o.stock,o.features.join(" "),o.title,o.desc,o.extra.map(function(e){return e[1]}).join(" ")].join(" ").toLowerCase(); return o; } function parseRows(text){ if(/^\s*-1||(u&&s._q.indexOf(u)>-1)}))return; if(S.min!==""&&s.priceS.max)return; var bad="",nb=0,i,k; for(i=0;i1)break}} if(nb===0){res.push(s);FK.forEach(function(k){var v=s[k];cnt[k][v]=(cnt[k][v]||0)+1})} else if(nb===1){var v=s[bad];cnt[bad][v]=(cnt[bad][v]||0)+1} }); if(S.sk){var k=S.sk==="desc"?"model":S.sk,d=S.dir,num=NUM[k]||k==="stock";res.sort(function(a,b){return d*(num?a._n[k]-b._n[k]:coll.compare(String(a[k]),String(b[k])))})} else res.sort(function(a,b){return a._n.stock-b._n.stock}); S.res=res;S.cnt=cnt; } X.C=C;X.cfg=function(){return CFG};X.readCfg=readCfg;X.log=log;X.download=download;X.cacheGet=cacheGet;X.cacheSet=cacheSet;X.parseRows=parseRows;X.esc=esc;X.FAC=FAC;X.FK=FK;X.S=S;X.uniq=uniq;X.compute=compute;X.sc=sc; })();(function(){ "use strict"; window.SFB=window.SFB||{};window.SFB.b=true; function main(X){ var D=document,C=X.C,S=X.S,FAC=X.FAC,FK=X.FK,esc=X.esc,uniq=X.uniq,compute=X.compute,lastFocus,tt; var $=function(i){return D.getElementById("sfb-"+i)},R=function(){return D.getElementById("sfb")}; var fmt=new Intl.NumberFormat("en-CA",{style:"currency",currency:"CAD"}); var fmt0=new Intl.NumberFormat("en-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0}); var sc=X.sc; var ICO=''; var COLS=[["sku","Part #"],["desc","Description"],["price","MSRP (CAD)"],["stock","Status"]]; var SPEC=[["Product line","line"],["Edition","edition"],["Display size","size"],["Display type","display"],["Refresh rate","refresh"],["Processor","proc"],["Graphics","gpu"],["Memory","ram"],["Storage","storage"],["Connectivity","conn"],["Color","color"],["Keyboard","keyboard"],["Charger","charger"],["Operating system","os"],["Warranty","warranty"],["Features","features"],["Status","stock"],["MSRP (CAD)","price"]]; var SORTS=[["","Default (current first)"],["price:1","Price: low to high"],["price:-1","Price: high to low"],["sku:1","Part # A to Z"],["desc:1","Product line and edition"],["ram:-1","Memory: high to low"],["storage:-1","Storage: high to low"]]; var has=function(s,k){return k==="price"?s.price>0:k==="features"?s.features.length>0:!!s[k]}; var val=function(s,k){return k==="price"?fmt.format(s.price):k==="features"?s.features.join(", "):s[k]}; var brief=function(s){return[s.size,s.proc,s.ram&&s.ram+" RAM",s.storage&&s.storage+" storage",s.color,s.keyboard&&s.keyboard+" keyboard"].filter(Boolean).join(", ")}; var line=function(s){return s.sku+" - "+[s.model].concat(brief(s)||[],s.opts).filter(Boolean).join(", ")+(s.price?" - "+fmt.format(s.price):"")}; function reset(){FK.forEach(function(k){S.f[k].clear()});S.q=S.min=S.max="";$("q").value=$("min").value=$("max").value=""} function setData(rows,keep){ S.all=rows;S.map={};rows.forEach(function(s){S.map[s.sku]=s}); S.cmp=S.cmp.filter(function(k){return S.map[k]}); if(!keep)reset(); var p=rows.map(function(s){return s.price}).filter(Boolean); $("pr").hidden=!p.length;$("top").classList.toggle("np",!p.length); if(p.length){$("min").placeholder="Min "+Math.floor(Math.min.apply(null,p));$("max").placeholder="Max "+Math.ceil(Math.max.apply(null,p))} S.cols=COLS.filter(function(c){var k=c[0];return k==="sku"||k==="desc"||rows.some(function(s){return has(s,k)})}); buildFacets();buildSeg(); FK.forEach(function(k){var ok=uniq(k);S.f[k].forEach(function(v){if(ok.indexOf(v)<0)S.f[k].delete(v)})}); $("sort").innerHTML=SORTS.map(function(x){return'"}).join(""); $("skl").hidden=true;$("msg").hidden=true;renderCmp();apply(); } function buildFacets(){ var a="",b=""; FAC.forEach(function(f){var v=uniq(f[0]);if(v.length<2)return; var h=''+f[1]+'
'+v.map(function(x){return'"}).join("")+"
"; f[2]?a+=h:b+=h}); $("facets").innerHTML=a+(b?'
'+b+"
":""); S.pills=[].map.call(R().querySelectorAll(".pl"),function(el){return{el:el,i:el.querySelector("i"),k:el.dataset.k,v:el.dataset.v}}); S.fg={};[].forEach.call(R().querySelectorAll(".fg"),function(d){S.fg[d.dataset.k]={d:d,em:d.querySelector("em")}}); } function buildSeg(){ var rk={ok:0,warn:1,nu:2,off:3},v=uniq("stock").sort(function(a,b){return rk[sc(a)]-rk[sc(b)]}),el=$("seg");el.hidden=v.length<2; el.innerHTML=v.length<2?"":''+v.map(function(x){return'"}).join(""); } function apply(){S.n=C.PAGE_SIZE;compute();paint();renderGrid()} function paint(){ S.pills.forEach(function(p){var on=S.f[p.k].has(p.v),n=S.cnt[p.k][p.v]||0;p.i.textContent=n;p.el.classList.toggle("on",on);p.el.setAttribute("aria-pressed",on);p.el.disabled=!n&&!on}); Object.keys(S.fg).forEach(function(k){var n=S.f[k].size;S.fg[k].em.textContent=n||"";S.fg[k].d.classList.toggle("has",n>0)}); var tot=0;Object.keys(S.cnt.stock).forEach(function(v){tot+=S.cnt.stock[v]}); [].forEach.call($("seg").children,function(b){var v=b.dataset.st;b.classList.toggle("on",v?S.f.stock.has(v):!S.f.stock.size);b.querySelector("i").textContent=v?S.cnt.stock[v]||0:tot}); var ch=[]; FAC.forEach(function(f){S.f[f[0]].forEach(function(v){ch.push([f[0],v,f[1]+": "+v])})}); if(S.q)ch.push(["q","",'Search: "'+S.q+'"']); if(S.min!=="")ch.push(["min","","Min "+fmt0.format(S.min)]); if(S.max!=="")ch.push(["max","","Max "+fmt0.format(S.max)]); $("chips").innerHTML=ch.map(function(x){return'"}).join(""); var n=S.res.length,a=S.all.length; $("clear").hidden=!ch.length&&!S.f.stock.size; $("count").textContent=(n===a?a:n+" of "+a)+" SKU"+(a===1?"":"s"); $("copyall").hidden=!n;$("copyall").textContent="Copy "+n+" SKU"+(n===1?"":"s"); $("sort").value=S.sk?S.sk+":"+S.dir:""; } /* ---------- 7. Table ---------- */ function cell(s,k){ if(k==="sku")return""+esc(s.sku)+'"; if(k==="desc")return''+esc(s.line+(s.edition?", "+s.edition:""))+''+esc(s.desc||brief(s))+""; if(k==="stock")return s.stock?''+esc(s.stock)+"":""; if(k==="price")return s.price?fmt.format(s.price):""; return esc(s[k]); } function row(s){ var h='
"; $("grid").innerHTML=S.res.slice(0,S.n).map(row).join(""); $("tw").hidden=!n; if(!n)showMsg("No SKUs match these filters","Remove a filter or change your search to see more.","Clear all filters","data-clear");else $("msg").hidden=true; var m=$("more");m.hidden=n<=S.n;m.textContent="Showing the first "+S.n+" of "+n+" SKUs. Narrow your search or filters to see the rest."; } function showMsg(t,b,a,attr){ $("skl").hidden=true;if(attr!=="data-clear")$("count").textContent="Catalog unavailable";var m=$("msg");m.hidden=false; m.innerHTML=""+esc(t)+""+esc(b)+""+(a?'":""); } function toast(m){var t=$("toast");t.textContent=m;t.classList.add("on");clearTimeout(tt);tt=setTimeout(function(){t.classList.remove("on")},2200)} function copy(t,msg){ var ok=function(){toast(msg||"Copied "+t)}; function fb(){var a=D.createElement("textarea");a.value=t;a.style.cssText="position:fixed;opacity:0";D.body.appendChild(a);a.select();try{D.execCommand("copy");ok()}catch(e){toast("Copy failed. Select the text manually.")}a.remove()} navigator.clipboard?navigator.clipboard.writeText(t).then(ok,fb):fb(); } function openMod(k){ var s=S.map[k];if(!s)return;lastFocus=D.activeElement; var inC=S.cmp.indexOf(k)>-1; $("modB").innerHTML='
":"")+ '"; $("mod").classList.add("on");setTimeout(function(){var x=$("modB").querySelector(".x");if(x)x.focus()},60); } function closeMod(){$("mod").classList.remove("on");if(lastFocus&&lastFocus.focus)lastFocus.focus()} function renderCmp(){ var L=S.cmp.map(function(k){return S.map[k]}).filter(Boolean),d=$("drw"); d.classList.toggle("on",!!L.length);if(!L.length){R().style.setProperty("--drh","0px");return} d.innerHTML='
Compare ('+L.length+' of 3)
'+ L.map(function(s){return'
'+esc(s.sku)+'
'}).join("")+"
"+ SPEC.filter(function(x){return L.some(function(s){return has(s,x[1])})}).map(function(x){ var v=L.map(function(s){return has(s,x[1])?val(s,x[1]):"\u2014"}),df=v.some(function(a){return a!==v[0]}); return"
'+x[0]+"
"+v.map(function(a){return"
"+esc(a)+"
"}).join("")+"
"}).join("")+"
"; R().style.setProperty("--drh",d.offsetHeight+"px"); } function setCmp(k,on){ if(on&&S.cmp.indexOf(k)<0&&S.cmp.length>=3){toast("You can compare up to 3 SKUs");return false} S.cmp=S.cmp.filter(function(x){return x!==k});if(on)S.cmp.push(k);renderCmp();return true; } function syncBoxes(){[].forEach.call(R().querySelectorAll("[data-cmp]"),function(b){b.checked=S.cmp.indexOf(b.dataset.cmp)>-1})} X.r={reset:reset,setData:setData,apply:apply,renderGrid:renderGrid,showMsg:showMsg,openMod:openMod,closeMod:closeMod,setCmp:setCmp,renderCmp:renderCmp,syncBoxes:syncBoxes,copy:copy,line:line}; } function go(){var X=(window.SFB||{}).x;if(X){main(X);return 1}} if(!go()){var n=0,iv=setInterval(function(){if(go()||++n>40)clearInterval(iv)},100)} })();(function(){ "use strict"; window.SFB=window.SFB||{};window.SFB.c=true; function main(X){ var D=document,C=X.C,S=X.S,FAC=X.FAC,FK=X.FK,esc=X.esc,log=X.log,readCfg=X.readCfg,cacheGet=X.cacheGet,cacheSet=X.cacheSet,parseRows=X.parseRows,r=X.r,root; var reset=r.reset,setData=r.setData,apply=r.apply,renderGrid=r.renderGrid,showMsg=r.showMsg,openMod=r.openMod,closeMod=r.closeMod,setCmp=r.setCmp,renderCmp=r.renderCmp,syncBoxes=r.syncBoxes,copy=r.copy,line=r.line; var $=function(i){return D.getElementById("sfb-"+i)}; function bleed(){var e=root.parentElement;while(e&&e!==D.body&&e!==D.documentElement){var s=e.style;s.padding="0";s.margin="0";s.maxWidth="none";s.width="100%";s.minHeight="0";e=e.parentElement}root.style.width="100%";root.style.marginLeft="0"} function note(m){$("src").textContent=(m?m+" ":"")+C.FOOTER_NOTE} function boot(){ var cached=cacheGet(),shown=false; if(cached){try{setData(parseRows(cached),false);shown=true}catch(e){}} if(!X.cfg()||!C.CSV_URL){if(!shown)showMsg("Catalog not connected","Paste your published Google Sheet CSV link into CSV_URL in Embed 3.");return} if(!X.net)X.net=X.download(); X.net.then(function(text){ if(shown&&text===cached){note("");return} var rows=parseRows(text);cacheSet(text);setData(rows,shown);shown=true;note("");log("loaded "+rows.length+" SKUs"); }).catch(function(e){ var m=e&&e.message?e.message:"";log("load failed: "+(m||e)); if(/failed to fetch|load failed|networkerror|abort|network/i.test(m)||!m)m="The browser could not reach Google Sheets (offline, blocked, or the sheet is no longer published to the web). Open the CSV link in a new tab to check it."; if(shown)note("Showing the last saved copy. The live sheet could not be reached."); else showMsg("Couldn't load the catalog",m,"Try again","data-retry"); }); } function fatal(msg){ var c=$("count"),k=$("skl");if(c)c.textContent="Catalog unavailable";if(k)k.hidden=true; root.insertAdjacentHTML("afterbegin",'
Catalog setup problem'+esc(msg)+"
"); log("setup problem: "+msg); } function init(){ root=D.getElementById("sfb"); if(!root){if((init.n=(init.n||0)+1)<40)setTimeout(init,100);else log("#sfb not found. Is Embed 2 on this page?");return} try{start()}catch(e){log("error: "+(e&&e.stack||e));fatal("Script error: "+(e&&e.message||e)+". Press F12 and open the Console tab for details.")} } function start(){ readCfg(); var miss="ann annT annX ttl sub nav top q pr min max facets count seg chips clear sort copyall skl tw th grid msg more src mod modB drw toast".split(" ").filter(function(i){return!$(i)}); if(miss.length){fatal("Embed 2 does not match this version of Embed 4 (missing: "+miss.join(", ")+"). Re-paste the latest Embed 2 and Embed 1.");return} window.SFB=window.SFB||{};window.SFB.ready=true;log("page ready"); if(C.FULL_BLEED!==false)bleed(); if(!X.cfg()){showMsg("Settings missing","Embed 3 is not on the page or did not run. Add it as a hidden Body End code embed.");return} if(C.TITLE)$("ttl").textContent=C.TITLE;if(C.SUBTITLE)$("sub").textContent=C.SUBTITLE; var a=$("ann"); if(C.ANNOUNCEMENT&&!sessionStorageGet("sfb:ann")){ $("annT").textContent=C.ANNOUNCEMENT;a.hidden=false; var hide=function(){a.classList.add("out");try{sessionStorage.setItem("sfb:ann","1")}catch(e){}setTimeout(function(){a.remove()},450)}; $("annX").onclick=hide;if(C.ANNOUNCE_SECONDS>0)setTimeout(hide,C.ANNOUNCE_SECONDS*1000); }else a.remove(); $("nav").innerHTML=(C.LINKS||[]).map(function(l){return''+esc(l[0])+""}).join(""); var nt=$("note");if(nt&&C.HELP_NOTE){$("noteT").textContent=C.HELP_NOTE;nt.hidden=false} note(""); root.addEventListener("click",function(e){ var t=e.target,c=function(s){return t.closest(s)},b; if(b=c(".pl")){var set=S.f[b.dataset.k],v=b.dataset.v;set.has(v)?set.delete(v):set.add(v);apply()} else if(b=c("[data-st]")){S.f.stock.clear();if(b.dataset.st)S.f.stock.add(b.dataset.st);apply()} else if(b=c("[data-c]")){var k=b.dataset.c;if(k==="q"){S.q="";$("q").value=""}else if(k==="min"){S.min="";$("min").value=""}else if(k==="max"){S.max="";$("max").value=""}else S.f[k].delete(b.dataset.v);apply()} else if(c("[data-more]")){var s=root.querySelector(".fgs.sec"),h=!s.hidden;s.hidden=h;c("[data-more]").setAttribute("aria-expanded",!h);c("[data-more]").textContent=h?"More filters":"Fewer filters"} else if(b=c("[data-copy]"))copy(b.dataset.copy); else if(b=c("[data-cl]"))copy(line(S.map[b.dataset.cl]),"Copied spec line"); else if(b=c("[data-ct]")){var on=S.cmp.indexOf(b.dataset.ct)<0;if(setCmp(b.dataset.ct,on)){syncBoxes();b.textContent=on?"Remove from compare":"Add to compare"}} else if(b=c("[data-rm]")){setCmp(b.dataset.rm,false);syncBoxes()} else if(c("[data-ck]"))copy(S.cmp.join("\n"),"Copied "+S.cmp.length+" SKUs"); else if(c("[data-cc]")){S.cmp=[];renderCmp();syncBoxes()} else if(c("[data-x]")||t===$("mod"))closeMod(); else if(c("[data-clear]")||t===$("clear")){reset();apply()} else if(c("[data-retry]")){$("msg").hidden=true;$("skl").hidden=false;X.net=null;boot()} else if(b=c("th[data-s]")){var sk=b.dataset.s;S.dir=S.sk===sk?-S.dir:1;S.sk=sk;apply()} else if(c("input")||c(".dr")){} else if(b=c("tr[data-o]"))openMod(b.dataset.o); }); root.addEventListener("keydown",function(e){var th=e.target.closest&&e.target.closest("th[data-s]");if(th&&(e.key==="Enter"||e.key===" ")){e.preventDefault();th.click()}}); root.addEventListener("change",function(e){var k=e.target.dataset.cmp;if(!k)return;if(!setCmp(k,e.target.checked))e.target.checked=false}); root.addEventListener("toggle",function(e){ var d=e.target;if(!d.classList||!d.classList.contains("fg")||!d.open)return; [].forEach.call(root.querySelectorAll(".fg[open]"),function(o){if(o!==d)o.open=false}); var sub=d.querySelector(".sub");sub.classList.remove("r");if(sub.getBoundingClientRect().right>window.innerWidth-8)sub.classList.add("r"); },true); D.addEventListener("click",function(e){[].forEach.call(root.querySelectorAll(".fg[open]"),function(d){if(!d.contains(e.target))d.open=false})}); D.addEventListener("keydown",function(e){ var open=$("mod").classList.contains("on"); if(e.key==="Escape"){if(open)closeMod();else[].forEach.call(root.querySelectorAll(".fg[open]"),function(d){d.open=false})} if(e.key==="Tab"&&open){ var f=[].filter.call($("modB").querySelectorAll("button,input,[href]"),function(x){return!x.disabled}),first=f[0],last=f[f.length-1]; if(!f.length)return; if(!$("modB").contains(D.activeElement)||(e.shiftKey&&D.activeElement===first)){e.preventDefault();last.focus()} else if(!e.shiftKey&&D.activeElement===last){e.preventDefault();first.focus()} } }); var qt; $("q").addEventListener("input",function(e){clearTimeout(qt);qt=setTimeout(function(){S.q=e.target.value.trim();apply()},120)}); ["min","max"].forEach(function(k){$(k).addEventListener("input",function(e){clearTimeout(qt);qt=setTimeout(function(){var n=parseFloat(e.target.value);S[k]=isNaN(n)?"":n;apply()},250)})}); $("sort").addEventListener("change",function(e){var p=e.target.value.split(":");S.sk=p[0]||"";S.dir=+p[1]||1;apply()}); $("copyall").onclick=function(){copy(S.res.map(function(s){return s.sku}).join("\n"),"Copied "+S.res.length+" SKUs")}; boot(); } function sessionStorageGet(k){try{return sessionStorage.getItem(k)}catch(e){return null}} D.readyState==="loading"?D.addEventListener("DOMContentLoaded",init):init(); } function go(){var X=(window.SFB||{}).x;if(X&&X.r){main(X);return 1}} if(!go()){var n=0,iv=setInterval(function(){if(go()||++n>40)clearInterval(iv)},100)} })();