PageSourceSearch

https://pedalcommander.com/cdn/shop/t/265/assets/custom-cart-drawer-v2.js?v=166459640820988241191762541246

js pedalcommander.com collected 2026-09-24 11:24:58 UTC 19,498 bytes, 2 lines download raw bytes

1document.addEventListener("DOMContentLoaded",function(){const drawerButton=document.querySelector("#custom-cart-drawer-open-close-btn"),INSURANCE_PRODUCT_ID=39537614979162,warrantyProductIds=[40082831179866,40082831212634,40082831245402],drawerModal=document.querySelector(".cart-drawer__product-modal-container"),drawerOuter=document.querySelector(".cart-drawer__outer"),drawerInner=document.querySelector(".cart-drawer__inner"),isInsuranceEnabled=drawerOuter.dataset.isInsuranceEnabled==="true",atcButtons=document.querySelectorAll(".atcBtnDrawer"),addInsuranceAutomaticallyState={isInsuranceAdded:!1,isCartEmpty:drawerOuter.dataset.isEmpty==="true"},cartState={initialCart:JSON.parse(drawerOuter.dataset.cartJson),currentCart:JSON.parse(drawerOuter.dataset.cartJson)},upsellState={scrollLeft:0,scrollTop:0,windowWidth:window.innerWidth};attachAtcEvents(),attachDrawerEvents(),attachCartLineItemsEvents(),attachInsuranceCheckboxEvents(),attachCheckoutButtonEvents(),attachWarrantyFormEvents(),attachUpsellEvents(),drawerUpsellExpandHide();function attachCartLineItemsEvents(){document.querySelectorAll(".cart-drawer__stepper-button").forEach(button=>{const role=button.dataset.role,lineItem=button.closest(".cart-drawer__line-item"),lineItemId=lineItem.dataset.lineItemId;button.addEventListener("click",async function(){const itemCount=lineItem.querySelector(".cart-drawer__stepper-count").textContent;let quantity=parseInt(itemCount,10);role==="increment"?quantity+=1:role==="decrement"&&(quantity-=1),quantity<0&&(quantity=0);const count=lineItem.querySelector(".cart-drawer__stepper-qty"),loader=lineItem.querySelector(".cart-drawer__stepper-count-loader-container");count.style.opacity=0,loader.classList.remove("hidden");const result=await updateCartLine(lineItemId,quantity)})}),document.querySelectorAll(".cart-drawer__line-item-icon-container.delete-icon").forEach(button=>{button.addEventListener("click",async function(){const lineItem=button.closest(".cart-drawer__line-item"),lineItemId=lineItem.dataset.lineItemId,iconContainer=lineItem.querySelector(".cart-drawer__line-item-delete-icon");iconContainer.style.opacity=0,lineItem.querySelector(".cart-drawer__line-item-delete-loading-container").classList.remove("hidden"),await removeItemFromCart(lineItemId)})})}async function updateCartLine(lineItemId,quantity){return await fetch(`${Shopify.routes.root}cart/update.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({updates:{[lineItemId]:quantity}})}).then(response=>response.json()).then(async data=>(await updateCartHTML(),data)).catch(error=>{console.error("Error:",error)})}async function updateCartHTML(){const fetchedDrawerRaw=await fetch(`${Shopify.routes.root}?sections=custom-cart-drawer-v2`).then(res=>res.json()),parsedDrawer=new DOMParser().parseFromString(fetchedDrawerRaw["custom-cart-drawer-v2"],"text/html");parsedDrawer.querySelector(".cart-drawer__inner").classList.add("visible");const fetchedDrawerOuter=parsedDrawer.querySelector(".cart-drawer__outer"),newCart=JSON.parse(fetchedDrawerOuter.dataset.cartJson);cartState.currentCart=newCart,checkOnlyInsuranceAndWarrantyInCart()&&await removeItemFromCart(INSURANCE_PRODUCT_ID).then(()=>{updateCartHTML()}),drawerOuter.innerHTML=fetchedDrawerOuter.innerHTML,updateCartItemCountOnHeader(),attachCartLineItemsEvents(),attachInsuranceCheckboxEvents(),attachCheckoutButtonEvents(),attachWarrantyFormEvents(),attachDrawerEvents(),attachUpsellEvents(),drawerUpsellExpandHide()}function updateCartItemCountOnHeader(){const headerCountElement=document.querySelector(".custom-cart-drawer-open-close-count");if(headerCountElement){if(headerCountElement.innerText=cartState.currentCart.item_count,getIsInsuranceOnlyItemInCart()){headerCountElement.style.opacity=0;return}cartState.currentCart.item_count===0?headerCountElement.style.opacity=0:headerCountElement.style.opacity=1}}function getIsInsuranceOnlyItemInCart(){const cartItems=cartState.currentCart.items,insuranceInCart=cartItems.find(item=>item.id===INSURANCE_PRODUCT_ID);return!!(cartItems.length===1&&insuranceInCart)}function checkOnlyInsuranceAndWarrantyInCart(){if(cartState.currentCart.items.length!==2)return!1;const cartItems=cartState.currentCart.items,insuranceInCart=cartItems.find(item=>item.id===INSURANCE_PRODUCT_ID),warrantyInCart=cartItems.find(item=>warrantyProductIds.includes(item.id));return!(!insuranceInCart||!warrantyInCart)}drawerButton.addEventListener("click",function(){openDrawer()}),drawerOuter.addEventListener("click",function(e){e.target===drawerOuter&&closeDrawer()});function attachDrawerEvents(){document.querySelectorAll("[data-role='close-drawer']").forEach(closer=>{closer.addEventListener("click",function(){closeDrawer()})})}function makeLoadingVisible(button){const text=button.querySelector(".text"),loader=button.querySelector(".loader-container");!text||!loader||(text.style.opacity=0,loader.classList.remove("hidden"),setTimeout(()=>
1{hideLoading(this)},1e4))}function hideLoading(button){const text=button.querySelector(".text"),loader=button.querySelector(".loader-container");!text||!loader||(text.style.opacity=1,loader.classList.add("hidden"))}function attachCheckoutButtonEvents(){document.querySelector(".cart-drawer__checkout-button")?.addEventListener("click",async function(e){e.preventDefault(),!this.dataset.preventCheckout&&(makeLoadingVisible(this),await validateInsuranceCount(),window.location.href=this.href)})}async function validateInsuranceCount(){const insuranceLine=cartState.currentCart.items.find(item=>item.id===INSURANCE_PRODUCT_ID);if(!insuranceLine)return;if(insuranceLine.quantity>1){const formData={updates:{[insuranceLine.id]:1}};await fetch(`${Shopify.routes.root}cart/update.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(formData)}).then(response=>response.json()).then(data=>{updateCartHTML()}).catch(error=>{console.error("Error:",error)})}}function attachWarrantyFormEvents(){document.querySelector(".cart-drawer__warranty-button")?.addEventListener("click",async function(e){if(e.preventDefault(),!validateWarrantyForm())return;const form=document.querySelector(".cart-drawer__warranty-form-container"),formData=new FormData(form);form.querySelector(".cart-drawer__warranty-button").classList.add("loading");const currentWarrantyInCart=cartState.currentCart.items[0],warrantyLabels=getWarrantyLabels(),firstPropertyKey=Object.keys(currentWarrantyInCart.properties)[0],firstPropertyValue=currentWarrantyInCart.properties[firstPropertyKey],properties={[firstPropertyKey]:firstPropertyValue,...Object.fromEntries(Array.from(formData.entries()).map(([key,value])=>[warrantyLabels[key],value]))};await removeItemFromCart(currentWarrantyInCart.id,!0),addItemToCart(currentWarrantyInCart.id,1,properties);function getWarrantyLabels(){const inputs=form.querySelectorAll("input"),labels={};return inputs.forEach(input=>{const label=input.closest(".cart-drawer__warranty-input-container").querySelector("label");labels[input.name]=label.innerText}),labels}}),document.querySelector(".cart-drawer__line-item-icon-container")?.addEventListener("click",function(){const warrantyCard=document.querySelector(".cart-drawer__warranty-info-card-container");warrantyCard&&warrantyCard.classList.remove("hidden")})}function attachInsuranceCheckboxEvents(){const insuranceCheckbox=document.querySelector("input[name='shipping-insurance']");insuranceCheckbox&&insuranceCheckbox.addEventListener("click",handleInsuranceCheckboxChange)}function looksSuspiciousAgent(){const ua=navigator.userAgent||"";return!!(!!navigator.webdriver||/HeadlessChrome|Puppeteer|Playwright|PhantomJS/i.test(ua)||ua.length<20)}function doSmallWork(isSuspicious){const start=performance.now();let acc=0,iterations=0;const targetMs=isSuspicious?50:15,hardCapMs=isSuspicious?200:60,batchSize=5e4;for(;;){for(let j=0;j<batchSize;j++){const i=iterations+j;acc+=Math.imul(i,i%97),acc=acc&4294967295}iterations+=batchSize;const dur=performance.now()-start;if(dur>=targetMs||dur>=hardCapMs)return dur}}function attachAtcEvents(){atcButtons.forEach(button=>{button.addEventListener("click",async function(event){const itemId=this.dataset.atc,selection=this.dataset.selection;if(window.location.pathname.includes("/products/extended-warranty")&&!validateWarrantyAddition(event))return;try{const suspicious=looksSuspiciousAgent();doSmallWork(suspicious)}catch(e){console.error("[anti-bot] work error:",e)}const formData={items:[{id:itemId,quantity:1,properties:{Selection:selection}}]};await fetch(`${Shopify.routes.root}cart/add.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(formData)}).then(response=>response.json()).then(data=>{updateCartHTML(),openDrawer(),getShouldAddInsuranceAutomatically()&&setTimeout(()=>{addShippingInsuranceToCart()},1e3)}).catch(error=>{console.error("Error:",error)}).finally(()=>{this.querySelector(".unique_atc_text")?.classList?.remove("hidden"),this.querySelector(".loading__spinner")?.classList?.add("hidden")})})})}function attachUpsellEvents(){document.querySelectorAll(".cart-drawer__upsell-item-select").forEach(picker=>{picker.addEventListener("change",function(){const item=this.closest(".cart-drawer__upsell-item"),selectedOption=this.options[this.selectedIndex],price=selectedOption.dataset.price,atcButton=item.querySelector(".cart-drawer__upsell-item-atc-button"),imageElement=item.querySelector(".cart-drawer__upsell-item-image"),image=selectedOption.dataset.variantImage;imageElement.src=image,imageElement.srcset=image;const moneySpan=item.querySelector(".money");atcButton.dataset.atc=this.value,atcButton.dataset.selection=selectedOption.innerText.trim(),moneySpan.innerText=price})}),document.querySelectorAll(".cart-drawer__upsell-item-atc-button").forEach(button=>{button.addEventListener("click",async function(event){const loader=this.querySelector(".cart-drawer__upsell-item-atc-button-loading-container"),innerContainer=this.querySelector(".cart-drawer__upsell-item-atc-button-inner");loader.classList.remove("hidden"),innerContainer.style.opacity=0;const itemId=this.dataset.atc,selection=this.dataset.selection,warrantyInCart=isWarrantyInCart();if(warrantyProductIds.includes(parseInt(itemId))&&warrantyInCart){const warrantyId=cartState.currentCart.items.find(item=>warrantyProductIds.includes(item.id)).id;if(warrantyId===itemId){loader.classList.add("hidden"),innerContainer.style.opacity=1;return}await removeItemFromCart(warrantyId,!0)}addItemToCart(itemId,1,{Selection:selection})})});const upsellItemsContainer=document.querySelector(".cart-drawer__upsell-container"),upsellItemsWrapper=document.querySelector(".cart-drawer__upsell-items-wrapper");upsellItemsWrapper&&upsellItemsContainer&&(upsellItemsWrapper.addEventListener("scroll",function(){const scrollLeft=this.scrollLeft;upsellState.scrollLeft=scrollLeft}),upsellItemsContainer.addEventListener("scroll",function(){const scrollTop=this.scrollTop;upsellState.scrollTop=scrollTop}),upsellItemsWrapper.scrollTo({left:upsellState.scrollLeft,behavior:"instant"}),upsellItemsContainer.scrollTo({top:upsellState.scrollTop,behavior:"instant"})),document.querySelectorAll(".cart-drawer__upsell-item-image-overlay").forEach(cover=>{cover.closest(".cart-drawer__upsell-item-image-container").addEventListener("click",async function(){const title=this.closest(".cart-drawer__upsell-item").querySelector(".cart-drawer__upsell-item-title")?.textContent||"",images=cover.dataset.imageUrls.split(",").map(img=>img.trim());console.log("Opening upsell modal for:",title,images),prepareUpsellModal({title,images}),openUpsellItemModal()})})}function prepareUpsellModal(payload){document.querySelector(".cart-drawer__product-modal-swiper .swiper-button-next")||(document.querySelector(".cart-drawer__product-modal-swiper-nav").innerHTML='<div class="swiper-button-next"></div><div class="swiper-button-prev"></div>');const{title,images}=payload,titleElement=drawerModal.querySelector("[data-role='product_title']");titleElement.textContent=title;const swiperElement=drawerModal.querySelector(".cart-drawer__product-modal-swiper"),swiperWrapper=swiperElement.querySelector(".swiper-wrapper");swiperWrapper.innerHTML="";const thumbsSwiperElement=drawerModal.querySelector(".cart-drawer__product-modal-thumbs-swiper"),thumbsSwiperWrapper=thumbsSwiperElement.querySelector(".swiper-wrapper");
1thumbsSwiperWrapper.innerHTML="",images.forEach(image=>{const swiperSlide=document.createElement("div");swiperSlide.classList.add("swiper-slide");const imgElement=document.createElement("img");imgElement.src=image,imgElement.alt=title;const skeletonLoader=document.createElement("div");skeletonLoader.classList.add("skeleton"),skeletonLoader.style.height="100%",imgElement.onload=function(){skeletonLoader.remove()},swiperSlide.appendChild(imgElement),swiperSlide.appendChild(skeletonLoader),swiperWrapper.appendChild(swiperSlide);const thumbSlide=document.createElement("div");thumbSlide.classList.add("swiper-slide");const thumbImgElement=document.createElement("img");thumbImgElement.src=image,thumbImgElement.alt=title;const thumbSkeletonLoader=document.createElement("div");thumbSkeletonLoader.classList.add("skeleton"),thumbSkeletonLoader.style.height="100%",thumbSlide.appendChild(thumbImgElement),thumbSlide.appendChild(thumbSkeletonLoader),thumbImgElement.onload=function(){thumbSkeletonLoader.remove()},thumbsSwiperWrapper.appendChild(thumbSlide)});const thumbsSwiper=new Swiper(thumbsSwiperElement,{slidesPerView:4,spaceBetween:10,watchSlidesProgress:!0,breakpoints:{640:{slidesPerView:5},768:{slidesPerView:6}}}),swiper=new Swiper(swiperElement,{slidesPerView:1,spaceBetween:10,navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"},thumbs:{swiper:thumbsSwiper},watchSlidesProgress:!0})}function openUpsellItemModal(){drawerModal.classList.remove("hidden"),setTimeout(()=>{drawerModal.classList.add("visible")},10)}drawerModal.addEventListener("mousedown",function(e){e.target===drawerModal&&closeUpsellItemModal()},{passive:!0}),drawerModal.addEventListener("touchstart",function(e){e.target===drawerModal&&closeUpsellItemModal()},{passive:!0}),document.querySelectorAll("[data-role='close-upsell-modal']").forEach(button=>{button.addEventListener("click",function(){closeUpsellItemModal()})});function closeUpsellItemModal(){drawerModal.classList.remove("visible"),setTimeout(()=>{drawerModal.classList.add("hidden")},200)}function isWarrantyInCart(){return!!cartState.currentCart.items.find(item=>warrantyProductIds.includes(item.id))}function validateWarrantyAddition(e){const clickedItemId=e.target.dataset.atc;if(!warrantyProductIds.includes(parseInt(clickedItemId))||!isWarrantyInCart())return!0;e.preventDefault();const warrantPageWarningElement=document.querySelector(".warranty-page-warranty-warning"),buttonLoader=e.target.querySelector(".loader-container"),buttonText=e.target.querySelector(".text");return setTimeout(()=>{buttonLoader.classList.add("hidden"),buttonText.style.opacity=1},500),warrantPageWarningElement.style.display="flex",setTimeout(()=>{warrantPageWarningElement.style.display="none"},4e3),!1}function validateWarrantyForm(){const form=document.querySelector(".cart-drawer__warranty-form-container"),formData=new FormData(form);let isAnyFormFieldEmpty=!1;return formData.forEach((value,key)=>{value.trim()===""&&(highlightInvalidField(key),isAnyFormFieldEmpty=!0)}),!isAnyFormFieldEmpty;function highlightInvalidField(name){const wrapper=form.querySelector(`[name="${name}"]`).closest(".cart-drawer__warranty-input-container");wrapper.classList.add("invalid-field"),setTimeout(()=>{wrapper.classList.remove("invalid-field")},2e3)}}function handleInsuranceCheckboxChange(e){e.preventDefault(),e.target.disabled=!0,e.target.closest(".toggle-switch").querySelector(".loader-container").classList.remove("hidden"),e.target.checked?addShippingInsuranceToCart():removeShippingInsuranceFromCart()}function getShouldAddInsuranceAutomatically(){const{isCartEmpty,isInsuranceAdded}=addInsuranceAutomaticallyState;return!isCartEmpty||isCartEmpty&&isInsuranceAdded?!1:(addInsuranceAutomaticallyState.isInsuranceAdded=!0,!0)}function addShippingInsuranceToCart(){if(!isInsuranceEnabled)return;const formData={items:[{id:INSURANCE_PRODUCT_ID,quantity:1}]};fetch(`${Shopify.routes.root}cart/add.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(formData)}).then(response=>response.json()).then(data=>
1{setTimeout(()=>{const insuranceCheckbox=document.querySelector("input[name='shipping-insurance']");insuranceCheckbox.checked=!0},100),setTimeout(()=>{updateCartHTML()},200)}).catch(error=>{console.error("Error:",error)})}function removeShippingInsuranceFromCart(){removeItemFromCart(INSURANCE_PRODUCT_ID).then(()=>{const insuranceCheckbox=document.querySelector("input[name='shipping-insurance']");insuranceCheckbox.checked=!1,setTimeout(()=>{updateCartHTML()},200)})}async function removeItemFromCart(lineItemId,preventUpdateHtml=!1){const formData={updates:{[lineItemId]:0}};return fetch(`${Shopify.routes.root}cart/update.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(formData)}).then(response=>response.json()).then(data=>{preventUpdateHtml||updateCartHTML()}).catch(error=>{console.error("Error:",error)})}async function addItemToCart(itemId,quantity,properties){const formData={items:[{id:itemId,quantity,properties:properties||void 0}]};return fetch(`${Shopify.routes.root}cart/add.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(formData)}).then(response=>response.json()).then(data=>{updateCartHTML()}).catch(error=>{console.error("Error:",error)})}window.testLogCart=function(){console.log("Initial Cart:",cartState.initialCart),console.log("Current Cart:",cartState.currentCart)},window.customCartDrawerState=cartState,window.testAddInsurance=function(){const formData={items:[{id:INSURANCE_PRODUCT_ID,quantity:1}]};fetch(`${Shopify.routes.root}cart/add.js`,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify(formData)}).then(response=>response.json()).then(data=>{console.log("Insurance added to cart:",data)}).catch(error=>{console.error("Error:",error)})};function openDrawer(){const drawerInner2=document.querySelector(".cart-drawer__inner");drawerOuter.style.visibility="visible",drawerInner2.classList.add("visible"),document.body.style.overflow="hidden"}function closeDrawer(){document.querySelector(".cart-drawer__inner").classList.remove("visible"),setTimeout(()=>{document.body.style.overflow="",drawerOuter.style.visibility="hidden"},200)}function drawerUpsellExpandHide(){const drawerUpsell=document.querySelector(".cart-drawer__upsell-container"),drawerUpsellTitle=document.querySelector(".cart-drawer__upsell-title-container"),chevron=drawerUpsellTitle?.querySelector("svg");if(drawerUpsell&&drawerUpsellTitle){let isOpen=!1;const applyState=open=>{drawerUpsell.style.height=open?"205px":"30px",chevron&&(chevron.style.transform=open?"rotate(0deg)":"rotate(180deg)")};applyState(isOpen),drawerUpsellTitle.addEventListener("click",()=>{isOpen=!isOpen,applyState(isOpen)})}}});
2//# sourceMappingURL=/cdn/shop/t/265/assets/custom-cart-drawer-v2.js.map?v=166459640820988241191762541246

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.