PageSourceSearch

https://www.cocollabo.net/cdn/shop/t/42/assets/reservation-products.js?v=103007045998615338351785378444

js cocollabo.net collected 2026-10-04 00:49:05 UTC 16,149 bytes, 75 lines download raw bytes

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.