1class ProductOptions extends HTMLElement{constructor(){super(),this.first_variant_available=this.dataset.firstVariantAvailable==="true",this.is_product_page=this.closest(".product-page--root")!==null,this.labels=this.querySelectorAll(".disclosure--root, .radios--header"),this.options_container=this.querySelector(".product-options--container"),this.option_inputs=this.options_container.querySelectorAll('[data-item="disclosure"], [data-item="radio"]'),this.root=this.closest(`[data-product-id='${this.dataset.id}']`),this.size_chart=this.querySelector(".product-options--option .product-size-chart--root"),this.variants=JSON.parse(this.querySelector(".product-options--json").value),this.load()}load(){this.getAvailableVariants(),this.disableEmptyOptions(),this.optionChangeListener(),this.updateDisabledOptions(this.first_variant_available),this.size_chart&&this.moveSizeChart()}getAvailableVariants(){this.available_variants=[],this.variants.forEach(variant=>{variant.available&&this.available_variants.push(variant.options)})}disableEmptyOptions(){const available_options=[].concat.apply([],this.available_variants),options=this.options_container.querySelectorAll(".radios--input, .disclosure--option-link");options.length&&options.forEach(option=>{const current_value=this.getOptionValue(option);available_options.includes(current_value)||option.setAttribute("data-empty",!0)})}getOptionValue(option){return option.getAttribute("data-value")?option.getAttribute("data-value"):option.value}optionChangeListener(){this.option_inputs.forEach(input=>{input.addEventListener("change",event=>{const selected_options=[];this.options_container.querySelectorAll('[data-item="disclosure"], [data-item="radio"]:checked').forEach(current_option=>{const index=current_option.closest(".product-options--option").dataset.index;selected_options.push({index,value:current_option.value})});let variant_found=!1;this.variants.every(variant=>{let options_match=!0;return selected_options.forEach(option=>{options_match&&(options_match=variant.options[option.index]===option.value)}),options_match?(variant_found=variant,!1):!0}),this.updateVariant(variant_found,event.target)})})}updateVariant(variant,selected_option){if(variant&&variant.id!==void 0&&variant.id!==null){window.foundVariant=this.findVariantById(variant.id);
1const foundVariantChangeEvent=new CustomEvent("foundVariantChange",{detail:window.foundVariant});window.dispatchEvent(foundVariantChangeEvent)}this.updateDisabledOptions(variant.available,selected_option),this.is_product_page&&this.updateHistoryState(variant.id);const variant_update_event=new CustomEvent("variantUpdated",{detail:variant});this.root.dispatchEvent(variant_update_event)}findVariantById(variantId){return this.variants.find(variant=>variant.id===variantId)}updateHistoryState(variant_id){let new_variant_url=`${location.origin}${location.pathname}`;variant_id&&(new_variant_url+=`?variant=${variant_id}`),history.replaceState({path:new_variant_url},"",new_variant_url)}updateDisabledOptions(variant_available,selected_option=!1){const options=this.options_container.querySelectorAll(".radios--input, .disclosure--option-link");if(!options.length)return;const selected_options=[];options.forEach(option=>{option.removeAttribute("data-unavailable"),(option.checked||option.getAttribute("aria-current")==="true")&&selected_options.push(option)});const disclosure_toggles=this.options_container.querySelectorAll(".disclosure--current-option");let selected_value;selected_option===!1?(selected_option=selected_options[0],selected_value=this.getOptionValue(selected_option)):selected_option.classList.contains("disclosure--input")?(selected_value=selected_option.value,selected_option=selected_options.find(option=>option.getAttribute("data-value")===selected_value)):selected_value=selected_option.value;const options_in_same_container=[];selected_option.closest(".radios--container, .disclosure--form").querySelectorAll(".radios--input, .disclosure--option-link").forEach(option=>{const current_value=this.getOptionValue(option);current_value!==selected_value&&options_in_same_container.push(current_value)});const options_available_with_current_selection=options_in_same_container;
1this.available_variants.forEach(available_variant=>{available_variant.includes(selected_value)&&available_variant.forEach(option=>options_available_with_current_selection.push(option))}),options.forEach(option=>{const current_value=this.getOptionValue(option);options_available_with_current_selection.includes(current_value)||option.setAttribute("data-unavailable",!0)}),variant_available?disclosure_toggles&&disclosure_toggles.forEach(toggle=>toggle.setAttribute("data-unavailable",!1)):(selected_options.forEach(option=>option.setAttribute("data-unavailable",!0)),disclosure_toggles&&disclosure_toggles.forEach(toggle=>toggle.setAttribute("data-unavailable",!0)))}moveSizeChart(){this.size_chart.parentNode.querySelector("label").parentNode.appendChild(this.size_chart)}}customElements.define("product-options-root",ProductOptions); 2//# sourceMappingURL=/cdn/shop/t/23/assets/product-options.js.map?v=83688472305750473781716285191
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.