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.