PageSourceSearch

https://town-country-market.com/wp-content/themes/svt/js/cart.js?ver=1791092771

js town-country-market.com collected 2026-10-04 05:46:45 UTC 19,489 bytes, 462 lines download raw bytes

1(function($) {
2
3  $(document).ready(function() {
4
5    const api = new HomesomeAPI(hsdata.base_url, hsdata.hs_api_key);
6
7	var addToCart = function(products, currentElement, isUpdating = false) {
8        var qtyBox = $(currentElement).parents().closest('.svt-product-add-cart');
9        qtyBox.addClass('loading');
10        var priceList = qtyBox.data('pricelist');
11        if(typeof priceList == "undefined" || priceList == null || priceList == '') {
12            priceList = getCookie('selectedPriceList');
13        }
14        var user = localStorage.getItem('user');
15        user = JSON.parse(user);
16
17        email = user.email;
18        email = email.replace('^','');
19
20        let body = {
21            'items': products.products
22        }
23
24        let headers = {
25            'emailid': email,
26            'authToken': user.authToken,
27            'location': getCookie('selectedLocation'),
28            'pricelist': priceList,
29            'Content-Type': 'application/json'
30        };
31        
32        
33        api.postData('/user/basket',body,headers).then(response => {
34            qtyBox.removeClass('loading');
35            let msg = 'Product added to cart successfully.';
36            let productCount = products.products.length;
37            if(productCount > 1) {
38                msg = productCount+' products added to cart successfully.';
39            }
40            if(isUpdating == true) {
41                msg = 'Quantity updated successfully.';
42            }
43            showToastMsg(msg, 'success');
44            if(response.message == "Success") {
45                updateCartStorage( priceList );
46            }
47        })
48        .catch(error => {
49            qtyBox.removeClass('loading');
50            console.error('Error posting data:', error);
51        });
52	}
53
54    function updateCartStorage( priceList ) {
55        var user = localStorage.getItem('user');
56        user = JSON.parse(user);
57
58        email = user.email;
59        email = email.replace('^','');
60
61        if(typeof priceList == "undefined" || priceList == null || priceList == '') {
62            priceList = getCookie('selectedPriceList');
63        }
64
65        let headers = {
66            'emailid': email,
67            'authToken': user.authToken,
68            'location': getCookie('selectedLocation'),
69            'pricelist': priceList,
70            'Content-Type': 'application/json'
71        };
72        
73        
74        api.getData('/user/basket?lite=true',headers).then(response => {
75            if(response.basketItems) {
76                setBasket(response);
77                var cartCount = (response.basketItems).length;
78                if(cartCount > 0) {
79                    $('.hs-cart-count').html(cartCount);
80                    $('.hs-cart-count').addClass('active');
81                }
82                else {
83                    $('.hs-cart-count').removeClass('active');
84                }
85                if(allCoupons != null && allCoupons.length) {
86                    if($('.svt-coupon-eligibles-popup').is(':visible')) {
87                        var id = $('.svt-coupon-eligibles-popup').attr('data-coupon');
88                        var club = $('.svt-coupon-eligibles-popup').attr('data-club');
89                        if(typeof id !== "undefined" && id != null) {
90                            const coupon = allCoupons.find(coupon => coupon.couponid == id);
91                            updateCouponPopupPercentage(coupon);
92                        }
93                        if(typeof club !== "undefined" && club != null) {
94                            club = JSON.parse(club);
95                            updateClubPopupPercentage(club);
96                        }
97                    }
98                    if($('.hs-coupon-detail-wrap').length) {
99                        const id = getUrlParameter('id');
100                        if(typeof id !== "undefined" && id != null) {
101                            const coupon = allCoupons.find(coupon => coupon.couponid == id);
102                            updateCouponPopupPercentage(coupon);
103                        }
104                    }
105                }
106            }
107            // console.log('Get Response:', response);
108        })
109        .catch(error => {
110            console.error('Error posting data:', error);
111        });
112    }
113
114    $(document).on('click','.hs-mini-cart',function() {
115        var link = $(this).attr('href');
116        const loggedIn = isUserLoggedIn();
117        if(loggedIn == false) {
118            $('.svt-login-popup').fadeIn();
119            $('.bouncing-loader').show();
120            var src = $('.svt-login-popup').find('.svt-popup-embed').attr('data-src');
121            $('.svt-login-popup').find('.svt-popup-embed').attr('src',src);
122            var iframe = $('#popup-login-embed').get(0);
123            $(iframe).attr('data-redirect',link);
124            iframe.onload = function() {
125                $('.bouncing-loader').hide();
126                selectedLocation = sessionStorage.getItem('ls.location');
127                selectedPricelist = sessionStorage.getItem('ls.selectedPriceList');
128                iframe.contentWindow.postMessage(
129                    {
130                        type: 'INIT', 
131                        timestamp: Date.now(), 
132                        payload:{
133                            selectedLocation: selectedLocation,
134                            selectedPricelist: selectedPricelist
135                        }
136                    },'*');
137            }
138            return false;
139        }
140    });
141
142    $(document).on('click','.add-to-cart-action',function() {
143        var $this = $(this);
144        const loggedIn = isUserLoggedIn();
145        if($this.hasClass('redirectpdp')) {
146            window.location.href = $this.attr('href');
147        }
148        else {
149            if(loggedIn == false) {
150                $('.svt-login-popup').fadeIn();
151                $('.bouncing-loader').show();
152                var src = $('.svt-login-popup').find('.svt-popup-embed').attr('data-src');
153                $('.svt-login-popup').find('.svt-popup-embed').attr('src',src);
154                var iframe = $('#popup-login-embed').get(0);
155                iframe.onload = function() {
156                    $('.bouncing-loader').hide();
157                    selectedLocation = sessionStorage.getItem('ls.location');
158                    selectedPricelist = sessionStorage.getItem('ls.selectedPriceList');
159                    iframe.contentWindow.postMessage(
160                        {
161                            type: 'INIT', 
162                            timestamp: Date.now(), 
163                            payload:{
164                                selectedLocation: selectedLocation,
165                                selectedPricelist: selectedPricelist
166                            }
167                        },'*');
168                }
169            }
170            else {
171                var parent = $(this).parents().closest('.svt-product-add-cart');
172                var unitQuantity = parent.data('unit');
173                var productObj = parent.find('[name="productObj"]').val();
174                productObj = JSON.parse(productObj);
175                var type = productObj.type;
176                type = type.replace(/[^a-zA-Z0-9\-]/g, "");
177                var subType = productObj.subType;
178                subType = subType.replace(/[^a-zA-Z0-9\-]/g, "");
179                var qty = unitQuantity;
180                parent.addClass('active-qty');
181                let product = {
182                    "name": productObj.name,
183                    "canReplace": productObj.canReplace !== undefined ? productObj.canReplace : true,
184                    "displayName": productObj.displayName,
185                    "instructions": productObj.instructions || "",
186                    "isCustomItem": productObj.isCustomItem !== undefined ? productObj.isCustomItem : false,
187                    "organic": productObj.organic,
188                    "quantity": qty,
189                    "type": type,
190                    "subType": subType
191                };	
192                var products = {};
193                var productsArr = [];
194                productsArr.push(product);
195                products.products = productsArr;
196                addToCart( products, $this );
197            }
198        }
199		return false;
200    });
201
202    $(document).on('click','.svt-product-delete',function() {
203        var mainParent = $(this).parents().closest('.svt-product-add-cart');
204        var parent = $(this).parents().closest('.svt-product-qty');
205        var qtyInput = parent.find('.qty-value');
206        var unitQuantity = mainParent.data('unit');
207        qtyInput.html(unitQuantity);
208        mainParent.removeClass('active-qty');
209        var productObj = mainParent.find('[name="productObj"]').val();
210        productObj = JSON.parse(productObj);
211
212        mainParent.addClass('loading');
213
214        var priceList = mainParent.data('pricelist');
215        if(typeof priceList == "undefined" || priceList == null || priceList == '') {
216            priceList = getCookie('selectedPriceList');
217        }
218
219        var user = localStorage.getItem('user');
220        user = JSON.parse(user);
221
222        email = user.email;
223        email = email.replace('^','');
224
225        let headers = {
226            'emailid': email,
227            'authToken': user.authToken,
228            'location': getCookie('selectedLocation'),
229            'pricelist': priceList,
230            'Content-Type': 'application/json'
231        };
232        
233        
234        api.deleteData('/user/basket?itemName='+productObj.name,{},headers).then(response => {
235            mainParent.removeClass('loading');
236            if(response.message == "Success") {
237                showToastMsg('Item removed successfully.', 'success');
238                updateCartStorage( priceList );
239            }
240        })
241        .catch(error => {
242            mainParent.removeClass('loading');
243            console.error('Error posting data:', error);
244        });
245        return false;
246    });
247
248    $(document).on('click','.svt-minus-qty',function() {
249        var $this = $(this);
250        var mainParent = $(this).parents().closest('.svt-product-add-cart');
251        var minQuantity = mainParent.data('minqty');
252        var parent = $(this).parents().closest('.svt-product-qty');
253        parent.addClass('loading');
254        var unitQuantity = mainParent.data('unit');
255        var qtyInput = parent.find('.qty-value');
256        var qty = parseFloat(qtyInput.html());
257        if(qty > minQuantity && qty > unitQuantity) {
258            qty = qty - unitQuantity;
259        }
260        else {
261            qty = unitQuantity;
262        }
263        if(qty == unitQuantity) {
264            parent.removeClass('active-minus');
265        }
266        qtyInput.html(qty);
267        var productObj = mainParent.find('[name="productObj"]').val();
268        productObj = JSON.parse(productObj);
269        var type = productObj.type;
270        type = type.replace(/[^a-zA-Z0-9\-]/g, "");
271        var subType = productObj.subType;
272        subType = subType.replace(/[^a-zA-Z0-9\-]/g, "");
273        let product = {
274            "name": productObj.name,
275            "canReplace": productObj.canReplace !== undefined ? productObj.canReplace : true,
276            "displayName": productObj.displayName,
277            "instructions": productObj.instructions || "",
278            "isCustomItem": productObj.isCustomItem !== undefined ? productObj.isCustomItem : false,
279            "organic": productObj.organic,
280            "quantity": qty,
281            "type": type,
282            "subType": subType
283        };	
284        var products = {};
285        var productsArr = [];
286        productsArr.push(product);
287        products.products = productsArr;
288        addToCart( products, $this, true );
289        return false;
290    });
291
292    $(document).on('click','.svt-qty-plus',function() {
293        var $this = $(this);
294        var mainParent = $(this).parents().closest('.svt-product-add-cart');
295        var maxQuantity = mainParent.data('maxqty');
296        var parent = $(this).parents().closest('.svt-product-qty');
297        var unitQuantity = mainParent.data('unit');
298        var qtyInput = parent.find('.qty-value');
299        var qty = parseFloat(qtyInput.html());
300        if(maxQuantity > 0 && qty <= maxQuantity) {
301            qty = qty + unitQuantity;
302        }
303        else if(maxQuantity == 0) {
304            qty = qty + unitQuantity;
305        }
306        if(qty > unitQuantity) {
307            parent.addClass('active-minus');
308        }
309        qtyInput.html(qty);
310        var productObj = mainParent.find('[name="productObj"]').val();
311        productObj = JSON.parse(productObj);
312        var type = productObj.type;
313        type = type.replace(/[^a-zA-Z0-9\-]/g, "");
314        var subType = productObj.subType;
315        subType = subType.replace(/[^a-zA-Z0-9\-]/g, "");
316        product = {
317            "name": productObj.name,
318            "canReplace": productObj.canReplace !== undefined ? productObj.canReplace : true,
319            "displayName": productObj.displayName,
320            "instructions": productObj.instructions || "",
321            "isCustomItem": productObj.isCustomItem !== undefined ? productObj.isCustomItem : false,
322            "organic": productObj.organic,
323            "quantity": qty,
324            "type": type,
325            "subType": subType
326        };	
327        var products = {};
328        var productsArr = [];
329        productsArr.push(product);
330        products.products = productsArr;
331        addToCart( products, $this, true );
332        return false;
333    });
334
335    $(document).on('click','.list-bulk-add-cart',function() {
336        var cartproducts = {};
337        var productsArr = [];
338        $('.svt-product-box .svt-product-bulk-action .svt-custom-checkbox input').each(function() {
339            if(this.checked) {
340                productObj = $(this).val();
341                productObj = JSON.parse(productObj);
342                var type = productObj.type;
343                type = type.replace(/[^a-zA-Z0-9\-]/g, "");
344                var subType = productObj.subType;
345                subType = subType.replace(/[^a-zA-Z0-9\-]/g, "");
346                product = {
347                    "name": productObj.name,
348                    "canReplace": productObj.canReplace !== undefined ? productObj.canReplace : true,
349                    "displayName": productObj.displayName,
350                    "instructions": productObj.instructions || "",
351                    "isCustomItem": productObj.isCustomItem !== undefined ? productObj.isCustomItem : false,
352                    "organic": productObj.organic,
353                    "quantity": 1,
354                    "type": type,
355                    "subType": subType
356                };
357                productsArr.push(product);
358            }
359        });
360        cartproducts.products = productsArr;
361        // console.log(cartproducts);
362        addToCart( cartproducts );
363        return false;
364    });
365    
366    $(document).on('click','.svt-order-again a',function() {
367        var parent = $(this).parents().closest('.svt-all-orders-list-item');
368        var cartproducts = {};
369        var productsArr = [];
370        parent.find('.svt-order-items input[name="productObj"]').each(function() {
371            productObj = $(this).val();
372            if(productObj != '') {
373                productObj = JSON.parse(productObj);            
374                var type = productObj.type;
375                type = type.replace(/[^a-zA-Z0-9\-]/g, "");
376                var subType = productObj.subType;
377                subType = subType.replace(/[^a-zA-Z0-9\-]/g, "");
378
379                let quantity = productObj.quantity;
380                    var unitIncrement = productObj?.unitIncrement || 1;
381                    let weightUnit = getWeightUnit();
382                    let finalQuantity = quantity;
383                    let sellByQty = productObj?.sellByQty || false
384                    if(productObj.unit == weightUnit && sellByQty == false) {
385                        unitIncrement = productObj?.unitIncrement || 0.5;
386                        finalQuantity = (Math.ceil(parseFloat((quantity / unitIncrement).toFixed(2))) * unitIncrement).toFixed(2);
387                    }
388
389                product = {
390                    "name": productObj.name,
391                    "canReplace": productObj.canReplace,
392                    "displayName": productObj.displayName,
393                    "instructions": productObj.instructions,
394                    "isCustomItem": productObj.isCustomItem,
395                    "organic": productObj.organic,
396                    "quantity": parseFloat(finalQuantity),
397                    "type": type,
398                    "subType": subType
399                };
400                productsArr.push(product);
401            }
402        });
403        cartproducts.products = productsArr;
404        addToCart( cartproducts );
405        return false;
406    });
407
408    $(document).on('click','.add-to-cart-bulk',function() {
409        const loggedIn = isUserLoggedIn();
410        if(loggedIn == false) {
411            $('.svt-login-popup').fadeIn();
412            $('.bouncing-loader').show();
413            var src = $('.svt-login-popup').find('.svt-popup-embed').attr('data-src');
414            $('.svt-login-popup').find('.svt-popup-embed').attr('src',src);
415            var iframe = $('#popup-login-embed').get(0);
416            $(iframe).addClass('from-add-to-cart-bulk');
417            iframe.onload = function() {
418                $('.bouncing-loader').hide();
419                selectedLocation = sessionStorage.getItem('ls.location');
420                selectedPricelist = sessionStorage.getItem('ls.selectedPriceList');
421                iframe.contentWindow.postMessage(
422                    {
423                        type: 'INIT', 
424                        timestamp: Date.now(), 
425                        payload:{
426                            selectedLocation: JSON.parse(selectedLocation),
427                            selectedPricelist: JSON.parse(selectedPricelist)
428                        }
429                    },'*');
430            }
431        }
432        else {
433            var products = {};
434            var productsArr = [];
435            $('.svt-product-box .svt-product-add-cart input[name="productObj"]').each(function() {
436                productObj = $(this).val();
437                productObj = JSON.parse(productObj);
438                var type = productObj.type;
439                type = type.replace(/[^a-zA-Z0-9\-]/g, "");
440                var subType = productObj.subType;
441                subType = subType.replace(/[^a-zA-Z0-9\-]/g, "");
442                product = {
443                    "name": productObj.name,
444                    "canReplace": true,
445                    "displayName": productObj.displayName,
446                    "instructions": "",
447                    "isCustomItem": false,
448                    "organic": false,
449                    "quantity": 1,
450                    "type": type,
451                    "subType": subType
452                };
453                productsArr.push(product);
454            });
455            products.products = productsArr;
456            addToCart( products );
457        }
458        return false;
459    });
460  });
461
462})(jQuery);

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.