PageSourceSearch

https://linux-magazine.pl/assets/c22b46f8/js/widgets/modalProductList.js

js linux-magazine.pl collected 2026-09-24 20:32:35 UTC 4,189 bytes, 98 lines download raw bytes

1/**
2 *  Widget ShopModalProductList main JS
3 *  @author Michal Malek <[email protected]>
4 */
5var modalProductList = modalProductList || {};
6
7modalProductList = function () {
8    var urlAjax = "\\shop\\shopWidgetAjax\\modalProductListContent";
9    var handlers = [];
10    var widgetClass = "shop-widget-container";
11    var triggerClass = "shop-modal-product-list";
12    var modalContentContainerClass = "shop-modal-product-list-content-container";
13    var quantityWidgetClass = "shop-quantity-changer-container";
14    var addToCartWidgetClass = "shop-product-add-to-cart-container";
15
16    var registerWidgetInstance = function (handler) {
17        var findInHandlers = function (handler) {
18            for (var i = 0; i < handlers.length; i++) {
19                if (handlers[i].id === handler.id) {
20                    return true;
21                }
22            }
23            return false;
24        };
25        if (! findInHandlers(handler)) {
26            handlers.push(handler);
27        }
28    };
29
30    var bindClickHandler = function (handler) {
31        handler.addEventListener('click', modalProductList.handleClick);
32    };
33
34    var registerQuantityChangers = function (handler) {
35        var widgetHandlers = handler.querySelectorAll("."+quantityWidgetClass);
36        for (var i = 0; i < widgetHandlers.length; i++) {
37            productQuantityChanger.register(widgetHandlers[i].dataset.widget);
38        }
39    };
40    var registerAddToCartTriggers = function (handler) {
41        var widgetHandlers = handler.querySelectorAll("."+addToCartWidgetClass);
42        for (var i = 0; i < widgetHandlers.length; i++) {
43            productAddToCart.register(widgetHandlers[i].dataset.widget);
44        }
45    };
46
47    return {
48        handleError: function (data) {
49            if (data.hasOwnProperty('widgetId')) {
50                var handler = document.getElementById(data.widgetId);
51                shopError.show(handler);
52            } else {
53                for (var i = 0; i < handlers.length; i++) {
54                    shopError.show(handlers[i]);
55                }
56            }
57        },
58        handleClick: function (eventHandler) {
59            var triggerHandler = shopHelpers.findAncestor(eventHandler.target, triggerClass);
60            var containerHandler = shopHelpers.findAncestor(triggerHandler, widgetClass);
61
62            var request = {
63                'products': triggerHandler.dataset.products || '',
64                'tags': triggerHandler.dataset.tags || '',
65                'additionalImgPath': triggerHandler.dataset.additionalimgscr || '',
66                'additionalModalTitle': triggerHandler.dataset.additionalmodaltitle || '',
67                'additionalModalTitle2': triggerHandler.dataset.additionalmodaltitle2 || '',
68                'containerId': containerHandler.dataset.container
69            };
70            shopLoading.show(containerHandler);
71            shopAjax.post(urlAjax, JSON.stringify(request)).then(function(response) {
72                shopModal.show(response);
73                var modalContentContainerHandler = document.querySelector("."+modalContentContainerClass);
74                if (modalContentContainerHandler !== null) {
75                    registerQuantityChangers(modalContentContainerHandler);
76                    registerAddToCartTriggers(modalContentContainerHandler);
77                }
78                shopLoading.hide(containerHandler);
79            }).catch(function() {
80                shopError.show(containerHandler);
81                shopLoading.hide(containerHandler);
82            });
83        },
84        register: function (hash) {
85            var containerHandler = shopHelpers.getContainerByHash(hash);
86            var triggerHandler = containerHandler.querySelector("."+triggerClass);
87            if (containerHandler !== null && triggerHandler !== null) {
88                bindClickHandler(triggerHandler);
89                registerWidgetInstance(containerHandler);
90            }
91        },
92        init: function () {
93            EventBus.on('shopWidgetsError', modalProductList.handleError);
94        }
95    }
96}();
97
98modalProductList.init();

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.