PageSourceSearch

https://aeocky.com/cdn/shop/t/53/assets/aeocky-cart-drawer.js?v=158463748309412339181790162123

js aeocky.com collected 2026-10-07 07:20:16 UTC 18,686 bytes, 2 lines download raw bytes

1(()=>{const rootSelector="[data-ae-cart-drawer]",initializedAttribute="data-ae-cart-drawer-initialized",documentInitializedAttribute="data-ae-cart-drawer-document-initialized",deferredOpenFormSelector=".feature-chart__add-to-cart-form",noUpsellsDrawerClass="ae-cart-drawer--no-upsells",noUpsellsInnerClass="ae-cart-drawer__inner--no-upsells",toastTimers=new WeakMap,accessoryDotFrames=new WeakMap,accessoryRootFrames=new WeakMap,accessoryScrollAnimations=new WeakMap,accessoryMutationObservers=new WeakMap;let activeAccessoryDrag=null,deferredCartOpenPending=!1,deferredCartOpenTimer=null;function toNumber(value,fallback){const number=Number(value);return Number.isFinite(number)?number:fallback}function toPixelNumber(value,fallback=0){const number=Number(String(value).replace("px",""));return Number.isFinite(number)?number:fallback}function syncQuantityButtons(container){const input=container?.querySelector("[data-line-key]"),decreaseButton=container?.querySelector('[data-ae-cart-quantity-adjust="decrease"]'),increaseButton=container?.querySelector('[data-ae-cart-quantity-adjust="increase"]');if(!input||!decreaseButton||!increaseButton)return;const min=toNumber(input.getAttribute("min"),0),maxAttribute=input.getAttribute("max"),max=maxAttribute===null||maxAttribute===""?1/0:toNumber(maxAttribute,1/0),value=toNumber(input.value,min);decreaseButton.disabled=input.disabled||value<=min,increaseButton.disabled=input.disabled||value>=max}function setLineBusy(lineItem,isBusy){lineItem&&(lineItem.toggleAttribute("aria-busy",isBusy),lineItem.querySelectorAll("[data-ae-cart-quantity-adjust], .ae-cart-drawer__quantity-input").forEach(control=>{control.disabled=isBusy}),lineItem.querySelectorAll(".ae-cart-drawer__remove-link").forEach(link=>{isBusy?(link.setAttribute("aria-disabled","true"),link.setAttribute("tabindex","-1")):(link.removeAttribute("aria-disabled"),link.removeAttribute("tabindex"))}),lineItem.querySelectorAll("line-item-quantity").forEach(syncQuantityButtons))}function setAccessoryFormBusy(form,isBusy){form&&(form.dataset.aeSubmitting=isBusy?"true":"false",form.querySelectorAll('[type="submit"]').forEach(submitButton=>{isBusy?(submitButton.setAttribute("aria-busy","true"),submitButton.disabled=!0):(submitButton.removeAttribute("aria-busy"),submitButton.disabled=!1)}))}function showToast(root,message){const toast=root.querySelector("[data-ae-cart-toast]");!toast||!message||(window.clearTimeout(toastTimers.get(root)),toast.textContent=message,toast.setAttribute("aria-hidden","false"),toast.dataset.state="open",toastTimers.set(root,window.setTimeout(()=>{toast.dataset.state="closed",toast.setAttribute("aria-hidden","true")},1800)))}function markButtonAdded(root,form){const submitButton=form?.querySelector('[type="submit"]');submitButton&&(submitButton.dataset.aeOriginalText||(submitButton.dataset.aeOriginalText=submitButton.textContent.trim()),submitButton.textContent=root.dataset.aeCartAddedMessage||submitButton.dataset.aeOriginalText,submitButton.classList.add("ae-cart-drawer__button-added"),window.setTimeout(()=>{submitButton.isConnected&&(submitButton.textContent=submitButton.dataset.aeOriginalText,submitButton.classList.remove("ae-cart-drawer__button-added"))},1800))}async function addAccessoryToCart(root,form){if(!form||form.dataset.aeSubmitting==="true")return;if(!form.checkValidity()){form.reportValidity();return}setAccessoryFormBusy(form,!0);const sectionsToBundle=[];document.documentElement.dispatchEvent(new CustomEvent("cart:prepare-bundled-sections",{bubbles:!0,detail:{sections:sectionsToBundle}}));const formData=new FormData(form);sectionsToBundle.length>0&&(formData.set("sections",[...new Set(sectionsToBundle)].join(",")),formData.set("sections_url",window.location.pathname));try{const response=await fetch(`${window.Shopify.routes.root}cart/add.js`,{body:formData,method:"POST",headers:{"X-Requested-With":"XMLHttpRequest"}}),responseJson=await response.json();if(!response.ok){showToast(root,responseJson.description);return}const cartContent=await(await fetch(`${window.Shopify.routes.root}cart.js`)).json();responseJson.sections&&Object.keys(responseJson.sections).length>0?(cartContent.sections=responseJson.sections,document.documentElement.dispatchEvent(new CustomEvent("cart:change",{bubbles:!0,detail:{baseEvent:"variant:add",cart:cartContent}}))):document.documentElement.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0,detail:{cart:cartContent}})),window.setTimeout(()=>{typeof root.show=="function"&&root.show()},0)}catch(error){showToast(root,error.message)}finally{setAccessoryFormBusy(form,!1)}}function onAccessorySubmit(event){const form=event.target.closest?.("[data-ae-cart-accessory-form] form");!form||!event.currentTarget.contains(form)||(event.preventDefault(),event.stopPropagation(),event.stopImmediatePropagation(),addAccessoryToCart(event.currentTarget,form))}function getAccessoryCarousel(target){return target.closest?.(".ae-cart-drawer__upsell-carousel")}function getAccessoryCards(carousel){return[...carousel.querySelectorAll(".ae-cart-drawer__upsell-list > .horizontal-product--cart-drawer")]}
1function getAccessoryStep(carousel){const list=carousel.querySelector(".ae-cart-drawer__upsell-list"),card=list?.querySelector(".horizontal-product--cart-drawer");if(!list||!card)return 0;const gap=toPixelNumber(window.getComputedStyle(list).columnGap,0);return card.getBoundingClientRect().width+gap}function getAccessoryPageSize(carousel){const list=carousel.querySelector(".ae-cart-drawer__upsell-list"),cards=getAccessoryCards(carousel),step=getAccessoryStep(carousel);if(!list||cards.length===0||step<=0)return 1;const gap=toPixelNumber(window.getComputedStyle(list).columnGap,0),pageSize=Math.floor((carousel.clientWidth+gap+1)/step);return Math.min(cards.length,Math.max(1,pageSize))}function getAccessoryPageCount(carousel){const cards=getAccessoryCards(carousel),pageSize=getAccessoryPageSize(carousel);return Math.max(0,Math.ceil(cards.length/pageSize))}function getAccessoryPage(carousel){const cards=getAccessoryCards(carousel),step=getAccessoryStep(carousel),pageSize=getAccessoryPageSize(carousel),pageCount=getAccessoryPageCount(carousel);return cards.length===0||step<=0?0:Math.min(pageCount-1,Math.max(0,Math.round(carousel.scrollLeft/(step*pageSize))))}function getAccessoryDotsContainer(carousel){return carousel.closest(".ae-cart-drawer__upsells")?.querySelector("[data-ae-cart-accessory-dots]")}function animateAccessoryScroll(carousel,targetScrollLeft){const previousFrame=accessoryScrollAnimations.get(carousel);previousFrame&&window.cancelAnimationFrame(previousFrame);const startScrollLeft=carousel.scrollLeft,distance=targetScrollLeft-startScrollLeft;if(Math.abs(distance)<1){carousel.scrollLeft=targetScrollLeft,queueAccessoryDotsSync(carousel);return}const duration=320,startTime=Date.now();carousel.classList.add("is-programmatic-scrolling");const step=()=>{const elapsed=Date.now()-startTime,progress=Math.min(1,elapsed/duration),eased=1-Math.pow(1-progress,3);if(carousel.scrollLeft=startScrollLeft+distance*eased,queueAccessoryDotsSync(carousel),progress<1){accessoryScrollAnimations.set(carousel,window.requestAnimationFrame(step));return}carousel.scrollLeft=targetScrollLeft,carousel.classList.remove("is-programmatic-scrolling"),accessoryScrollAnimations.delete(carousel),queueAccessoryDotsSync(carousel)};accessoryScrollAnimations.set(carousel,window.requestAnimationFrame(step))}function scrollAccessoryCarouselToPage(carousel,page){const cards=getAccessoryCards(carousel),step=getAccessoryStep(carousel),pageSize=getAccessoryPageSize(carousel),pageCount=getAccessoryPageCount(carousel);if(cards.length===0||step<=0)return;const targetPage=Math.min(pageCount-1,Math.max(0,page)),targetCardIndex=Math.min(cards.length-1,targetPage*pageSize),maxScrollLeft=Math.max(0,carousel.scrollWidth-carousel.clientWidth),targetScrollLeft=Math.min(maxScrollLeft,Math.max(0,cards[targetCardIndex]?.offsetLeft??targetCardIndex*step));animateAccessoryScroll(carousel,targetScrollLeft),syncAccessoryDots(carousel,targetPage)}function syncAccessoryDots(carousel,currentPage=getAccessoryPage(carousel)){const container=getAccessoryDotsContainer(carousel),pageCount=getAccessoryPageCount(carousel);container&&(container.hidden=pageCount<=1,container.setAttribute("aria-hidden",pageCount<=1?"true":"false"),container.dataset.aeDotCount!==String(pageCount)&&(container.replaceChildren(...Array.from({length:pageCount},(_,index)=>{const button=document.createElement("button");return button.type="button",button.className="ae-cart-drawer__upsell-dot",button.dataset.aeCartAccessoryDot=String(index),button.setAttribute("aria-label",`Show accessories page ${index+1} of ${pageCount}`),button})),container.dataset.aeDotCount=String(pageCount)),container.querySelectorAll("[data-ae-cart-accessory-dot]").forEach((button,index)=>{button.setAttribute("aria-current",index===currentPage?"true":"false")}))}function queueAccessoryDotsSync(carousel){accessoryDotFrames.has(carousel)||accessoryDotFrames.set(carousel,window.requestAnimationFrame(()=>{accessoryDotFrames.delete(carousel),syncAccessoryDots(carousel)}))}function setupAccessoryCarousels(root){root.querySelectorAll(".ae-cart-drawer__upsell-carousel").forEach(carousel=>{syncAccessoryDots(carousel)})}function queueAccessoryRootSync(root){accessoryRootFrames.has(root)||accessoryRootFrames.set(root,window.requestAnimationFrame(()=>{accessoryRootFrames.delete(root),syncDrawerLayoutFromInner(root),root.querySelectorAll("line-item-quantity").forEach(syncQuantityButtons),setupAccessoryCarousels(root)}))}function snapAccessoryCarousel(carousel){scrollAccessoryCarouselToPage(carousel,getAccessoryPage(carousel))}function onAccessoryDragStart(event){if(activeAccessoryDrag||event.isPrimary===!1||event.button!==0||event.type==="pointerdown"&&event.pointerType!=="mouse")return;const carousel=getAccessoryCarousel(event.target);
1!carousel||!event.currentTarget.contains(carousel)||carousel.scrollWidth<=carousel.clientWidth||(activeAccessoryDrag={carousel,source:event.type==="pointerdown"?"pointer":"mouse",pointerId:event.pointerId??null,startX:event.clientX,startY:event.clientY,startScrollLeft:carousel.scrollLeft,dragged:!1},carousel.classList.add("is-pointer-active"),activeAccessoryDrag.source==="pointer"&&carousel.setPointerCapture?.(event.pointerId))}function onAccessoryDragMove(event){const state=activeAccessoryDrag,carousel=state?.carousel;if(!carousel||!state||state.source==="pointer"&&(event.type!=="pointermove"||state.pointerId!==event.pointerId)||state.source==="mouse"&&event.type!=="mousemove")return;const distanceX=event.clientX-state.startX,distanceY=event.clientY-state.startY;if(!state.dragged&&Math.abs(distanceY)>=5&&Math.abs(distanceY)>Math.abs(distanceX)){finishAccessoryDrag(event,!1);return}!state.dragged&&Math.abs(distanceX)>=5&&Math.abs(distanceX)>Math.abs(distanceY)&&(state.dragged=!0,carousel.classList.add("is-pointer-dragging")),state.dragged&&(event.preventDefault(),carousel.scrollLeft=state.startScrollLeft-distanceX)}function finishAccessoryDrag(event,shouldSnap=!0){const state=activeAccessoryDrag,carousel=state?.carousel;!carousel||!state||state.source==="pointer"&&(!event.type.startsWith("pointer")||state.pointerId!==event.pointerId)||state.source==="mouse"&&event.type!=="mouseup"&&event.type!=="mouseleave"||(activeAccessoryDrag=null,carousel.classList.remove("is-pointer-active","is-pointer-dragging"),state.source==="pointer"&&carousel.hasPointerCapture?.(event.pointerId)&&carousel.releasePointerCapture(event.pointerId),state.dragged&&(carousel.dataset.aeSuppressClick="true",window.setTimeout(()=>{delete carousel.dataset.aeSuppressClick},0),shouldSnap&&snapAccessoryCarousel(carousel)))}function onAccessoryScroll(event){const carousel=event.target;carousel.matches?.(".ae-cart-drawer__upsell-carousel")&&queueAccessoryDotsSync(carousel)}function onAccessoryNativeDragStart(event){getAccessoryCarousel(event.target)&&event.preventDefault()}function onRootClick(event){const accessoryDot=event.target.closest?.("[data-ae-cart-accessory-dot]");if(accessoryDot&&event.currentTarget.contains(accessoryDot)){const carousel=accessoryDot.closest(".ae-cart-drawer__upsells")?.querySelector(".ae-cart-drawer__upsell-carousel");carousel&&(event.preventDefault(),scrollAccessoryCarouselToPage(carousel,toNumber(accessoryDot.dataset.aeCartAccessoryDot,0)));return}if(getAccessoryCarousel(event.target)?.dataset.aeSuppressClick==="true"){event.preventDefault(),event.stopImmediatePropagation();return}if(event.target.closest('.ae-cart-drawer__remove-link[aria-disabled="true"]')){event.preventDefault();return}const button=event.target.closest("[data-ae-cart-quantity-adjust]");if(!button||!event.currentTarget.contains(button)||button.disabled)return;const quantityContainer=button.closest("line-item-quantity"),input=quantityContainer?.querySelector("[data-line-key]");if(!input||input.disabled)return;const min=toNumber(input.getAttribute("min"),0),maxAttribute=input.getAttribute("max"),max=maxAttribute===null||maxAttribute===""?1/0:toNumber(maxAttribute,1/0),step=toNumber(input.getAttribute("step"),1),currentValue=toNumber(input.value,min),direction=button.getAttribute("data-ae-cart-quantity-adjust")==="increase"?1:-1,nextValue=Math.min(max,Math.max(min,currentValue+step*direction));if(nextValue===currentValue){syncQuantityButtons(quantityContainer);return}input.value=String(nextValue),syncQuantityButtons(quantityContainer),input.dispatchEvent(new Event("change",{bubbles:!0}))}function onRootChange(event){event.target.matches(".ae-cart-drawer__quantity-input")&&syncQuantityButtons(event.target.closest("line-item-quantity"))}function onLineItemWillChange(event){setLineBusy(event.target.closest("line-item"),!0)}function onLineItemDone(event){setLineBusy(event.target.closest("line-item"),!1)}function onVariantAdded(event){const root=event.currentTarget,form=event.target.closest('form[is="product-form"]');markButtonAdded(root,form),showToast(root,root.dataset.aeCartAddedMessage)}function onCartError(event){const errorMessage=event.detail?.error;showToast(event.currentTarget,errorMessage)}function isDeferredCartOpenEvent(event){return!!event.target.closest?.(deferredOpenFormSelector)}function getCartDrawerRoot(){return document.querySelector(rootSelector)}function getUpdatedDrawerFromCartChange(event){const sections=event.detail?.cart?.sections;if(!sections||typeof sections!="object")return null;const drawerHtml=Object.values(sections).find(sectionHtml=>typeof sectionHtml=="string"&&sectionHtml.includes("data-ae-cart-drawer"));return drawerHtml?new DOMParser().parseFromString(drawerHtml,"text/html").querySelector(rootSelector):null}function syncDrawerLayoutFromInner(root){const inner=root?.querySelector(".ae-cart-drawer__inner");!root||!inner||root.classList.toggle(noUpsellsDrawerClass,inner.classList.contains(noUpsellsInnerClass))}function syncDrawerLayoutFromServer(root,updatedDrawer){const currentInner=root?.querySelector(".ae-cart-drawer__inner"),updatedInner=updatedDrawer?.querySelector(".ae-cart-drawer__inner");if(!root||!updatedDrawer)return;const hasNoUpsells=updatedDrawer.classList.contains(noUpsellsDrawerClass);root.classList.toggle(noUpsellsDrawerClass,hasNoUpsells),currentInner&&updatedInner&&currentInner.classList.toggle(noUpsellsInnerClass,updatedInner.classList.contains(noUpsellsInnerClass))}function onCartLayoutChange(event){const root=getCartDrawerRoot(),updatedDrawer=getUpdatedDrawerFromCartChange(event);if(!root||!updatedDrawer)return;syncDrawerLayoutFromServer(root,updatedDrawer);const refreshDelay=event.detail?.baseEvent==="variant:add"?0:1260;window.setTimeout(()=>{syncDrawerLayoutFromInner(root)},refreshDelay)}function clearDeferredCartOpen(){deferredCartOpenPending=!1,window.clearTimeout(deferredCartOpenTimer),deferredCartOpenTimer=null}function onDeferredCartVariantAdd(event){isDeferredCartOpenEvent(event)&&(event.detail&&typeof event.detail=="object"&&(event.detail.blockCartDrawerOpening=!0),deferredCartOpenPending=!0,window.clearTimeout(deferredCartOpenTimer),deferredCartOpenTimer=window.setTimeout(clearDeferredCartOpen,4e3))}function onDeferredCartChange(event){!deferredCartOpenPending||event.detail?.baseEvent!=="variant:add"||(clearDeferredCartOpen(),window.setTimeout(()=>{window.requestAnimationFrame(()=>{const root=getCartDrawerRoot();window.themeVariables?.settings?.cartType!=="drawer"||typeof root?.show!="function"||root.show()})},80))}function initCartDrawer(root){if(!root.hasAttribute(initializedAttribute)&&(root.setAttribute(initializedAttribute,"true"),root.addEventListener("submit",onAccessorySubmit,!0),root.addEventListener("pointerdown",onAccessoryDragStart),root.addEventListener("pointermove",onAccessoryDragMove),root.addEventListener("pointerup",event=>finishAccessoryDrag(event)),root.addEventListener("pointercancel",event=>finishAccessoryDrag(event,!1)),root.addEventListener("mousedown",onAccessoryDragStart),root.addEventListener("mousemove",onAccessoryDragMove),root.addEventListener("mouseup",event=>finishAccessoryDrag(event)),root.addEventListener("mouseleave",event=>finishAccessoryDrag(event)),root.addEventListener("scroll",onAccessoryScroll,!0),root.addEventListener("dragstart",onAccessoryNativeDragStart),root.addEventListener("click",onRootClick),root.addEventListener("change",onRootChange),root.addEventListener("line-item:will-change",onLineItemWillChange),root.addEventListener("line-item:error",onLineItemDone),root.addEventListener("line-item:change",onLineItemDone),root.addEventListener("variant:add",onVariantAdded),root.addEventListener("cart:error",onCartError),root.querySelectorAll("line-item-quantity").forEach(syncQuantityButtons),setupAccessoryCarousels(root),!accessoryMutationObservers.has(root))){const observer=new MutationObserver(()=>queueAccessoryRootSync(root));observer.observe(root,{childList:!0,subtree:!0}),accessoryMutationObservers.set(root,observer)}}function initDocumentListeners(){document.documentElement.hasAttribute(documentInitializedAttribute)||(document.documentElement.setAttribute(documentInitializedAttribute,"true"),document.addEventListener("cart:change",onCartLayoutChange,!0),document.addEventListener("variant:add",onDeferredCartVariantAdd,!0),document.addEventListener("cart:change",onDeferredCartChange))}function initAll(){initDocumentListeners(),document.querySelectorAll(rootSelector).forEach(initCartDrawer)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",initAll,{once:!0}):initAll(),document.addEventListener("shopify:section:load",initAll)})();
2//# sourceMappingURL=/cdn/shop/t/53/assets/aeocky-cart-drawer.js.map?v=158463748309412339181790162123

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.