PageSourceSearch

https://map.oohdesk.ru/assets/587e27a1/js/mydp.js?v=1593094709

js oohdesk.ru collected 2026-10-07 15:18:50 UTC 13,774 bytes, 374 lines download raw bytes

1let $dpwindow = window || this;
2$dpwindow.dpSetting = {
3    isFilter:           false,
4    applyEmpty:         true,
5    textIsEmpty:        'Период отсутствует',
6    // containerFilter:    '[my-date-picker]',
7    isMulti:            false,
8    selectYear:         0,
9    selectedDates:      [],
10    startDates:      [],
11    allValsDates:       [],
12    tabsBlock:          {},
13    datepickerSettings: function ( $element ) {
14        return {
15            minDate:        parseDate( $element.data('min') ),
16            maxDate:        parseDate( $element.data('max') ),
17            position:      $element.data('params').position ? $element.data('params').position : 'bottom center',
18            onChangeYear:   function ( year ) {
19                dpSetting.selectYear = parseInt(year);
20            },
21            onShow(dp, animationCompleted)
22            {
23                if (animationCompleted)
24                    dpSetting.isFilter = true;
25            },
26            onSelect(dateText, inst){
27                if(
28                    !dpSetting.applyEmpty
29                    && !dpSetting.isMulti
30                    && dateText === ''
31                ){
32                    dpSetting.datepicker.selectDate( parseDate(dpSetting.selectedDates) )
33                }
34                if(
35                    !dpSetting.applyEmpty
36                    && dpSetting.isMulti
37                    && dateText === ''
38                ){
39                    var default_dates = dpSetting.selectedDates;
40                    var add_dates = [];
41                    for ( let i = 0; i < default_dates.length; i++ ) {
42                        add_dates[i] = parseDate(default_dates[i]);
43                    }
44                    dpSetting.datepicker.selectDate( add_dates )
45                }
46            },
47            onRenderCell: function (date, cellType)
48            {
49                if ( cellType == 'month' )
50                {
51                    let vals = $element.data('vals');
52                    let formatted = $.datepicker.formatDate( "yy-mm", date ) + '-01';
53
54                    let isNewSelected = true;
55
56                    if ( vals.indexOf( formatted ) !== -1 )
57                        isNewSelected = false;
58
59                    return {
60                        disabled: isNewSelected
61                    };
62                }
63            },
64            onHide(dp, animationCompleted)
65            {
66                
67                if (animationCompleted) {
68                    if ( dpSetting.isFilter )
69                    {
70                        let date = dp.selectedDates,
71                            isNewSelected = false,
72                            container_datepicker_storage,
73                            selected_dates = [];
74
75                        dpSetting.isFilter = false;
76
77                        date = dp.selectedDates;
78                        isNewSelected = false;
79                        if ( date.length == 0 )
80                        {
81                            // date.push( new Date() );
82                            isNewSelected = true;
83                        }
84
85                        container_datepicker_storage = $element.closest('[datepicker-container]')
86                            .find('[data-datepicker-storage]');
87
88                        container_datepicker_storage.find('option:selected').removeAttr('selected');
89
90                        selected_dates = [];
91
92                        for ( var i = 0; i < date.length; i++ )
93                        {
94                            let formatted = $.datepicker.formatDate( "yy-mm", date[i] ) + '-01';
95
96                            if ( dpSetting.selectedDates.indexOf( formatted ) == -1 )
97                                isNewSelected = true;
98
99                            selected_dates.push(formatted);
100                            let $optrions = container_datepicker_storage.find('option[value^="' + formatted + '"]')
101                                .attr('selected','');
102                        }
103
104                        if ( dpSetting.isMulti )
105                        {
106                            if ( selected_dates.length != dpSetting.selectedDates.length )
107                                isNewSelected = true;
108                        }
109                        else
110                        {
111                            if ( selected_dates.indexOf(dpSetting.selectedDates) == -1 )
112                                isNewSelected = true;
113                        }
114
115                        var isChanged = false;
116                        for ( i = 0; i < selected_dates.length; i++ ) {
117                            if(!dpSetting.startDates.includes(selected_dates[i])){
118                                isChanged = true;
119                            }
120                        }
121
122                        // for ( i = 0; i < dpSetting.startDates.length; i++ ) {
123                        //     if(!selected_dates.includes(dpSetting.startDates[i])){
124                        //         isChanged = true;
125                        //     }
126                        // }
127
128                        if(selected_dates.length != dpSetting.startDates.length){
129                            isChanged = true;
130                        }
131                       if(selected_dates.length == 0){
132                           isChanged = true;
133                       }
134                        if(isNewSelected && isChanged)
135                            $(dp.el).trigger('change');
136                    }
137                }
138            },
139        };
140    },
141    getDatesFormates:   function ( dates, isFull = false ) {
142        let arDatesFormats = {};
143
144        for ( let i = 0; i < dates.length; i++ )
145        {
146            if ( isFull )
147                dates[i] = $.datepicker.formatDate( "yy-mm", dates[i] ) + '-01';
148
149            let yeas = parseInt( $.datepicker.formatDate( "yy", parseDate( dates[i] ) ) );
150            if ( !arDatesFormats.hasOwnProperty(yeas) )
151                arDatesFormats[yeas] = [];
152
153            arDatesFormats[yeas].push(dates[i]);
154        }
155
156        return arDatesFormats;
157    },
158    datepickerMulti: function ( $element ) {
159        let self = this;
160
161        self.datepicker = $element.datepicker().data('datepicker');
162
163        if ( self.datepicker.$datepicker.isJQChild('.datepicker--buttons') )
164            return false;
165
166        this.datepicker._btnOk = function () {
167            this.hide();
168        };
169        this.datepicker._btnCancel = function () {
170
171            let selectDates = this.selectedDates.slice(0);
172            let selectedDateNow = [];
173
174
175            for (let i = 0; i < selectDates.length; i++)
176            {
177                let date = $.datepicker.formatDate( "yy-mm", selectDates[i] ) + '-01';
178
179                if ( self.isMulti )
180                {
181                    if ( self.selectedDates.indexOf(date) == -1 )
182                        this.removeDate(selectDates[i]);
183                }
184                else
185                {
186                    let selectedDate = parseDate(self.selectedDates);
187                    if ( selectedDate.getTime() != selectDates[i].getTime() )
188                        this.removeDate(selectDates[i]);
189                }
190
191                selectedDateNow.push(date);
192            }
193
194            if ( self.isMulti )
195            {
196                for (let i = 0; i < self.selectedDates.length; i++) {
197
198                    if ( selectedDateNow.indexOf(self.selectedDates[i]) == -1 )
199                        this.selectDate(parseDate(self.selectedDates[i]));
200                }
201            }
202            else
203            {
204                if ( selectedDateNow.indexOf(self.selectedDates) == -1 )
205                    this.selectDate(parseDate(self.selectedDates));
206            }
207            this.hide();
208        };
209
210        this.datepicker._btnAll = function ( inst, animationCompleted ) {
211            let arSelectedDates = this.selectedDates.slice(0),
212                arAvailableDates = self.allValsDates,
213                objSelectedDates = dpSetting.getDatesFormates(arSelectedDates, true),
214                objAvailableDates = dpSetting.getDatesFormates(arAvailableDates),
215                selectNowDate = [],
216                isAllSelected,
217                date;
218
219            if ( typeof objSelectedDates[self.selectYear] != 'undefined' && objSelectedDates[self.selectYear].length == objAvailableDates[self.selectYear].length )
220            {
221                selectNowDate.push( $.datepicker.formatDate("yy-mm", new Date())+'-01' );
222                isAllSelected = false;
223            }
224            else
225            {
226                selectNowDate = objAvailableDates[self.selectYear].slice(0);
227                delete objAvailableDates[self.selectYear];
228                delete objSelectedDates[self.selectYear];
229                isAllSelected = true;
230            }
231
232            for ( let i = 0; i < arSelectedDates.length; i++ )
233            {
234                this.removeDate( parseDate(arSelectedDates[i]) );
235            }
236
237            for (var i = 0; i < selectNowDate.length; i++) {
238                this.selectDate( parseDate(selectNowDate[i]) );
239            }
240
241            this.hide();
242        };
243
244        // Создание контейнера кнопок
245        let buttonsContainerTemplate = '<div class="datepicker--buttons"></div>';
246        self.$multiControls = $(buttonsContainerTemplate).appendTo(self.datepicker.$datepicker);
247
248        // Кнопка ок
249        self.okbtn = $('<span class="datepicker--button" data-action="_btnOk">Ок</span>');
250        // Кнопка отменить
251        self.cancelBtn = $('<span class="datepicker--button" data-action="_btnCancel">Отмена</span>');
252        self.btns = self.okbtn.add(self.cancelBtn);
253
254        self.$multiControls.append(self.btns);
255
256        if ( self.isMulti )
257        {
258            // Кнопка все месяцы
259            self.allbtn = $('<span class="datepicker--button" data-action="_btnAll">Выбрать год</span>');
260            self.$multiControls.prepend(self.allbtn);
261        }
262    },
263};
264
265$(document).ready(function () {
266    dpSetting.datepickerInit();
267});
268
269$dpwindow.dpSetting.datepickerInit = function ()
270{
271    $.each( $('.my-datepicker-oohdesk'), function ( key, element ) {
272        let $element = $(element),
273            dates = $element.data('value'),
274            isMulti = $element.data('multiple-dates'),
275            applyEmpty = $element.data('apply-empty'),
276            vals = $element.data('vals'),
277            params = $element.data('params');
278        isEmpty = false;
279        // небольшое условие для загрузчика
280        if(
281            typeof selectedDates !== 'undefined'
282            && typeof selectedDates[params.column] !== 'undefined'
283            && typeof selectedDates[params.column][params.field_type] !== 'undefined'
284        ) {
285            dates = selectedDates[params.column][params.field_type];
286        }
287
288
289        dpSetting.isMulti = isMulti;
290        dpSetting.applyEmpty = applyEmpty == '1';
291        dpSetting.selectedDates = [];
292        dpSetting.allValsDates = vals;
293
294        if ( isMulti )
295        {
296            if ( dates && dates.length == 0 )
297                isEmpty = true;
298        }
299        else
300        {
301            if ( dates && dates.length == 0 )
302            {
303                isEmpty = true;
304            }
305            else
306            {
307                if ( Array.isArray(dates) )
308                    dates = dates[0];
309
310                if ( dates == '' )
311                    isEmpty = true;
312            }
313        }
314
315        // В случае если дата есть
316        $element.datepicker(dpSetting.datepickerSettings( $element ));
317        dpSetting.datepickerMulti( $element );
318
319        if ( isMulti )
320        {
321            var str_dates = [];
322            for ( let i = 0; i < dates.length; i++ ) {
323                if ( typeof dates[i] == 'object' ){
324                    dates[i] = $.datepicker.formatDate( "yy-mm", dates[i] ) + '-01';
325                }
326                dpSetting.selectedDates.push(dates[i]);
327                str_dates[i] = $.datepicker.formatDate( "yy-mm", parseDate( dates[i]) ) + '-01';
328                dates[i] = parseDate(dates[i]);
329            }
330            dpSetting.startDates = str_dates;
331        }
332        else
333        {
334            dpSetting.selectedDates = dates;
335            dpSetting.startDates = [$.datepicker.formatDate( "yy-mm", parseDate( dates) ) + '-01'];
336            dates = parseDate( dates );
337        }
338
339        dpSetting.selectYear = parseInt($.datepicker.formatDate( "yy", parseDate( $element.data('max') ) ));
340        // dpSetting.selectYear = String(today.getFullYear());
341        dpSetting.datepicker.clear();
342        dpSetting.datepicker.selectDate( dates );
343
344        let container_datepicker_storage = $element.closest('[datepicker-container]')
345            .find('[data-datepicker-storage]');
346
347            container_datepicker_storage.find('option[value^="' + dpSetting.selectedDates + '"]')
348                .attr('selected','');
349
350        $(document).on('click', '.datepicker--cell-year', function () {
351            dpSetting.selectYear = parseInt($(this).data('year'));
352        });
353
354
355
356        $element.removeAttr('data-vals');
357        $element.removeAttr('data-value');
358        $element.removeAttr('data-min');
359        $element.removeAttr('data-max');
360    })
361}
362
363function parseDate(input, format) {
364    if ( input == '' || input === undefined )
365        return false;
366
367    format = format || 'yyyy-mm-dd'; // default format
368    var parts = input.match(/(\d+)/g),
369        i = 0, fmt = {};
370    // extract date-part indexes from the format
371    format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = i++; });
372
373    return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1, parts[fmt['dd']]);
374}

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.