PageSourceSearch

https://clubllondon.com/cdn/shop/t/905/assets/helpers.js?v=9635965067534207431790182669

js clubllondon.com collected 2026-09-24 18:10:24 UTC 5,102 bytes, 1 lines download raw bytes

1(()=>{var I=(()=>{let t={},c=!1,l=[];function u(i,...n){c&&(l.length&&!l.some(a=>i.includes(a))||console.log("[PUBSUB]:",...n))}function m(i,n,a={}){if(t[i]===void 0&&(t[i]=[]),t[i].find(d=>d.callback===n))u(i,`Callback already subscribed to "${i}"`);else{let d={callback:n,once:!!a.once};t[i].push(d),u(i,`Subscribed to "${i}"`)}return function(){t[i]=t[i].filter(U=>U.callback!==n),u(i,`Unsubscribed from "${i}"`)}}function p(i,n){u(i,`Publishing "${i}"`,n);let a=w(i);[...t[i]||[],...a].forEach(d=>{d.callback(n),d.once&&b(i,d.callback)})}function b(i,n){t[i]&&(t[i]=t[i].filter(a=>a.callback!==n),u(i,`Unsubscribed from "${i}"`))}function w(i){return Object.keys(t).filter(n=>{if(!n.includes("*"))return!1;let[a]=n.split("*");return i.startsWith(a)}).flatMap(n=>t[n])}function g(){console.log("[PUBSUB subscribers]:"),Object.keys(t).forEach(i=>{t[i].forEach((n,a)=>{console.log(`subscribers[${a}]: ${i}: ${n.callback.name} (Once: ${n.once})`)})})}function B(i,n){let a=new CustomEvent(i,{detail:n});window.dispatchEvent(a),u(i,`Dispatched DOM event "${i}"`,n)}function S(i){if(i){let n=l.indexOf(i);n===-1?(l.push(i),c=!0,console.log(`PUBSUB Debug: added filter "${i}"`,l)):(l.splice(n,1),console.log(`PUBSUB Debug: removed filter "${i}"`,l))}else c=!c,console.log(`PUBSUB Debug ${c?"Enabled":"Disabled"}`,l.length?`(filtering: ${l.join(", ")})`:"(all events)")}return{subscribe:m,publish:p,toggleDebug:S,listSubscribers:g}})();window.PUBSUB=I;function M(t,c){let l;return function(...u){clearTimeout(l),l=setTimeout(()=>t.apply(this,u),c)}}window.DEBOUNCE=M;var v=(()=>{let t=[],c=[],l=null,u=null,m=!1,p=!1,b=!1,w=[];function g(e){let s=e._av;return!s||s==="false"}function B(){try{let e=localStorage.getItem("wishlist-items");return e?JSON.parse(e):[]}catch{return[]}}function S(e){try{localStorage.setItem("wishlist-items",JSON.stringify(e))}catch{}}function i(e){let s=new Map;return e.filter(r=>r.du&&r.epi&&r.empi).forEach(r=>{let h=r._av===!0||r._av==="true",o=r.du.split("?")[0],f=h?`${o}?variant=${r.epi}`:o;s.set(String(r.empi),{empi:r.empi,epi:r.epi,du:f,_av:h})}),[...s.values()]}function n(){return new Promise(e=>{if(window._swat){e(window._swat);return}window.SwymCallbacks||(window.SwymCallbacks=[]),window.SwymCallbacks.push(e)})}function a(){return new Promise(e=>{u.fetchLists({callbackFn:s=>e(s),errorFn:s=>{console.error("WishlistService: fetchLists error",s),e([])}})})}function y(e="My Wishlist"){return new Promise(s=>{u.createList({lname:e},r=>s(r),r=>{console.error("WishlistService: createList error",r),s(null)})})}function d(e){return new Promise(s=>{u.fetchListCtx({lid:e},r=>s(r),r=>{console.error("WishlistService: fetchListContent error",r),s([])})})}function U(e){return new Promise(s=>{if(!u||!l){s();return}u.addToList(l,e,()=>s(),r=>{console.error("WishlistService: swym add error",r),s()})})}async function P(e,s){if(!u||!l)return;let r=c.filter(o=>Number(o.empi)===Number(e)),h=r.length?r:s?[s]:[];for(let o of h)await new Promise(f=>{u.deleteFromList(l,{empi:Number(o.empi),epi:Number(o.epi),du:o.du},()=>f(),k=>{console.error("WishlistService: swym remove error for epi",o.epi,k),f()})});c=c.filter(o=>Number(o.empi)!==Number(e))}function $(e={}){b=e.swym!==!1,t=B(),m=!0,t.length&&PUBSUB.publish("wishlist:cached",{items:t}),PUBSUB.publish("wishlist:ready",{items:t,synced:!b}),b&&D()}async function D(){u=await n();let e=await a();if(e.length)l=e[0].lid;else{let o=await y();o&&(l=o.lid)}if(!l){console.error("WishlistService: could not get wishlist ID");return}c=(await d(l)).filter(o=>o&&o.empi!=null);let r=new Map;w.forEach(({op:o,product:f})=>r.set(String(f.empi),{op:o,product:f})),w.length=0;let h=new Map;c.forEach(o=>h.set(String(o.empi),o)),r.forEach(({op:o,product:f})=>{o==="add"?h.set(String(f.empi),f):h.delete(String(f.empi))}),t=[...h.values()],p=!0,S(i(t)),PUBSUB.publish("wishlist:changed",{items:t}),PUBSUB.publish("wishlist:ready",{items:t,synced:!0});for(let{op:o,product:f}of r.values())o==="add"?await U(f):await P(f.empi,f)}function L(e){let s=t.findIndex(r=>String(r.empi)===String(e.empi));return s!==-1?t[s]=e:t.push(e),S(i(t)),PUBSUB.publish("wishlist:changed",{items:t}),PUBSUB.publish("wishlist:added",{item:e}),b&&(p?(U(e),c.push(e)):w.push({op:"add",product:e})),Promise.resolve()}function W(e){return t=t.filter(s=>Number(s.empi)!==Number(e.empi)),S(i(t)),PUBSUB.publish("wishlist:changed",{items:t}),PUBSUB.publish("wishlist:removed",{item:e}),b&&(p?P(e.empi,e):w.push({op:"remove",product:e})),Promise.resolve()}function C(e){return!!E(e)}
1function E(e){return e?g(e)?t.find(s=>String(s.empi)===String(e.empi)):t.find(s=>String(s.epi)===String(e.epi)):null}function x(){return t}function O(){return m}return{init:$,add:L,remove:W,isInWishlist:C,findMatch:E,getItems:x,isReady:O,isProductLevel:g}})();window.WishlistService=v;window.loadDeferredImages=function(t){document.querySelectorAll('[data-load-event="'+t+'"]').forEach(c=>{c.querySelectorAll("source[data-srcset]").forEach(l=>{l.setAttribute("srcset",l.getAttribute("data-srcset")),l.removeAttribute("data-srcset")}),c.removeAttribute("data-load-event")})};})();

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.