PageSourceSearch

https://www.tibnor.se/_ui/tibnor/common/js/acc.savedcarts.js

js tibnor.se collected 2026-09-29 10:43:41 UTC 15,065 bytes, 365 lines download raw bytes

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.