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.