PageSourceSearch

https://eco-vodokanal.ru/assets/components/minishop2/js/web/default.js?v=f4300f1c88

js eco-vodokanal.ru collected 2026-10-08 09:58:33 UTC 25,960 bytes, 614 lines download raw bytes

1(function (window, document, $, miniShop2Config) {
2    var miniShop2 = miniShop2 || {};
3    miniShop2Config.callbacksObjectTemplate = function () {
4        return {
5            // return false to prevent send data
6            before: [],
7            response: {
8                success: [],
9                error: []
10            },
11            ajax: {
12                done: [],
13                fail: [],
14                always: []
15            }
16        }
17    };
18    miniShop2.Callbacks = miniShop2Config.Callbacks = {
19        Cart: {
20            add: miniShop2Config.callbacksObjectTemplate(),
21            remove: miniShop2Config.callbacksObjectTemplate(),
22            change: miniShop2Config.callbacksObjectTemplate(),
23            clean: miniShop2Config.callbacksObjectTemplate()
24        },
25        Order: {
26            add: miniShop2Config.callbacksObjectTemplate(),
27            getcost: miniShop2Config.callbacksObjectTemplate(),
28            clean: miniShop2Config.callbacksObjectTemplate(),
29            submit: miniShop2Config.callbacksObjectTemplate(),
30            getrequired: miniShop2Config.callbacksObjectTemplate()
31        },
32    };
33    miniShop2.Callbacks.add = function (path, name, func) {
34        if (typeof func != 'function') {
35            return false;
36        }
37        path = path.split('.');
38        var obj = miniShop2.Callbacks;
39        for (var i = 0; i < path.length; i++) {
40            if (obj[path[i]] == undefined) {
41                return false;
42            }
43            obj = obj[path[i]];
44        }
45        if (typeof obj != 'object') {
46            obj = [obj];
47        }
48        if (name != undefined) {
49            obj[name] = func;
50        } else {
51            obj.push(func);
52        }
53        return true;
54    };
55    miniShop2.Callbacks.remove = function (path, name) {
56        path = path.split('.');
57        var obj = miniShop2.Callbacks;
58        for (var i = 0; i < path.length; i++) {
59            if (obj[path[i]] == undefined) {
60                return false;
61            }
62            obj = obj[path[i]];
63        }
64        if (obj[name] != undefined) {
65            delete obj[name];
66            return true;
67        }
68        return false;
69    };
70    miniShop2.ajaxProgress = false;
71    miniShop2.setup = function () {
72        // selectors & $objects
73        this.actionName = 'ms2_action';
74        this.action = ':submit[name=' + this.actionName + ']';
75        this.form = '.ms2_form';
76        this.$doc = $(document);
77
78        this.sendData = {
79            $form: null,
80            action: null,
81            formData: null
82        };
83
84        this.timeout = 300;
85    };
86    miniShop2.initialize = function () {
87        miniShop2.setup();
88        // Indicator of active ajax request
89
90        //noinspection JSUnresolvedFunction
91        miniShop2.$doc
92            .ajaxStart(function () {
93                miniShop2.ajaxProgress = true;
94            })
95            .ajaxStop(function () {
96                miniShop2.ajaxProgress = false;
97            })
98            .on('submit', miniShop2.form, function (e) {
99                e.preventDefault();
100                var $form = $(this);
101                var action = $form.find(miniShop2.action).val();
102
103                if (action) {
104                    var formData = $form.serializeArray();
105                    formData.push({
106                        name: miniShop2.actionName,
107                        value: action
108                    });
109                    miniShop2.sendData = {
110                        $form: $form,
111                        action: action,
112                        formData: formData
113                    };
114                    miniShop2.controller();
115                }
116            });
117        miniShop2.Cart.initialize();
118        miniShop2.Message.initialize();
119        miniShop2.Order.initialize();
120    };
121    miniShop2.controller = function () {
122        var self = this;
123        switch (self.sendData.action) {
124            case 'cart/add':
125                miniShop2.Cart.add();
126                break;
127            case 'cart/remove':
128                miniShop2.Cart.remove();
129                break;
130            case 'cart/change':
131                miniShop2.Cart.change();
132                break;
133            case 'cart/clean':
134                miniShop2.Cart.clean();
135                break;
136            case 'order/submit':
137                miniShop2.Order.submit();
138                break;
139            case 'order/clean':
140                miniShop2.Order.clean();
141                break;
142            default:
143                return;
144        }
145    };
146    miniShop2.send = function (data, callbacks, userCallbacks) {
147        var runCallback = function (callback, bind) {
148            if (typeof callback == 'function') {
149                return callback.apply(bind, Array.prototype.slice.call(arguments, 2));
150            } else if (typeof callback == 'object') {
151                for (var i in callback) {
152                    if (callback.hasOwnProperty(i)) {
153                        var response = callback[i].apply(bind, Array.prototype.slice.call(arguments, 2));
154                        if (response === false) {
155                            return false;
156                        }
157                    }
158                }
159            }
160            return true;
161        };
162        // set context
163        if ($.isArray(data)) {
164            data.push({
165                name: 'ctx',
166                value: miniShop2Config.ctx
167            });
168        } else if ($.isPlainObject(data)) {
169            data.ctx = miniShop2Config.ctx;
170        } else if (typeof data == 'string') {
171            data += '&ctx=' + miniShop2Config.ctx;
172        }
173
174        // set action url
175        var formActionUrl = (miniShop2.sendData.$form)
176            ? miniShop2.sendData.$form.attr('action')
177            : false;
178        var url = (formActionUrl)
179            ? formActionUrl
180            : (miniShop2Config.actionUrl)
181                ? miniShop2Config.actionUrl
182                : document.location.href;
183        // set request method
184        var formMethod = (miniShop2.sendData.$form)
185            ? miniShop2.sendData.$form.attr('method')
186            : false;
187        var method = (formMethod)
188            ? formMethod
189            : 'post';
190
191        // callback before
192        if (runCallback(callbacks.before) === false || runCallback(userCallbacks.before) === false) {
193            return;
194        }
195        // send
196        var xhr = function (callbacks, userCallbacks) {
197            return $[method](url, data, function (response) {
198                if (response.success) {
199                    if (response.message) {
200                        miniShop2.Message.success(response.message);
201                    }
202                    runCallback(callbacks.response.success, miniShop2, response);
203                    runCallback(userCallbacks.response.success, miniShop2, response);
204                } else {
205                    miniShop2.Message.error(response.message);
206                    runCallback(callbacks.response.error, miniShop2, response);
207                    runCallback(userCallbacks.response.error, miniShop2, response);
208                }
209            }, 'json').done(function () {
210                runCallback(callbacks.ajax.done, miniShop2, xhr);
211                runCallback(userCallbacks.ajax.done, miniShop2, xhr);
212            }).fail(function () {
213                runCallback(callbacks.ajax.fail, miniShop2, xhr);
214                runCallback(userCallbacks.ajax.fail, miniShop2, xhr);
215            }).always(function () {
216                runCallback(callbacks.ajax.always, miniShop2, xhr);
217                runCallback(userCallbacks.ajax.always, miniShop2, xhr);
218            });
219        }(callbacks, userCallbacks);
220    };
221
222    miniShop2.Cart = {
223        callbacks: {
224            add: miniShop2Config.callbacksObjectTemplate(),
225            remove: miniShop2Config.callbacksObjectTemplate(),
226            change: miniShop2Config.callbacksObjectTemplate(),
227            clean: miniShop2Config.callbacksObjectTemplate()
228        },
229        setup: function () {
230            miniShop2.Cart.cart = '#msCart';
231            miniShop2.Cart.miniCart = '#msMiniCart';
232            miniShop2.Cart.miniCartClass = '.msMiniCart';
233            miniShop2.Cart.miniCartNotEmptyClass = 'full';
234            miniShop2.Cart.countInput = 'input[name=count]';
235            miniShop2.Cart.totalWeight = '.ms2_total_weight';
236            miniShop2.Cart.totalCount = '.ms2_total_count';
237            miniShop2.Cart.totalCost = '.ms2_total_cost';
238            miniShop2.Cart.totalDiscount = '.ms2_total_discount';
239            miniShop2.Cart.cost = '.ms2_cost';
240        },
241        initialize: function () {
242            miniShop2.Cart.setup();
243            if (!$(miniShop2.Cart.cart).length) {
244                return;
245            }
246            miniShop2.$doc.on('change', miniShop2.Cart.cart + ' ' + miniShop2.Cart.countInput, function () {
247                if (!!$(this).val()) {
248                    $(this).closest(miniShop2.form).submit();
249                }
250            });
251        },
252        add: function () {
253            var callbacks = miniShop2.Cart.callbacks;
254            callbacks.add.response.success = function (response) {
255                this.Cart.status(response.data);
256            };
257            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.add, miniShop2.Callbacks.Cart.add);
258        },
259        remove: function () {
260            var callbacks = miniShop2.Cart.callbacks;
261            callbacks.remove.response.success = function (response) {
262                this.Cart.remove_position(miniShop2.Utils.getValueFromSerializedArray('key'));
263                this.Cart.status(response.data);
264            };
265            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.remove, miniShop2.Callbacks.Cart.remove);
266        },
267        change: function () {
268            var callbacks = miniShop2.Cart.callbacks;
269            callbacks.change.response.success = function (response) {
270                if (typeof (response.data.key) == 'undefined') {
271                    this.Cart.remove_position(miniShop2.Utils.getValueFromSerializedArray('key'));
272                } else {
273                    $('#' + miniShop2.Utils.getValueFromSerializedArray('key')).find('');
274                }
275                this.Cart.status(response.data);
276            };
277            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.change, miniShop2.Callbacks.Cart.change);
278        },
279        status: function (status) {
280            if (status['total_count'] < 1) {
281                location.reload();
282            } else {
283                //var $cart = $(miniShop2.Cart.cart);
284                var $miniCarts = $(miniShop2.Cart.miniCart).add(miniShop2.Cart.miniCartClass);
285                if (status['total_count'] > 0 && $miniCarts.length > 0) {
286                    $miniCarts.each(function (index, cart) {
287                        if (!$(cart).hasClass(miniShop2.Cart.miniCartNotEmptyClass)) {
288                            $(cart).addClass(miniShop2.Cart.miniCartNotEmptyClass);
289                        }
290                    });
291                }
292                $(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight']));
293                $(miniShop2.Cart.totalCount).text(status['total_count']);
294                $(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost']));
295                $(miniShop2.Cart.totalDiscount).text(miniShop2.Utils.formatPrice(status['total_discount']));
296                if (typeof(status['cost']) === 'number') {
297                    $(miniShop2.Cart.cost, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['cost']));
298                }
299                if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) {
300                    miniShop2.Order.getcost();
301                }
302            }
303        },
304        clean: function () {
305            var callbacks = miniShop2.Cart.callbacks;
306            callbacks.clean.response.success = function (response) {
307                this.Cart.status(response.data);
308            };
309
310            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.clean, miniShop2.Callbacks.Cart.clean);
311        },
312        remove_position: function (key) {
313            $('#' + key).remove();
314        }
315    };
316
317    miniShop2.Order = {
318        callbacks: {
319            add: miniShop2Config.callbacksObjectTemplate(),
320            getcost: miniShop2Config.callbacksObjectTemplate(),
321            clean: miniShop2Config.callbacksObjectTemplate(),
322            submit: miniShop2Config.callbacksObjectTemplate(),
323            getrequired: miniShop2Config.callbacksObjectTemplate()
324        },
325        setup: function () {
326            miniShop2.Order.order = '#msOrder';
327            miniShop2.Order.deliveries = '#deliveries';
328            miniShop2.Order.payments = '#payments';
329            miniShop2.Order.deliveryInput = 'input[name="delivery"]';
330            miniShop2.Order.inputParent = '.input-parent';
331            miniShop2.Order.paymentInput = 'input[name="payment"]';
332            miniShop2.Order.paymentInputUniquePrefix = 'input#payment_';
333            miniShop2.Order.deliveryInputUniquePrefix = 'input#delivery_';
334            miniShop2.Order.orderCost = '#ms2_order_cost';
335            miniShop2.Order.cartCost = '#ms2_order_cart_cost';
336            miniShop2.Order.deliveryCost = '#ms2_order_delivery_cost';
337        },
338        initialize: function () {
339            miniShop2.Order.setup();
340            if ($(miniShop2.Order.order).length) {
341                miniShop2.$doc
342                    .on('click', miniShop2.Order.order + ' [name="' + miniShop2.actionName + '"][value="order/clean"]', function (e) {
343                        miniShop2.Order.clean();
344                        e.preventDefault();
345                    })
346                    .on('change', miniShop2.Order.order + ' input,' + miniShop2.Order.order + ' textarea', function () {
347                        var $this = $(this);
348                        var key = $this.attr('name');
349                        if (!key) return;
350                        var value = $this.val();
351                        miniShop2.Order.add(key, value);
352                    });
353                var $deliveryInputChecked = $(miniShop2.Order.deliveryInput + ':checked', miniShop2.Order.order);
354                $deliveryInputChecked.trigger('change');
355            }
356        },
357        updatePayments: function (payments) {
358            var $paymentInputs = $(miniShop2.Order.paymentInput, miniShop2.Order.order);
359            $paymentInputs.attr('disabled', true).prop('disabled', true).closest(miniShop2.Order.inputParent).hide();
360            if (payments.length > 0) {
361                for (var i in payments) {
362                    if (payments.hasOwnProperty(i)) {
363                        $paymentInputs.filter(miniShop2.Order.paymentInputUniquePrefix + payments[i]).attr('disabled', false).prop('disabled', false).closest(miniShop2.Order.inputParent).show();
364                    }
365                }
366            }
367            if ($paymentInputs.filter(':visible:checked').length == 0) {
368                $paymentInputs.filter(':visible:first').trigger('click');
369            }
370        },
371        add: function (key, value) {
372            var callbacks = miniShop2.Order.callbacks;
373            var old_value = value;
374            callbacks.add.response.success = function (response) {
375                (function (key, value, old_value) {
376                    var $field = $('[name="' + key + '"]', miniShop2.Order.order);
377                    switch (key) {
378                        case 'delivery':
379                            $field = $(miniShop2.Order.deliveryInputUniquePrefix + response.data[key]);
380                            if (response.data[key] != old_value) {
381                                $field.trigger('click');
382                            } else {
383                                miniShop2.Order.getrequired(value);
384                                miniShop2.Order.updatePayments($field.data('payments'));
385                                miniShop2.Order.getcost();
386                            }
387                            break;
388                        case 'payment':
389                            $field = $(miniShop2.Order.paymentInputUniquePrefix + response.data[key]);
390                            if (response.data[key] != old_value) {
391                                $field.trigger('click');
392                            } else {
393                                miniShop2.Order.getcost();
394                            }
395                            break;
396                        //default:
397                    }
398                    $field.val(response.data[key]).removeClass('error').closest(miniShop2.Order.inputParent).removeClass('error');
399                })(key, value, old_value);
400            };
401            callbacks.add.response.error = function () {
402                (function (key) {
403                    var $field = $('[name="' + key + '"]', miniShop2.Order.order);
404                    if ($field.attr('type') == 'checkbox' || $field.attr('type') == 'radio') {
405                        $field.closest(miniShop2.Order.inputParent).addClass('error');
406                    } else {
407                        $field.addClass('error');
408                    }
409                })(key);
410            };
411
412            var data = {
413                key: key,
414                value: value
415            };
416            data[miniShop2.actionName] = 'order/add';
417            miniShop2.send(data, miniShop2.Order.callbacks.add, miniShop2.Callbacks.Order.add);
418        },
419        getcost: function () {
420            var callbacks = miniShop2.Order.callbacks;
421            callbacks.getcost.response.success = function (response) {
422                $(miniShop2.Order.orderCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['cost']));
423                $(miniShop2.Order.cartCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['cart_cost']));
424                $(miniShop2.Order.deliveryCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['delivery_cost']));
425            };
426            var data = {};
427            data[miniShop2.actionName] = 'order/getcost';
428            miniShop2.send(data, miniShop2.Order.callbacks.getcost, miniShop2.Callbacks.Order.getcost);
429        },
430        clean: function () {
431            var callbacks = miniShop2.Order.callbacks;
432            callbacks.clean.response.success = function () {
433                location.reload();
434            };
435
436            var data = {};
437            data[miniShop2.actionName] = 'order/clean';
438            miniShop2.send(data, miniShop2.Order.callbacks.clean, miniShop2.Callbacks.Order.clean);
439        },
440        submit: function () {
441            miniShop2.Message.close();
442
443            // Checking for active ajax request
444            if (miniShop2.ajaxProgress) {
445                //noinspection JSUnresolvedFunction
446                miniShop2.$doc.ajaxComplete(function () {
447                    miniShop2.ajaxProgress = false;
448                    miniShop2.$doc.unbind('ajaxComplete');
449                    miniShop2.Order.submit();
450                });
451                return false;
452            }
453
454            var callbacks = miniShop2.Order.callbacks;
455            callbacks.submit.before = function () {
456                $(':button, a', miniShop2.Order.order).attr('disabled', true).prop('disabled', true);
457            };
458            callbacks.submit.response.success = function (response) {
459                if (response.data['redirect']) {
460                    document.location.href = response.data['redirect'];
461                } else if (response.data['msorder']) {
462                    document.location.href = document.location.origin + document.location.pathname
463                        + (document.location.search ? document.location.search + '&' : '?')
464                        + 'msorder=' + response.data['msorder'];
465                } else {
466                    location.reload();
467                }
468            };
469            callbacks.submit.response.error = function (response) {
470                setTimeout((function () {
471                    $(':button, a', miniShop2.Order.order).attr('disabled', false).prop('disabled', false);
472                }.bind(this)), 3 * miniShop2.timeout);
473                $('[name]', miniShop2.Order.order).removeClass('error').closest(miniShop2.Order.inputParent).removeClass('error');
474                for (var i in response.data) {
475                    if (response.data.hasOwnProperty(i)) {
476                        var key = response.data[i];
477                        //var $field = $('[name="' + response.data[i] + '"]', miniShop2.Order.order);
478                        //$field.addClass('error').closest(miniShop2.Order.inputParent).addClass('error');
479                        var $field = $('[name="' + key + '"]', miniShop2.Order.order);
480                        if ($field.attr('type') == 'checkbox' || $field.attr('type') == 'radio') {
481                            $field.closest(miniShop2.Order.inputParent).addClass('error');
482                        } else {
483                            $field.addClass('error');
484                        }
485                    }
486                }
487            };
488            return miniShop2.send(miniShop2.sendData.formData, miniShop2.Order.callbacks.submit, miniShop2.Callbacks.Order.submit);
489        },
490        getrequired: function (value) {
491            var callbacks = miniShop2.Order.callbacks;
492            callbacks.getrequired.response.success = function (response) {
493                $('[name]', miniShop2.Order.order).removeClass('required').closest(miniShop2.Order.inputParent).removeClass('required');
494                var requires = response.data['requires'];
495                for (var i = 0, length = requires.length; i < length; i++) {
496                    $('[name=' + requires[i] + ']', miniShop2.Order.order).addClass('required').closest(miniShop2.Order.inputParent).addClass('required');
497                }
498            };
499            callbacks.getrequired.response.error = function () {
500                $('[name]', miniShop2.Order.order).removeClass('required').closest(miniShop2.Order.inputParent).removeClass('required');
501            };
502
503            var data = {
504                id: value
505            };
506            data[miniShop2.actionName] = 'order/getrequired';
507            miniShop2.send(data, miniShop2.Order.callbacks.getrequired, miniShop2.Callbacks.Order.getrequired);
508        }
509    };
510
511    miniShop2.Message = {
512        initialize: function () {
513        },
514        close: function () {
515        },
516        show: function (message) {
517            if (message != '') {
518                alert(message);
519            }
520        },
521        success: function (message) {
522        },
523        error: function (message) {
524        },
525        info: function (message) {
526        }
527    };
528
529    miniShop2.Utils = {
530        empty: function (val) {
531            return (typeof (val) == 'undefined' || val == 0 || val === null || val === false || (typeof (val) == 'string' && val.replace(/\s+/g, '') == '') || (typeof (val) == 'object' && val.length == 0));
532        },
533        formatPrice: function (price) {
534            var pf = miniShop2Config.price_format;
535            price = this.number_format(price, pf[0], pf[1], pf[2]);
536
537            if (miniShop2Config.price_format_no_zeros && pf[0] > 0) {
538                price = price.replace(/(0+)$/, '');
539                price = price.replace(/[^0-9]$/, '');
540            }
541
542            return price;
543        },
544        formatWeight: function (weight) {
545            var wf = miniShop2Config.weight_format;
546            weight = this.number_format(weight, wf[0], wf[1], wf[2]);
547
548            if (miniShop2Config.weight_format_no_zeros && wf[0] > 0) {
549                weight = weight.replace(/(0+)$/, '');
550                weight = weight.replace(/[^0-9]$/, '');
551            }
552
553            return weight;
554        },
555        // Format a number with grouped thousands,
556        number_format: function (number, decimals, dec_point, thousands_sep) {
557            // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
558            // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
559            // bugfix by: Michael White (http://crestidg.com)
560            var i, j, kw, kd, km;
561
562            // input sanitation & defaults
563            if (isNaN(decimals = Math.abs(decimals))) {
564                decimals = 2;
565            }
566            if (dec_point == undefined) {
567                dec_point = ',';
568            }
569            if (thousands_sep == undefined) {
570                thousands_sep = '.';
571            }
572
573            i = parseInt(number = (+number || 0).toFixed(decimals)) + '';
574
575            if ((j = i.length) > 3) {
576                j = j % 3;
577            } else {
578                j = 0;
579            }
580
581            km = j
582                ? i.substr(0, j) + thousands_sep
583                : '';
584            kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
585            kd = (decimals
586                ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, '0').slice(2)
587                : '');
588
589            return km + kw + kd;
590        },
591        getValueFromSerializedArray: function (name, arr) {
592            if (!$.isArray(arr)) {
593                arr = miniShop2.sendData.formData;
594            }
595            for (var i = 0, length = arr.length; i < length; i++) {
596                if (arr[i].name == name) {
597                    return arr[i].value;
598                }
599            }
600            return null;
601        }
602    };
603
604    $(document).ready(function ($) {
605        miniShop2.initialize();
606        var html = $('html');
607        html.removeClass('no-js');
608        if (!html.hasClass('js')) {
609            html.addClass('js');
610        }
611    });
612
613    window.miniShop2 = miniShop2;
614})(window, document, jQuery, miniShop2Config);

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.