PageSourceSearch

https://dckboardshorts.com/cdn/shop/t/67/assets/variant-picker.js?v=17515462640958628441779741622

js dckboardshorts.com collected 2026-10-04 05:08:59 UTC 20,112 bytes, 2 lines download raw bytes

1if(!customElements.get("variant-picker")){class VariantPicker extends HTMLElement{constructor(){super(),Shopify.designMode?setTimeout(()=>this.init(),200):this.init()}init(){this.selectors={error:".m-product-form-message",variantIdInput:'[name="id"]',pickerFields:["[data-picker-field]"],optionNodes:[".m-product-option--node"],productSku:"[data-variant-sku]",productAvailability:"[data-availability]",shareUrlInput:"[data-share-url]",stockCountdown:".prod__stock-countdown",productWrapper:".m-main-product--wrapper"},this.productWrapper=this.closest(this.selectors.productWrapper),this.productForm=this.productWrapper.querySelector("product-form"),this.domNodes=queryDomNodes(this.selectors,this.productWrapper);const themeProducts=window._themeProducts||{},{productId,sectionId,productUrl,hasOnlyDefaultVariant,showFeaturedMedia}=this.dataset;Object.assign(this,{productId,sectionId,productUrl,hasOnlyDefaultVariant:hasOnlyDefaultVariant==="true",showFeaturedMedia:showFeaturedMedia==="true",variantData:this.getVariantData(),productData:Object.assign(this.getProductJson(),themeProducts[productId])}),this.handleQueryString(),this.handleVariantGroupImages(),this.selectInitialVariant(),this.setupEventListeners(),this.initOptionSwatches()}handleQueryString(){const hasQueryString=window.location.search.includes("?variant="),disableSelectedVariantDefault=this.dataset.disableSelectedVariantDefault==="true",hasMultipleVariants=this.productData&&this.productData.variants&&this.productData.variants.length>1;this.selectedVariantDefault=disableSelectedVariantDefault&&hasMultipleVariants&&!hasQueryString,this.selectedVariantDefault&&this.disableSelectedVariantDefault()}handleVariantGroupImages(){this.dataset.enableVariantGroupImages==="true"?(this.enableVariantGroupImages=!0,this.variantGroupImages=this.getVariantGroupImageData()):this.enableVariantGroupImages=!1}selectInitialVariant(){const variantIdInput=this.productWrapper.querySelector(this.selectors.variantIdInput),selectedVariantId=Number(variantIdInput.value),currentVariant=this.productData.variants.find(variant=>variant.id===selectedVariantId);this.selectedVariant=variantIdInput,this.currentVariant=currentVariant,this.productData.current_variant_id=currentVariant?currentVariant.id:null,this.productData.initialVariant=currentVariant,currentVariant&&(this.getDataImageVariant(currentVariant.id),this.hideSoldOutAndUnavailableOptions(),this.updateButton(!currentVariant.available))}setupEventListeners(){this.hasSetupMediaData=!1;const mediaGalleryHandler=this.getMediaGallery.bind(this);mediaGalleryHandler(),["matchMobile","unmatchMobile"].forEach(event=>document.addEventListener(event,mediaGalleryHandler)),this.addEventListener("change",this.onVariantChange)}getMediaGallery(){return this.waitForMediaGallery().then(this.setupMediaGallery.bind(this))}waitForMediaGallery(){return new Promise(resolve=>{const checkMediaGallery=()=>{this.mediaGallery=this.productWrapper.querySelector("media-gallery"),this.mediaGalleryMobile=this.productWrapper.querySelector("media-gallery-mobile");const isMediaGalleryReady=this.mediaGallery&&(this.mediaGallery.view==="featured-product"||this.mediaGallery.view==="quick-view")&&this.mediaGallery.mediaMode,isBothGalleriesReady=this.mediaGallery&&this.mediaGalleryMobile&&this.mediaGallery.mediaMode&&this.mediaGalleryMobile.mediaMode;isMediaGalleryReady||isBothGalleriesReady?resolve():setTimeout(checkMediaGallery,100)};checkMediaGallery()})}setupMediaGallery(){const isMobile=MinimogTheme.config.mqlMobile,effectiveMediaGallery=isMobile?this.mediaGalleryMobile||this.mediaGallery:this.mediaGallery;this.media=effectiveMediaGallery,this.hasSetupMediaData||(isMobile||effectiveMediaGallery.mediaMode==="slider"?(this.slides=effectiveMediaGallery.slider&&effectiveMediaGallery.slider.slides,this.slidesNav=effectiveMediaGallery.navSlider&&effectiveMediaGallery.navSlider.slides):this.mediaItems=effectiveMediaGallery.querySelectorAll(".m-product-media--item"),this.layout=isMobile?void 0:effectiveMediaGallery.layout),(!this.showFeaturedMedia||this.enableVariantGroupImages&&this.variantGroupImages.enable)&&this.updateMedia(),this.hasSetupMediaData=!0}
1disableSelectedVariantDefault(){if(this.querySelectorAll('input[type="radio"]').forEach(radioOption=>{radioOption.checked=!1}),this.querySelectorAll("[data-picker-field='radio']").forEach(radio=>{radio.setAttribute("data-selected-value","")}),this.querySelectorAll("[data-picker-field='select']").forEach(pickerSelect=>{const selectElm=pickerSelect.querySelector("select");selectElm&&(selectElm.value=""),pickerSelect.setAttribute("data-selected-value","")}),this.querySelectorAll(".option-label--selected").forEach(label=>{label.textContent=""}),this.productForm){const variantIdEl=this.productForm.querySelector("[name='id']");variantIdEl&&!this.hasOnlyDefaultVariant&&(variantIdEl.value="")}}setProductAsUnavailable(){this.updateButton(!0),this.setUnavailable()}updateProductDetailsForVariant(){this.getDataImageVariant(this.currentVariant.id),this.updateMedia(),this.updateBrowserHistory(),this.updateVariantInput(),this.updateProductMeta(),this.updatePrice();const isSoldOut=!this.currentVariant.available,buttonText=isSoldOut?window.MinimogStrings.soldOut:"";this.updateButton(isSoldOut,buttonText),this.hideSoldOutAndUnavailableOptions()}
1onVariantChange(){if(this.getSelectedOptions(),this.getSelectedVariant(),this.updatePickupAvailability(),this.removeErrorMessage(),!this.currentVariant){this.setProductAsUnavailable();return}this.updateProductDetailsForVariant();const variantChangeEvent=new CustomEvent("variant:changed",{detail:{variant:this.currentVariant}});window.MinimogEvents.emit(`${this.productId}__VARIANT_CHANGE`,this.currentVariant,this),document.dispatchEvent(variantChangeEvent)}getDataImageVariant(variantId){if(!this.variantGroupImages||!this.variantGroupImages.enable)return;const currentVariantMedia=this.variantGroupImages.mapping.find(variant=>Number(variant.id)===variantId);currentVariantMedia&&(this.currentVariantMedia=currentVariantMedia.media)}getProductJson(){try{const productDataElement=this.productWrapper.querySelector("#productData[type='application/json']");if(!productDataElement)throw new Error("Fallback product data element not found.");return JSON.parse(productDataElement.textContent)}catch(error){return console.error("Error loading fallback product data:",error),null}}getSelectedVariant(){let variant,options=[...this.options];for(let attempt=0;attempt<this.options.length&&(variant=getVariantFromOptionArray(this.productData,options),!(variant||options.length===0));attempt++)options.pop();variant&&(this.options=[...variant.options],this.updateSelectedOptions()),this.currentVariant=variant}getSelectedOptions(){const pickerFields=Array.from(this.querySelectorAll("[data-picker-field]"));this.options=pickerFields.map(field=>{if(field.dataset.pickerField==="radio"){const checkedRadio=field.querySelector("input:checked");return checkedRadio?checkedRadio.value:void 0}if(field.querySelector("select"))return field.querySelector("select").value}).filter(option=>option!==void 0)}updateSelectedOptions(){this.domNodes.pickerFields.forEach((field,index)=>{const selectedValue=field.dataset.selectedValue,optionValue=this.options[index];if(selectedValue!==optionValue){const selectedOption=field.querySelector(`input[value="${optionValue.replace(/["\\]/g,"\\$&")}"]`);selectedOption&&(selectedOption.checked=!0,field.updateSelectedValue())}})}removeLoading(mediaElement){if(!mediaElement)return;mediaElement.removeAttribute("data-media-loading");const firstChild=mediaElement.firstElementChild;firstChild&&(firstChild.style.opacity=1)}handleImageZoom(mediaItems,mediaContext){const customData=mediaItems.map(item=>{const{mediaType,index}=item.dataset;if(mediaType==="image"){const{mediaSrc,mediaWidth,mediaHeight,mediaAlt}=item.querySelector(".m-product-media").dataset;return{src:mediaSrc,width:parseInt(mediaWidth),height:parseInt(mediaHeight),alt:mediaAlt,id:index}}return{html:`<div class="pswp__${mediaType}">${item.innerHTML}</div>`,type:mediaType,id:index}});mediaContext&&mediaContext.lightbox&&(mediaContext.lightbox.destroy(),mediaContext.handlePhotoswipe(customData),mediaContext.initPhotoswipe())}updateMedia(){if(!this.currentVariant)return;let mainItems=[],navItems=[];const reorderItems=(referenceItems,items,isNav=!1,isSlider=!1)=>{let reorderedItems=[];return referenceItems.forEach((referenceItem,index)=>{const foundItem=items.find(item=>item.querySelector("[data-media-id]").dataset.mediaId===referenceItem);foundItem&&(foundItem.dataset.index=index,foundItem.dataset.swiperSlideIndex=index,reorderedItems.push(foundItem))}),items.forEach(item=>{const dataIdMedia=item.querySelector("[data-media-id]").dataset.mediaId;!referenceItems.includes(dataIdMedia)&&!reorderedItems.includes(item)&&(item.dataset.index=reorderedItems.length,item.dataset.swiperSlideIndex=reorderedItems.length,reorderedItems.push(item))}),isSlider&&reorderedItems.forEach(item=>{isNav?item.classList.toggle("swiper-slide-thumb-active",item.dataset.swiperSlideIndex==="0"):item.classList.toggle("swiper-slide-active",item.dataset.swiperSlideIndex==="0")}),reorderedItems},processItems=(currentItems,items)=>
1{currentItems.forEach(slide=>{const dataIdMedia=slide.querySelector("[data-media-id]").dataset.mediaId,isCurrentVariantMedia=this.currentVariantMedia&&this.currentVariantMedia.length>0&&this.currentVariantMedia.includes(dataIdMedia),isNotImageType=!slide.classList.contains("media-type-image");(isCurrentVariantMedia||isNotImageType||!this.currentVariantMedia||this.currentVariantMedia.length===0)&&items.push(slide)})};if(this.variantGroupImages&&this.variantGroupImages.enable)if(this.media.mediaMode==="slider"&&this.slides){processItems(this.slides,mainItems);const reorderedMainItems=reorderItems(this.currentVariantMedia,mainItems,!1,!0);if(this.media.slider.removeAllSlides(),this.media.slider.appendSlide(reorderedMainItems),this.media.slider.slideToLoop(this.layout==="layout-7"?1:0),this.media.handleSlideChange(),this.slidesNav){processItems(this.slidesNav,navItems);const reorderedNavItems=reorderItems(this.currentVariantMedia,navItems,!0,!0);this.media.navSlider&&(this.media.navSlider.removeAllSlides(),this.media.navSlider.appendSlide(reorderedNavItems),this.media.navSlider.slideToLoop(0))}}else{const mediaWrapper=this.media.querySelector(".m-product-media--list");if(!mediaWrapper)return;processItems(this.mediaItems,mainItems);const reorderedItems=reorderItems(this.currentVariantMedia,mainItems);mediaWrapper.innerHTML="",reorderedItems.forEach((item,index)=>{this.layout==="layout-2"&&(item.classList.remove("m-col-span-2"),index%3===0&&item.classList.add("m-col-span-2")),mediaWrapper.append(item)})}else{let mediaSize=0;this.media&&"mediaSize"in this.media.dataset&&(mediaSize=parseInt(this.media.dataset.mediaSize,10)),mediaSize>0&&this.media.setActiveMedia(this.currentVariant)}this.removeLoading(this.media),this.handleImageZoom(mainItems,this.media)}updateBrowserHistory(){this.currentVariant&&this.dataset.updateUrl!=="false"&&window.history.replaceState({},"",`${this.productUrl}?variant=${this.currentVariant.id}`)}updateVariantInput(){document.querySelectorAll(`#product-form-${this.sectionId}, #product-form-installment`).forEach(productForm=>{const variantIdInput=productForm.querySelector(this.selectors.variantIdInput);variantIdInput&&(variantIdInput.value=this.currentVariant.id,variantIdInput.dispatchEvent(new Event("input",{bubbles:!0})))})}updatePickupAvailability(){const pickUpAvailability=this.productWrapper.querySelector("pickup-availability");if(pickUpAvailability){if(!this.currentVariant||!this.currentVariant.available){pickUpAvailability.removeAttribute("available"),pickUpAvailability.innerHTML="";return}pickUpAvailability.fetchAvailability(this.currentVariant.id)}}removeErrorMessage(){const section=this.closest("section");if(!section)return;const productForm=section.querySelector("product-form");productForm&&productForm.handleErrorMessage()}updatePrice(){const classes={onSale:"m-price--on-sale",soldOut:"m-price--sold-out"},selectors={priceWrapper:".m-price",salePrice:".m-price-item--sale",compareAtPrice:[".m-price-item--regular"],unitPrice:".m-price__unit",unitPriceWrapper:".m-price__unit-wrapper",saleBadge:".m-price__badge-sale",saleAmount:"[data-saved-price]"},mainProductPrices=this.productWrapper.querySelector(".main-product__block-price");if(!mainProductPrices)return;const moneyFormat=window.MinimogSettings.money_format,{priceWrapper,salePrice,unitPrice,compareAtPrice,saleBadge,saleAmount,unitPriceWrapper}=queryDomNodes(selectors,mainProductPrices),{compare_at_price,price,unit_price_measurement,available}=this.currentVariant,saleBadgeType=priceWrapper.dataset.saleBadgeType,onSale=compare_at_price&&compare_at_price>price,soldOut=!available;if(priceWrapper.classList.toggle(classes.onSale,onSale),priceWrapper.classList.toggle(classes.soldOut,soldOut),priceWrapper.classList.remove("m:visibility-hidden"),salePrice&&(salePrice.innerHTML=formatMoney(price,moneyFormat)),compareAtPrice&&compareAtPrice.forEach(function(item){const displayPrice=onSale?compare_at_price:price;item.innerHTML=formatMoney(displayPrice,moneyFormat)}),saleBadge&&onSale&&saleBadgeType!=="text"){let value;saleBadgeType==="fixed_amount"?value=formatMoney(compare_at_price-price,moneyFormat):value=Math.round((compare_at_price-price)*100/compare_at_price)+"%",saleAmount&&(saleAmount.innerHTML=value)}if(unit_price_measurement&&unitPrice){unitPriceWrapper.classList.remove("m:hidden");const unitPriceContent="<span>"+formatMoney(this.currentVariant.unit_price,moneyFormat)+"</span>/<span data-unit-price-base-unit>"+this._getBaseUnit()+"</span>";unitPrice.innerHTML=unitPriceContent}else unitPriceWrapper&&unitPriceWrapper.classList.add("m:hidden")}_getBaseUnit(){const{reference_value,reference_unit}=this.currentVariant.unit_price_measurement;return reference_value===1?reference_unit:`${reference_value}${reference_unit}`}updateButton(disable=!0,text){const productForms=document.querySelectorAll(`.product-form-${this.sectionId}`);
1productForms.length&&productForms.forEach(productForm=>{const addButton=productForm.querySelector('[name="add"]');if(!addButton)return;const dynamicCheckout=productForm.querySelector(".m-product-dynamic-checkout"),addButtonText=addButton.querySelector(".m-add-to-cart--text");(isDisabled=>{addButton.disabled=isDisabled,addButton.classList.toggle("disabled",isDisabled),dynamicCheckout&&dynamicCheckout.classList.toggle("disabled",isDisabled),addButtonText.textContent=isDisabled&&text?text:window.MinimogStrings.addToCart})(disable)})}updateProductMeta(){const{available,sku}=this.currentVariant,{inStock,outOfStock}=window.MinimogStrings,productAvailability=this.productWrapper.querySelector(this.selectors.productAvailability),productSku=this.productWrapper.querySelector(this.selectors.productSku);productSku&&(productSku.textContent=sku||"N/A"),productAvailability&&(productAvailability.textContent=available?inStock:outOfStock,productAvailability.classList.toggle("m-product-availability--outofstock",!available));const metaUpdateEvent=new CustomEvent("product:meta-updated",{detail:{available,sku}});this.productWrapper.dispatchEvent(metaUpdateEvent)}setUnavailable(){const button=document.getElementById(`product-form-${this.sectionId}`);if(!button)return;const addButton=button.querySelector('[name="add"]');if(!addButton)return;const addButtonText=addButton.querySelector(".m-add-to-cart--text");addButtonText&&(addButtonText.textContent=window.MinimogStrings.unavailable);const priceWrapper=this.productWrapper.querySelector(".m-price");priceWrapper&&priceWrapper.classList.add("m:visibility-hidden")}hideSoldOutAndUnavailableOptions(){const classes={soldOut:"m-product-option--node__soldout",unavailable:"m-product-option--node__unavailable"},{optionNodes}=this.domNodes,{variants,options}=this.productData;optionNodes.forEach(optNode=>{const{optionPosition,value}=optNode.dataset,optPos=Number(optionPosition),isSelectOption=optNode.tagName==="OPTION";let matchVariants=[];if(optPos===options.length){const optionsArray=[...this.currentVariant.options];optionsArray[optPos-1]=value,matchVariants.push(getVariantFromOptionArray(this.productData,optionsArray))}else matchVariants=variants.filter(v=>v.options[optPos-1]===value&&v.options[optPos-2]===this.currentVariant[`option${optPos-1}`]);matchVariants=matchVariants.filter(Boolean);const isSoldOut=matchVariants.length&&matchVariants.every(v=>!v.available),isUnavailable=!matchVariants.length;optNode.classList.toggle(classes.soldOut,isSoldOut),optNode.classList.toggle(classes.unavailable,isUnavailable),isSelectOption&&(optNode.disabled=isUnavailable)})}getVariantData(){if(this.variantData)return this.variantData;const productVariants=this.querySelector('#productVariants[type="application/json"]');if(productVariants)try{this.variantData=JSON.parse(productVariants.textContent)}catch(error){console.error("Error parsing variant data:",error)}return this.variantData||{}}getVariantGroupImageData(){if(this.variantGroupImages)return this.variantGroupImages;const variantGroupElement=this.querySelector('#variantGroup[type="application/json"]');if(variantGroupElement)try{this.variantGroupImages=JSON.parse(variantGroupElement.textContent)}catch(error){console.error("Error parsing variant group images data:",error)}return this.variantGroupImages||{}}initOptionSwatches(){const{_colorSwatches=[],_imageSwatches=[]}=window.MinimogSettings;this.domNodes.optionNodes&&this.domNodes.optionNodes.forEach(optNode=>{const{optionType,optionPosition,value:optionValue}=optNode.dataset,optionValueLowerCase=optionValue&&optionValue.toLowerCase(),variantToShowSwatchImage=this.variantData.find(v=>v[`option${optionPosition}`]===optionValue),variantImage=variantToShowSwatchImage&&variantToShowSwatchImage.featured_image&&variantToShowSwatchImage.featured_image.src?getSizedImageUrl(variantToShowSwatchImage.featured_image.src,"100x"):null,customImage=_imageSwatches.find(i=>i.key===optionValueLowerCase),customColor=_colorSwatches.find(c=>c.key===optionValueLowerCase),labelElement=optNode.querySelector("label");if(labelElement)switch((variantImage||customImage&&customImage.value)&&labelElement.classList.add("has-bg-img"),labelElement.classList.remove("option-loading"),optionType){case"default":case"image":labelElement.style.backgroundImage=`url(${customImage&&customImage.value||variantImage||""})`;break;case"color":labelElement.style.backgroundColor=customColor&&customColor.value||optionValueLowerCase,customImage&&customImage.value&&(labelElement.style.backgroundImage=`url(${customImage.value})`);break;default:break}})}}customElements.define("variant-picker",VariantPicker)}if(!customElements.get("variant-button")){class VariantButton extends HTMLElement{constructor(){super(),this.selectedSpan=this.querySelector(".option-label--selected"),this.addEventListener("change",this.updateSelectedValue)}updateSelectedValue(){this.value=Array.from(this.querySelectorAll("input")).find(radio=>radio.checked).value,this.setAttribute("data-selected-value",this.value),this.selectedSpan&&(this.selectedSpan.textContent=this.value,this.selectedSpan.classList.remove("m:text-color-error"))}}if(customElements.define("variant-button",VariantButton),!customElements.get("variant-select")){class VariantSelect extends VariantButton{constructor(){super()}updateSelectedValue(){this.value=this.querySelector("select").value,this.setAttribute("data-selected-value",this.value),this.selectedSpan&&(this.selectedSpan.textContent=this.value,this.selectedSpan.classList.remove("m:text-color-error"))}}customElements.define("variant-select",VariantSelect)}
1if(!customElements.get("variant-image")){class VariantImage extends VariantButton{constructor(){super()}}customElements.define("variant-image",VariantImage)}if(!customElements.get("variant-color")){class VariantColor extends VariantButton{constructor(){super()}}customElements.define("variant-color",VariantColor)}}
2//# sourceMappingURL=/cdn/shop/t/67/assets/variant-picker.js.map?v=17515462640958628441779741622

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.