1const TEMPLATE_PATH = "/local/templates/elseda"; 2 3 4let cartQueue = Promise.resolve(); 5let cartBusy = false; 6 7function setCartBusy(state) { 8 cartBusy = state; 9 $(".js-cart-modal").toggleClass("div--loading", state); 10 $(".js-cart-item-remove, .js-cart-quantity-minus, .js-cart-quantity-plus").prop( 11 "disabled", 12 state, 13 ); 14} 15 16function updateCartCount() { 17 var container = $(".js-header-cart-count"); 18 var summary = $(".js-cart-modal-summary"); 19 20 if (container.length) { 21 container.empty().hide(); 22 23 if (summary.length && summary.data("cart-quantity")) { 24 container.text(summary.data("cart-quantity")).show(); 25 } 26 } 27} 28 29$(document).ready(() => { 30 updateCartCount(); 31}); 32 33$(document).on("click", ".js-add-to-cart", function (e) { 34 e.preventDefault(); 35 36 var quantityField = $(this).closest("div").find(".js-add-to-cart-quantity"); 37 38 addToCartData( 39 [ 40 { 41 PRODUCT_ID: $(this).data("product-id"), 42 QUANTITY: 43 quantityField.length && quantityField.val() 44 ? parseInt(quantityField.val(), 10) || 1 45 : 1, 46 }, 47 ], 48 "Ð¢Ð¾Ð²Ð°Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ в коÑзинÑ", 49 ); 50}); 51 52$(document).on("click", ".js-cart-item-remove", function (e) { 53 e.preventDefault(); 54 if (cartBusy) return; 55 56 var item = $(this).closest(".js-cart-item"); 57 if (!item.length) return; 58 59 addToCartData([ 60 { 61 BASKET_ID: item.data("id"), 62 PRODUCT_ID: item.data("product-id"), 63 QUANTITY: 0, 64 }, 65 ]); 66}); 67 68$(document).on("click", ".js-cart-quantity-minus", function (e) { 69 e.preventDefault(); 70 if (cartBusy) return; 71 72 var input = $(this).next("input"); 73 var item = $(this).closest(".js-cart-item"); 74 if (!input.length || !item.length) return; 75 76 var quantity = parseInt(input.val(), 10) || 1; 77 if (quantity <= 1) return; 78 79 quantity--; 80 input.val(quantity); 81 82 addToCartData([ 83 { 84 BASKET_ID: item.data("id"), 85 PRODUCT_ID: item.data("product-id"), 86 QUANTITY: quantity, 87 }, 88 ]); 89}); 90 91$(document).on("click", ".js-cart-quantity-plus", function (e) { 92 e.preventDefault(); 93 if (cartBusy) return; 94 95 var input = $(this).prev("input"); 96 var item = $(this).closest(".js-cart-item"); 97 if (!input.length || !item.length) return; 98 99 var quantity = (parseInt(input.val(), 10) || 0) + 1; 100 input.val(quantity); 101 102 addToCartData([ 103 { 104 BASKET_ID: item.data("id"), 105 PRODUCT_ID: item.data("product-id"), 106 QUANTITY: quantity, 107 }, 108 ]); 109}); 110 111function clearCartErrors() {} 112 113function showCartErrors() {} 114 115function updateCartModal() { 116 var basketClass = ".js-cart-modal"; 117 118 if (!$(basketClass).length) { 119 return Promise.resolve(); 120 } 121 122 $(basketClass).addClass("div--loading"); 123 124 return new Promise(function (resolve) { 125 $.get(`${TEMPLATE_PATH}/ajax/basket.php`, function (response) { 126 var basketScroll = $(basketClass).find(".float-menu-body").scrollTop(); 127 128 $(basketClass).replaceWith(function () { 129 return response; 130 }); 131 132 $(basketClass).find(".float-menu-body").scrollTop(basketScroll); 133 updateCartCount(); 134 }) 135 .always(function () { 136 $(basketClass).removeClass("div--loading"); 137 resolve(); 138 }); 139 }); 140} 141 142 143function addToCartData(data, message) { 144 clearCartErrors(); 145 146 cartQueue = cartQueue.then(function () { 147 setCartBusy(true); 148 149 return new Promise(function (resolve) { 150 $.post(`${TEMPLATE_PATH}/ajax/add-to-cart.php`, { ITEMS: data }) 151 .done(function (response) { 152 153 if (response && response.desync && response.desync.length) { 154 updateCartModal().then(resolve); 155 return; 156 } 157 158 if (message) { 159 alert(message); 160 } 161 162 updateCartModal().then(resolve); 163 }) 164 .fail(function (error) { 165 var payload = error && error.responseJSON; 166 var errorText = payload && payload.error; 167 var errorCode = payload && payload.error_code; 168 var errorSizes = payload && payload.error_size; 169 170 171 if (errorCode === "NOTHING_APPLIED" || errorCode === "BAD_SESSID") { 172 updateCartModal().then(resolve); 173 return; 174 } 175 176 if (errorText) { 177 alert(errorText); 178 } 179 180 showCartErrors(errorCode, errorSizes); 181 updateCartModal().then(resolve); 182 }) 183 .always(function () { 184 setCartBusy(false); 185 }); 186 }); 187 }); 188 189 return cartQueue; 190} 191 192window.digiLayer = { 193 cartState() {
194 return window.jsModalCartAnyQuery || {}; 195 }, 196 ddToCart(offer_id, amount) { 197 return addToCartData([ 198 { 199 PRODUCT_ID: offer_id, 200 QUANTITY: amount, 201 }, 202 ]).then(() => true); 203 }, 204 removeFromCart(offer_id) { 205 return addToCartData([ 206 { 207 PRODUCT_ID: offer_id, 208 QUANTITY: 0, 209 }, 210 ]).then(() => true); 211 }, 212};
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.