1jQuery( document ).ready(function() { 2if (dataLayer[0]["shoptet"]["pageType"] == "productDetail") { 3 let product_id = dataLayer[0]["shoptet"]["product"]["guid"]; 4 const eshop_id = dataLayer[0]["shoptet"]["projectId"]; 5 6 fetch("https://shoptet.webotvurci.cz/eshop-endpoints/" + eshop_id + "/product-variants/setting-hash") 7 .then((response) => response.json()) 8 .then((response) => { 9 var product_connections_setting = "https://cdn.myshoptet.com/usr/webotvurci.myshoptet.com/user/documents/product-variants/" + eshop_id + "/eshopSetting.json?" + response; 10 fetch(product_connections_setting) 11 .then((response) => response.json()) 12 .then((json) => { 13 let products = json.products[product_id]; 14 if (products !== undefined) { 15 products.forEach((element) => { 16 let product_config_id = element; 17 let product_config_data = json.configs[product_config_id]; 18 WtShowProductInterconnectionsAddonCisBox(product_config_data); 19 console.log(product_config_data); 20 }); 21 } 22 23 }); 24 }) 25 .catch((error) => { 26 console.log(error); 27 }); 28} 29 30 31function WtShowProductInterconnectionsAddonCisBox(product_config_data){ 32 var productData = product_config_data; 33 34 if (dataLayer[0]["shoptet"]["pageType"] == "productDetail" && typeof productData !== 'undefined') { 35 36 var container; 37 38 // PÅiÅazenà containeru dle hodnoty v shoptet design template name 39 switch (shoptet.design.template.name) { 40 case "Step": 41 container = document.querySelector(".p-detail-inner .p-basic-info-block"); 42 if (document.querySelector("#product-detail-form .variant-list") !== null || document.querySelector('#product-detail-form .surcharge-list') !== null) { 43 container = document.querySelector(".p-detail-inner .p-basic-info-block"); 44 } 45 break; 46 47 case "Classic": 48 49 if (document.querySelector("#product-detail-form .detail-parameters th") !== null || document.querySelector("#product-detail-form .detail-parameters tbody") !== null) { 50 container = document.querySelector(".p-detail-inner .detail-parameters"); 51 } else if (document.querySelector("#product-detail-form #choose-variant") !== null) { 52 container = document.querySelector("#product-detail-form .p-short-description"); 53 } 54 break; 55 56 case "Waltz": 57 58 if (document.querySelector("#product-detail-form .variant-list") !== null) { 59 container = document.querySelector(".p-detail-inner .variant-list"); 60 } else if (document.querySelector('#product-detail-form .surcharge-list') !== null) { 61 container = document.querySelector(".p-detail-inner .surcharge-list"); 62 } 63 break; 64 65 case "Samba": 66 67 if (document.querySelector("#product-detail-form .p-variants-block") !== null) { 68 container = document.querySelector(".p-detail-inner .p-variants-block"); 69 } 70 break; 71 72 case "Disco": 73 74 if (document.querySelector("#product-detail-form .p-variants-block") !== null) { 75 container = document.querySelector(".p-detail-inner .p-variants-block"); 76 } 77 break; 78 79 case "Tango": 80 container = document.querySelector(".p-detail-inner .price-final"); 81 82 if (document.querySelector("#product-detail-form .detail-parameters") !== null) { 83 container = document.querySelector(".p-detail-inner .detail-parameters"); 84 85 } 86 break; 87 case "Techno": 88 container = document.querySelector(".p-detail-inner .price-final"); 89 90 if (document.querySelector("#product-detail-form .detail-parameters") !== null) { 91 container = document.querySelector(".p-detail-inner .detail-parameters"); 92 93 } 94 break; 95 96 case "Soul": 97 if (document.querySelector("#product-detail-form .product-detail-variant-wrap") !== null) { 98 container = document.querySelector(".p-detail-inner .product-detail-variant-wrap"); 99 100 } 101 break; 102 case "Pop": 103 case "Rock": 104 container = document.querySelector("#t-product-detail #product-detail"); 105 106 if (document.querySelector("#product-detail-form .product-detail-variant-wrap") !== null) { 107 container = document.querySelector(".p-detail-inner .product-detail-variant-wrap"); 108 109 } 110 break; 111 case "Echo": 112 container = document.querySelector(".pr-list-horizontal-price"); 113 114 if (document.querySelector("form .pr-listing-variant-wrap") !== null) { 115 container = document.querySelector("form .pr-listing-variant-wrap"); 116 117 } else if (document.querySelector('form .pr-listing-surcharge-wrap') !== null) { 118 container = document.querySelector("form .pr-listing-surcharge-wrap"); 119 } 120 break; 121 default: 122 if (document.querySelector("#product-detail-form .variant-list") !== null) { 123 container = document.querySelector(".p-detail-inner .p-variants-block"); 124 } 125 break; 126 } 127 128 // Kontrola parametrů hasOwnDesign a type 129 if (productData.hasOwnDesign === true && productData.type === "list") { 130 // VytvoÅenà custom select boxu 131 var customSelectBox = document.createElement('div'); 132 customSelectBox.setAttribute('class', `c-product-interconnection-detail-params--custom is-template--${shoptet.design.template.name}`); 133 134 // NaÄtenà aktuálnÃho product_id 135 let product_id = dataLayer[0]["shoptet"]["product"]["guid"]; 136 137 // VytvoÅenà aktuálnà položky 138 var currentItem = document.createElement('div'); 139 currentItem.setAttribute('class', `c-product-interconnection-custom--image-select-list is-current`); 140 141 var currentProductData = productData.productsSetting[product_id]; 142 var currentMeta = productData.metas[product_id]; 143 144 // VýpoÄet poÄtu položek a cenového rozpÄtà 145 var itemCount = Object.keys(productData.productsSetting).length; 146 var prices = Object.values(productData.metas) 147 .filter(meta => meta.visibility === "visible") 148 .map(meta => meta.price); 149 var minPrice = Math.min(...prices); 150 var maxPrice = Math.max(...prices); 151 152 if (currentProductData && currentMeta) { 153 currentItem.innerHTML = ` 154 <div class="c-product-interconnection-custom--image-select-list__inner"> 155 <img src="${currentMeta.image}" alt="${currentMeta.name}"> 156 <h3>${currentMeta.name}</h3> 157 <div class='select-all-items-info'>Na výber až z ${itemCount} variant <span class='price'>${minPrice},- až ${maxPrice},-</span></div>
158 <span class='select-chevron'> â¼</span> 159 </div>`; 160 } 161 customSelectBox.appendChild(currentItem); 162 163 // VytvoÅenà kontejneru pro vÅ¡echny položky 164 var itemsContainer = document.createElement('div'); 165 itemsContainer.setAttribute('class', 'c-product-interconnection-custom--image-select-list-dropdown'); 166 itemsContainer.style.display = 'none'; // Skrytà položek na zaÄátku 167 customSelectBox.appendChild(itemsContainer); 168 169 // Iterace pÅes productsSetting a vytvoÅenà položek 170 for (var key in productData.productsSetting) { 171 if (key !== product_id) { // PÅeskoÄenà aktuálnà položky 172 var item = document.createElement('div'); 173 item.setAttribute('class', 'c-product-interconnection-custom--image-select-list-dropdown__item'); 174 item.dataset.link = productData.productsSetting[key].link; 175 176 // VytvoÅenà obsahu položky 177 var image = productData.metas[key].image; 178 var name = productData.metas[key].name; 179 var price = productData.metas[key].price; 180 var availability = productData.metas[key].availability; 181 182 // Pokud je availability null, zkus ji zÃskat z DOM 183 if (!availability) { 184 var availabilityElement = document.querySelector('.availability-label'); 185 availability = availabilityElement ? availabilityElement.textContent.trim() : 'Nenà skladem'; 186 } 187 188 console.log('Product ID:', key, 'Availability:', availability); 189 190 item.innerHTML = `<div class='dropdown-item__inner'> 191 <img src="${image}" alt="${name}"> 192 <h3>${name}</h3> 193 <div class='price-availability'> 194 <span class='price'>${price} â¬</span> 195 <span class='availability is--${availability}'>${availability}</span> 196 </div> 197 </div>`; 198 199 // PÅidánà události pro pÅesmÄrovánà na kliknutà 200 item.addEventListener('click', function () { 201 window.location.href = this.dataset.link; 202 }); 203 204 itemsContainer.appendChild(item); 205 } 206} 207 208 209 // PÅidánà události pro zobrazenÃ/skrytà položek na kliknutà na aktuálnà položku 210 currentItem.addEventListener('click', function () { 211 if (itemsContainer.style.display === 'none') { 212 itemsContainer.style.display = 'block'; 213 } else { 214 itemsContainer.style.display = 'none'; 215 } 216 }); 217 218 // PÅidánà custom select boxu do zvoleného kontejneru 219 if (container) { 220 container.parentNode.insertBefore(customSelectBox, container); 221 } 222 } 223 } 224} 225 });
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.