PageSourceSearch

https://www.rails.com/cdn/shop/t/1629/assets/add-to-bag-block-vite-CG2-5jfO.js

js rails.com collected 2026-10-03 19:16:34 UTC 12,588 bytes, 36 lines download raw bytes

1import{P as N}from"./theme-product-form-vite-CHXUzf8R.js";import{s as R,A as U}from"./index-vite-DXWni4yJ.js";import{s as J}from"./index-vite-B-_vkCL2.js";import{f as A}from"./currency-vite-CdPOxbL7.js";import{c as Q,d as X}from"./bodyScrollLock.esm-vite-CABaxWbl.js";import"./vue.runtime.esm-vite-DO7IpdXk.js";import"./index-vite-CzApALvg.js";import"./settings-vite-BQQmZtn0.js";import"./cartApiServices-vite-CLGN-AHZ.js";import"./_commonjsHelpers-vite-BosuxZz1.js";const O=X,B=Q;(()=>{const i={addToBagBlock:".js-add-to-bag-block",addToBagBlockOverlay:".js-add-to-bag-block-overlay",addToBagBlockLink:".js-add-to-bag-block-link",addToBagBlockMeta:".js-add-to-bag-block-meta",addToBagBlockCloseButton:".js-add-to-bag-block-close-button",addToCartButton:"[data-add-to-cart]",addToCartButtonText:"[data-add-to-cart-text]",productPrice:"[data-product-price]",comparePrice:"[data-compare-price]",productForm:"[data-product-form]",optionLabelValue:".js-option-label-value",afterPayContainer:".js-afterpay-container",afterpayWidget:"afterpay-placement",errorMessageElement:".js-product-error-message-container",errorMessage:".js-product-error-message",errorMessageCloseButton:".js-product-error-message-close-button",productSlider:".js-add-to-bag-block-products-slider",productSlide:".js-add-to-bag-block-products-slide",productSliderWrapper:".js-add-to-bag-block-products-slider-wrapper",productSliderPreviousButton:".js-add-to-bag-block-products-slider-previous-button",productSliderNextButton:".js-add-to-bag-block-products-slider-next-button",productSliderSlidePosition:".js-add-to-bag-block-slider-slide-position",addToBagBlockProductTab:".js-add-to-bag-block-tab",moduleBannerContainer:".js-module-banner"},f={hidden:"hidden",active:"active",disabledOption:"disabled",salePrice:"add-to-bag-block-meta-price__price-value--sale"};function w(){let r=document.querySelectorAll(i.addToBagBlock);r&&(r.forEach(function(a){I(a),q(a),j(a)}),F(),_())}function M(){let r=document.querySelectorAll(i.addToBagBlockLink);r.length&&r.forEach(a=>{a.addEventListener("click",()=>{let t=a.dataset.addToBagBlockId;if(!t)return;let e=document.getElementById(t);T(),W(e)})})}function j(r){let a=r.querySelector(i.productSlider);if(!a)return;let t=a.querySelector(i.productSliderWrapper),e=a.querySelectorAll(i.productSlide),o=a.querySelector(i.productSliderPreviousButton),n=a.querySelector(i.productSliderNextButton),g=a.querySelector(i.productSliderSlidePosition);if(!t||!o||!n||!g||!e.length)return;let v=Array.from(e),u=t.querySelector(i.productSlide+".active-slide"),d=v.findIndex(c=>{if(c.classList.contains("active-slide"))return!0}),s=0,l=0;if(!u||d==-1)return;m(),K();function m(){o.addEventListener("click",function(){k()}),n.addEventListener("click",function(){p()})}function p(){if(d==e.length-1)return;d++;let c=e[d];c&&(L(),E(u,c),C(),l++,l==3&&D(c),u.classList.remove("active-slide"),c.classList.add("active-slide"),u=c)}function k(){if(d==0)return;d--;let c=e[d];c&&(L(),E(u,c),C(),l--,l==-1&&H(c),u.classList.remove("active-slide"),c.classList.add("active-slide"),u=c)}function L(){d==e.length-1?n.classList.add("hidden"):n.classList.remove("hidden"),d>0&&o.classList.remove("hidden"),d==0?o.classList.add("hidden"):o.classList.remove("hidden"),d<e.length-1&&n.classList.remove("hidden")}function E(c,h){let b=c.dataset.tabId,y=h.dataset.tabId;if(!b||!y)return;let S=r.querySelector(i.addToBagBlockProductTab+`[data-tab-id="${b}"]`),x=r.querySelector(i.addToBagBlockProductTab+`[data-tab-id="${y}"]`);!S||!x||(S.classList.remove("active-tab"),x.classList.add("active-tab"))}function C(){g.innerText=`${d+1}/${e.length}`}function H(c){let h=c.offsetWidth;h&&(l=2,s=s+h*3,t.style.transform=`translateX(${s}px)`)}function D(c){let h=c.offsetWidth;h&&(l=0,s=s-h*3,t.style.transform=`translateX(${s}px)`)}function K(){t.addEventListener("click",function(c){let h=c.target.closest(i.productSlide);if(!h)return;let b=v.findIndex(S=>{if(S==h)return!0}),y=v.findIndex(S=>{if(S==u)return!0});b==-1||y==-1||(u.classList.remove("active-slide"),h.classList.add("active-slide"),E(u,h),y<b?l=Math.abs(l+(b-y)):l=Math.abs(l-(y-b)),d=b,u=h,C(),L())})}}function q(r){if(!r)return;let a=r.querySelectorAll(i.addToBagBlockMeta);a&&a.forEach(async t=>{await z(t)})}function I(r){if(!r)return;let a=r.querySelector(i.addToBagBlockCloseButton);a&&a.addEventListener("click",function(){V(r)})}function _(){let r=window.matchMedia("(max-width: 1199px)");r.addEventListener?r.addEventListener("change",()=>{if(r.matches){let a=document.querySelector(i.addToBagBlock+"."+f.active);a&&O(a)}else B()}):r.addEventListener(a=>{if(a.matches)if(r.matches){let t=document.querySelector(i.addToBagBlock+"."+f.active);t&&O(t)}else B()})}function $(){return window.matchMedia("(max-width: 1199px)").matches}function W(r){if(!r)return;r.classList.add(f.active),$()&&O(r);let a=document.querySelector(i.addToBagBlockOverlay);a&&a.classList.add(f.active),document.dispatchEvent(new CustomEvent("addToBagBlock:isOpen",{detail:{element:event}}))}function V(r){if(!r)return;r.classList.remove(f.active),B();let a=document.querySelector(i.addToBagBlockOverlay);a&&a.classList.remove(f.active);const t=r.closest(i.moduleBannerContainer);P(t)}function T(){let r=document.querySelector(i.addToBagBlock+"."+f.active);if(!r)return;r.classList.remove(f.active),B();let a=document.querySelector(i.addToBagBlockOverlay);a&&a.classList.remove(f.active);const t=r.closest(i.moduleBannerContainer);P(t)}document.addEventListener("addToBagBlock:close",()=>{T()});function P(r=!0){r&&document.dispatchEvent(new CustomEvent("addToBagBlock:isClose",{detail:{element:event}}))}function F(){document.addEventListener("click",()=>{const r=event.target.closest(i.addToBagBlock),a=event.target.closest(i.addToBagBlockLink),t=event.target.closest(i.sizeChart);!r&&!a&&!t&&T()})}async function z(r){await{product:{},inventories:{},container:null,productForm:null,enableHistoryState:!1,productSlider:null,thumbnailsSlider:null,init:async function(){if(!r||(this.container=r,this.productHandle=this.container.dataset.productHandle,!this.productHandle))return;this.product=await this.getProductJson(this.productHandle);const t=this.container.querySelector(i.productForm);this.productForm=new N(t,this.product,{onOptionChange:this.onOptionChange.bind(this),onFormSubmit:e=>{this.addToCartSubmit(e),document.addEventListener("product:cart:update:init",()=>{R.dispatch(U)})},onPropertyChange:()=>{}}),this.productOptionInputs=this.productForm.optionInputs.reduce((e,o)=>{const n=o.dataset.option,g=e[n]||[];return{...e,[n]:[...g,o]}},{}),this.currentVariant=this.productForm.variant(),this.currentVariant&&this.disableUnavailableOptions(this.currentVariant),this.updatePrice(this.currentVariant),this.initAfterpay(),this.initErrorMessage(),this.initEvents()},initEvents:function(){this.container.addEventListener("click",this.onQuantityChange)},getProductJson:function(t){const e=`/products/${t}.js`;return fetch(e).then(o=>o.json())},onOptionChange:function(t){const e=t.dataset.variant;this.currentVariant=e,this.updatePrice(e),this.updateAddToCartState(e),this.disableUnavailableOptions(e),this.updateOptionLabel(e),this.setAfterPayStyles(),this.hideErrorMessage()},addToCartSubmit:function(t){t.preventDefault();const e=t.target,o=J(e,{hash:!0});e.classList.add("adding"),document.dispatchEvent(new CustomEvent("product:cart:add",{detail:{data:[o],onError:n=>{n&&n.description&&this.errorMessageElement&&this.errorMessage&&(this.errorMessage.innerText=n.description,this.errorMessageElement.classList.add("active"))},callback:n=>{n&&!n.message&&document.dispatchEvent(new CustomEvent("open:minicart"))}}}))},updatePrice:function(t){if(!t)return null;const e=this.container.querySelector(i.productPrice);e.innerHTML=A(t.price,`${window.storeCurrencySymbol}{{money_without_trailing_zeros}}`);const o=this.container.querySelector(i.comparePrice);if(!o)return e.classList.remove(f.salePrice),null;t.compare_at_price>t.price?(e.classList.add(f.salePrice),o.innerText=A(t.compare_at_price,`${window.storeCurrencySymbol}{{money_without_trailing_zeros}}`),o.classList.remove(f.hidden)):(e.classList.remove(f.salePrice),o.innerText="",o.classList.add(f.hidden))},updateAddToCartState:function(t){const e=this.container.querySelector(i.addToCartButton);if(!e)return null;const o=e.querySelector(i.addToCartButtonText);if(!o)return null;if(!t)return e.disabled=!0,o.innerText=window.themeCore.translations.get("products.product.unavailable"),null;const n=t.available,g=this.product.tags.some(v=>v==="coming_soon");n?(e.disabled=!1,o.innerText=window.themeCore.translations.get("products.product.add_to_cart")):g?(e.disabled=!0,o.innerText=window.themeCore.translations.get("products.product.coming_soon")):(e.disabled=!0,o.innerText=window.themeCore.translations.get("products.product.sold_out"))},initAfterpay:function(){let t=this.container.querySelector(i.afterPayContainer),e=this.container.querySelector(i.productPrice);if(!t||!e)return;let o=t.id,n=e.id;if(!(!o||!n))try{this.createAfterpay(o,n)}catch{window.addEventListener("Afterpay.ready",()=>{this.createAfterpay(o,n)})}},createAfterpay:function(t,e){window.Afterpay.createPlacements({targetSelector:`#${t}`,attributes:{amountSelector:`#${e}`,logoType:"lockup",size:"sm",modalLinkStyle:"none"}}),this.setAfterPayStyles()},setAfterPayStyles:function(){const t=this.container.querySelector(i.afterpayWidget);if(!t)return;const e=document.createElement("style");e.innerHTML=`
2				  .afterpay-paragraph {
3					display: flex !important;
4					align-items: center !important;
5				  }
6
7				  .afterpay-paragraph .afterpay-main-text {
8					display: inline-block !important;
9					font-family: "Acumin Pro", sans-serif !important;
10					font-size: 10px !important;
11					font-weight: 400 !important;
12					line-height: 1.4 !important;
13					letter-spacing: 0.02em !important;
14					color: #666666 !important;
15				  }
16
17				  .afterpay-paragraph .afterpay-logo {
18					width: 52px !important;
19					height: 10px !important;
20				  }
21
22				  .afterpay-paragraph .afterpay-logo svg {
23					width: 52px !important;
24					height: 10px !important;
25				  }
26
27				  .afterpay-paragraph .afterpay-logo-link {
28					display: inline-block !important;
29					margin-left: 4px !important;
30					line-height: 0 !important;
31				  }
32
33				  .afterpay-paragraph .afterpay-logo svg {
34					opacity: 0.7 !important;
35				  }
36				`,t.shadowRoot.appendChild(e)},updateOptionLabel:function(t){let e=this.container.querySelectorAll(i.optionLabelValue);e&&e.forEach(o=>{let n=o.dataset.optionPosition;n&&t[n]&&(o.innerText=t[n])})},getSelectedOptions(){return this.productForm.options().reduce((t,e,o)=>({...t,[`option${o+1}`]:e.value}),{})},disableUnavailableOptions(t){const e=this.getSelectedOptions(t),o=this.getAvailableValues(this.product.variants,e),n=f.disabledOption.replace(".","");Object.keys(this.productOptionInputs).forEach(g=>{const v=o[g]??[];this.productOptionInputs[g].forEach(u=>{if(u.disabled=!1,!v.includes(u.value)){u.classList.add(n);return}u.classList.remove(n)})})},getAvailableValues(t,e){let n=`option${Object.keys(e).length+1}`,g=t.map(s=>{let l=Object.keys(s).filter(m=>m.indexOf("option")===0||m==="available");return Object.assign({},{},...l.map(m=>{if(m==="available")return{[m]:s[m]};if(m>n)return{};const p=s[m];return p?{[m]:p}:{}}))});Object.keys(g[0]).forEach(s=>{s!=="available"&&(e.hasOwnProperty(s)||(e[s]=null))});let v=Object.keys(e),u=v.length>0?v.map(s=>Object.assign({},{},...v.map(l=>s===l?{}:{[l]:e[l]}))):[{}],d={};return g.map(s=>Object.assign({},{},...u.map(l=>Object.keys(l).map(p=>l[p]===null?!0:s.hasOwnProperty(p)&&l[p]===s[p]).includes(!1)!==!0?s.available?Object.assign({},{},...Object.keys(s).filter(p=>p!=="available"&&!l.hasOwnProperty(p)).map(p=>({[p]:[s[p]]}))):{}:{}))).filter(s=>Object.keys(s).length>0).forEach(s=>{Object.keys(s).forEach(l=>{d.hasOwnProperty(l)||(d[l]=[]),d[l]=d[l].concat(s[l]).filter((m,p,k)=>k.indexOf(m)===p)})}),Object.assign({},{},...Object.keys(d).sort().map(s=>({[s]:d[s]})))},initErrorMessage:function(){this.errorMessageElement=this.container.querySelector(i.errorMessageElement),this.errorMessageElement&&(this.errorMessage=this.errorMessageElement.querySelector(i.errorMessage),this.errorMessageCloseButton=this.errorMessageElement.querySelector(i.errorMessageCloseButton),!(!this.errorMessage||!this.errorMessageCloseButton)&&this.errorMessageCloseButton.addEventListener("click",()=>{this.errorMessageElement.classList.remove("active")}))},hideErrorMessage:function(){this.errorMessageElement&&this.errorMessageElement.classList.remove("active")}}.init()}w(),M()})();

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.