PageSourceSearch

https://kavalri.com/cdn/shop/t/587/assets/cust-pave-option.js?v=27275203752187037351791166615

js kavalri.com collected 2026-10-09 23:03:28 UTC 16,367 bytes, 2 lines download raw bytes

1(function(window2,document2){"use strict";var storageKey="kavalri:pave-option",catalogStorageKey="kavalri:pave-options",optionDefaults=["No Pav\xE9 Bridge","1 Side \xB7 Lab Diamond $350","1 Side \xB7 Natural Diamond $450","Both Sides \xB7 Lab Diamond $550","Both Sides \xB7 Natural Diamond $700"];function parseOptions(value){try{var options=JSON.parse(value||"[]");return Array.isArray(options)?options:[]}catch(error){return[]}}function readSelection(){try{var selection=JSON.parse(window2.localStorage.getItem(storageKey)||"null");return!selection||!selection.option_key||!selection.variant_id?null:selection}catch(error){return null}}function readProductPickerSelection(){var pickerSelection=null;return document2.querySelectorAll("[data-pave-option-picker]").forEach(function(wrapper){if(!pickerSelection){var select=wrapper.querySelector("[data-pave-option-select]"),options=parseOptions(wrapper.dataset.paveOptions);if(!(!select||!options.length)){var selectedOption=options.filter(function(option){return String(option.key)===String(select.value)})[0];!selectedOption||!selectedOption.variant_id||selectedOption.available===!1||(pickerSelection={option_key:String(selectedOption.key),title:selectedOption.title,variant_id:Number(selectedOption.variant_id),product_handle:selectedOption.product_handle||"",image:selectedOption.image||"",options:options})}}}),pickerSelection}function getSelection(){return readSelection()||readProductPickerSelection()}function saveSelection(selection){if(!selection||!selection.variant_id){window2.localStorage.removeItem(storageKey);return}window2.localStorage.setItem(storageKey,JSON.stringify(selection))}function readOptionsCatalog(){try{return parseOptions(window2.localStorage.getItem(catalogStorageKey))}catch(error){return[]}}function saveOptionsCatalog(options){!Array.isArray(options)||!options.length||window2.localStorage.setItem(catalogStorageKey,JSON.stringify(options))}function getCartOptions(lineItem){var lineOptions=parseOptions(lineItem.dataset.cartChildOptions||lineItem.dataset.paveOptions),catalogOptions=readOptionsCatalog();return optionDefaults.map(function(defaultTitle,optionIndex){var optionKey=String(optionIndex+1),lineOption=lineOptions.filter(function(option){return String(option.key)===optionKey})[0],catalogOption=catalogOptions.filter(function(option){return String(option.key)===optionKey})[0];return lineOption||catalogOption||{key:optionKey,title:defaultTitle,variant_id:0,available:!1}})}function getOptionPresentation(option){var sourceTitle=option&&option.title?String(option.title):"Pav\xE9 Diamond Bridge",subtitle="",displayTitle=sourceTitle.replace(/\s+\$[\d,.]+(?:\s+[A-Z]{3})?$/i,"").trim();return/natural diamond/i.test(sourceTitle)?subtitle="Natural Diamond":/lab diamond/i.test(sourceTitle)&&(subtitle="Lab Diamond"),/both sides/i.test(sourceTitle)?displayTitle="Pav\xE9 Diamond Bridge \u2014 Both Sides":/1 side|one side/i.test(sourceTitle)&&(displayTitle="Pav\xE9 Diamond Bridge \u2014 One Side"),{title:displayTitle,subtitle:subtitle,image:option&&option.image?String(option.image):""}}function getOptionSelectTitle(option){var title=option&&option.title?String(option.title):"",formattedPrice="";return option&&option.variant_id&&Number.isFinite(Number(option.price))&&window2.theme&&window2.theme.Currency&&typeof window2.theme.Currency.formatMoney=="function"&&(formattedPrice=window2.theme.Currency.formatMoney(Number(option.price),window2.theme.settings.moneyFormat)),formattedPrice?title+" \xB7 "+formattedPrice:title}function setPreview(wrapper,option){var image=wrapper.querySelector("[data-pave-option-image]");if(image&&(image.innerHTML="",option&&option.image)){var imageElement=document2.createElement("img");imageElement.src=option.image,imageElement.width=69,imageElement.height=73,imageElement.loading="lazy",imageElement.alt=option.title||"Pav\xE9 Diamond Bridge",image.appendChild(imageElement)}}function getSelectedOption(select,options){return options.filter(function(option){return String(option.key)===String(select.value)})[0]||options[0]}function updateDisplayedProductPrice(wrapper,selectedOption){var productSection=wrapper.closest(".product-section"),priceElement=productSection&&productSection.querySelector("[data-product-price]"),basePrice=Number(wrapper.dataset.paveBasePrice),addOnPrice=selectedOption&&selectedOption.variant_id&&selectedOption.available!==!1?Number(selectedOption.price):0;!priceElement||!Number.isFinite(basePrice)||!Number.isFinite(addOnPrice)||!window2.theme||!window2.theme.Currency||typeof window2.theme.Currency.formatMoney!="function"||(priceElement.innerHTML=window2.theme.Currency.formatMoney(basePrice+ad
1dOnPrice,window2.theme.settings.moneyFormat))}function updateProductPicker(wrapper,select,options){var selectedOption=getSelectedOption(select,options);selectedOption&&(saveOptionsCatalog(options),select.value=String(selectedOption.key),setPreview(wrapper,selectedOption),updateDisplayedProductPrice(wrapper,selectedOption),selectedOption.variant_id&&selectedOption.available!==!1?saveSelection({option_key:String(selectedOption.key),title:selectedOption.title,variant_id:Number(selectedOption.variant_id),product_handle:selectedOption.product_handle||"",image:selectedOption.image||"",options:options}):saveSelection(null))}function initProductPickers(){document2.querySelectorAll("[data-pave-option-picker]").forEach(function(wrapper){var select=wrapper.querySelector("[data-pave-option-select]");if(!(!select||wrapper.dataset.paveInitialized==="true")){var options=parseOptions(wrapper.dataset.paveOptions);if(options.length){wrapper.dataset.paveInitialized="true";var savedSelection=readSelection();savedSelection&&options.some(function(option){return String(option.key)===String(savedSelection.option_key)})&&(select.value=String(savedSelection.option_key)),updateProductPicker(wrapper,select,options),select.addEventListener("change",function(){updateProductPicker(wrapper,select,options)});var productSection=wrapper.closest(".product-section");productSection&&productSection.addEventListener("variantChange",function(event){var variant=event.detail&&event.detail.variant;!variant||!Number.isFinite(Number(variant.price))||(wrapper.dataset.paveBasePrice=String(variant.price),window2.setTimeout(function(){updateDisplayedProductPrice(wrapper,getSelectedOption(select,options))},0))})}}})}function dispatchCartBuild(){document2.dispatchEvent(new CustomEvent("cart:build"))}function rejectCartRequest(response,fallbackMessage){var error=new Error(fallbackMessage);return error.status=response.status,response.json().catch(function(){return{}}).then(function(payload){throw error.message=payload.description||payload.message||fallbackMessage,error})}function notifyCartRequestError(error){error&&Number(error.status)===429&&typeof window2.alert=="function"?window2.alert("Too many requests right now. Please wait a moment and try again."):error&&Number(error.status)===400&&typeof window2.alert=="function"&&window2.alert("The bridge option could not be updated. Please try again."),window2.console&&window2.console.error(error)}function getLatestCartItemKey(lineItem,expectedKey){var cartUrl=window2.theme&&window2.theme.routes&&window2.theme.routes.cart?window2.theme.routes.cart:"/cart.js",separator=cartUrl.indexOf("?")===-1?"?":"&",bundleId=lineItem.dataset.cartBundleId||lineItem.dataset.paveBundleId,optionKey=lineItem.dataset.cartChildOptionKey||lineItem.dataset.paveOptionKey;return fetch(cartUrl+separator+"t="+Date.now(),{credentials:"same-origin",headers:{"X-Requested-With":"XMLHttpRequest"}}).then(function(response){return response.ok?response.json():rejectCartRequest(response,"Unable to refresh the cart.")}).then(function(cart){var items=cart&&Array.isArray(cart.items)?cart.items:[],exactItem=items.filter(function(item){return String(item.key)===String(expectedKey)})[0];if(exactItem)return exactItem.key;var matchingItem=items.filter(function(item){var properties=item.properties||{},itemBundleId=properties._cart_bundle_id||properties._pave_bundle_id,itemOptionKey=properties._cart_child_option_key||properties._pave_option_key;return String(itemBundleId)===String(bundleId)&&String(itemOptionKey)===String(optionKey)})[0];return matchingItem?matchingItem.key:""})}function changeCartItemWithRecovery(lineItem,key,quantity){return changeCartItem(key,quantity).catch(function(error){if(Number(error.status)!==400)throw error;return getLatestCartItemKey(lineItem,key).then(function(latestKey){if(!latestKey||String(latestKey)===String(key))throw error;return changeCartItem(latestKey,quantity)})})}function addCartItem(item){return fetch(window2.theme&&window2.theme.routes?window2.theme.routes.cartAdd:"/cart/add.js",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({items:[item]})}).then(function(response){return response.ok?response.json():rejectCartRequest
1(response,"Unable to add the Pav\xE9 option.")})}function changeCartItem(key,quantity){return fetch(window2.theme&&window2.theme.routes?window2.theme.routes.cartChange:"/cart/change.js",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest"},body:JSON.stringify({id:key,quantity:quantity})}).then(function(response){return response.ok?response.json():rejectCartRequest(response,"Unable to update the Pav\xE9 option.")})}function populateCartSelect(lineItem){var select=lineItem.querySelector("[data-cart-change-select]");if(!(!select||select.dataset.cartOptionsReady==="true")){var options=getCartOptions(lineItem),currentKey=lineItem.dataset.cartChildOptionKey||lineItem.dataset.paveOptionKey;select.innerHTML="",options.forEach(function(option){var optionElement=document2.createElement("option");optionElement.value=String(option.key),optionElement.textContent=getOptionSelectTitle(option)||option.product_title||"",optionElement.dataset.variantId=option.variant_id||"",String(option.key)!=="1"&&(!option.variant_id||option.available===!1)&&(optionElement.disabled=!0),String(option.key)===String(currentKey)&&(optionElement.selected=!0),select.appendChild(optionElement)}),select.dataset.cartOptionsReady="true"}}function setCartChangeState(change,isActive){if(change){change.classList.toggle("is-active",isActive);var toggle=change.querySelector("[data-cart-change-toggle]");toggle&&toggle.setAttribute("aria-expanded",isActive?"true":"false")}}function replaceCartChild(lineItem,select){if(!(!lineItem||!select||lineItem.dataset.paveUpdating==="true"||select.disabled)){var options=getCartOptions(lineItem),nextOption=options.filter(function(option){return String(option.key)===String(select.value)})[0],currentKey=lineItem.dataset.key,bundleId=lineItem.dataset.cartBundleId||lineItem.dataset.paveBundleId,parentVariantId=l
1ineItem.dataset.cartParentVariantId||lineItem.dataset.paveParentVariantId,change=select.closest("[data-cart-change]"),currentOptionKey=lineItem.dataset.cartChildOptionKey||lineItem.dataset.paveOptionKey;if(!nextOption||!currentKey||!bundleId){change&&setCartChangeState(change,!1);return}if(String(nextOption.key)===String(currentOptionKey)){change&&setCartChangeState(change,!1);return}if(String(nextOption.key)==="1"){lineItem.dataset.paveUpdating="true",select.disabled=!0,changeCartItemWithRecovery(lineItem,currentKey,0).then(function(){dispatchCartBuild()}).catch(function(error){notifyCartRequestError(error),delete lineItem.dataset.paveUpdating,select.disabled=!1,select.value=String(currentOptionKey)});return}if(!nextOption.variant_id||nextOption.available===!1){select.value=String(currentOptionKey),change&&setCartChangeState(change,!1);return}lineItem.dataset.paveUpdating="true",select.disabled=!0;var presentation=getOptionPresentation(nextOption),item={quantity:1,id:Number(nextOption.variant_id),properties:{"Pave Option":presentation.title,_cart_bundle_id:bundleId,_cart_bundle_role:"child",_cart_parent_variant_id:parentVariantId||"",_cart_child_label:"ADD-ON",_cart_child_title:presentation.title,_cart_child_subtitle:presentation.subtitle,_cart_child_image:presentation.image,_cart_child_option_key:String(nextOption.key),_cart_child_options:JSON.stringify(options),_pave_bundle_id:bundleId,_pave_role:"child",_pave_options:JSON.stringify(options),_pave_option_key:String(nextOption.key),_pave_parent_variant_id:parentVariantId||"",_pave_option_subtitle:presentation.subtitle,_pave_option_image:presentation.image}};addCartItem(item).then(function(){return changeCartItemWithRecovery(lineItem,currentKey,0)}).then(function(){dispatchCartBuild()}).catch(function(error){notifyCartRequestError(error),delete lineItem.dataset.paveUpdating,select.disabled=!1,select.value=String(currentOptionKey)})}}function createBundleId(){return"pave-"+Date.now()+"-"+Math.random().toString(36).slice(2,10)}function appendBundleItem(items,parentItem,fallbackVariantId){if(!Array.isArray(items)||!parentItem)return"";var selection=getSelection(),variantId=Number(fallbackVariantId||selection&&selection.variant_id);if(!variantId)return"";(!selection||Number(selection.variant_id)!==variantId)&&(selection={option_key:"",title:"Pav\xE9 Diamond Bridge",variant_id:variantId,options:selection&&Array.isArray(selection.options)?selection.options:[],image:""});var existingProperties=parentItem.properties||{},bundleId=existingProperties._cart_bundle_id||existingProperties._pave_bundle_id||createBundleId(),presentation=getOptionPresentation(selection);return parentItem.properties=existingProperties,parentItem.properties._cart_bundle_id=bundleId,parentItem.properties._cart_bundle_role="parent",parentItem.properties._pave_bundle_id=bundleId,parentItem.properties._pave_role="parent",items.push({quantity:1,id:variantId,properties:{"Pave Option":presentation.title,_cart_bundle_id:bundleId,_cart_bundle_role:"child",_cart_parent_variant_id:String(parentItem.id||""),_cart_child_label:"ADD-ON",_cart_child_title:presentation.title,_cart_child_subtitle:presentation.subtitle,_cart_child_image:presentation.image,_cart_child_option_key:String(selection.option_key||""),_cart_child_options:JSON.stringify(selection.options||[]),_pave_bundle_id:bundleId,_pave_role:"child",_pave_options:JSON.stringify(selection.options||[]),_pave_option_key:String(selection.option_key||""),_pave_parent_variant_id:String(parentItem.id||""),_pave_option_subtitle:presentation.subtitle,_pave_option_image:presentation.image}}),bundleId}function initCartControls(){document2.querySelectorAll("[data-cart-line-item]").forEach(function(lineItem){populateCartSelect(lineItem)})}function closeCartSelects(except){document2.querySelectorAll("[data-cart-change].is-active").forEach(function(change){change!==except&&setCartChangeState(change,!1)})}function hideProductPickerDuringCartEdit(){var searchParams=new URLSearchParams(window2.location.search);return searchParams.has("edit_cart_id")?(document2.querySelectorAll("[data-pave-option-picker]").forEach(function(wrapper){wrapper.hidden=!0,wrapper.setAttribute("aria-hidden","true")}),!0):!1}document2.addEventListener("click",function(event){var toggle=event.target.closest("[data-cart-change-toggle]");if(!toggle){event.target.closest("[data-cart-change]")||closeCartSelects();return}var change=toggle.closest("[data-cart-change]");if(change){closeCartSelects(change),setCartChangeState(change,!0);var select=change.querySelector("[data-cart-change-select]");select&&(populateCartSelect(toggle.closest("[data-cart-line-item]")),select.focus())}}),document2.addEventListener("change",function(event){event.target.matches("[data-cart-change-select]")&&replaceCartChild(event.target.closest("[data-cart-line-item]"),event.target)}),document2.addEventListener("keydown",function(event){event.key==="Escape"&&closeCartSelects()});
1function init(){hideProductPickerDuringCartEdit()||initProductPickers(),initCartControls()}window2.KavalriPaveOption={getSelection:getSelection,clearSelection:function(){window2.localStorage.removeItem(storageKey)},createBundleId:createBundleId,appendBundleItem:appendBundleItem},document2.readyState==="loading"?document2.addEventListener("DOMContentLoaded",init):init(),document2.addEventListener("cart:build",function(){window2.setTimeout(initCartControls,0)})})(window,document);
2//# sourceMappingURL=/cdn/shop/t/587/assets/cust-pave-option.js.map?v=27275203752187037351791166615

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.