1(function(){"use strict";const ReservationProducts={_productDataCache:{},formatJapanesePeriod:function(dateStr){if(!dateStr)return null;try{const date=new Date(dateStr);if(isNaN(date.getTime()))return null;const year=date.getFullYear(),month=date.getMonth()+1,day=date.getDate();let period="";return day<=10?period="\u4E0A\u65EC":day<=20?period="\u4E2D\u65EC":period="\u4E0B\u65EC",{year,month,day,period}}catch(e){return console.error("Error formatting Japanese period:",e),null}},formatShippingRange:function(startDateStr,endDateStr){if(!startDateStr||!endDateStr)return"";const start=this.formatJapanesePeriod(startDateStr),end=this.formatJapanesePeriod(endDateStr);return!start||!end?"":start.year===end.year&&start.month===end.month?start.period===end.period?`${start.year}\u5E74${start.month}\u6708${end.period}\u9803`:`${start.year}\u5E74${start.month}\u6708${start.period}\u301C${end.period}\u9803`:start.year===end.year?`${start.year}\u5E74${start.month}\u6708${start.period}\u301C${end.month}\u6708${end.period}\u9803`:`${start.year}\u5E74${start.month}\u6708${start.period}\u301C${end.year}\u5E74${end.month}\u6708${end.period}\u9803`},dateRangesOverlap:function(start1,end1,start2,end2){const s1=new Date(start1).getTime(),e1=new Date(end1).getTime(),s2=new Date(start2).getTime(),e2=new Date(end2).getTime();return s1<=e2&&s2<=e1},isDateBefore:function(date,compareDate){return new Date(date).getTime()<new Date(compareDate).getTime()},isBetweenDates:function(startDate,endDate){const now=new Date().getTime(),start=startDate?new Date(startDate).getTime():-1/0,end=endDate?new Date(endDate).getTime():1/0;return now>=start&&now<=end},validateProduct:function(productData,cartItems){const now=new Date().getTime(),result={canAddToCart:!0,buttonText:"\u30AB\u30FC\u30C8\u306B\u5165\u308C\u308B",buttonClass:"button--green",message:"",shippingText:"",conflictingItems:[]};if(!productData)return console.error("Product data is missing"),result;cartItems=cartItems||[];const currentProductUrl=productData.productUrl,otherCartItems=cartItems.filter(item=>item.url!==currentProductUrl);if(productData.shippingStart&&productData.shippingEnd&&(result.shippingText=this.formatShippingRange(productData.shippingStart,productData.shippingEnd)),productData.licenseEnd)try{const licenseEnd=new Date(productData.licenseEnd).getTime();if(!isNaN(licenseEnd)&&now>licenseEnd)return result.canAddToCart=!1,result.buttonText="\u8CA9\u58F2\u7D42\u4E86",result.buttonClass="button--disabled",result}catch(e){console.error("Error parsing license end date:",e)}if(productData.orderStart&&productData.orderEnd)try{const orderStart=new Date(productData.orderStart).getTime(),orderEnd=new Date(productData.orderEnd).getTime();if(!isNaN(orderStart)&&!isNaN(orderEnd)){if(now<orderStart)return result.canAddToCart=!1,result.buttonText="\u4E88\u7D04\u958B\u59CB\u524D",result.buttonClass="button--disabled",result;if(now>orderEnd)return result.canAddToCart=!1,result.buttonText="\u4E88\u7D04\u7D42\u4E86",result.buttonClass="button--disabled",result}}catch(e){console.error("Error parsing order dates:",e)}if(productData.cantOrderWithOthers&&otherCartItems.length>0)return result.conflictingItems=otherCartItems.map(item=>({title:item.title,url:item.url,variantId:item.variantId})),result.canAddToCart=!1,result.buttonText="\u6CE8\u6587\u4E0D\u53EF",result.buttonClass="button--disabled",result.message="\u73FE\u5728\u30AB\u30FC\u30C8\u5185\u306E\u5546\u54C1\u3068\u540C\u6642\u306B\u3054\u8CFC\u5165\u3044\u305F\u3060\u3051\u307E\u305B\u3093\u3002\u3054\u8CFC\u5165\u3092\u3054\u5E0C\u671B\u306E\u5834\u5408\u306F\u3001\u30AB\u30FC\u30C8\u3092\u7A7A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",result;const cartCantOrderItems=otherCartItems.filter(item=>item.cantOrderWithOthers);if(cartCantOrderItems.length>0)return result.conflictingItems=cartCantOrderItems.map(item=>({title:item.title,url:item.url,variantId:item.variantId})),result.canAddToCart=!1,result.buttonText="\u6CE8\u6587\u4E0D\u53EF",result.buttonClass="button--disabled",result.message="\u73FE\u5728\u30AB\u30FC\u30C8\u5185\u306E\u5546\u54C1\u3068\u540C\u6642\u306B\u3054\u8CFC\u5165\u3044\u305F\u3060\u3051\u307E\u305B\u3093\u3002\u3054\u8CFC\u5165\u3092\u3054\u5E0C\u671B\u306E\u5834\u5408\u306F\u3001\u30AB\u30FC\u30C8\u3092\u7A7A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",result;if(productData.shippingStart&&productData.shippingEnd){for(const item of otherCartItems)if(item.licenseEnd){const shippingStart=new Date(productData.shippingStart).getTime(),shippingEnd=new Date(productData.shippingEnd).getTime(),licenseEnd=new Date(item.licenseEnd).getTime();if(shippingStart>
1licenseEnd)return result.conflictingItems.push({title:item.title,url:item.url,variantId:item.variantId}),result.canAddToCart=!1,result.buttonText="\u6CE8\u6587\u4E0D\u53EF",result.buttonClass="button--disabled",result.message="\u73FE\u5728\u30AB\u30FC\u30C8\u5185\u306E\u5546\u54C1\u3068\u540C\u6642\u306B\u3054\u8CFC\u5165\u3044\u305F\u3060\u3051\u307E\u305B\u3093\u3002\u3054\u8CFC\u5165\u3092\u3054\u5E0C\u671B\u306E\u5834\u5408\u306F\u3001\u30AB\u30FC\u30C8\u3092\u7A7A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",result}}if(productData.licenseEnd){for(const item of otherCartItems)if(item.shippingStart&&item.shippingEnd){const licenseEnd=new Date(productData.licenseEnd).getTime();if(new Date(item.shippingStart).getTime()>licenseEnd)return result.conflictingItems.push({title:item.title,url:item.url,variantId:item.variantId}),result.canAddToCart=!1,result.buttonText="\u6CE8\u6587\u4E0D\u53EF",result.buttonClass="button--disabled",result.message="\u73FE\u5728\u30AB\u30FC\u30C8\u5185\u306E\u5546\u54C1\u3068\u540C\u6642\u306B\u3054\u8CFC\u5165\u3044\u305F\u3060\u3051\u307E\u305B\u3093\u3002\u3054\u8CFC\u5165\u3092\u3054\u5E0C\u671B\u306E\u5834\u5408\u306F\u3001\u30AB\u30FC\u30C8\u3092\u7A7A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",result}}return productData.available===!1&&(result.canAddToCart=!1,result.buttonText="\u5728\u5EAB\u5207\u308C",result.buttonClass="button--disabled"),result},updateShippingAttribute:function(shippingText){document.querySelectorAll("[data-reservation-shipping-date]").forEach(input=>{input.value=shippingText||""})},formatProductShippingDisplays:function(){document.querySelectorAll("[data-product-shipping-display]").forEach(display=>{const shippingStart=display.getAttribute("data-shipping-start"),shippingEnd=display.getAttribute("data-shipping-end"),licenseEnd=display.getAttribute("data-license-end");let formattedText="";licenseEnd?formattedText=this.formatShippingRange(licenseEnd,licenseEnd):shippingStart&&shippingEnd&&(formattedText=this.formatShippingRange(shippingStart,shippingEnd)),formattedText&&(display.textContent=formattedText)})},calculateCartShipping:function(cartItems){if(!cartItems||cartItems.length===0)return{shouldShowModal:!1,shippingText:""};let latestShippingStart=null,latestShippingEnd=null,latestShippingEndTime=0;const uniqueDates=new Set;for(const item of cartItems)if(item.shippingEnd){const shippingEndTime=new Date(item.shippingEnd).getTime(),rangeId=(item.shippingStart||"")+"|"+item.shippingEnd;uniqueDates.add(rangeId),shippingEndTime>latestShippingEndTime&&(latestShippingEndTime=shippingEndTime,latestShippingEnd=item.shippingEnd,latestShippingStart=item.shippingStart||item.shippingEnd)}if(!latestShippingEnd)return{shouldShowModal:!1,shippingText:""};const shippingText=this.formatShippingRange(latestShippingStart,latestShippingEnd);return{shouldShowModal:cartItems.length>=2,shippingText}},renderProductButton:function(containerSelector){const container=document.querySelector(containerSelector);if(!container)return;let productData,cartData;if(this._productDataCache[containerSelector]){const cached=this._productDataCache[containerSelector];productData=cached.productData,cartData=cached.cartData}else{const productDataEl=container.querySelector("[data-product-reservation]");if(!productDataEl)return;try{productData=JSON.parse(productDataEl.getAttribute("data-product-reservation")),cartData=JSON.parse(productDataEl.getAttribute("data-cart-items")||"[]"),this._productDataCache[containerSelector]={productData,cartData}}catch(e){console.error("Error parsing product data:",e);return}}try{const validation=this.validateProduct(productData,cartData);let html="";validation.message&&validation.conflictingItems.length>0&&(html+='<div style="margin-bottom: 20px;">',html+=`<p>${validation.message}</p>`,html+='<ul style="margin: 10px 0; padding-left: 20px;">',validation.conflictingItems.forEach(item=>{html+=`<li><a href="${item.url}" target="_blank" style="text-decoration: underline; color: #1976D2;">${item.title}</a></li>`}),html+="</ul>",html+="</div>");const shippingDisplayEl=document.querySelector("[data-reservation-shipping-display-product]");shippingDisplayEl&&(shippingDisplayEl.innerHTML=validation.shippingText?`<p class="product-reservation-shipping-text">${validation.shippingText}
1\u306B\u767A\u9001\u4E88\u5B9A</p>`:""),this.updateShippingAttribute(validation.shippingText),html+='<div class="product-form__payment-container">',html+=`<button type="submit" class="product-form__add-button button ${validation.buttonClass} ${validation.canAddToCart?"":"button--disabled"}" `,html+=validation.canAddToCart?'data-action="add-to-cart"':"disabled",html+=`>${validation.buttonText}</button>`,html+="</div>",container.innerHTML=html}catch(e){console.error("Error rendering product button:",e)}},setupCartCheckout:function(containerSelector){const container=document.querySelector(containerSelector);if(!container)return;const cartDataEl=container.querySelector("[data-cart-reservation]");if(cartDataEl)try{const cartDataStr=cartDataEl.getAttribute("data-cart-reservation");if(!cartDataStr){this.updateShippingAttribute("");return}const cartData=JSON.parse(cartDataStr),shippingInfo=this.calculateCartShipping(cartData);if(this.updateShippingAttribute(shippingInfo.shippingText||""),!shippingInfo.shouldShowModal)return;const checkoutButton=container.querySelector(".cart-recap__checkout");if(!checkoutButton||container.querySelector(".cart-checkout-modal-trigger")||checkoutButton.classList.contains("btn-checkout-original"))return;const triggerButton=checkoutButton.cloneNode(!0);triggerButton.type="button",triggerButton.classList.add("cart-checkout-modal-trigger"),triggerButton.removeAttribute("name"),checkoutButton.style.display="none",checkoutButton.classList.add("btn-checkout-original"),checkoutButton.parentNode.insertBefore(triggerButton,checkoutButton);const modalHTML=` 2 <div class="cart-checkout-modal-overlay cart-checkout-modal"> 3 <div class="cart-checkout-modal-overlay-close"></div> 4 5 <div class="cart-checkout-modal-content"> 6 <div class="cart-checkout-modal-body"> 7 <p>\u30AB\u30FC\u30C8\u5185\u306B\u767A\u9001\u65E5\u306E\u7570\u306A\u308B\u5546\u54C1\u304C\u3054\u3056\u3044\u307E\u3059\u3002</p> 8 <p>\u6700\u3082\u9045\u3044\u767A\u9001\u65E5\u306B\u5408\u308F\u305B\u3066\u767A\u9001\u3044\u305F\u3057\u307E\u3059\u3002</p> 9 <p><strong>\u767A\u9001\u4E88\u5B9A\uFF1A${shippingInfo.shippingText}</strong></p> 10 11 <button type="button" class="button button--primary cart-checkout-modal-confirm-checkout">\u78BA\u8A8D\u3057\u307E\u3057\u305F</button> 12 </div> 13 </div> 14 </div> 15 `;if(triggerButton.insertAdjacentHTML("afterend",modalHTML),!document.getElementById("cart-checkout-modal-styles")){const styles=document.createElement("style");styles.id="cart-checkout-modal-styles",styles.textContent=` 16 .cart-checkout-modal-overlay { 17 position: fixed; 18 top: 0; 19 left: 0; 20 width: 100%; 21 height: 100%; 22 background-color: rgba(0, 0, 0, 0.4); 23 z-index: 999999; 24 display: none; 25 justify-content: center; 26 align-items: center; 27 } 28 29 .cart-checkout-modal-overlay.show { 30 display: flex; 31 } 32 33 .cart-checkout-modal-overlay-close { 34 position: absolute; 35 top: 0; 36 left: 0; 37 width: 100%; 38 height: 100%; 39 cursor: pointer; 40 z-index: 1; 41 } 42 43 .cart-checkout-modal-content { 44 background: white; 45 border-radius: 3px; 46 max-width: 400px; 47 width: 90%; 48 padding: 30px; 49 text-align: center; 50 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4); 51 position: relative; 52 z-index: 2; 53 } 54 55 .cart-checkout-modal-body p { 56 margin: 0 0 15px 0; 57 color: #333; 58 font-size: 16px; 59 line-height: 1.5; 60 } 61 62 .cart-checkout-modal-body p strong { 63 font-size: 18px; 64 font-weight: bold; 65 color: #e65100; 66 margin-bottom: 25px; 67 } 68 69 .cart-checkout-modal-body button { 70 margin: 0; 71 padding: 4px 30px; 72 font-size: 16px; 73 } 74 `,document.head.appendChild(styles)}const modal=container.querySelector(".cart-checkout-modal"),overlayClose=modal.querySelector(".cart-checkout-modal-overlay-close"),confirmButton=modal.querySelector(".cart-checkout-modal-confirm-checkout"),closeModal=()=>{modal.classList.remove("show"),document.body.style.overflow=""},openModal=()=>{modal.classList.add("show"),document.body.style.overflow="hidden"};triggerButton.addEventListener("click",e=>{e.preventDefault(),openModal()}),overlayClose.addEventListener("click",closeModal),modal.addEventListener("click",e=>{e.target===modal&&closeModal()}),confirmButton.addEventListener("click",()=>{closeModal(),checkoutButton.click()})}catch(e){console.error("Error setting up cart checkout:",e)}},handleVariantChange:function(event){if(!event.detail||!event.detail.variant)return;const newVariant=event.detail.variant,containerSelector="[data-reservation-product-container]";this._productDataCache[containerSelector]&&(this._productDataCache[containerSelector].productData.available=newVariant.available),this.renderProductButton(containerSelector)},init:function(){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.init());return}this.renderProductButton("[data-reservation-product-container]"),document.addEventListener("variant:changed",event=>this.handleVariantChange(event)),this.setupCartCheckout("[data-reservation-cart-container]"),this.formatProductShippingDisplays(),this.initMiniCart()},initMiniCart:function(){const self=this;this.setupCartCheckout("[data-reservation-minicart-container]");const miniCart=document.getElementById("mini-cart");miniCart&&new MutationObserver(mutations=>{mutations.forEach(mutation=>{mutation.type==="attributes"&&mutation.attributeName==="aria-hidden"&&miniCart.getAttribute("aria-hidden")==="false"&&setTimeout(()=>{self.setupCartCheckout("[data-reservation-minicart-container]"),self.formatProductShippingDisplays()},50)})}).observe(miniCart,{attributes:!0,attributeFilter:["aria-hidden"]}),document.addEventListener("cart:updated",()=>{setTimeout(()=>{self.setupCartCheckout("[data-reservation-minicart-container]"),self.formatProductShippingDisplays()},100)});let checkCount=0;const checkInterval=setInterval(()=>{if(checkCount++,checkCount>20){clearInterval(checkInterval);return}const container=document.querySelector("[data-reservation-minicart-container]");container&&!container.querySelector(".cart-checkout-modal-trigger")&&miniCart&&miniCart.getAttribute("aria-hidden")==="false"&&(self.setupCartCheckout("[data-reservation-minicart-container]"),self.formatProductShippingDisplays())},500)}};ReservationProducts.init(),window.ReservationProducts=ReservationProducts})(); 75//# sourceMappingURL=/cdn/shop/t/42/assets/reservation-products.js.map?v=103007045998615338351785378444
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.