PageSourceSearch

https://www.dia-m.ru/local/templates/diam/js/calendar.js?171629020513848

js dia-m.ru collected 2026-10-02 17:50:02 UTC 13,848 bytes, 377 lines download raw bytes

1$(document)
2    .on('ready', function() {
3        fl_select_placeholder();
4    })
5    .on('mouseup', function(e) {
6        let div = $(".date-range-select");
7        if (!div.is(e.target)
8            && div.has(e.target).length === 0) {
9            let calendar = div.find('form.date-range-body');
10            if(calendar.hasClass('open')) {
11                calendar.removeClass('open');
12            }
13        }
14    })
15    .on('click', '.ev-calendar', function() {
16        if($(this).hasClass('cal-cell')) {
17            set_day($(this));
18        } else {
19            set_month($(this), $(this).data('month'));
20        }
21        return false;
22    })
23    .on('change', 'select[name="MONTH_SELECT"]', function() {
24        set_month($(this), $(this).val());
25        return false;
26    })
27    .on('change', 'select[name="YEAR_SELECT"]', function() {
28        set_year($(this));
29        return false;
30    })
31    .on('input', 'input[name="YEAR_SELECT_INP"]', function() {
32        set_year($(this));
33        return false;
34    })
35    .on('click', '.date-range-select .date-range-title', function(e) {
36        let calendar = $(this).nextAll('form.date-range-body');
37        if(calendar.hasClass('open')) {
38            calendar.removeClass('open');
39        } else {
40            calendar.addClass('open');
41
42            $('input[name="DATE_FROM"], input[name="DATE_TO"]').inputmask({
43                mask: "99.99.9999",
44            });
45
46            if(calendar.find('.calendar_from').html() == '') {
47                tfrom = $('input[name="DATE_FROM"]').val();
48                if(tfrom != '') {
49                    arr = tfrom.split('.');
50                    calc_ajax($('.calendar_from'), arr[2], arr[1], arr[0]);
51                } else {
52                    calc_ajax($('.calendar_from'));
53                }
54            }
55        }
56    })
57    .on('click', '.date-range-form-input input', function() {
58        let calendar = $('.calendar-range-block > [data-input="'+$(this).prop('name')+'"]');
59        let cal_second = false;
60        let inp_second = false;
61
62        if($(this).hasClass('active')) {
63            $(this).removeClass('active');
64        } else {
65            $(this).addClass('active');
66        }
67        if($(this).next().length) {
68            inp_second = $(this).next();
69        }
70        if($(this).prev().length) {
71            inp_second = $(this).prev();
72        }
73        inp_second.removeClass('active');
74
75        if(calendar.next().length) {
76            cal_second = calendar.next();
77        }
78        if(calendar.prev().length) {
79            cal_second = calendar.prev();
80        }
81        if(calendar.hasClass('visible')) {
82            calendar.removeClass('visible');
83        } else {
84            calendar.addClass('visible');
85        }
86        cal_second.removeClass('visible');
87        return false;
88    })
89    .on('change', '.date-range-form-input input', function() {
90        if(!calendar_validate($(this)) && $(this).val() != '') {
91            $(this).addClass('incorrect');
92            if(!$(this).closest('div').find('.error-date').length) {
93                $(this).closest('div').append('<div class="error-date">Не корректный формат даты</div>');
94            }
95        } else {
96            $(this).removeClass('incorrect');
97            if(!$(this).closest('div').find('input.incorrect').length && $(this).closest('div').find('.error-date').length) {
98                $(this).closest('div').find('.error-date').remove();
99            }
100            if($(this).val() != '') {
101                $(this).prop('name'); // DATE_FROM
102                //let node = $('div[data-input='+$(this).prop('name')+'] input[name="DATE_SELECTED"]');
103                let calendar = $('div[data-input='+$(this).prop('name')+']');
104                let val = $(this).val();
105                val = val.split('.');
106                let tdate = new Date(val[2], (val[1] - 1), val[0]);
107                let dateItem = false;
108                let tname = false;
109                if(calendar.next().length) {
110                    dateItem = calendar.next().find('input[name="DATE_SELECTED"]');
111                }
112                if(calendar.prev().length) {
113                    dateItem = calendar.prev().find('input[name="DATE_SELECTED"]');
114                }
115                let tday1 =  dateItem.data('day');
116                if(tday1 < 10) {
117                    tday1 = '0'+tday1;
118                }
119                let tmonth1 = dateItem.data('month');
120                if(tmonth1 < 10) {
121                    tmonth1 = '0'+tmonth1;
122                }
123                let year1 = dateItem.data('year');
124                tname = dateItem.closest('div[class*="calendar_"]').data('input');
125                if($('input[name="'+tname+'"]').val() == '') {
126                    $('input[name="' + tname + '"]').val(tday1 + '.' + tmonth1 + '.' + year1);
127                }
128                calc_ajax (calendar, tdate.getFullYear(), (tdate.getMonth()+1), tdate.getDate());
129
130                swap_calendar();
131            }
132        };
133    });
134$(window)
135    .on('resize', function() {
136        fl_select_placeholder();
137    });
138
139function fl_select_placeholder() {
140    if($(this).width() <= 460 ) {
141        $('.news_years_select select').attr('data-placeholder', 'Год');
142        if($('.news_years_select .jq-selectbox__select-text').html() == 'Выберите год') {
143            $('.news_years_select .jq-selectbox__select-text').html('Год');
144        }
145        $('.news_month_select select').attr('data-placeholder', 'Месяц');
146        if($('.news_month_select .jq-selectbox__select-text').html() == 'Выберите месяц') {
147            $('.news_month_select .jq-selectbox__select-text').html('Месяц');
148        }
149    } else {
150        $('.news_years_select select').attr('data-placeholder', 'Выберите год');
151        if($('.news_years_select .jq-selectbox__select-text').html() == 'Год') {
152            $('.news_years_select .jq-selectbox__select-text').html('Выберите год');
153        }
154        $('.news_month_select select').attr('data-placeholder', 'Выберите месяц');
155        if($('.news_month_select .jq-selectbox__select-text').html() == 'Месяц') {
156            $('.news_month_select .jq-selectbox__select-text').html('Выберите месяц');
157        }
158    }
159}
160
161function set_year(node) {
162    let tyear = node.val();
163    let tmonth = node.data('month');
164    let tday = node.data('day');
165    if(tyear.length > 3) {
166        let t_new_date = false;
167        let tmp_date = new Date(tyear, (tmonth - 1), tday);
168        let last_date = new Date(tyear, tmonth, 0);
169        if(last_date < tmp_date) {
170            t_new_date = last_date.getDate();
171        }
172        set_day(node, t_new_date, false, tyear);
173    }
174}
175
176function set_month(node, month) {
177    let calendar = node.closest('div[class*="calendar_"]');
178    let tyear = node.data('year');
179    let tmonth = month;
180    let tday = node.data('day');
181    let t_new_date = false;
182    let tmp_date = new Date(tyear, (tmonth - 1), tday);
183    let last_date = new Date(tyear, tmonth, 0);
184    if(last_date < tmp_date) {
185        t_new_date = last_date.getDate();
186    }
187    set_day(node, t_new_date, tmonth);
188}
189
190function set_day(node, day=false, month=false, year=false) {
191    let calendar = node.closest('div[class*="calendar_"]');
192    let tyear = year;
193    if(tyear === false) {
194        tyear = node.data('year');
195    }
196    let tmonth = month;
197    if(tmonth === false) {
198        tmonth = node.data('month');
199    }
200    let tday = day;
201    if(tday === false) {
202        tday = node.data('day');
203    }
204    let tmp_date = new Date(tyear, (tmonth - 1), tday);
205    let now_date = new Date();
206    if(tmp_date > now_date) {
207        tyear = now_date.getFullYear();
208        tmonth = now_date.getMonth() + 1;
209        tday = now_date.getDate();
210    }
211    let tmonth1 = tmonth;
212    let tday1 = tday;
213    if(tmonth1 < 10)
214        tmonth1 = '0'+tmonth1;
215    if(tday1 < 10)
216        tday1 = '0'+tday1;
217    $('input[name="'+calendar.data('input')+'"]').val(tday1+'.'+tmonth1+'.'+tyear);
218
219    // установить соседу сегодняшнюю дату если там пусто
220    let dateItem = null;
221    let input = calendar.data('input') ;
222    if(calendar.next().length) {
223        dateItem = calendar.next().find('.now').eq(-1).find('div');
224        input = calendar.next();
225    }
226    if(calendar.prev().length) {
227        dateItem = calendar.prev().find('.now').eq(0).find('div');
228        input = calendar.prev();
229    }
230    let tyear2 = dateItem.data('year');
231    let tmonth2 = dateItem.data('month');
232    let tday2 = dateItem.data('day');
233    if(input.val() == '') {
234        if(tyear2 == null) {
235            tyear2 = input.find('.calendar-block').data('year');
236            tmonth2 = input.find('.calendar-block').data('month');
237            tday2 = input.find('.calendar-block').data('day');
238        }
239        if (tmonth2 < 10) {
240            tmonth2 = '0' + tmonth2;
241        }
242        if (tday2 < 10) {
243            tday2 = '0' + tday2;
244        }
245        $('input[name="' + input.data('input') + '"]').val(tday2 + '.' + tmonth2 + '.' + tyear2);
246    }
247    if($('.error-date').length) {
248        $('.error-date').remove();
249    }
250    if($('input[name="DATE_FROM"], input[name="DATE_TO"]').hasClass('incorrect')) {
251        $('input[name="DATE_FROM"], input[name="DATE_TO"]').removeClass('incorrect');
252    }
253    calc_ajax (calendar, tyear, tmonth, tday);
254}
255
256function calc_ajax(calendar, tyear = false, tmonth = false, tday = false, single = false) {
257    let ajax_data = {};
258    if(tyear) {
259        ajax_data['year'] = tyear;
260    }
261    if(tyear) {
262        ajax_data['month'] = tmonth;
263    }
264    if(tyear) {
265        ajax_data['day'] = tday;
266    }
267    ajax_data['tfrom'] = $('input[name="DATE_FROM"]').val();
268    ajax_data['tto'] = $('input[name="DATE_TO"]').val();
269    calc_ajax_call(calendar, ajax_data);
270    let other_data = {};
271    let other_calendar = false;
272    if(calendar.next().length) {
273        other_calendar = calendar.next();
274        if(ajax_data['tto'] === "") {
275            other_data['tfrom'] = ajax_data['tfrom'];
276            other_data['tto'] = "";
277        } else {
278            other_data = ajax_data;
279        }
280    }
281    if(calendar.prev().length) {
282        other_calendar = calendar.prev();
283        if(ajax_data['tfrom'] === "") {
284            other_data['tfrom'] = "";
285            other_data['tto'] = ajax_data['tto'];
286        } else {
287            other_data = ajax_data;
288        }
289    }
290    other_data['year'] = other_calendar.find('[name="DATE_SELECTED"]').data('year');
291    other_data['month'] = other_calendar.find('[name="DATE_SELECTED"]').data('month');
292    other_data['day'] = other_calendar.find('[name="DATE_SELECTED"]').data('day');
293    if ($('input[name="DATE_TO"]').val() && other_calendar.hasClass('calendar_to')) {
294        let arrTo = $('input[name="DATE_TO"]').val().split('.');
295        other_data['year'] = arrTo[2];
296        other_data['month'] = arrTo[1];
297        other_data['day'] = arrTo[0];
298    }
299    calc_ajax_call(other_calendar, other_data);
300
301    swap_calendar();
302}
303
304function calc_ajax_call(item, data) {
305    item.addClass('waiting');
306    $.ajax({
307        url: '/local/ajax/calendar.php',
308        type: 'POST',
309        data: data,
310    })
311        .done(function (html) {
312            item.html(html);
313        })
314        .fail(function () {
315            console.log("calc_ajax error");
316        })
317        .always(function () {
318            item.find('select').each(function() {
319                select_style($(this));
320            });
321            item.removeClass('waiting');
322        });
323}
324
325function select_style(tsel) {
326    tsel.styler({
327        onFormStyled: function () {
328            if(tsel.prop('name') == 'YEAR_SELECT') {
329                let inp = tsel.closest('.jqselect').next('.year-inp-box');
330                tsel.closest('.jqselect').find('.jq-selectbox__dropdown').find('ul').append('<li>' + inp.html() + '</li>');
331                inp.remove();
332            }
333            tsel.closest('jqselect').addClass(tsel.prop('class'));
334        }
335    });
336}
337
338function calendar_validate(node) {
339    if(node.val().match(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/) === null) {
340        return false;
341    }
342    return true;
343}
344
345function swap_calendar() {
346    let date_from = false;
347    let date_to = false;
348    let tmp_from = $('input[name="DATE_FROM"]').val();
349    if(tmp_from != '') {
350        tmp_from = tmp_from.split('.');
351        date_from = new Date(tmp_from[2], (tmp_from[1] - 1), tmp_from[0]);
352    }
353    let tmp_to = $('input[name="DATE_TO"]').val();
354    if(tmp_to != '') {
355        tmp_to = tmp_to.split('.');
356        date_to = new Date(tmp_to[2], (tmp_to[1] - 1), tmp_to[0]);
357    }
358    if(tmp_from && tmp_to && date_from > date_to) {
359        let inp = $('input[name="DATE_FROM"]').val();
360        let ajax_data = {};
361        $('input[name="DATE_FROM"]').val($('input[name="DATE_TO"]').val());
362        $('input[name="DATE_TO"]').val(inp);
363
364        ajax_data['tfrom'] = $('input[name="DATE_FROM"]').val();
365        ajax_data['tto'] = $('input[name="DATE_TO"]').val();
366        ajax_data['day'] = tmp_to[0];
367        ajax_data['month'] = tmp_to[1];
368        ajax_data['year'] = tmp_to[2];
369        calc_ajax_call($('.calendar-range-block > .calendar_from'), ajax_data);
370
371        ajax_data['day'] = tmp_from[0];
372        ajax_data['month'] = tmp_from[1];
373        ajax_data['year'] = tmp_from[2];
374        calc_ajax_call($('.calendar-range-block > .calendar_to'), ajax_data);
375    }
376
377}

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.