PageSourceSearch

https://anime-starzz.online/templates/templat552/lazydev/dle_filter/assets/dle_filter.js

js anime-starzz.online collected 2026-10-09 23:34:52 UTC 41,308 bytes, 1,040 lines download raw bytes

1let getNavigation = function(doc) {
2    let currentNode;
3    let navigation = 'none';
4
5    if (typeof doc === 'object') {
6        let nodeIterator = document.createNodeIterator(
7            doc,
8            NodeFilter.SHOW_COMMENT
9        );
10
11        while (currentNode = nodeIterator.nextNode()) {
12            if (currentNode.nodeType === 8 && currentNode.nodeValue === 'ENGINE_NAVIGATION' && currentNode.nextSibling.nodeValue !== 'ENGINE_NAVIGATION') {
13                navigation = currentNode.nextSibling;
14                break;
15            }
16        }
17    }
18
19    return navigation;
20};
21
22let navigation = getNavigation(document.body);
23let filterNavigation = 'none';
24
25$(function() {
26    // Поиск по ENTER
27    $('[data-dlefilter*=dle-filter] input, [data-dlefilter*=dle-filter] textarea').keypress(function(e) {
28        if (e.which == 13) {
29            e.preventDefault();
30            filterAjax($(this).closest('form'), true);
31        }
32    });
33
34    // Получаем ID контента
35    let getId = function(elemTag) {
36        dleFilter.id = (elemTag !== 'FORM' ? $(elemTag).closest('form[data-dlefilter]').data('dlefilter-id') : $(elemTag).data('dlefilter-id')) || 'dle-content';
37
38        if (!dleFilter.original[dleFilter.id] && dleFilter.id != 'dle-content') {
39            dleFilter.original[dleFilter.id] = $('#' + dleFilter.id).html();
40        }
41    }
42
43    // Задаем данные на странице фильтра.
44    let setFilterParam = function() {
45        let filterParam = decodeURIComponent(location.href).split('/' + dleFilter.filterUrl + '/');
46        if (!filterParam[1]) {
47            return;
48        }
49        if (filterParam[1].slice(-1) === '/') {
50            filterParam[1] = filterParam[1].slice(0, -1);
51        }
52
53        // Разбивка данных
54        filterParam = filterParam[1].split('/');
55        let arrayParam = [];
56        for (let i = 0; i < filterParam.length; i++) {
57            arrayParam[i] = filterParam[i].split('=');
58            if (arrayParam[i][1]) {
59                arrayParam[i][0] = arrayParam[i][0].replace(/\+/g, ' ');
60                arrayParam[i][1] = arrayParam[i][1].replace(/\+/g, ' ');
61            }
62        }
63
64        // Задаем для input text и textarea, так же для ionRange.Slider
65        $('[data-dlefilter*=dle-filter] input[type="text"], [data-dlefilter*=dle-filter] textarea').each(function () {
66            let nameElem = $(this).attr('name');
67            if (nameElem !== undefined && nameElem.length > 0) {
68                for (let i = 0; i < arrayParam.length; i++) {
69                    if (nameElem === arrayParam[i][0]) {
70                        if (nameElem.indexOf('r.') + 1) {
71                            let slider = $(this).data('ionRangeSlider');
72
73                            let sliderData = arrayParam[i][1].split(';');
74                            if (slider.options.type == 'single') {
75                                slider.update({
76                                    from: sliderData[0]
77                                });
78                            } else if (slider.options.type == 'double') {
79                                slider.update({
80                                    from: sliderData[0],
81                                    to: sliderData[1]
82                                });
83                            }
84                        } else {
85                            $(this).val(arrayParam[i][1]);
86                        }
87                    }
88                }
89            }
90        });
91
92        // Select
93        $('[data-dlefilter*=dle-filter] select').each(function (index) {
94            let nameElem = $(this).attr('name');
95            if (nameElem !== undefined && nameElem.length > 0) {
96                for (let i = 0; i < arrayParam.length; i++) {
97                    if (nameElem === arrayParam[i][0]) {
98                        let selectData = [];
99                        if (nameElem.indexOf('c.') + 1) {
100                            selectData[0] = arrayParam[i][1];
101                        } else {
102                            selectData = arrayParam[i][1].split(',');
103                        }
104
105                        $(this).find('option').each(function (s, n) {
106                            if ($.inArray(n.value, selectData) >= 0) {
107                                $(this).attr('selected', true);
108                            }
109                        });
110                    }
111                }
112
113                if (dleFilter.jsSelect == 1) {
114                    let getTail = $('.tail-select');
115                    if (getTail.length > 0) {
116                        tail.select('[data-dlefilter*=dle-filter] select[data-select-id="' + index + '"]').reload();
117                    }
118                }
119            }
120        });
121
122        if (dleFilter.jsSelect == 2) {
123            let getChosen = $('.chosen-results');
124            if (getChosen.length > 0) {
125                $('[data-dlefilter*=dle-filter] select').trigger('chosen:updated');
126            }
127        }
128
129        if (dleFilter.jsSelect == 3) {
130            $('[data-dlefilter*=dle-filter] select').niceSelect('update');
131        }
132
133        // Radio / Checkbox
134        $('[data-dlefilter*=dle-filter] input[type="radio"], [data-dlefilter*=dle-filter] input[type="checkbox"]').each(function () {
135            let nameElem = $(this).attr('name');
136            if (nameElem !== undefined && nameElem.length > 0) {
137                for (let i = 0; i < arrayParam.length; i++) {
138                    if (nameElem === arrayParam[i][0]) {
139                        let selectData = arrayParam[i][1].split(',');
140
141                        $(this).each(function (s, n) {
142                            if ($.inArray(n.value, selectData) >= 0) {
143                                $(this).attr('checked', 'checked');
144                            }
145                        });
146                    }
147                }
148            }
149        });
150    };
151
152    // Очистка фильтра
153    let filterClear = function() {
154        dleFilter.reset = true;
155
156        let formFilter = $(this).closest('form');
157        let formId = $(formFilter).data('dlefilter');
158        getId(this);
159
160        if (dleFilter.ajaxUrl == 0) {
161            document.title = dleFilter.title;
162            history.pushState(null, dleFilter.title, dleFilter.path);
163        }
164
165        if (filterNavigation !== 'none' && dleFilter.id == 'dle-content' && dleFilter.navApart == 1) {
166            $(getNavigation(document.body)).replaceWith(navigation);
167        }
168
169        if (dleFilter.path.indexOf('/' + dleFilter.filterUrl + '/') + 1) {
170            $('#dle-content').html(dleFilter.content);
171        } else {
172            if (dleFilter.id == 'dle-content') {
173                $('#dle-content').html(dleFilter.content);
174            } else {
175                $('#' + dleFilter.id).html(dleFilter.original[dleFilter.id]);
176            }
177        }
178
179        if (dleFilter.lazy == 1 && typeof lazyLoadXT !== 'undefined' && typeof lazyLoadXT === 'function') {
180            $('[data-src]').lazyLoadXT();
181        } else if (dleFilter.lazy == 1 && typeof jQuery().lazyLoadXT !== 'undefined' && typeof jQuery().lazyLoadXT === 'function') {
182            $('[data-src]').lazyLoadXT();
183        }
184
185        if ($('#dle-speedbar').length > 0) {
186            $('#dle-speedbar').html(dleFilter.speedbar);
187        }
188
189        $(formFilter).find('input[type="text"]').each(function() {
190            let nameElem = $(this).prop('name');
191            if (nameElem.length > 0) {
192                if (nameElem.indexOf('r.') + 1) {
193                    let slider = $(this).data('ionRangeSlider');
194                    if (slider.options.type == 'single') {
195                        slider.update({
196                            from: slider.options.min
197                        });
198                    } else if (slider.options.type == 'double') {
199                        slider.update({
200                            from: slider.options.min,
201                            to: slider.options.max
202                        });
203                    }
204                } else {
205                    $(this).val('');
206                }
207                if ($(this).data('dlefilter-show') !== undefined) {
208                    showAndHideFilter(this);
209                }
210            }
211        });
212
213        $(formFilter).find('select').each(function(index) {
214            let nameElem = $(this).prop('name');
215            if (nameElem.length > 0) {
216                $(this).children('option').each(function() {
217                    $(this).prop('selected', false);
218                });
219
220                if (dleFilter.jsSelect == 1) {
221                    let getTail = $('.tail-select');
222                    if (getTail.length > 0) {
223                        tail.select('[data-dlefilter*="' + formId + '"] select[data-select-id="' + index + '"]').reload();
224                    }
225                }
226
227                if ($(this).data('dlefilter-show') !== undefined) {
228                    showAndHideFilter(this);
229                }
230            }
231        });
232
233        if (dleFilter.jsSelect == 2) {
234            let getChosen = $('.chosen-results');
235            if (getChosen.length > 0) {
236                $('[data-dlefilter*="' + formId + '"] select').trigger('chosen:updated');
237            }
238        }
239
240        if (dleFilter.jsSelect == 3) {
241            $('[data-dlefilter*="' + formId + '"] select').niceSelect('update');
242        }
243
244        $(formFilter).find('input[type="radio"], input[type="checkbox"]').each(function() {
245            let nameElem = $(this).prop('name');
246            if (nameElem.length > 0) {
247                $(this).prop('checked', false);
248                if ($(this).data('dlefilter-show') !== undefined) {
249                    showAndHideFilter(this);
250                }
251            }
252        });
253
254        dleFilter.reset = false;
255    };
256
257    // Данные фильтра
258    let filterWork = function(data) {
259        data = $.parseJSON(data);
260
261        if (data.content == 'redirect') {
262            dleFilter.ajax = 1;
263        }
264
265        if (dleFilter.ajax == 1) {
266            window.location.href = data.url;
267        } else {
268            if (data.clean == dleFilter.defaultUrl) {
269                filterClear();
270            }  else {
271                if ($('#dle-speedbar').length > 0) {
272                    $('#dle-speedbar').html($('#dle-speedbar', data.speedbar).html());
273                }
274
275                let idContent = '';
276                if (dleFilter.path.indexOf('/' + dleFilter.filterUrl + '/') + 1) {
277                    $('#dle-content').html(data.content);
278                    idContent = '#dle-content';
279                } else {
280                    $('#' + dleFilter.id).html(data.content);
281                    idContent = '#' + dleFilter.id;
282                }
283
284                if (data.player && ($(idContent + " .dleplyrplayer").length || $(idContent + " .dleplyrplayer").length || $(idContent + " .dlevideoplayer").length)) {
285                    if (data.player == 'plyr') {
286                        let playersV = Array.from(document.querySelectorAll('.dleplyrplayer:not(.dlepl)')).map(player => new DLEPlayer(player));
287                        playersV.forEach(function(instance, index) {
288                            instance.on('play',function() {
289                                playersV.forEach(function(instance1, index1) {
290                                    if (instance != instance1) {
291                                        instance1.pause();
292                                    }
293                                });
294                            });
295                        });
296                    } else {
297                        $('.dleaudioplayer:not(.alreadyLoaded)').addClass('alreadyLoaded').cleanaudioplayer();
298                        $('.dlevideoplayer:not(.alreadyLoaded)').addClass('alreadyLoaded').cleanvideoplayer();
299                    }
300                }
301
302                if (dleFilterId === 1) {
303                    $('pre').removeAttr('class');
304                    $('pre').each(function() {
305                        if (!$(this).find('code').length) {
306                            $(this).wrapInner('<code>');
307                        }
308                    });
309
310                    hljs.highlightAll();
311                } else if (dleFilterId === 0) {
312                    $('pre code:not([class])').each(function(i, e) {hljs.highlightBlock(e, null)});
313                }
314
315                if (navigation !== 'none' && data.nav && dleFilter.id == 'dle-content' && dleFilter.navApart == 1) {
316                    filterNavigation = data.nav;
317                    navigation = getNavigation(document.body);
318                    $(navigation).replaceWith(data.nav);
319                } else if (!data.nav && dleFilter.navApart == 1) {
320                    navigation = getNavigation(document.body);
321                    navigation.remove();
322                }
323
324                if (dleFilter.lazy == 1 && typeof lazyLoadXT !== 'undefined' && typeof lazyLoadXT === 'function') {
325                    $('[data-src]').lazyLoadXT();
326                } else if (dleFilter.lazy == 1 && typeof jQuery().lazyLoadXT !== 'undefined' && typeof jQuery().lazyLoadXT === 'function') {
327                    $('[data-src]').lazyLoadXT();
328                }
329
330                if (dleFilter.ajaxUrl == 0) {
331                    history.pushState(null, data.title, data.clean);
332                    document.title = data.title;
333                }
334            }
335        }
336    };
337
338    // Собираем данные
339    let filterAjax = function(elem, enter) {
340        if (dleFilter.reset) {
341            return;
342        }
343
344        $('[data-dlefilter*=dle-filter] input[name*="r."]').each(function () {
345            let nameElem = $(this).attr('name');
346            if (nameElem !== undefined && nameElem.length > 0) {
347                let slider = $(this).data('ionRangeSlider');
348                let sliderDefault = 0;
349
350                if (slider.options.type == 'single') {
351                    sliderDefault = slider.options.min;
352                } else if (slider.options.type == 'double') {
353                    sliderDefault = slider.options.min + ';' + slider.options.max;
354                }
355
356                if (sliderDefault == $(this).val()) {
357                    $(this).val('');
358                }
359            }
360        });
361
362        enter = enter || false;
363        let data, elemTag, elemType = '';
364
365        if (enter === true) {
366            data = $(elem).serialize();
367        } else {
368            elemTag = elem.target.tagName.toUpperCase();
369
370            if (elem.target.type !== undefined) {
371                elemType = elem.target.type.toUpperCase();
372            }
373
374            if (elemTag === 'TEXTAREA' || elemTag === 'INPUT' && (elemType === 'TEXT' || elemType === 'RESET')) {
375                return;
376            }
377
378            data = elemTag !== 'FORM' ? $(this).closest('form').serialize() : $(this).serialize();
379        }
380
381        getId(elemTag);
382
383        $.ajax({
384            beforeSend: function() {
385                if (dleFilter.hideLoading == 0) {
386                    ShowLoading('');
387                }
388            },
389            url: dle_root + 'engine/lazydev/dle_filter/ajax.php',
390            type: 'POST',
391            data: {
392                data: data,
393                url: dleFilter.path,
394                dle_hash: dle_login_hash,
395                dleFilterJSData
396            },
397            success: function(output) {
398                if (output.error) {
399                    DLEalert(output.text, dle_info);
400                } else {
401                    filterWork(output);
402                }
403            },
404            error: function (output) {
405                filterWork(output.responseText);
406            }
407        }).always(function() {
408            if (dleFilter.hideLoading == 0) {
409                HideLoading('');
410            }
411        });
412    };
413
414    // Сохраняем данные спидбара
415    if ($('#dle-speedbar').length > 0) {
416        dleFilter.speedbar = $('#dle-speedbar').html();
417    }
418
419    // Сохраняем данные контента
420    if ($('#dle-content').length > 0) {
421        dleFilter.content = $('#dle-content').html();
422    }
423
424    // Задаем callback для click / change в форме фильтра
425    $('body').on('click', '[data-dlefilter=submit]', filterAjax);
426
427    if (dleFilter.button == 0) {
428        $('body').on('change', '[data-dlefilter*=dle-filter]', filterAjax);
429    }
430
431    // Callback для очистки фильтра
432    $('body').on('click', '[data-dlefilter=reset]', filterClear);
433
434    // Работа с датой в слайдере
435    let dateToTS = function(date) {
436        return date.valueOf();
437    };
438
439    let validateDate = function(date) {
440        date = date.toString().split(',');
441        if (Array.isArray(date) && date.length === 3) {
442            date[0] = parseInt(date[0]);
443            date[1] = parseInt(date[1]);
444            date[2] = parseInt(date[2]);
445            if (date[0] > 0 && (date[1] > 0 && date[1] <= 12) && (date[2] > 0 && date[2] <= 31)) {
446                return date;
447            }
448        }
449
450        return false;
451    };
452
453    // Метки в слайдере
454    function convertToPercent(num, min, max) {
455        return (num - min) / (max - min) * 100;
456    }
457
458    function addMark($slider, config, mark) {
459        let html = '';
460        let left = 0;
461        let leftPercent = '';
462
463        for (let i = 0; i < mark.length; i++) {
464            let tempMark = mark[i].toString().split('|');
465
466            left = convertToPercent(parseInt(tempMark[0]), config.min, config.max);
467            leftPercent = left + '%';
468            html += '<span class="sliderShowcaseMark" style="left: ' + leftPercent + '">' + tempMark[1] + '</span>';
469        }
470
471        $slider.append(html);
472    }
473
474    // Работа со слайдером
475    $('[data-dlefilter*=dle-filter]').find('input[type="text"][name*="r."]').each(function() {
476        let sliderVars = $(this).data('slider-config');
477        let sliderType = $(this).data('slider-type');
478        let sliderLang = $(this).data('slider-lang');
479        let sliderMark = $(this).data('slider-mark');
480
481        let date = '';
482
483        if (sliderVars !== undefined && sliderVars.length > 0) {
484            let sliderConfig = {};
485
486            if (sliderVars.slice(-1) === ';') {
487                sliderVars = sliderVars.slice(0, -1);
488            }
489
490            sliderVars = sliderVars.split(';');
491            for (let i = 0; i < sliderVars.length; i++) {
492                let attempt = sliderVars[i].split(':');
493                attempt[0] = attempt[0].trim();
494                switch (attempt[0]) {
495                    case 'АвтоПолзунок':
496                    case 'АвтоПовзунок':
497                    case 'AutoSlider':
498                        sliderConfig.slider = true;
499                        break;
500                    case 'Одиночный слайдер':
501                    case 'Один слайдер':
502                    case 'Single':
503                        sliderConfig.type = 'single';
504                        break;
505                    case 'Двойной слайдер':
506                    case 'Два слайдера':
507                    case 'Double':
508                        sliderConfig.type = 'double';
509                        break;
510                    case 'Минимальное значение':
511                    case 'Мінімальне значення':
512                    case 'Min':
513                        if (attempt[1] !== undefined) {
514                            if ($.isNumeric(attempt[1])) {
515                                sliderConfig.min = attempt[1];
516                            } else if (sliderType === 'date') {
517                                date = validateDate(attempt[1]);
518                                if (date !== false) {
519                                    sliderConfig.min = dateToTS(new Date(date[0], date[1] - 1, date[2]));
520                                }
521                            }
522                        }
523                        break;
524                    case 'Максимальное значение':
525                    case 'Максимальне значення':
526                    case 'Max':
527                        if (attempt[1] !== undefined) {
528                            if ($.isNumeric(attempt[1])) {
529                                sliderConfig.max = attempt[1];
530                            } else if (sliderType === 'date') {
531                                date = validateDate(attempt[1]);
532                                if (date !== false) {
533                                    sliderConfig.max = dateToTS(new Date(date[0], date[1] - 1, date[2]));
534                                }
535                            }
536                        }
537                        break;
538                    case 'Начало слайдера':
539                    case 'Початок слайдера':
540                    case 'Start':
541                        if (attempt[1] !== undefined) {
542                            if ($.isNumeric(attempt[1])) {
543                                sliderConfig.from = attempt[1];
544                            } else if (sliderType === 'date') {
545                                date = validateDate(attempt[1]);
546                                if (date !== false) {
547                                    sliderConfig.from = dateToTS(new Date(date[0], date[1] - 1, date[2]));
548                                }
549                            }
550                        }
551                        break;
552                    case 'Конец слайдера':
553                    case 'Кінець слайдера':
554                    case 'End':
555                        if (attempt[1] !== undefined) {
556                            if ($.isNumeric(attempt[1])) {
557                                sliderConfig.to = attempt[1];
558                            } else if (sliderType === 'date') {
559                                date = validateDate(attempt[1]);
560                                if (date !== false) {
561                                    sliderConfig.to = dateToTS(new Date(date[0], date[1] - 1, date[2]));
562                                }
563                            }
564                        }
565                        break;
566                    case 'Шаг':
567                    case 'Крок':
568                    case 'Step':
569                        if (attempt[1] !== undefined && $.isNumeric(attempt[1])) {
570                            sliderConfig.step = attempt[1];
571                        }
572                        break;
573                    case 'Шаблон':
574                    case 'Tpl':
575                        if (attempt[1] !== undefined && attempt[1] !== '') {
576                            sliderConfig.skin = attempt[1];
577                        }
578                        break;
579                    case 'Префикс':
580                    case 'Префікс':
581                    case 'Prefix':
582                        if (attempt[1] !== undefined && attempt[1] !== '') {
583                            sliderConfig.prefix = attempt[1];
584                        }
585                        break;
586                    case 'Постфикс':
587                    case 'Постфікс':
588                    case 'Postfix':
589                        if (attempt[1] !== undefined && attempt[1] !== '') {
590                            sliderConfig.postfix = attempt[1];
591                        }
592                        break;
593                    case 'Сетка':
594                    case 'Сітка':
595                    case 'Grid':
596                        sliderConfig.grid = true;
597                        break;
598                    case 'Красивые числа':
599                    case 'Красиві числа':
600                    case 'Numbers':
601                        sliderConfig.prettify_enabled = true;
602                        break;
603                    case 'Скрыть MinMax':
604                    case 'Приховати MinMax':
605                    case 'Hide MinMax':
606                        sliderConfig.hide_min_max = true;
607                        break;
608                    case 'Скрыть FromTo':
609                    case 'Приховати FromTo':
610                    case 'Hide FromTo':
611                        sliderConfig.hide_from_to = true;
612                        break;
613                }
614            }
615
616            if (sliderConfig.from === undefined) {
617                sliderConfig.from = sliderConfig.min;
618            }
619
620            if (sliderConfig.to === undefined) {
621                sliderConfig.to = sliderConfig.max;
622            }
623
624            if (sliderMark) {
625                let mark = sliderMark.toString().split(',');
626
627                sliderConfig.onStart = function (data) {
628                    addMark(data.slider, sliderConfig, mark);
629                }
630            }
631
632            if (sliderType === 'date') {
633                sliderConfig.prettify = function(ts) {
634                    let d = new Date(ts);
635
636                    return d.toLocaleDateString(sliderLang, {
637                        year: 'numeric',
638                        month: 'long',
639                        day: 'numeric'
640                    });
641                };
642            }
643
644            if (!sliderConfig.prettify_enabled && sliderType !== 'date') {
645                sliderConfig.prettify_enabled = false;
646            }
647
648            if (sliderConfig.slider) {
649                sliderConfig.onFinish = function (data) {
650                    filterAjax($('[name="' + data.input[0].name + '"]').closest('form'), true);
651                };
652            }
653
654            $(this).ionRangeSlider(sliderConfig);
655        }
656    });
657
658    // Работа с Tail.Select
659    if (dleFilter.jsSelect == 1) {
660        $('[data-dlefilter*=dle-filter]').find('select').each(function(index) {
661            $(this).attr('data-select-id', index);
662            let selectVars = $(this).data('select-config');
663            let selectConfig = {};
664            if (selectVars !== undefined && selectVars.length > 0) {
665                if (selectVars.slice(-1) == ';') {
666                    selectVars = selectVars.slice(0, -1);
667                }
668                selectVars = selectVars.split(';');
669                for (let i = 0; i < selectVars.length; i++) {
670                    let attempt = selectVars[i].split(':');
671                    switch (attempt[0]) {
672                        case 'Поиск':
673                        case 'Пошук':
674                        case 'Search':
675                            selectConfig.search = true;
676                            break;
677                        case 'Скрыть выбранные':
678                        case 'Приховати обрані':
679                        case 'Hide':
680                            selectConfig.hideSelected = true;
681                            break;
682                        case 'Максимум выбрать':
683                        case 'Максимум вибрати':
684                        case 'Max':
685                            if (attempt[1] !== undefined && $.isNumeric(attempt[1])) {
686                                selectConfig.multiLimit = attempt[1];
687                            }
688                            break;
689                        case 'Показать количество выбранных':
690                        case 'Показувати кількість вибраних':
691                        case 'Num':
692                            if (!selectConfig.multiContainer) {
693                                selectConfig.multiShowCount = true;
694                            }
695                            break;
696                        case 'Вывод выбранных':
697                        case 'Виведення обраних':
698                        case 'Show':
699                            selectConfig.multiContainer = true;
700                            if (selectConfig.multiShowCount) {
701                                selectConfig.multiShowCount = false;
702                            }
703                            break;
704                        case 'Подсказка':
705                        case 'Підказка':
706                        case 'Prompt':
707                            if (attempt[1] !== undefined && attempt[1] !== '') {
708                                selectConfig.placeholder = attempt[1];
709                            }
710                            break;
711                        case 'Язык':
712                        case 'Мова':
713                        case 'Lang':
714                            if (attempt[1] === undefined || attempt[1].trim() == '') {
715                                attempt[1] = 'ru';
716                            }
717
718                            selectConfig.locale = attempt[1];
719                            break;
720                        case 'Сортировать':
721                        case 'Сортувати':
722                        case 'Sort':
723                            if (attempt[1] !== undefined && (attempt[1] === 'ASC' || attempt[1] === 'DESC')) {
724                                selectConfig.sortItems = attempt[1];
725                            }
726                            break;
727                    }
728                }
729            }
730
731            if (selectConfig.locale == undefined) {
732                selectConfig.locale = 'ru';
733            }
734
735            selectConfig.deselect = true;
736
737            tail.select('[data-dlefilter*=dle-filter] select[data-select-id="' + index + '"]', selectConfig).on('change', function(item, state) {
738                let name = item.option.parentElement.tagName.toUpperCase() === 'OPTGROUP' ? item.option.parentElement.parentElement.name : item.option.parentElement.name;
739
740                if (state === 'unselect' && !$('[name="' + name + '"] option:selected')) {
741                    $('[name="' + name + '"]').val('');
742                }
743
744                if (dleFilter.button == 0) {
745                    $('[name="' + name + '"]').trigger('change');
746                }
747            });
748        });
749    }
750
751    // Автоматически задаем chosen
752    if (dleFilter.jsSelect == 2) {
753        $('[data-dlefilter*=dle-filter] select').chosen();
754    }
755
756    // Автоматически задаем niceSelect
757    if (dleFilter.jsSelect == 3) {
758        $('[data-dlefilter*=dle-filter] select').niceSelect();
759    }
760
761    // AJAX навигация
762    let ajaxNavigation = function (urlPage, pathPage) {
763        if (urlPage !== undefined) {
764            $.ajax({
765                url: urlPage,
766                beforeSend: function() {
767                    if (dleFilter.hideLoading == 0) {
768                        ShowLoading('');
769                    }
770                },
771                success: function(output) {
772                    if ($('#dle-speedbar').length > 0) {
773                        $('#dle-speedbar').html($('#dle-speedbar', output).html());
774                    }
775
776                    if (navigation !== 'none' && dleFilter.navApart == 1) {
777                        let parser = new DOMParser();
778                        let el = parser.parseFromString(output, 'text/html');
779                        let nav = getNavigation(el);
780                        let navNow = getNavigation(document.body);
781
782                        filterNavigation = nav;
783                        $(navNow).replaceWith(nav);
784                    }
785
786                    if (window.location.href.toString().indexOf(pathPage) + 1) {
787                        $('#dle-content').html($('#dle-content', output).html());
788                    } else {
789                        $('#' + dleFilter.id).html($('#dle-content', output).html());
790                    }
791
792                    if (dleFilter.lazy == 1 && typeof lazyLoadXT !== 'undefined' && typeof lazyLoadXT === 'function') {
793                        $('[data-src]').lazyLoadXT();
794                    } else if (dleFilter.lazy == 1 && typeof jQuery().lazyLoadXT !== 'undefined' && typeof jQuery().lazyLoadXT === 'function') {
795                        $('[data-src]').lazyLoadXT();
796                    }
797
798                    if (dleFilter.ajaxUrl == 0) {
799                        let titlePage = $(output).filter('title').text();
800                        window.history.pushState(titlePage, '', urlPage);
801                        if (titlePage != '') {
802                            document.title = $(output).filter('title').text();
803                        }
804                    }
805
806                    if (dleFilter.ajaxAnim == 0) {
807                        $('html, body').animate({
808                            scrollTop: $('#' + dleFilter.id).offset().top
809                        }, 400);
810                    }
811                },
812                error: function(output) {
813                    if (dle_group === 1) {
814                        console.log(output.responseText, dle_info);
815                    }
816                }
817            }).always(function() {
818                if (dleFilter.hideLoading == 0) {
819                    HideLoading('');
820                }
821            });
822        }
823    }
824
825    // Ajax навигация для готовых страниц
826    if (dleFilter.ajaxPage == 1 && urlFilter != 0) {
827        $('body').on('click', 'a[href*="' + urlFilter + '"]', function(e) {
828            e.preventDefault();
829            dleFilter.id = 'dle-content';
830            let urlPage = $(this).attr('href');
831            ajaxNavigation(urlPage, urlFilter);
832
833            return false;
834        });
835    }
836
837    // AJAX навигация для страниц фильтра
838    if (dleFilter.ajaxNav == 1) {
839        $('body').on('click', 'a[href*="/' + dleFilter.filterUrl + '/"]', function(e) {
840            e.preventDefault();
841            getId(this);
842            let urlPage = $(this).attr('href');
843            ajaxNavigation(urlPage, '/' + dleFilter.filterUrl + '/');
844
845            return false;
846        });
847    }
848
849    // Расхождение массива
850    Array.prototype.diff = function(a) {
851        return this.filter(function(i) {return a.indexOf(i) < 0;});
852    };
853
854    let showList = {};
855    let hideList = {};
856    let whatHide = {};
857
858    // Скрытие и показ блоков
859    let showAndHideFilter = function(e) {
860        let elemTag = $(e).prop('tagName').toUpperCase();
861        let elemType = $(e).prop('type').toUpperCase();
862
863        let showNode = $(e).data('dlefilter-show');
864        let objShow = {};
865        if (showNode.slice(-1) == ';') {
866            showNode = showNode.slice(0, -1);
867        }
868
869        showNode = showNode.split(';');
870        $.each(showNode, function(index, value) {
871            let tempObj = value.split(':');
872            if (tempObj[0] && tempObj[1]) {
873                objShow[tempObj[0]] = tempObj[1].split(',');
874            }
875        });
876
877        if (elemTag === 'SELECT') {
878            $(e).find('option').each(function(p, elem) {
879                $.each(objShow, function(index, value) {
880                    if ($(elem).val().toString().length > 0 && $(elem).prop('selected') && $.inArray($(elem).val(), value) >= 0) {
881                        if (dleFilter.jsSelect == 1) {
882                            showList[index] = '.dle-filter-select-' + index;
883                        } else {
884                            showList[index] = '[data-dlefilter-hide="' + index + '"]';
885                        }
886                    } else {
887                        if (dleFilter.jsSelect == 1) {
888                            hideList[index] = '.dle-filter-select-' + index;
889                        } else {
890                            hideList[index] = '[data-dlefilter-hide="' + index + '"]';
891                        }
892                    }
893                });
894            });
895        } else if (elemTag === 'INPUT') {
896            $.each(objShow, function(index, value) {
897                if (elemType === 'TEXT') {
898                    if ($.inArray($(e).val(), value) >= 0) {
899                        showList[index] = '[data-dlefilter-hide="' + index + '"]';
900                    } else {
901                        hideList[index] = '[data-dlefilter-hide="' + index + '"]';
902                    }
903                } else if (elemType === 'RADIO' || elemType === 'CHECKBOX') {
904                    if ($(e).prop('checked') && $.inArray($(e).val(), value) >= 0) {
905                        showList[index] = '[data-dlefilter-hide="' + index + '"]';
906                    } else {
907                        hideList[index] = '[data-dlefilter-hide="' + index + '"]';
908                    }
909                }
910            });
911        } else if (elemTag === 'TEXTAREA') {
912            $.each(objShow, function(index, value) {
913                if ($.inArray($(e).val(), value) >= 0) {
914                    showList[index] = '[data-dlefilter-hide="' + index + '"]';
915                } else {
916                    hideList[index] = '[data-dlefilter-hide="' + index + '"]';
917                }
918            });
919        }
920
921        let temp_array1 = Object.values(hideList);
922        let temp_array2 = Object.values(showList);
923
924        whatHide = temp_array1.filter(x => !temp_array2.includes(x))
925        if (whatHide) {
926            $.each(whatHide, function(index, value) {
927                $(value).find('input[type="text"]').each(function() {
928                    let nameElem = $(this).prop('name');
929                    if ($(this).data('dlefilter-show') !== undefined) {
930                        showAndHideFilter(this);
931                    }
932                    if (nameElem.length > 0) {
933                        if (nameElem.indexOf('r.') + 1) {
934                            let slider = $(this).data('ionRangeSlider');
935							if (slider.options.type == 'single') {
936                                slider.update({
937									from: slider.options.min
938								});
939
940                            } else if (slider.options.type == 'double') {
941                                slider.update({
942									from: slider.options.min,
943									to: slider.options.max
944								});
945                            }
946                        } else {
947                            $(this).val('');
948                        }
949                    }
950                });
951
952                $(value).find('select').each(function(index) {
953                    let nameElem = $(this).prop('name');
954                    if (nameElem.length > 0) {
955                        if ($(this).data('dlefilter-show') !== undefined) {
956                            showAndHideFilter(this);
957                        }
958
959                        $(this).children('option').each(function() {
960                            $(this).attr('selected', false);
961                        });
962
963                        if (dleFilter.jsSelect == 1) {
964                            let getTail = $('.tail-select');
965                            if (getTail.length > 0) {
966                                tail.select('[data-dlefilter*=dle-filter] select[data-select-id="' + index + '"]').reload();
967                            }
968                        }
969                    }
970                });
971
972                if (dleFilter.jsSelect == 2) {
973                    let getChosen = $('.chosen-results');
974                    if (getChosen.length > 0) {
975                        $('[data-dlefilter*=dle-filter] select').trigger('chosen:updated');
976                    }
977                }
978
979                if (dleFilter.jsSelect == 3) {
980                    $('[data-dlefilter*=dle-filter] select').niceSelect('update');
981                }
982
983                $(value).find('input[type="radio"], input[type="checkbox"]').each(function() {
984                    let nameElem = $(this).prop('name');
985                    if (nameElem.length > 0) {
986                        if ($(this).data('dlefilter-show') !== undefined) {
987                            showAndHideFilter(this);
988                        }
989                        $(this).attr('checked', false);
990                    }
991                });
992            });
993        }
994    };
995
996    // Если текущая страница фильтр - задаем параметры
997    if (dleFilter.path.indexOf('/' + dleFilter.filterUrl + '/') + 1) {
998        setFilterParam();
999    }
1000
1001    // Скрываем скрываемые блоки
1002    $('[data-dlefilter-hide]').hide();
1003
1004    // Показываем блоки если они нужны
1005    $('body').find('[data-dlefilter-show]').each(function(p, e) {
1006        hideList = {};
1007        whatHide = {};
1008        showList = {};
1009
1010        showAndHideFilter(e);
1011
1012        if (whatHide) {
1013            $(whatHide.join(', ')).hide();
1014        }
1015
1016        if (showList) {
1017            $(Object.values(showList).join(', ')).show();
1018        }
1019    });
1020
1021    // Показываем блоки если они нужны если изменились данные фильтра
1022    $('body').on('change', '[data-dlefilter-show]', function(e) {
1023        hideList = {};
1024        whatHide = {};
1025        showList = {};
1026
1027        $('body').find('[data-dlefilter-show]').each(function(p, z) {
1028            showAndHideFilter(z);
1029        });
1030
1031        if (whatHide) {
1032            $(whatHide.join(', ')).hide();
1033        }
1034
1035        if (showList) {
1036            $(Object.values(showList).join(', ')).show();
1037        }
1038    });
1039
1040});

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.