1/* 2 * Tibnor AB B2B Commerce Solution 3 * 4 * Copyright (c) 2018-2019. All rights reserved. 5 * 6 * This software is the confidential and proprietary information of Tibnor AB. 7 */ 8 9ACC.savedcarts = { 10 11 _autoload: [ 12 ["bindRestoreSavedCartClick", $(".js-restore-saved-cart").length != 0], 13 ["bindDeleteSavedCartLink", $('.js-delete-saved-cart').length != 0], 14 ["bindDeleteConfirmLink", $('.js-savedcart_delete_confirm').length != 0], 15 ["bindSaveCartForm", $(".js-save-cart-link").length != 0 || $(".js-update-saved-cart").length != 0], 16 ["bindUpdateUploadingSavedCarts", $(".js-uploading-saved-carts-update").length != 0] 17 ], 18 19 $savedCartRestoreBtn: {}, 20 $currentCartName: {}, 21 22 bindRestoreSavedCartClick: function () { 23 $(".js-restore-saved-cart").click(function (event) { 24 25 event.preventDefault(); 26 var popupTitle = $(this).data('restore-popup-title'); 27 var cartId = $(this).data('savedcart-id'); 28 var url = ACC.config.encodedContextPath + '/my-account/saved-carts/' + encodeURIComponent(cartId) + '/restore'; 29 30 var popupTitleHtml = ACC.common.encodeHtml(popupTitle); 31 $.get(url, undefined, undefined, 'html').done(function (data) { 32 ACC.colorbox.open(popupTitleHtml, { 33 html: data, 34 width: 500, 35 onComplete: function () { 36 ACC.common.refreshScreenReaderBuffer(); 37 ACC.savedcarts.bindRestoreModalHandlers(); 38 ACC.savedcarts.bindPostRestoreSavedCartLink(); 39 }, 40 onClosed: function () { 41 ACC.common.refreshScreenReaderBuffer(); 42 } 43 }); 44 }); 45 }); 46 }, 47 48 bindRestoreModalHandlers: function () { 49 50 ACC.savedcarts.$savedCartRestoreBtn = $('.js-save-cart-restore-btn'); 51 ACC.savedcarts.$currentCartName = $('.js-current-cart-name'); 52 53 $(".js-prevent-save-active-cart").on('change', function (event) { 54 if ($(this).prop('checked') === true) { 55 ACC.savedcarts.$currentCartName.attr('disabled', 'disabled'); 56 ACC.savedcarts.$savedCartRestoreBtn.removeAttr('disabled'); 57 } else { 58 ACC.savedcarts.$currentCartName.removeAttr('disabled'); 59 var inputVal = ACC.savedcarts.$currentCartName.val(); 60 if (inputVal == "" && inputVal.length === 0) { 61 ACC.savedcarts.$savedCartRestoreBtn.attr('disabled', 'disabled'); 62 } 63 } 64 }); 65 66 ACC.savedcarts.$currentCartName.on('focus', function (event) { 67 $('.js-restore-current-cart-form').removeClass('has-error'); 68 $('.js-restore-error-container').html(''); 69 }); 70 71 ACC.savedcarts.$currentCartName.on('blur', function (event) { 72 if (this.value == "" && this.value.length === 0) { 73 ACC.savedcarts.$savedCartRestoreBtn.attr('disabled', 'disabled'); 74 } else { 75 ACC.savedcarts.$savedCartRestoreBtn.removeAttr('disabled'); 76 } 77 }); 78 }, 79 80 bindPostRestoreSavedCartLink: function () { 81 var keepRestoredCart = true; 82 var preventSaveActiveCart = false; 83 84 $(document).on("click", '.js-keep-restored-cart', function (event) { 85 keepRestoredCart = $(this).prop('checked'); 86 }); 87 88 $(document).on("click", '.js-prevent-save-active-cart', function (event) { 89 preventSaveActiveCart = $(this).prop('checked'); 90 }); 91 92 $(document).on("click", '.js-save-cart-restore-btn', function (event) { 93 94 event.preventDefault(); 95 var cartName = $('#activeCartName').val(); 96 var url = $(this).data('restore-url'); 97 var postData = { 98 preventSaveActiveCart: preventSaveActiveCart, 99 keepRestoredCart: keepRestoredCart, 100 cartName: cartName 101 }; 102 $.post(url, postData, undefined, 'html').done(function (result, data, status) { 103 if (status.status === 200) {
104 var url = ACC.config.encodedContextPath + "/cart" 105 window.location.replace(url); 106 } else { 107 var errorMsg = status.responseText.slice(1, -1); 108 $('.js-restore-current-cart-form').addClass('has-error'); 109 $('.js-restore-error-container').html(errorMsg); 110 $('.js-savedcart_restore_confirm_modal').colorbox.resize(); 111 } 112 }); 113 }); 114 115 $(document).on("click", '.js-cancel-restore-btn', function (event) { 116 ACC.colorbox.close(); 117 }); 118 }, 119 120 bindDeleteSavedCartLink: function () { 121 $(document).on("click", '.js-delete-saved-cart', function (event) { 122 event.preventDefault(); 123 var cartId = $(this).data('savedcart-id'); 124 var popupTitle = $(this).data('delete-popup-title'); 125 var popupTitleHtml = ACC.common.encodeHtml(popupTitle); 126 127 ACC.colorbox.open(popupTitleHtml, { 128 inline: true, 129 className: "js-savedcart_delete_confirm_modal", 130 href: "#popup_confirm_savedcart_delete_" + cartId, 131 width: '500px', 132 onComplete: function () { 133 $(this).colorbox.resize(); 134 } 135 }); 136 }); 137 }, 138 139 bindDeleteConfirmLink: function () { 140 $(document).on("click", '.js-savedcart_delete_confirm', function (event) { 141 event.preventDefault(); 142 var cartId = $(this).data('savedcart-id'); 143 var url = ACC.config.encodedContextPath + '/my-account/saved-carts/' + encodeURIComponent(cartId) + '/delete'; 144 $.ajax({ 145 url: url, 146 type: 'DELETE', 147 success: function (response) { 148 ACC.colorbox.close(); 149 var url = ACC.config.encodedContextPath + "/my-account/saved-carts" 150 window.location.replace(url); 151 } 152 }); 153 }); 154 155 $(document).on("click", '.js-savedcart_delete_confirm_cancel', function (event) { 156 ACC.colorbox.close(); 157 }); 158 }, 159 160 bindSaveCartForm: function () { 161 let saveCart = false; 162 const popupMgs = (reload) => { 163 $.colorbox({ 164 href: "#saveCartMessage", 165 inline: true, 166 maxWidth: "500px", 167 opacity: 0.7, 168 close: '', 169 onClosed: function () { 170 $("#saveCartMessage").empty(); 171 reload && location.reload(); 172 } 173 }); 174 } 175 const showSaveCartFormCallback = function () { 176 const form = $('#saveCartForm'); 177 const title = $('#saveCart').data("saveCartTitle"); 178 const titleHtml = ACC.common.encodeHtml(title); 179 const { messageTpl, getACCText } = ACC.globalmessage; 180 181 //open form popup 182 ACC.colorbox.open(titleHtml, { 183 href: "#saveCart", 184 inline: true, 185 width: "620px", 186 onOpen: function () { 187 if ($('#saveCartName').val()) { 188 ACC.savedcarts.disableSaveCartButton(false); 189 } 190 }, 191 onComplete: function () { 192 $(this).colorbox.resize(); 193 saveCart = false; 194 }, 195 onClosed: function () { 196 if (saveCart) { 197 const data = decodeURI(form.serialize()) 198 .split("&") 199 .reduce(function (acc, el) { 200 const item = el.split("="); 201 acc[item[0]] = item[1]; 202 return acc; 203 }, {}); 204 205 $.ajax({ 206 'type': 'POST', 207 'url': '/rest/cart/save', 208 'data': data, 209 success: (_, status) => { 210 const texts = [{ 211 text: ACC.text.basket.save.success, 212 args: [data.name] 213 }]; 214 $("#saveCartMessage").html(messageTpl(status, texts)); 215 216 popupMgs(true); 217 }, 218 error: (errors, status) => { 219 ACC.navigation.handleSessionError(errors, 403); 220 const texts = [ 221 { 222 text: ACC.text.basket.save.error, 223 args: [data?.name || 'new saved cart'] 224 }, 225 ...errors.responseJSON.errors.map(e => { 226 const code = `${e.code}`.replace(`.tibnorSavedCartsForm.${e.field}`, ""); 227 const text = getACCText(code); 228 return { text }; 229 }) 230 231 ] 232 $("#saveCartMessage").html(messageTpl(status, texts)); 233 popupMgs(false) 234 } 235 }); 236 } 237 238 document.getElementById('saveCartForm').reset(); 239 ACC.savedcarts.disableSaveCartButton(true); 240 ACC.savedcarts.charactersLeftInit(); 241 } 242 }); 243 }; 244 245 ACC.savedcarts.charactersLeftInit(); 246 247 $(document).on("click", ".js-save-cart-link, .js-update-saved-cart", function (e) { 248 e.preventDefault(); 249 showSaveCartFormCallback(); 250 }); 251 252 $(document).on("click", '#saveCart #cancelSaveCartButton', function (e) { 253 e.preventDefault(); 254 $.colorbox.close(); 255 }); 256 257 $('#saveCartName').keyup(function () { 258 // enable the save cart button 259 $('#saveCart #saveCartButton').prop('disabled', this.value.trim() == "" ? true : false); 260 // limit the text length 261 var maxchars = 255; 262 var value = $('#localized_val').attr('value'); 263 var tlength = $(this).val().length; 264 remain = maxchars - parseInt(tlength); 265 $('#remain').text(value + ' : ' + remain); 266 }); 267 268 $('#saveCartDescription').keyup(function () { 269 var maxchars = 255; 270 var value = $('#localized_val').attr('value'); 271 var tlength = $(this).val().length; 272 remain = maxchars - parseInt(tlength); 273 $('#remainTextArea').text(value + ' : ' + remain); 274 }); 275 276 $(document).on("click", '#saveCart #saveCartButton', function (e) { 277 e.preventDefault(); 278 saveCart = true; 279 $.colorbox.close(); 280 }); 281 }, 282 283 charactersLeftInit: function () { 284 $('#remain').text($('#localized_val').attr('value') + ' : 255'); 285 $('#remainTextArea').text($('#localized_val').attr('value') + ' : 255'); 286 }, 287 288 disableSaveCartButton: function (value) { 289 $('#saveCart #saveCartButton').prop('disabled', value); 290 }, 291 292 293 bindUpdateUploadingSavedCarts: function () { 294 var cartIdRowMapping = $(".js-uploading-saved-carts-update").data("idRowMapping"); 295 var refresh = $(".js-uploading-saved-carts-update").data("refreshCart"); 296 if (cartIdRowMapping && refresh) { 297 var interval = $(".js-uploading-saved-carts-update").data("refreshInterval"); 298 var arrCartIdAndRow = cartIdRowMapping.split(','); 299 var mapCartRow = new Object(); 300 var cartCodes = []; 301 for (i = 0; i < arrCartIdAndRow.length; i++) { 302 var arrValue = arrCartIdAndRow[i].split(":"); 303 if (arrValue != "") { 304 mapCartRow[arrValue[0]] = arrValue[1]; 305 cartCodes.push(arrValue[0]); 306 } 307 } 308 309 if (cartCodes.length > 0) { 310 setTimeout(function () { 311 ACC.savedcarts.refreshWorker(cartCodes, mapCartRow, interval) 312 }, interval); 313 } 314 } 315 }, 316 317 318 refreshWorker: function (cartCodes, mapCartRow, interval) { 319 $.ajax({ 320 dataType: "json", 321 url: ACC.config.encodedContextPath + '/my-account/saved-carts/uploadingCarts', 322 data: { 323 cartCodes: cartCodes 324 }, 325 type: "GET", 326 traditional: true, 327 success: function (data) { 328 if (data != undefined) { 329 var hidden = "hidden"; 330 var rowId = "#row-"; 331 for (i = 0; i < data.length; i++) { 332 var cart = data[i]; 333 334 var index = $.inArray(cart.code, cartCodes); 335 if (index > -1) { 336 cartCodes.splice(index, 1) 337 } 338 var rowIdIndex = mapCartRow[cart.code]; 339 if (rowIdIndex != undefined) { 340 var rowSelector = rowId + rowIdIndex; 341 $(document).find(rowSelector + " .js-saved-cart-name").removeClass("not-active"); 342 $(document).find(rowSelector + " .js-saved-cart-date").removeClass("hidden"); 343 $(document).find(rowSelector + " .js-file-importing").remove(); 344 $(document).find(rowSelector + " .js-saved-cart-description").text(cart.description); 345 var numberOfItems = cart.entries.length; 346 $(document).find(rowSelector + " .js-saved-cart-number-of-items").text(numberOfItems); 347 $(document).find(rowSelector + " .js-saved-cart-total").text(cart.totalPrice.formattedValue); 348 if (numberOfItems > 0) { 349 $(document).find(rowSelector + " .js-restore-saved-cart").removeClass(hidden); 350 } 351 $(document).find(rowSelector + " .js-delete-saved-cart").removeClass(hidden); 352 } 353 } 354 } 355 ; 356 357 if (cartCodes.length > 0) { 358 setTimeout(function () { 359 ACC.savedcarts.refreshWorker(cartCodes, mapCartRow, interval) 360 }, interval); 361 } 362 } 363 }) 364 } 365}
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.