PageSourceSearch

https://novitecgroup.com/assets/_combinedfiles/shop-4aa7b70.js

js novitecgroup.com collected 2026-10-02 17:06:35 UTC 7,768 bytes, 232 lines download raw bytes

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.