https://thesaltworkscompany.com/cdn/shop/t/43/assets/BuyFullChoose…?v=101464286655002722001780145408
1(()=>{const STYLE=` 2html.itb-hide-amp-gift #slidecarthq .free-gifts .free-gifts-body .slick-wrapper{display:none!important} 3 4#itb-add-50ml-card{display:flex;gap:16px;align-items:stretch;padding:12px 0;border-top:1px solid #eee} 5#itb-add-50ml-card.item{margin:0} 6#itb-add-50ml-card .itb-media{flex:0 0 auto;display:flex;align-items:center} 7#itb-add-50ml-card .itb-media img{width:84px;height:84px;object-fit:contain} 8#itb-add-50ml-card .itb-center{display:flex;flex-direction:column;flex:1 1 auto;min-width:0} 9#itb-add-50ml-card .itb-title{font-weight:600;margin:0} 10#itb-add-50ml-card .itb-sub{opacity:.6;margin:4px 0 0;font-size:14px;color:rgba(0,0,0,.4)} 11#itb-add-50ml-card .itb-pick{ 12 margin-top:auto;text-decoration:none;background:#fff;border:1px solid #222; 13 color:#616161;font-size:14px;padding:.5rem .75rem;border-radius:0; 14 display:inline-flex;align-items:center;gap:6px;cursor:pointer 15} 16#itb-add-50ml-card .itb-right{margin-left:auto;display:flex;flex-direction:row;align-items:center;justify-content:center;gap: 7px;} 17#itb-add-50ml-card .itb-close{background:none;border:0;color:#A1A1A1;font-size:18px;line-height:1;padding:0;visibility:hidden} 18#itb-add-50ml-card .itb-price-row{display:flex;gap:.4rem;align-items:center} 19#itb-add-50ml-card .itb-price{font-weight:600} 20#itb-add-50ml-card .itb-price-was{color:#717171;text-decoration:line-through;font-weight:600} 21 22/* === FULLSCREEN modal === */ 23#itb-add-50ml-modal{position:fixed;inset:0;display:none;z-index:2147483647;isolation:isolate} 24#itb-add-50ml-modal.open{display:block} 25#itb-add-50ml-modal .backdrop{position:absolute;inset:0;background:rgba(0,0,0,.35)} 26#itb-add-50ml-modal .panel{ 27 position:relative;margin:0;background:#fff;max-width:none;border-radius:0; 28 width:100vw;height:100vh;max-height:none; 29 padding:clamp(12px,2vw,24px); 30 padding-bottom:calc(max(16px, env(safe-area-inset-bottom)) + 30px); 31 display:flex;flex-direction:column;overflow:auto; 32} 33#itb-add-50ml-modal .itb-modal-container{flex:1 1 auto;display:flex;flex-direction:column;min-height:0} 34#itb-add-50ml-modal [data-role="section-host"]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden} 35#itb-add-50ml-modal [data-role="section-host"] iframe{flex:1 1 auto;width:100%;height:100%;border:0;display:block} 36 37#itb-add-50ml-modal .close-btn{ 38 position:absolute;top:6px;right:6px;border:0;background:transparent; 39 font-size:24px;line-height:1;cursor:pointer;color:#333 40} 41 42/* block page scroll */ 43html.itb-modal-open, html.itb-modal-open body{overflow:hidden} 44`,SECTION_ID="itb-fragrances-grid-buyfullchoose50ml",SECTION_ID_ALT="itb-fragrances-grid-BuyFullChoose50ml",BFG_CSS_URL="//thesaltworkscompany.com/cdn/shop/t/43/assets/BuyFullChoose50ml.css?v=34913057556545305951780057038",BFG_JS_URL="//thesaltworkscompany.com/cdn/shop/t/43/assets/BuyFullChoose50ml.js?v=129302091055485286901780060733";let LAST_CART_CHANGE=0,ITB_SECTION_CACHE=null,ITB_IFRAME=null,ITB_ONMSG_BOUND=!1,CART_CACHE=null,CART_FETCH_PROMISE=null;async function getCart(force=!1){return!force&&CART_CACHE?CART_CACHE:CART_FETCH_PROMISE||(CART_FETCH_PROMISE=fetch("/cart.js",{cache:"no-store",credentials:"same-origin"}).then(r=>r.ok?r.json():{items:[]}).then(c=>(CART_CACHE=c,c)).catch(()=>({items:[]})).finally(()=>{CART_FETCH_PROMISE=null}),CART_FETCH_PROMISE)}
44function invalidateCart(){CART_CACHE=null}function cartHasFullSize(cart){return!cart||!Array.isArray(cart.items)?!1:cart.items.some(it=>{const t=(it.variant_title||it.title||"").toLowerCase(),opts=it.options||it.variant_options||[],o1=String(opts[0]||"").toLowerCase();return t.includes("100ml")||o1.includes("100ml")||t.includes("full size")||o1.includes("full size")})}function cartHas50ml(cart){return!cart||!Array.isArray(cart.items)?!1:cart.items.some(it=>{const t=(it.variant_title||it.title||"").toLowerCase(),opts=it.options||it.variant_options||[],o1=String(opts[0]||"").toLowerCase();return t.includes("50ml")||o1.includes("50ml")})}function cartHasGiftType(cart,type){return!cart||!Array.isArray(cart.items)?!1:cart.items.some(it=>it&&it.properties&&it.properties._amp_gift===type)}async function refreshSlideCart(){await new Promise(resolve=>{if(typeof window.SLIDECART_UPDATE=="function"){let done=!1;try{window.SLIDECART_UPDATE(()=>{done=!0,resolve()})}catch{resolve();return}setTimeout(()=>{done||resolve()},800)}else resolve()}),["cart:updated","itb:cart:refresh"].forEach(ev=>{try{document.dispatchEvent(new CustomEvent(ev,{bubbles:!0,cancelable:!0}))}catch{}})}function addStyle(){if(document.getElementById("itb-add-50ml-style"))return;const s=document.createElement("style");s.id="itb-add-50ml-style",s.textContent=STYLE,document.head.appendChild(s)}function toggleAmpGift(hide=!0){document.documentElement.classList.toggle("itb-hide-amp-gift",!!hide)}function container(){return document.querySelector("#slidecarthq .free-gifts .free-gifts-body")}function ensureCssLink(href,id="itb-bfc50-css"){if(!href)return null;let l=document.getElementById(id);return l||(l=document.createElement("link"),l.id=id,l.rel="stylesheet",l.href=href,l.disabled=!0,document.head.appendChild(l)),l}function ensureJs(src,id="itb-bfc50-js"){if(!src)return Promise.resolve();const existing=document.getElementById(id);return existing&&existing.dataset.loaded==="1"?Promise.resolve():existing?new Promise(res=>existing.addEventListener("load",()=>res(),{once:!0})):new Promise((resolve,reject)=>{const s=document.createElement("script");s.id=id,s.src=src,s.async=!0,s.onload=()=>{s.dataset.loaded="1",resolve()},s.onerror=reject,document.head.appendChild(s)})}async function ensureCard(){const host=container();if(!host)return;const cart=await getCart();if(!cartHasFullSize(cart)){const existing=document.getElementById("itb-add-50ml-card");existing&&existing.remove();return}if(cartHas50ml(cart)){const existing=document.getElementById("itb-add-50ml-card");existing&&existing.remove();return}if(cartHasGiftType(cart,"bfc50")){const existing=document.getElementById("itb-add-50ml-card");existing&&existing.remove();return}let el=document.getElementById("itb-add-50ml-card");el&&el.classList.add("item"),el||(el=document.createElement("div"),el.id="itb-add-50ml-card",el.classList.add("item"),el.innerHTML=` 45 <div class="itb-media"> 46 <img src="https://cdn.shopify.com/s/files/1/0653/7091/5035/files/50newSizem.jpg" alt="A second scent, for the launch"/> 47 </div> 48 <div class="itb-center"> 49 <div class="itb-title">Add a 50ml for only \xA350 for the launch</div> 50 <div class="itb-sub">Size: 50ml Perfume</div> 51 52 <button type="button" class="itb-close" aria-hidden="true">\xD7</button> 53 <div class="itb-price-row"> 54 <a href="#" class="itb-pick">Pick Your Fragrance</a> 55<div class="itb-right"> 56 57 <span class="itb-price">\xA350</span> 58 <span class="itb-price-was">\xA375</span> 59 60 61 </div> 62 </div> 63 64 </div> 65 66 `,el.querySelector(".itb-pick").addEventListener("click",e=>{e.preventDefault(),openModal()})),el.parentElement!==host&&host.prepend(el)}async function fetchSectionHTML(){if(ITB_SECTION_CACHE)return ITB_SECTION_CACHE;const basePath=location.pathname+(location.search?location.search.split("#")[0]:""),tryId=async id=>{try{const url1=`${basePath}${basePath.includes("?")?"&":"?"}sections=${encodeURIComponent(id)}`,res1=await fetch(url1,{headers:{Accept:"application/json"}});if(res1.ok){const html2=(await res1.json())?.[id];if(typeof html2=="string"&&html2.trim())return html2}}catch{}const url2=`${basePath}${basePath.includes("?")?"&":"?"}section_id=${encodeURIComponent(id)}`,res2=await fetch(url2,{headers:{Accept:"text/html"}});if(res2.ok){const html2=await res2.text();if(html2&&html2.trim())return html2}return""};
66let html=await tryId(SECTION_ID);if(html||(html=await tryId(SECTION_ID_ALT)),!html)throw new Error("Section fetch failed: 404");return ITB_SECTION_CACHE=html,html}async function fetchBoostersJSON(){const basePath=location.pathname+(location.search?location.search.split("#")[0]:""),urlA=`${basePath}${basePath.includes("?")?"&":"?"}sections=itb-free-gift-boosters`,urlB=`${basePath}${basePath.includes("?")?"&":"?"}section_id=itb-free-gift-boosters`,parseMaybeWrapped=raw=>{if(!raw)return[];try{const x=JSON.parse(raw);if(Array.isArray(x))return x;if(Array.isArray(x?.boosters))return x.boosters}catch{}try{const host=new DOMParser().parseFromString(raw,"text/html").querySelector("#shopify-section-itb-free-gift-boosters");let txt=host?(host.textContent||"").trim():raw.replace(/<[^>]+>/g,"").trim();if(txt&&(txt.startsWith("[")||txt.startsWith("{"))){const x2=JSON.parse(txt);if(Array.isArray(x2))return x2;if(Array.isArray(x2?.boosters))return x2.boosters}}catch{}return[]},fallbackBoosters=()=>(window.__ITB_FREE_GIFT_BFC50__&&Array.isArray(window.__ITB_FREE_GIFT_BFC50__.boosters)?window.__ITB_FREE_GIFT_BFC50__.boosters:[]).map(b=>({id:b.id,handle:b.handle})).filter(x=>x&&x.handle);try{const resA=await fetch(urlA,{headers:{Accept:"application/json"},cache:"no-store"});if(resA.ok){const raw=(await resA.json())?.["itb-free-gift-boosters"];if(raw){const arr=parseMaybeWrapped(raw);if(arr.length)return arr}}}catch{}try{const resB=await fetch(urlB,{headers:{Accept:"text/html"},cache:"no-store"});if(resB.ok){const rawHTML=await resB.text(),arr=parseMaybeWrapped(rawHTML);if(arr.length)return arr}}catch{}return fallbackBoosters()}function ampRoot(){return document.querySelector("#slidecarthq .free-gifts .free-gifts-body")}function findAmpGiftSelect({variantId,productId}={}){const root=ampRoot();if(!root)return null;if(productId){const sel=root.querySelector(`#productInfoVariant${productId}`);if(sel)return sel}const selects=root.querySelectorAll('.free-gifts-options select[id^="productInfoVariant"]');for(const s of selects)if([...s.options].some(o=>o.value===String(variantId)))return s;return null}async function ampPickGiftAndAdd({variantId,productId}){let sel=null,tries=0;for(;!sel&&tries++<15;)sel=findAmpGiftSelect({variantId,productId}),sel||await new Promise(r=>setTimeout(r,120));if(!sel)return!1;sel.value!==String(variantId)&&(sel.value=String(variantId)),sel.dispatchEvent(new Event("input",{bubbles:!0})),sel.dispatchEvent(new Event("change",{bubbles:!0}));const item=sel.closest('[data-testid="FreeGiftsItem"]')||sel.closest(".free-gifts-item"),addBtn=item?item.querySelector(".free-gifts-add-button"):null;return await new Promise(r=>setTimeout(r,150)),addBtn?(addBtn.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0})),await new Promise(r=>setTimeout(r,350)),!0):!1}async function buildModal(){if(document.getElementById("itb-add-50ml-modal"))return;const wrap=document.createElement("div");wrap.id="itb-add-50ml-modal",wrap.innerHTML=` 67 <div class="backdrop" data-close></div> 68 <div class="panel"> 69 <button type="button" class="close-btn" data-close aria-label="Close">\xD7</button> 70 <div class="itb-modal-container"> 71 <h3 style="margin-bottom: 15px; text-align:center">Choose another favourite</h3> 72 <div class="section-host" data-role="section-host"></div> 73 </div> 74 </div>`,document.body.appendChild(wrap),wrap.addEventListener("click",e=>{e.target.dataset.close!==void 0&&closeModal()})}async function rebuildIframe(){const shell=document.getElementById("itb-add-50ml-modal");if(!shell)return;const host=shell.querySelector('[data-role="section-host"]');if(!host)return;host.innerHTML="",ITB_IFRAME=null;const html=await fetchSectionHTML(),tmp=document.createElement("div");tmp.innerHTML=html;const links=Array.from(tmp.querySelectorAll('link[rel="stylesheet"]')).map(l=>l.outerHTML).join(` 75`),scriptsSrc=Array.from(tmp.querySelectorAll("script[src]")).map(s=>s.outerHTML).join(` 76`),scriptsInline=Array.from(tmp.querySelectorAll("script:not([src])")).map(s=>s.textContent).join(` 77`),root=tmp.querySelector('[data-grid="full"]')||tmp.querySelector(".itb-fragrances-gri
77d-BuyFullChoose50ml")||tmp.firstElementChild;if(!root)throw new Error("Section root not found");const sectionAlreadyHasModal=!!root.querySelector("#perfumeInfo"),srcdoc=` 78<!doctype html> 79<html> 80<head> 81<meta charset="utf-8"> 82<base href="${location.origin}/"> 83<meta name="viewport" content="width=device-width, initial-scale=1"> 84<style> 85 html,body{margin:0;padding:0} 86 .itb-recommended-only .element-item:not(.is-recommended){ display:none !important; } 87 #itb-iframe-root .recommendationInfo{ display:none !important; } 88 #itb-cta{ 89 position: sticky; bottom: 0; z-index: 5; 90 background: linear-gradient(180deg, rgba(255,255,255,0) 0%, #fff 24%); 91 padding: 8px 0 calc(env(safe-area-inset-bottom, 0px) + 10px); 92 display: flex; justify-content: center; 93 } 94 #itb-add-to-cart-iframe{ min-width: 240px; } 95 @media (max-width:480px){ #itb-add-to-cart-iframe{ width:100%; } } 96 </style> 97${links} 98</head> 99<body> 100 <div id="itb-iframe-root"> 101 ${root.outerHTML} 102 ${sectionAlreadyHasModal?"":` 103 <div class="modal fade" id="perfumeInfo" tabindex="-1" aria-hidden="true"> 104 <div class="modal-dialog modal-lg modal-dialog-centered"> 105 <div class="modal-content rounded-0"> 106 <div class="modal-header"> 107 <h5 class="modal-title text-uppercase mb-0" data-role="title"></h5> 108 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 109 </div> 110 <div class="modal-body"> 111 <div class="container-fluid"> 112 <div class="row"> 113 <div class="col-5 col-lg-6"> 114 <img src="" alt="image" class="img-fluid" data-role="image"> 115 </div> 116 <div class="col-7 col-lg-6 mt-3 mt-lg-0 d-flex flex-column h-100"> 117 <p class="h6 text-muted mb-1" data-role="families"></p> 118 <div class="sw-modal-prod-desc mb-4"> 119 <div class="d-flex flex-column mt-1 row-cols-1"> 120 <div class="mt-2"> 121 <p class="sw-p24 fw-bold mb-0">Top Notes:</p> 122 <p class="mb-0" data-role="top">top</p> 123 </div> 124 <div class="mt-2"> 125 <p class="sw-p24 fw-bold mb-0">Heart Notes:</p> 126 <p class="mb-0" data-role="heart">heart</p> 127 </div> 128 <div class="mt-2"> 129 <p class="sw-p24 fw-bold mb-0">Base Notes:</p> 130 <p class="mb-0" data-role="base">base</p> 131 </div> 132 </div> 133 </div> 134 <p class="small text-muted d-none" data-role="booster-desc"></p> 135 </div> 136 </div> 137 </div> 138 </div> 139 </div> 140 </div> 141 </div>`} 142 </div> 143 144 ${scriptsSrc} 145 ${scriptsInline?`<script>(function(){ ${scriptsInline} })();<\/script>`:""} 146 <script> 147(function(){ 148 function onReady(fn){ 149 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fn, { once:true }); 150 else fn(); 151 } 152 153 function setCTAEnabled(on){ 154 var cta = document.getElementById('itb-add-to-cart-iframe'); 155 if (!cta) return; 156 if (on) cta.removeAttribute('disabled'); 157 else cta.setAttribute('disabled','true'); 158 } 159 160 function forceSectionRefilter(){ 161 var sel = document.querySelector('.filters-select'); 162 if (sel){ 163 const val = sel.value; 164 sel.value = val; 165 sel.dispatchEvent(new Event('change', { bubbles:true })); 166 } 167 try { 168 var grid = document.querySelector('[data-grid="full"] .grid') || document.querySelector('.grid'); 169 if (!grid) return; 170 if (window.jQuery && window.jQuery.fn && window.jQuery.fn.isotope){ 171 var $g = window.jQuery(grid); 172 if ($g.data('isotope')){ 173 $g.isotope('updateSortData'); 174 $g.isotope({ sortBy:['reco','titleAZ'], sortAscending:true }); 175 $g.isotope('layout'); 176 } 177 } else if (window.Isotope && window.Isotope.data){ 178 var iso = window.Isotope.data(grid); 179 if (iso){ 180 iso.updateSortData(); 181 iso.arrange({ sortBy:['reco','titleAZ'], sortAscending:true }); 182 } 183 } 184 } catch(_){} 185 } 186 187 function pumpRefilter(times, delay){ 188 times = typeof times==='number' ? times : 6;
189 delay = typeof delay==='number' ? delay : 140; 190 let i = 0; 191 (function run(){ 192 forceSectionRefilter(); 193 if (++i < times) setTimeout(run, delay); 194 })(); 195 } 196 197 function bindSmartSearch(){ 198 var input = document.getElementById('fullSearch'); 199 var sel = document.querySelector('.filters-select'); 200 if (!input || !sel || input.__itbSmartBound) return; 201 input.__itbSmartBound = true; 202 203 var prevSet = null; 204 var inSearch = false; 205 206 var deb = (fn,t)=>{ let id; return function(){ clearTimeout(id); id=setTimeout(fn, t); }; }; 207 208 input.addEventListener('input', deb(function(){ 209 var q = (input.value || '').trim(); 210 if (q && !inSearch){ 211 prevSet = sel.value; 212 inSearch = true; 213 if (sel.value !== '*'){ 214 sel.value = '*'; 215 sel.dispatchEvent(new Event('change', { bubbles:true })); 216 } else { 217 sel.dispatchEvent(new Event('change', { bubbles:true })); 218 } 219 pumpRefilter(4, 120); 220 return; 221 } 222 223 if (!q && inSearch){ 224 inSearch = false; 225 if (prevSet && sel.value !== prevSet){ 226 sel.value = prevSet; 227 } 228 sel.dispatchEvent(new Event('change', { bubbles:true })); 229 pumpRefilter(4, 120); 230 return; 231 } 232 233 pumpRefilter(2, 100); 234 }, 80)); 235 } 236 237 function findCardByHandle(handleLc){ 238 var grid = document.querySelector('[data-grid="full"] .grid') || document.querySelector('.grid'); 239 if (!grid) return null; 240 var nodes = grid.querySelectorAll('.fragrance-item[data-handle]'); 241 for (var i=0; i<nodes.length; i++){ 242 var h = (nodes[i].getAttribute('data-handle') || '').toLowerCase(); 243 if (h === handleLc) return nodes[i]; 244 } 245 return null; 246 } 247 248 function markBoosters(items){ 249 if (!Array.isArray(items) || !items.length) return 0; 250 var count = 0; 251 items.forEach(function(it){ 252 var handleLc = (it && it.handle ? String(it.handle) : '').toLowerCase(); 253 if (!handleLc) return; 254 var card = findCardByHandle(handleLc); 255 if (!card) return; 256 if (!card.classList.contains('is-recommended')){ 257 card.classList.add('is-recommended'); 258 count++; 259 } 260 var badge = card.querySelector('.badge-recommended, .badge-reco'); 261 if (badge) badge.classList.remove('d-none'); 262 }); 263 return count; 264 } 265 266 window.addEventListener('message', function(ev){ 267 var msg = ev.data || {}; 268 if (msg.type === 'itb-append-boosters') { 269 markBoosters(msg.items || []); 270 pumpRefilter(8, 140); 271 } 272 if (msg.type === 'itb-reset') { 273 document.querySelectorAll('[data-grid="full"] .fragrance-item.is-recommended') 274 .forEach(function(el){ 275 el.classList.remove('is-recommended'); 276 var b = el.querySelector('.badge-recommended, .badge-reco'); 277 if (b) b.classList.add('d-none'); 278 }); 279 setCTAEnabled(false); 280 pumpRefilter(6, 140); 281 } 282 }, { passive:true }); 283 284 var _selectedBtn = null, _currentVid = null, _currentPid = null; 285 286 document.addEventListener('click', function(e){ 287 var cta = e.target.closest('#itb-add-to-cart-iframe'); 288 if (!cta) return; 289 e.preventDefault(); 290 if (!_currentVid) return; 291 try { 292 parent.postMessage({ 293 type: 'itb-amp-select', 294 variantId: Number(_currentVid), 295 productId: _currentPid ? Number(_currentPid) : undefined 296 }, '*'); 297 } catch(_){} 298 }); 299 300 function setCardButtonUI(btn, selected){ 301 if (!btn) return; 302 if (selected) { 303 btn.classList.remove('btn-outline-dark'); 304 btn.classList.add('btn','btn-dark'); 305 btn.textContent = 'UNSELECT'; 306 btn.dataset.selected = '1'; 307 } else { 308 btn.classList.add('btn','btn-outline-dark'); 309 btn.classList.remove('btn-dark'); 310 btn.textContent = 'SELECT'; 311 btn.removeAttribute('data-selected'); 312 } 313 } 314 315 document.addEventListener('click', function(e){ 316 var btn = e.target.closest('[data-role="select-product"]'); 317 if (!btn) return; 318 319 var isOn = btn.dataset.selected === '1'; 320 if (isOn){ 321 setCardButtonUI(btn, false); 322 _selectedBtn = null; 323 _currentVid = null; 324 _currentPid = null; 325 setCTAEnabled(false); 326 return; 327 } 328 329 if (_selectedBtn && _selectedBtn !== btn) setCardButtonUI(_selectedBtn, false); 330 setCardButtonUI(btn, true); 331 _selectedBtn = btn; 332 333 var root = btn.closest('.element-item,.fragrance-item') || document.body; 334 var vid = 335 btn.getAttribute('data-variant-id') || btn.dataset.variantId || 336 btn.getAttribute('data-vid') || btn.dataset.vid || 337 root.getAttribute('data-vid') || (root.dataset ? root.dataset.vid : '') || ''; 338 var pid = root.getAttribute('data-pid') || (root.dataset ? root.dataset.pid : '') || ''; 339 340 _currentVid = vid ? String(vid) : null; 341 _currentPid = pid ? Number(pid) : null; 342 343 setCTAEnabled(!!_currentVid); 344 }); 345 346 onReady(function(){ 347 setCTAEnabled(false); 348 bindSmartSearch(); 349 pumpRefilter(2, 150); 350 }); 351})(); 352<\/script> 353 354 <div id="itb-cta"><button type="button" id="itb-add-to-cart-iframe" class="btn btn-dark" disabled>ADD TO CART</button></div> 355</body> 356</html>`.trim(),iframe=document.createElement("iframe");
356iframe.setAttribute("title","Choose another favourite"),iframe.style.width="100%",iframe.style.height="80vh",iframe.style.border="0",iframe.style.display="block",iframe.srcdoc=srcdoc,host.appendChild(iframe),ITB_IFRAME=iframe}function resetIframeState(){if(!(!ITB_IFRAME||!ITB_IFRAME.contentWindow))try{ITB_IFRAME.contentWindow.postMessage({type:"itb-reset"},"*")}catch{}}async function refreshGiftUI(){ensureCard(),toggleAmpGift(!0)}function sleep(ms){return new Promise(r=>setTimeout(r,ms))}async function waitCartIfFreshChange(threshold=800){Date.now()-LAST_CART_CHANGE<threshold&&await sleep(threshold)}async function openModal(){try{const css=ensureCssLink(BFG_CSS_URL,"itb-bfc50-css");await ensureJs(BFG_JS_URL,"itb-bfc50-js"),await waitCartIfFreshChange(900),await buildModal(),await rebuildIframe(),css&&(css.disabled=!1),document.getElementById("itb-add-50ml-modal").classList.add("open"),document.documentElement.classList.add("itb-modal-open"),await new Promise(res=>{if(!ITB_IFRAME||ITB_IFRAME.contentDocument?.readyState==="complete")return res();ITB_IFRAME.addEventListener("load",()=>res(),{once:!0})}),resetIframeState();const boosters=await fetchBoostersJSON();if(boosters&&boosters.length){const items=boosters.map(p=>({handle:String(p.handle||"").toLowerCase()})).filter(x=>x.handle);ITB_IFRAME.contentWindow.postMessage({type:"itb-append-boosters",items},"*")}}catch(e){console.error("[BuyFullChoose50ml] Failed to open modal",e)}}function closeModal(){const m=document.getElementById("itb-add-50ml-modal");if(m){const host=m.querySelector('[data-role="section-host"]');host&&(host.innerHTML=""),ITB_IFRAME=null,m.classList.remove("open")}document.documentElement.classList.remove("itb-modal-open");const css=document.getElementById("itb-bfc50-css");css&&(css.disabled=!0)}async function addGiftDirect({variantId}){try{if(!(await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({items:[{id:Number(variantId),quantity:1,properties:{_amp_gift:"bfc50"}}]}),cache:"no-store",credentials:"same-origin"})).ok)throw new Error("add.js failed");return invalidateCart(),await refreshSlideCart(),!0}catch(e){return console.error("[BuyFullChoose50ml] addGiftDirect failed",e),!1}}ITB_ONMSG_BOUND||(window.addEventListener("message",async ev=>{if(!ITB_IFRAME||ev.source!==ITB_IFRAME.contentWindow)return;const data=ev.data||{};(data.type==="itb-add-to-cart"||data.type==="itb-amp-select")&&data.variantId&&(await addGiftDirect({variantId:Number(data.variantId)}),closeModal(),await refreshGiftUI())},{passive:!0}),ITB_ONMSG_BOUND=!0);function waitForElm(sel){return new Promise(resolve=>{const e=document.querySelector(sel);if(e)return resolve(e);const mo=new MutationObserver(()=>{const n=document.querySelector(sel);n&&(mo.disconnect(),resolve(n))});mo.observe(document.documentElement,{childList:!0,subtree:!0})})}ITB_SECTION_CACHE=null;const debounce=(fn,t=60)=>{let id;return(...a)=>{clearTimeout(id),id=setTimeout(()=>fn(...a),t)}};function reattach(){document.querySelector("#slidecarthq .free-gifts .free-gifts-body")&&(addStyle(),invalidateCart(),ensureCard(),refreshGiftUI())}function boot(){addStyle(),toggleAmpGift(!0),ensureCard(),refreshGiftUI()}waitForElm("#slidecarthq .free-gifts .free-gifts-body").then(()=>{reattach();const target=document.querySelector("#slidecarthq .free-gifts .free-gifts-body");new MutationObserver(debounce(reattach,60)).observe(target,{childList:!0,subtree:!0})}),["itb:cart:refresh","cart:refresh","cart:changed","cart:updated","shopify:cart:refresh","SLIDECARTHQ:updated"].forEach(evt=>{const handler=()=>{ITB_SECTION_CACHE=null,invalidateCart(),refreshGiftUI()};window.addEventListener(evt,handler,{passive:!0}),document.addEventListener(evt,handler,{passive:!0})}),document.addEventListener("click",e=>{e.target.closest("#slidecarthq .free-gifts-add-button")&&(LAST_CART_CHANGE=Date.now(),invalidateCart(),setTimeout(refreshGiftUI,300))}),document.addEventListener("change",e=>{e.target.matches('#slidecarthq .free-gifts-options select[id^="productInfoVariant"]')&&(LAST_CART_CHANGE=Date.now(),invalidateCart(),setTimeout(refreshGiftUI,300))}),(function(){(sel=>new Promise(r=>{const e=document.querySelector(sel);if(e)return r(e);const mo=new MutationObserver(()=>{const n=document.querySelector(sel);n&&(mo.disconnect(),r(n))});mo.observe(document.documentElement,{childList:!0,subtree:!0})}
356))("#slidecarthq").then(drawer=>{let t;new MutationObserver(()=>{clearTimeout(t),t=setTimeout(()=>{reattach()},120)}).observe(drawer,{childList:!0,subtree:!0})})})(),document.addEventListener("shopify:section:load",reattach),document.addEventListener("itb:cart:refresh",reattach),boot()})(); 357//# sourceMappingURL=/cdn/shop/t/43/assets/BuyFullChoose50ml-AmpSlideCard.js.map?v=101464286655002722001780145408
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.