PageSourceSearch

https://altarma.ru/hostcmsfiles/filters2/filters.js?1647224867

js altarma.ru collected 2026-09-30 02:36:40 UTC 18,312 bytes, 444 lines download raw bytes

1"use strict";
2var disableAjax = !1;
3var applyButton = !1;
4
5$(document).ready(function() {
6    var tooltipPosition = 'left';
7    var htmlTimeout = null;
8    var rangeableMainProperties = ["price", "length", "width", "height"];
9    var listableMainProperties = ["producer", "seller"];
10    var priceGroup = ["price_group"];
11    $.fn.serializeObject = function() {
12        var arrayData, objectData;
13        arrayData = this.serializeArray();
14        objectData = {};
15        $.each(arrayData, function() {
16            var value;
17            if (this.value != null) {
18                value = this.value
19            } else {
20                value = ''
21            }
22            if (objectData[this.name] != null) {
23                if (!objectData[this.name].push) {
24                    objectData[this.name] = [objectData[this.name]]
25                }
26                objectData[this.name].push(value)
27            } else {
28                objectData[this.name] = value
29            }
30        });
31        return objectData
32    };
33    if (tooltipPosition !== 'right') {
34        tooltipPosition = 'left'
35    }
36    $.fn.tooltipster('setDefaults', {
37        interactive: !0,
38        contentAsHTML: !0,
39        content: '',
40        theme: 'tooltipster-light',
41        onlyOne: !0,
42        trigger: 'custom',
43        position: tooltipPosition
44    });
45    var controls = $('.filter .form-control, .filter_item');
46    controls.tooltipster();
47    $('.filter_slider').each(function(indx, element) {
48        setSlider(element)
49    });
50    var filter_form_main = $('#filter_form_main');
51    var filter_form_aside = $('#filter_form');
52    var itemsContainer = $('#filters-ajax-container');
53    disableAjax = filter_form_main.data('disable_ajax');
54    var useAjaxContentLoad = !disableAjax && filter_form_main.data('use_ajax_content_load') && itemsContainer.length;
55    var ajaxContentLoadDelay = (filter_form_main.data('ajax_content_load_delay') || 250) * 1;
56    applyButton = (filter_form_main.data('use_apply') || !1);
57    $('body').on('change', '.extended-filters-sorting', function(event) {
58        event.preventDefault();
59        event.stopPropagation();
60        var filter_ctx = $(event.currentTarget);
61        var filterForm = filter_ctx.closest('form');
62        var url = makeFilterUrl(filterForm);
63        if (disableAjax) {
64            window.location.href = url;
65            return !1
66        } else {
67            return ajaxContentLoad({
68                url: url,
69				append: false
70            })
71        }
72    });
73
74    function linksHandler(event) {
75        event.preventDefault();
76        event.stopPropagation();
77        var url = $(this).attr('href');
78		var bAppend = false;
79		var skipHistoryPush = false;
80		if ($(this).attr('data-append')) {
81			bAppend = true;
82			skipHistoryPush = true;
83		}
84        return ajaxContentLoad({
85            url: url,
86			skipHistoryPush: skipHistoryPush,
87			append: bAppend
88        })
89    }
90
91    function initLinks() {
92        $('.pagination a, .on-page a').off('click', linksHandler).on('click', linksHandler)
93    }
94    if (useAjaxContentLoad) {
95        initLinks();
96        window.onpopstate = function(e) {
97            e.preventDefault();
98            e.stopPropagation();
99            if (e.state) {
100                if (e.state.html) {
101                    itemsContainer.html(e.state.html);
102                    scrollToViewport(itemsContainer)
103                } else {
104                    ajaxContentLoad({
105                        url: window.location.href,
106                        skipHistoryPush: !0
107                    })
108                }
109            } else {
110                ajaxContentLoad({
111                    url: window.location.href,
112                    skipHistoryPush: !0
113                })
114            }
115        }
116    }
117    var makeFilterUrl = function(currentForm) {
118        filter_form_main.find('input[type=hidden]').attr('disabled', 'disabled');
119        filter_form_aside.find('input[type=hidden]').attr('disabled', 'disabled');
120        var filterFormMainParams = filter_form_main.serializeObject();
121        var filterFormAsideParams = filter_form_aside.serializeObject();
122        filter_form_main.find('input[type=hidden]').removeAttr('disabled');
123        filter_form_aside.find('input[type=hidden]').removeAttr('disabled');
124        var resultParams = {};
125        if (currentForm.attr('id') === 'filter_form_main') {
126            resultParams = $.extend({}, filterFormAsideParams, filterFormMainParams)
127        } else {
128            resultParams = $.extend({}, filterFormMainParams, filterFormAsideParams)
129        }
130        var on_page = filter_form_main.find(':input[name=on_page]:first').val() || filter_form_aside.find(':input[name=on_page]:first').val() || 0;
131        if (on_page) {
132            resultParams.on_page = on_page
133        }
134        var filter_params = $.param(resultParams);
135        var filter_action = currentForm.attr('action');
136        return filter_action + '?' + filter_params
137    };
138    filter_form_main.submit(function(event) {
139        event.preventDefault();
140        event.stopPropagation();
141        window.location.href = makeFilterUrl($(this));
142        return !1
143    });
144    filter_form_aside.submit(function(event) {
145        event.preventDefault();
146        event.stopPropagation();
147        window.location.href = makeFilterUrl($(this));
148        return !1
149    });
150    controls.change($.debounceLast(700, this, function processFilter(eventObject) {
151        if (htmlTimeout) {
152            clearTimeout(htmlTimeout)
153        }
154        var filter_ctx = $(eventObject.currentTarget);
155        var inputPosition = tooltipPosition === 'right' ? 1 : 0;
156        if (filter_ctx.hasClass('range_from') || filter_ctx.hasClass('range_to')) {
157            filter_ctx = filter_ctx.closest('fieldset, .filterField').first().children('div').find('.tooltipstered:eq(' + inputPosition + ')');
158            setSlider(filter_ctx.closest('.filter_slider'))
159        }
160        var filterForm = filter_ctx.closest('form');
161        var url = makeFilterUrl(filterForm);
162        if (!applyButton) {
163            if (disableAjax) {
164                return window.location.href = url
165            }
166            $.getJSON(url, {
167                'data': 'json',
168                'ajax': '1'
169            }, function(data) {
170                data.used = data.used || {};
171                data.initial = data.initial || {};
172                data.filtered = data.filtered || {};
173                var found = ref(data, 'filtered.count') || 0;
174                rangeableMainProperties.forEach(function(param) {
175                    var initial_from = ref(data, 'initial.' + param + '.from') || 0;
176                    var initial_to = ref(data, 'initial.' + param + '.to') || 0;
177                    var filtered_from = ref(data, 'filtered.' + param + '.from') || 0;
178                    var filtered_to = ref(data, 'filtered.' + param + '.to') || 0;
179                    var value_from = ref(data, 'used.' + param + '.from') || initial_from;
180                    var value_to = ref(data, 'used.' + param + '.to') || initial_to;
181                    setSlider($('#' + param), value_from, value_to, filtered_from, filtered_to)
182                });
183                priceGroup.forEach(function(param) {
184                    var field_name = param;
185                    var id_prefix = '#for_' + field_name + '_';
186                    iterateFilterOptions(ref(data, 'initial.' + field_name), id_prefix, !0);
187                    iterateFilterOptions(ref(data, 'filtered.' + field_name), id_prefix)
188                });
189                listableMainProperties.forEach(function(param) {
190                    var field_name = param + '_id';
191                    var id_prefix = '#for_' + field_name + '_';
192                    iterateFilterOptions(ref(data, 'initial.' + field_name), id_prefix, !0);
193                    iterateFilterOptions(ref(data, 'filtered.' + field_name), id_prefix)
194                });
195                var initial_property_values = ref(data, 'initial.property_values');
196                if (initial_property_values) {
197                    $.each(initial_property_values, function(property_id, values) {
198                        var id_prefix = '#for_property_' + property_id + '_';
199                        iterateFilterOptions(values, id_prefix, !0)
200                    })
201                }
202                var filtered_property_values = ref(data, 'filtered.property_values');
203                if (filtered_property_values) {
204                    $.each(filtered_property_values, function(property_id, values) {
205                        var id_prefix = '#for_property_' + property_id + '_';
206                        iterateFilterOptions(values, id_prefix)
207                    })
208                }
209                var filtered_property_ranges = ref(data, 'filtered.property_ranges');
210                if (filtered_property_ranges) {
211                    $.each(filtered_property_ranges, function(property_id, values) {
212                        var initial_from = ref(data, 'initial.property_ranges.' + property_id + '.from') || 0;
213                        var initial_to = ref(data, 'initial.property_ranges.' + property_id + '.to') || 0;
214                        var filtered_from = values.from || 0;
215                        var filtered_to = values.to || 0;
216                        var value_from = ref(data, 'used.property_ranges.' + property_id + '.from') || initial_from;
217                        var value_to = ref(data, 'used.property_ranges.' + property_id + '.to') || initial_to;
218                        setSlider($('#property_' + property_id), value_from, value_to, filtered_from, filtered_to)
219                    })
220                }
221                var templateData = {
222                    count: found,
223                    url: url
224                };
225                var template = declensionSelect(templateData.count, filterForm.data('message_none'), filterForm.data('message_nominative'), filterForm.data('message_genitive_singular'), filterForm.data('message_genitive_plural'));
226                var text = nano(template, templateData);
227                if (useAjaxContentLoad) {
228                    ajaxContentLoad({
229                        url: url,
230						append: false,
231                        filter_ctx: filter_ctx
232                    })
233                }
234            })
235        }
236    }));
237
238    function ajaxContentLoad(params) {
239        params = params || {};
240        if (htmlTimeout) {
241            clearTimeout(htmlTimeout)
242        }
243        htmlTimeout = setTimeout(function() {
244            var url = params.url;
245			if (!params.append) {
246				$.loadingScreen('show');
247				itemsContainer.fadeOut();
248			} else {
249				itemsContainer.find('.pagination.morepag .show-more').addClass('loading');
250			}
251            $.ajax({
252                url: url + (url.indexOf('?') >= 0 ? '&' : '?') + 'data=html_catalog&ajax=1',
253                success: function(html) {
254                    if (!params.skipHistoryPush) {
255                        window.history.pushState({
256                            html: html
257                        }, document.title, url)
258                    }
259					if (params.append) {
260						itemsContainer.find('.card-list').append($(html).find('.card-item'));
261						itemsContainer.find('.pagination:not(.morepag)').replaceWith($(html).find('.pagination:not(.morepag)'));
262						itemsContainer.find('.pagination.morepag').replaceWith($(html).find('.morepag'));
263					} else {
264						itemsContainer.html(html).fadeTo('fast', 1, function() {
265							itemsContainer.show();
266						});
267					}
268                    initLinks();
269                    $.loadingScreen('hide');
270                    filterMove();
271                    if (params.filter_ctx) {
272                        params.filter_ctx.tooltipster('hide');
273                    }
274					if (!params.append) {
275						scrollToViewport(itemsContainer);
276					}
277/*
278					setTimeout(function() {
279					    scrollRevealInit();
280					}, 300);
281*/
282                },
283                dataType: 'html'
284            })
285        }, ajaxContentLoadDelay)
286    }
287
288    function scrollToViewport(elem) {
289        if (!isElementTopInViewport(elem)) {
290            $('html,body').animate({
291                scrollTop: elem.offset().top
292            }, 'slow')
293        }
294    }
295
296    function setSlider(element, used_min, used_max, filtered_min, filtered_max) {
297        var prefix = $(element).attr('id') + '_';
298        var from_input = $(element).find('#' + prefix + 'from');
299        var to_input = $(element).find('#' + prefix + 'to');
300        var initial_min = toNum(from_input.attr('data-range-boundary'), 0);
301        var initial_max = toNum(to_input.attr('data-range-boundary'), 0);
302        var _filtered_min = toNum(from_input.attr('data-range-lighting'), 0);
303        var _filtered_max = toNum(to_input.attr('data-range-lighting'), 0);
304        used_min = toNum(used_min || from_input.val(), 0);
305        used_max = toNum(used_max || to_input.val(), 0);
306        filtered_min = toNum(filtered_min || _filtered_min || initial_min, 0);
307        filtered_max = toNum(filtered_max || _filtered_max || initial_max, 0);
308        if (!used_min || used_min < initial_min) {
309            used_min = initial_min
310        }
311        if (!used_max || used_max > initial_max) {
312            used_max = initial_max
313        }
314        from_input.val(used_min);
315        to_input.val(used_max);
316        var container = $(element).find('.slider_container');
317        var slider_block = container.find('#' + prefix + 'range');
318        if (!slider_block.length) {
319            container.html('<div class="filter_range ctrl"><div id="' + prefix + 'range"></div></div>');
320            slider_block = container.find('#' + prefix + 'range')
321        }
322        var slider = slider_block.data("ionRangeSlider");
323        if (slider) {
324            slider.update({
325                min: initial_min,
326                max: initial_max,
327                from: used_min,
328                to: used_max,
329                from_min: filtered_min,
330                from_max: filtered_max,
331                to_min: filtered_min,
332                to_max: filtered_max,
333            });
334            return
335        }
336        slider_block.ionRangeSlider({
337            hide_min_max: !0,
338            hide_from_to: !0,
339            keyboard: !0,
340            force_edges: !0,
341            grid: !1,
342            type: 'double',
343            step: 1,
344            min: initial_min,
345            max: initial_max,
346            from: used_min,
347            to: used_max,
348            from_min: filtered_min,
349            from_max: filtered_max,
350            from_shadow: !1,
351            to_min: filtered_min,
352            to_max: filtered_max,
353            to_shadow: !1,
354            onChange: function(data) {
355                from_input.val(data.from);
356                to_input.val(data.to)
357            },
358            onUpdate: function(data) {
359                from_input.val(data.from);
360                to_input.val(data.to)
361            },
362            onFinish: function(data) {
363                from_input.val(data.from).change();
364                to_input.val(data.to).change()
365            }
366        })
367    }
368
369    function declensionSelect(number, none, nominative, genitive_singular, genitive_plural) {
370        if (!number) {
371            return none
372        }
373        var last_digit = number % 10;
374        var last_two_digits = number % 100;
375        var result;
376        if (last_digit === 1 && last_two_digits !== 11) {
377            result = nominative
378        } else {
379            result = (last_digit === 2 && last_two_digits !== 12) || (last_digit === 3 && last_two_digits !== 13) || (last_digit === 4 && last_two_digits !== 14) ? genitive_singular : genitive_plural
380        }
381        return result
382    }
383
384    function iterateFilterOptions(collection, prefix, actionAdd) {
385        collection = collection || [];
386        prefix = prefix || '';
387        if (collection) {
388            $.each(collection, function(indx, value_id) {
389                var _value_id = typeof value_id === 'object' ? value_id.value : value_id;
390                var elem = $(prefix + _value_id);
391                if (elem && elem.length) {
392                    if (actionAdd) {
393                        elem.addClass('filter_disabled')
394                    } else {
395                        elem.removeClass('filter_disabled')
396                    }
397                }
398            })
399        }
400    }
401
402    function toNum(str, defaultNum) {
403        defaultNum = typeof defaultNum === 'number' ? defaultNum : NaN;
404        if (typeof str !== 'string') {
405            return typeof str === 'number' ? str : defaultNum
406        }
407        var validNumRegExp = /^-?\d*(\.\d*)?$/;
408        str = str.replace(',', '.');
409        if (str.indexOf('.') > -1) {
410            str += '0'
411        }
412        if (!validNumRegExp.test(str)) {
413            str = NaN
414        }
415        str = str * 1;
416        return isNaN(str) ? defaultNum : str
417    }
418
419    function ref(obj, path) {
420        path = ((typeof path === 'undefined' && typeof obj === 'string') ? obj : path) || '';
421        obj = obj || {};
422        return path.split(".").reduce(function(o, x) {
423            return (o) ? o[x] : undefined
424        }, obj)
425    }
426
427    function nano(template, data) {
428        return template.replace(/\{([\w\.]*)\}/g, function(str, key) {
429            var keys = key.split("."),
430                v = data[keys.shift()];
431            for (var i = 0, l = keys.length; i < l; i++) v = v[keys[i]];
432            return (typeof v !== "undefined" && v !== null) ? v : ""
433        })
434    }
435
436    function isElementTopInViewport(el, visbleAreaStart) {
437        visbleAreaStart = (window.pageVisbleAreaStart * 1) || 0;
438        if (typeof jQuery === "function" && el instanceof jQuery) {
439            el = el[0]
440        }
441        var rect = el.getBoundingClientRect();
442        return rect.top >= visbleAreaStart && rect.top <= (window.innerHeight || document.documentElement.clientHeight)
443    }
444});

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.