1bypassCheckoutFormValidationForEdit(); 2initShopTabs(); 3initShippingMethods(); 4initAddToCartForm(); 5 6function initAddToCartForm() { 7 var form = $('#Form_AddToCartForm'); 8 9 if (form.length && form.data('variants-text')) { 10 var variantDropdown = form.find('#Form_AddToCartForm_VariantID'); 11 var variantsText = form.data('variants-text'); 12 13 if (variantDropdown.length) { 14 var product = form.closest('.product-page'); 15 var defaultImg = false; 16 var defaultImgBackup = false; 17 18 variantDropdown.change(function() { 19 if (defaultImg === false) { 20 defaultImg = product.find('.product-page__left > a').first(); 21 defaultImgBackup = defaultImg.wrap('<div />').parent().html(); 22 defaultImg.unwrap(); 23 } 24 25 var variant = variantsText[$(this).val()]; 26 27 if (variant) { 28 product.find('.product-price__value').text(variant.price); 29 30 if (product.find('.product-price__explanation').length) { 31 product.find('.product-price__explanation').text(variant.explanation); 32 } 33 34 var newImg = product.find('.product-page__variant-imgs a[data-variant-id="' + $(this).val() + '"]'); 35 36 if (newImg.length) { 37 product.find('.product-page__left > a').first().replaceWith(newImg.wrap('<div />').parent().html()); 38 newImg.unwrap(); 39 } 40 } else { 41 product.find('.product-page__left > a').first().replaceWith(defaultImgBackup); 42 } 43 }); 44 } 45 } 46} 47 48// bypass js form validation on summary form if you want to edit the cart 49function bypassCheckoutFormValidationForEdit() { 50 var goBackToEditCart = document.querySelector('#Form_CheckoutForm_action_goBackToEdit'); 51 52 if (goBackToEditCart) { 53 goBackToEditCart.onclick = function (e) { 54 document.querySelector('#Form_CheckoutForm_AcceptDataProcessing_Holder').style.opacity = 0.25; 55 document.querySelector('#Form_CheckoutForm_AcceptDataProcessing_Holder').style.textDecoration = 'line-through'; 56 document.querySelector('#Form_CheckoutForm_AcceptDataProcessing').checked = true; 57 } 58 } 59} 60 61// tabs 62function initShopTabs() { 63 var 64 tabs = $('.shop-tabs'), 65 tabsActiveClass = 'shop-tabs--active'; 66 67 if (tabs.length) { 68 tabs.each(function () { 69 var 70 tabSet = $(this), 71 links = tabSet.find('.shop-tabs__menu li'); 72 73 links.each(function () { 74 $(this).click(function (e) { 75 e.preventDefault(); 76 77 if (!$(this).hasClass(tabsActiveClass)) { 78 var oldActives = tabSet.find('.' + tabsActiveClass); 79 80 oldActives.each(function () { 81 $(this).removeClass(tabsActiveClass); 82 }); 83 84 $(this).addClass(tabsActiveClass); 85 tabSet.find('.shop-tabs__content > div[data-id="' + $(this).data('id') + '"]').addClass(tabsActiveClass); 86 } 87 }); 88 }); 89 }); 90 } 91} 92 93// get available shipping methods for shipping address 94function initShippingMethods() { 95 var 96 invoiceAddressField = document.querySelector('#Form_OrderSummaryForm_InvoiceAddressID'), 97 shippingAddressField = document.querySelector('#Form_OrderSummaryForm_ShippingAddressID'), 98 shippingMethodsField = document.querySelector('#Form_OrderSummaryForm_ShippingMethodID'); 99 100 if (invoiceAddressField && shippingAddressField && shippingMethodsField) { 101 var 102 newInvoiceAddressLink = document.querySelector('#Form_OrderSummaryForm_InvoiceAddressID_Holder .description a'), 103 newShippingAddressLink = document.querySelector('#Form_OrderSummaryForm_ShippingAddressID_Holder .description a'); 104 105 if (newInvoiceAddressLink && newShippingAddressLink) { 106 newInvoiceAddressLink.onclick = function (e) { 107 handleAddressCreationLink(e, this,'invoice'); 108 }; 109 110 newShippingAddressLink.onclick = function (e) { 111 handleAddressCreationLink(e, this,'shipping'); 112 }; 113 } 114 115 var sameAsInvoiceAddress = false;
116 117 if (!shippingAddressField.value) { 118 sameAsInvoiceAddress = true; 119 } 120 121 if (sameAsInvoiceAddress) { 122 validateAndSetShippingMethods(invoiceAddressField.value); 123 } else { 124 validateAndSetShippingMethods(shippingAddressField.value); 125 } 126 127 invoiceAddressField.onchange = function(e) { handleAddressChange(e, this, 'invoice'); }; 128 shippingAddressField.onchange = function(e) { handleAddressChange(e, this, 'shipping'); }; 129 } 130 131 function handleAddressCreationLink(e, link, fieldType) { 132 e.preventDefault(); 133 134 var target = link.href; 135 136 if (fieldType === 'invoice' && shippingAddressField.value) { 137 target += shippingAddressField.value; 138 } else if (fieldType === 'shipping' && invoiceAddressField.value) { 139 target += invoiceAddressField.value; 140 } 141 142 window.location = target; 143 } 144 145 function handleAddressChange(e, field, fieldType) { 146 if (fieldType === 'shipping' && !field.value) { 147 sameAsInvoiceAddress = true; 148 } else if (fieldType === 'shipping' && field.value) { 149 sameAsInvoiceAddress = false; 150 } 151 152 if ( 153 (sameAsInvoiceAddress && fieldType === 'invoice') 154 || (!sameAsInvoiceAddress && fieldType === 'shipping') 155 ) { 156 validateAndSetShippingMethods(field.value); 157 } 158 } 159 160 function validateAndSetShippingMethods(addressID) { 161 shippingMethodsField.querySelectorAll('option').forEach(function (el) { 162 if (el.value) { 163 el.disabled = true; 164 } 165 }); 166 167 shippingMethodsField.value = ''; 168 169 if (addressID) { 170 var 171 endPoint = '/shop-api/v1/shippingmethodsforaddress/', 172 body = { 173 addressID: addressID 174 }; 175 176 xhrRequest(endPoint, body, function (response) { 177 if (response) { 178 response = JSON.parse(response); 179 180 shippingMethodsField.querySelectorAll('option').forEach(function (el) { 181 if (response.ids[el.value] !== undefined) { 182 el.disabled = false; 183 } 184 }); 185 186 var emptyOption = shippingMethodsField.querySelector('option[value=""]'); 187 188 if (response.selected) { 189 shippingMethodsField.value = response.selected; 190 emptyOption.innerHTML = '(Bitte auswählen)'; 191 } else { 192 emptyOption.innerHTML = '(Bitte wählen Sie eine andere Lieferadresse)'; 193 } 194 } 195 }); 196 } 197 } 198} 199 200// helper function for easier ajax request 201function xhrRequest(endPoint, body, callback) { 202 let xhr = new XMLHttpRequest(); 203 204 endPoint = endPoint.replace('//', '/'); 205 206 xhr.open('POST', endPoint); 207 xhr.send(JSON.stringify(body)); 208 209 xhr.onreadystatechange = function () { 210 if (xhrSuccess(xhr)) { 211 callback(xhr.responseText); 212 } 213 }; 214} 215 216// check if ajax request was successful 217function xhrSuccess(xhr) { 218 const 219 DONE = 4, // readyState 4 means the request is done. 220 OK = 200; // status 200 is a successful return. 221 222 if (xhr.readyState === DONE) { 223 if (xhr.status === OK) { 224 return true; 225 } else { 226 console.log('Error: ' + xhr.status); 227 } 228 } 229 230 return false; 231} 232
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.