PageSourceSearch

https://cdnn.1prime.ru//js/pages/search.js

js 1prime.ru collected 2026-10-01 08:35:51 UTC 13,977 bytes, 405 lines download raw bytes

1var riaSearch = {
2    searchquery: null,
3    modal: $(".modal-list"),
4    wrapper: $(".search-container"),
5    calendar: {
6        minDate: "2000-09-01",
7        selector: ".date-range-calendar",
8        lastSel: false
9    },
10    url: {
11        articles: "/services/search/getmore/",
12        suggest: "/services/tags/gettotal/"
13    },
14    request: {
15        tags_limit: 20,
16        date_from: null,
17        date_to: null,
18        list_sids: [],
19        sort: null,
20        query: $(".search-query__input").val(),
21    },
22    init: function () {
23        var inputText = riaSearch.wrapper.find(".search-query__input");
24
25        // Создать календарь
26        riaSearch.datepicker();
27
28        // Теги
29        riaSearch.suggest();
30
31        // Сбросить все фильтры
32        riaSearch.wrapper.on("click", ".search-filters__reset", function () {
33            if (!$(this).hasClass('m-active')) {
34                return
35            }
36
37            riaSearch.request.list_sids = [];
38            riaSearch.request.date_from = null;
39            riaSearch.request.date_to = null;
40            riaSearch.request.sort = null;
41
42            riaSearch.datePickerClear();
43            riaSearch.renderFilters();
44            riaSearch.getArticles();
45        });
46
47        // Сброс поля ввода
48        riaSearch.wrapper.on('click', '.search-query__reset', function(e) {
49            e.preventDefault();
50            riaSearch.wrapper.find('.search-query__input').val('').focus();
51        })
52
53        // Поиск по тексту
54        riaSearch.wrapper.on("submit", ".search-query", function (e) {
55            e.preventDefault();
56
57            riaSearch.request.query = inputText.val();
58            riaSearch.getArticles();
59        });
60
61        // Удалить фильтр
62        riaSearch.wrapper.on("click", ".search-filters__list-item-remove", function () {
63            var filter = $(this).data("filter"),
64                sid = $(this).data("sid");
65
66            if (filter === "period") {
67                riaSearch.request.date_from = null;
68                riaSearch.request.date_to = null;
69                riaSearch.datePickerClear();
70            }
71
72            if (filter === "list_sids") {
73                riaSearch.request.list_sids =
74                    riaSearch.request.list_sids.filter((i) => i.sid != sid);
75            }
76
77            riaSearch.renderFilters();
78            riaSearch.getArticles();
79        });
80
81        // Сортировка
82        riaSearch.wrapper.on("click", ".search-info__btn", function () {
83            var btn = $(this);
84
85            btn.addClass("m-active")
86                .siblings(".search-info__btn")
87                .removeClass("m-active");
88
89            riaSearch.request.sort = btn.data("sort");
90            riaSearch.getArticles();
91        });
92    },
93    suggest: function () {
94        $("#tagBtn").on("click", function (e) {
95            e.stopPropagation();
96            $(document).trigger("click.hidedaterange");
97
98            var btn = $(this);
99
100            btn.toggleClass('m-active');
101
102            if (document.documentElement.clientWidth > 925) {
103                btn.toggleClass("active");
104            } else {
105                $("html").toggleClass("modal-tags");
106                ria.disablePageScroll(true);
107
108                riaSearch.modal
109                    .html( btn.find(".search-filters__suggest") )
110                    .toggleClass("active");
111            }
112
113            $(document).on("click.hidesearchdropdown", function () {
114                $("html").removeClass("modal-tags");
115                ria.disablePageScroll(false);
116
117                riaSearch.modal.removeClass("active");
118
119                if (btn) {
120                    btn.removeClass("active m-active");
121                    btn.append( riaSearch.modal.find(".search-filters__suggest") );
122                }
123
124                $(document).off("click.hidesearchdropdown");
125            });
126
127            $(".search-filters__suggest-input").focus();
128        });
129
130        $(".search-filters__suggest").ajaxSuggest({
131            url: riaSearch.url.suggest,
132            data: {
133                offset: 0,
134                page: 0,
135                xmlview: "tags",
136                limit: 50,
137                type: "tag",
138            },
139            input: ".search-filters__suggest-input",
140            container: ".search-filters__add-suggest ul",
141            stringLength: 3,
142            delay: 200,
143            requestQueryName: "query",
144            messageMoreLetters: true,
145            clearCallback: function () {},
146            beforeCallback: function () {
147                $(".search-filters__add-suggest").addClass("m-loading");
148            },
149            successCallback: function (data, container) {
150                $(".search-filters__add-suggest").removeClass("m-loading");
151            },
152        });
153
154        // Очистить поле поиска тега
155        $('.search-filters__suggest-input-reset').on('click', function(e) {
156            e.stopPropagation();
157            e.preventDefault();
158
159            $('.search-filters__suggest-input').val('');
160        });
161
162        $(".search-filters__add-suggest").on("click", "li:not(.m-disabled)", function () {
163                var item = $(this),
164                    tag = {
165                        name: this.outerText,
166                        sid: item.data("value"),
167                    };
168
169                if (riaSearch.request.list_sids.filter((i) => i.sid === tag.sid).length) {
170                    return;
171                }
172
173                riaSearch.request.list_sids.push(tag);
174
175                riaSearch.renderFilters();
176                riaSearch.getArticles();
177            }
178        );
179    },
180    datepicker: function () {
181        var monthsCount = 13,
182            monthHeight = 192,
183            monthsMax = Math.ceil( moment().diff(moment(riaSearch.calendar.minDate), "months", true) );
184
185        var periodBtn = $("#periodBtn");
186        var scrollWrapper = $(".date-range-scroll");
187        
188        scrollWrapper.theinScroll();
189
190        riaSearch.datepickerInit(
191            riaSearch.calendar.selector,
192            [moment().toDate(), moment().toDate()],
193            monthsCount
194        );
195        monthHeight = $(".pmu-instance").height() || monthHeight;
196
197        periodBtn.on("click", function (e) {
198            e.stopPropagation();
199            $(document).trigger("click.hidesearchdropdown");
200
201            periodBtn.toggleClass('m-active');
202
203            if (document.documentElement.clientWidth < 925) {
204                $("html").toggleClass("modal-tags");
205                ria.disablePageScroll(true);
206            } else {
207                $(".date-range").css({
208                    top: periodBtn.offset().top + 20,
209                    left: periodBtn.offset().left,
210                });
211            }
212            $(".date-range").toggleClass("active");
213
214            $(document).on("click.hidedaterange", function () {
215                $("html").removeClass("modal-tags");
216                ria.disablePageScroll(false);
217                $(".date-range").removeClass("active");
218                periodBtn.removeClass('m-active');
219                $(document).off("click.hidedaterange");
220            });
221        });
222
223        $(riaSearch.calendar.selector).on("pickmeup-change", function (e) {
224            riaSearch.calendar.lastSel = $(riaSearch.calendar.selector)[0].__pickmeup.options.lastSel;
225
226            if (!riaSearch.calendar.lastSel) {
227                var start = moment(e.detail.date[0]),
228                    end = moment(e.detail.date[1]);
229
230                $(document).trigger("click.hidedaterange");
231
232                riaSearch.request.date_from = start;
233                riaSearch.request.date_to = end;
234
235                riaSearch.renderFilters();
236                riaSearch.getArticles();
237            }
238        });
239
240        scrollWrapper.trigger("add-scrolling-trigger.the-in-scroll", [{
241            name: "calendar_prev",
242            position: monthHeight * 2,
243            sign: "<"
244        }]);
245
246        scrollWrapper.on("calendar_prev.the-in-scroll", function (e, data) {
247            if (monthsCount <= monthsMax) {
248                riaSearch.datepickerInit(
249                    riaSearch.calendar.selector,
250                    pickmeup(riaSearch.calendar.selector).get_date(),
251                    monthsCount
252                );
253
254                scrollWrapper.data("theinScroll").$box.css({ "-webkit-overflow-scrolling": "auto" });
255                scrollWrapper.data("theinScroll").$box.scrollTop(monthHeight * 14);
256                scrollWrapper.data("theinScroll").$box.css({ "-webkit-overflow-scrolling": "touch" });
257
258                if (monthsCount == monthsMax) {
259                    ++monthsCount;
260                } else {
261                    monthsCount = monthsCount + 12 < monthsMax ? monthsCount + 12 : monthsMax;
262                }
263            } else {
264                scrollWrapper.off("calendar_prev.the-in-scroll");
265            }
266        });
267
268        $(".date-range__ranges li").on("click", function () {
269            var th = $(this);
270            var range = th.data("range-days");
271            th.addClass("active").siblings().removeClass("active");
272
273            if (range === 'all') {
274                pickmeup(riaSearch.calendar.selector).set_date([moment().toDate(), moment().toDate()]);
275                riaSearch.request.date_from = null;
276                riaSearch.request.date_to = null;
277            } else {
278                var start = moment().subtract(1, range),
279                end = moment();
280                pickmeup(riaSearch.calendar.selector).set_date([start.toDate(), end.toDate()]);
281                riaSearch.request.date_from = start;
282                riaSearch.request.date_to = end;
283            }
284
285            $("html").removeClass("modal-tags");
286            ria.disablePageScroll(false);
287            $(".date-range").removeClass("active");
288
289            riaSearch.renderFilters({
290                period: range != "all" ? th.text(): null
291            });
292            riaSearch.getArticles();
293        });
294    },
295    datepickerInit: function (selector, dates, monthsCount) {
296        pickmeup(selector).destroy();
297        pickmeup(selector, {
298            flat: true,
299            date: dates,
300            mode: "range",
301            calendars: monthsCount,
302            min: moment(riaSearch.calendar.minDate).toDate(),
303            max: new Date(),
304        });
305        $(riaSearch.calendar.selector)[0].__pickmeup.options.lastSel = riaSearch.calendar.lastSel;
306    },
307    datePickerClear: function () {
308        pickmeup(".date-range-calendar").set_date([
309            moment().toDate(),
310            moment().toDate(),
311        ]);
312    },
313    renderFilters: function (options) {
314        var filtersWrapper = $(".search-filters__list");
315        var filtersTemplate = _.template($("#filtersTemplate").html());
316        var df = riaSearch.request.date_from;
317        var dt = riaSearch.request.date_to;
318
319        var data = {
320            period: df && dt ? df.format("DD.MM.YYYY") + " - " + dt.format("DD.MM.YYYY") : null,
321            list_sids: riaSearch.request.list_sids,
322        };
323
324        if (options && options.period) {
325            data.period = options.period
326        }
327
328        filtersWrapper.html(filtersTemplate({ data }).trim());
329
330        // Раскрасить кнопку Сбросить все
331        $(".search-filters__reset").toggleClass("m-active", !!(data.period || data.list_sids.length)); // not just truthy/falsy
332    },
333    getRequestData: function () {
334        // Убрать пустые значения
335        var data = Object.keys(riaSearch.request)
336            .filter((k) =>
336 riaSearch.request[k])
337            .reduce((a, k) => ({ ...a, [k]: riaSearch.request[k] }), {});
338
339        if (data.list_sids) {
340            data.list_sids = riaSearch.request.list_sids.map((i) => i.sid);
341        }
342
343        if (data.date_from) {
344            data.date_from = data.date_from.format("YYYY-MM-DD");
345        }
346
347        if (data.date_to) {
348            data.date_to = data.date_to.format("YYYY-MM-DD");
349        }
350
351        return data;
352    },
353    getArticles: function () {
354        if (riaSearch.searchquery && typeof riaSearch.searchquery.abort == "function") {
355            riaSearch.searchquery.abort();
356        }
357
358        riaSearch.searchquery = $.ajax({
359            url: riaSearch.url.articles,
360            dataType: "html",
361            beforeSend: function () {
362                $(".list").addClass("loading");
363                $(".list-more").addClass("loading");
364            },
365            data: riaSearch.getRequestData(),
366        }).done(function (response) {
367            var next_url = $(response).attr("data-next-url"),
368                items_count = parseInt($(response).attr("data-count")),
369                new_items = $(response).html();
370
371            if ($(response).hasClass("list-items-loaded")) {
372                if (!isNaN(items_count)) {
373                    $(riaList.options.articlesCountEl)
374                        .addClass("m-active")
375                        .html(`<span>${items_count}</span>${ria.declension(items_count, [" материал", " материалов", " материала"])}`);
376                } else {
377                    $(riaList.options.articlesCountEl).removeClass("m-active");
378                }
379
380                $(".list").empty();
381                
382                var els = $(new_items).appendTo(".list");
383                
384                riaShare.initItems(els);
385
386                if (next_url != "") {
387                    $(".list-more")
388                        .removeClass("hidden")
389                        .attr("data-url", next_url);
390                } else {
391                    $(".list-more").addClass("hidden");
392                }
393            }
394        })
395        .always(function () {
396            $(".list").removeClass("loading");
397            $(".list-more").removeClass("loading");
398        });
399    },
400};
401
402$(function () {
403    riaList.init();
404    riaSearch.init();
405});

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.