PageSourceSearch

https://shop.almerecity.nl/cdn/shop/t/8/assets/product-personalisation.js?v=165413916385992221041778495394

js almerecity.nl collected 2026-10-02 11:44:18 UTC 9,167 bytes, 2 lines download raw bytes

1(function(){const selectors={productForm:".product-single__form",addToCartBtn:"[data-add-to-cart]",variantSelect:'select[name="id"]',productTitleEl:"[data-product-title]",personalisationFlagContainers:[".product-addon-container-gm",".product-academy-personalisation"],modeButton:".personalisation-button.selected[data-target]",playerSelect:".player-select",nameInput:".naam-input",numberInput:".nummer-input",badgeButtons:'#badge-product-addon .product-addon-buttons[data-option="badge"]',sponsorButtons:'#sponsor-sleeve-product-addon .product-addon-buttons[data-option="sponsor"]'};function generateGroupUID(){return window.crypto&&typeof window.crypto.randomUUID=="function"?window.crypto.randomUUID():`pg-${Date.now()}-${Math.random().toString(16).slice(2)}`}function getVariantIdFromForm(form){const el=form.querySelector(selectors.variantSelect),raw=el&&el.value,parsed=raw?parseInt(raw,10):NaN;return Number.isFinite(parsed)?parsed:null}function getProductDetailsForCart(){const model=document.querySelector(selectors.productTitleEl)?.getAttribute("data-product-title")||document.querySelector(selectors.productTitleEl)?.textContent||"Onbekend",selectedOptionText=document.querySelector(selectors.variantSelect)?.selectedOptions?.[0]?.textContent||"",sizeCandidate=selectedOptionText.split("-")[0]?.trim();return{model:(model||"").trim(),size:(sizeCandidate||"").trim()||(selectedOptionText||"").trim()||"Onbekend"}}function readToggleSelectedValue(toggleButtonsEl){const selected=toggleButtonsEl?.getAttribute("data-selected");return selected==="yes"||selected==="no"?selected:"no"}function getAddonVariantIdFromEl(el){const raw=el?.dataset?.productId,parsed=raw?parseInt(raw,10):NaN;return Number.isFinite(parsed)?parsed:null}async function openCartDrawerAndRefresh(){const cartButton=document.querySelector(".js-drawer-open-cart");if(cartButton){cartButton.click(),setTimeout(()=>{document.dispatchEvent(new CustomEvent("cart:build",{bubbles:!0}))},300);return}window.location.href="/cart"}async function cleanupOrphanedAddons(){if(window.theme?.cart?.cleanupOrphanedAddons)return window.theme.cart.cleanupOrphanedAddons()}function setAddonToggleSelected(toggleButtonsEl,value){toggleButtonsEl&&(value!=="yes"&&value!=="no"||(toggleButtonsEl.setAttribute("data-selected",value),toggleButtonsEl.querySelectorAll(".product-addon-button").forEach(btn=>{const btnValue=btn.getAttribute("data-value");btn.classList.toggle("selected",btnValue===value)})))}function setMode(target){const buttons=document.querySelectorAll(".personalisation-button[data-target]");if(!buttons.length)return;buttons.forEach(btn=>{btn.classList.toggle("selected",btn.getAttribute("data-target")===target)});const playerSection=document.querySelector(".product-addon-player-item"),nameNumberSection=document.querySelector(".product-addon-naamnummer-container");playerSection&&playerSection.classList.toggle("hidden",target!=="player"),nameNumberSection&&nameNumberSection.classList.toggle("hidden",target!=="naam-nummer"),target==="none"&&(playerSection&&playerSection.classList.add("hidden"),nameNumberSection&&nameNumberSection.classList.add("hidden"))}function bindAddonUi(){const container=document.querySelector(".product-addon-container-gm");if(!container||container.dataset.personalisationUiBound==="true")return;container.dataset.personalisationUiBound="true",container.addEventListener("click",e=>{const button=e.target.closest(".personalisation-button[data-target]");if(!button)return;e.preventDefault();const target=button.getAttribute("data-target")||"none";setMode(target)}),container.addEventListener("click",e=>{const button=e.target.closest(".product-addon-button[data-value]");if(!button)return;const toggleButtonsEl=button.closest(".product-addon-buttons[data-selected][data-option]");if(!toggleButtonsEl)return;e.preventDefault();const value=button.getAttribute("data-value");setAddonToggleSelected(toggleButtonsEl,value)});const initialTarget=document.querySelector(".personalisation-button.selected[data-target]")?.getAttribute("data-target")||"none";setMode(initialTarget),setAddonToggleSelected(document.querySelector(selectors.badgeButtons),readToggleSelectedValue(document.querySelector(selectors.badgeButtons))),setAddonToggleSelected(document.querySelector(selectors.sponsorButtons),readToggleSelectedValue(document.querySelector(selectors.sponsorButtons)))}function sortCartItems(){const container=document.querySelector(".cart__items")||document.querySelector("[data-products]");if(!container)return;const children=Array.from(container.children);if(!children.length)return;const isMain=node=>node.classList.contains("cart__item--main")||node.getAttribute("data-is-main")==="true",getGroupUID=node=>node.getAttribute("data-group-uid")||"",mains=children.filter(node=>isMain(node)&&getGroupUID(node));if(!mains.length)return;const used=new Set,fragments=[];mains.forEach(mainNode=>{const groupUID=getGroupUID(mainNode);
1fragments.push(mainNode),used.add(mainNode),children.forEach(maybeAddon=>{used.has(maybeAddon)||getGroupUID(maybeAddon)===groupUID&&maybeAddon.classList.contains("cart__item--addon")&&(fragments.push(maybeAddon),used.add(maybeAddon))})}),children.forEach(node=>{used.has(node)||(fragments.push(node),used.add(node))}),fragments.forEach(node=>container.appendChild(node))}async function addItemsToCart(form){await cleanupOrphanedAddons();const mainVariantId=getVariantIdFromForm(form);if(!mainVariantId)return;const productDetails=getProductDetailsForCart(),groupUID=generateGroupUID(),mode=document.querySelector(selectors.modeButton)?.getAttribute("data-target")||"none",playerValue=document.querySelector(selectors.playerSelect)?.value?.trim()||"",nameValue=document.querySelector(selectors.nameInput)?.value?.trim()||"",numberValue=document.querySelector(selectors.numberInput)?.value?.trim()||"",badgeSelected=readToggleSelectedValue(document.querySelector(selectors.badgeButtons)),sponsorSelected=readToggleSelectedValue(document.querySelector(selectors.sponsorButtons)),items=[],mainItemProperties={_groupUID:groupUID,_isMainItem:"true",Model:productDetails.model,Size:productDetails.size};mode==="player"&&playerValue&&(mainItemProperties.Speler=playerValue),mode==="naam-nummer"&&(nameValue&&(mainItemProperties.Naam=nameValue),numberValue&&(mainItemProperties.Nummer=numberValue)),badgeSelected==="yes"&&(mainItemProperties.Badge="Ja"),sponsorSelected==="yes"&&(mainItemProperties.Sponsor="Ja"),items.push({id:mainVariantId,quantity:1,properties:mainItemProperties});const pushAddon=(variantId,addonType)=>{variantId&&items.push({id:variantId,quantity:1,properties:{_groupUID:groupUID,_isAddon:"true",_addonType:addonType}})};if(badgeSelected==="yes"){const badgeVariantId=getAddonVariantIdFromEl(document.querySelector("#badge-product-addon"));pushAddon(badgeVariantId,"badge")}if(sponsorSelected==="yes"){const sponsorVariantId=getAddonVariantIdFromEl(document.querySelector("#sponsor-sleeve-product-addon"));pushAddon(sponsorVariantId,"sponsor")}if(mode==="player"&&playerValue){const playerVariantId=getAddonVariantIdFromEl(document.querySelector(selectors.playerSelect))||getAddonVariantIdFromEl(document.querySelector(".product-addon-player-item"));pushAddon(playerVariantId,"player")}if(mode==="naam-nummer"){if(nameValue){const nameVariantId=getAddonVariantIdFromEl(document.querySelector(selectors.nameInput));pushAddon(nameVariantId,"naam")}if(numberValue){const numberVariantId=getAddonVariantIdFromEl(document.querySelector(selectors.numberInput));pushAddon(numberVariantId,"nummer")}}const res=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items})});if(!res.ok)throw console.error("Personalisation: /cart/add.js failed",await res.text()),new Error("Personalisation add to cart failed");await openCartDrawerAndRefresh()}function shouldActivateOnPage(){return selectors.personalisationFlagContainers.some(sel=>document.querySelector(sel))}function bindFormSubmit(form){!form||form.dataset.personalisationBound==="true"||(form.dataset.personalisationBound="true",form.addEventListener("submit",async e=>{if(!shouldActivateOnPage())return;e.preventDefault(),e.stopImmediatePropagation();const addToCartBtn=form.querySelector(selectors.addToCartBtn);addToCartBtn&&(addToCartBtn.disabled=!0,addToCartBtn.classList.add("btn--loading"));try{await addItemsToCart(form)}catch(err){console.error(err),alert("Er is iets mis gegaan bij het toevoegen van de items.")}finally{addToCartBtn&&(addToCartBtn.disabled=!1,addToCartBtn.classList.remove("btn--loading"))}},{capture:!0}))}function init(){shouldActivateOnPage()&&bindAddonUi();const form=document.querySelector(selectors.productForm);form&&bindFormSubmit(form),document.addEventListener("cart:updated",()=>{sortCartItems()}),document.addEventListener("cart:build",()=>{setTimeout(()=>sortCartItems(),500)})}window.ProductPersonalisation={init,sortCartItems,cleanupOrphanedAddons},document.addEventListener("DOMContentLoaded",init),document.addEventListener("shopify:section:load",()=>setTimeout(init,50))})();
2//# sourceMappingURL=/cdn/shop/t/8/assets/product-personalisation.js.map?v=165413916385992221041778495394

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.