Вход Регистрация
Файл: contao-3.5.8/assets/mootools/datepicker/2.2.0/src/Picker.Date.Range.js
Строк: 171
<?php
/*
---
name: Picker.Date.Range
description: Select a Range of Dates
authors: Arian Stolwijk
requires: [Picker, Picker.Date]
provides: Picker.Date.Range
...
*/

Picker.Date.Range = new Class({

    Extends: 
Picker.Date,

    
options: {
        
getStartEndDate: function(input){
            return 
input.get('value').split('-').map(function(date){
                var 
parsed Date.parse(date);
                return 
Date.isValid(parsed) ? parsed null;
            }).
clean();
        },
        
setStartEndDate: function(inputdates){
            
input.set('value'dates.map(function(date){
                return 
date.format(this.options.format);
            }, 
this).join(' - '));
        },
        
footertrue,
        
columns3
    
},

    
getInputDate: function(input){
        if (!
input) return;

        var 
dates input.retrieve('datepicker:value');
        if (
dates && dates.lengthdates dates.map(Date.parse);
        if (!
dates || !dates.length || dates.some(function(date){
            return !
Date.isValid(date);
        })){
            
dates this.options.getStartEndDate.call(thisinput);
            if (!
dates.length || !dates.every(function(date){
                return 
Date.isValid(date);
            })) 
dates = [this.date];
        }
        if (
dates.length == 1this.date this.startDate this.endDate dates[0];
        else if (
dates.length == 2){
            
this.date this.startDate dates[0];
            
this.endDate dates[1];
        }
    },

    
constructPicker: function(){
        
this.parent();
        var 
footer this.footerself this;
        if (!
footer) return;

        var 
events = {
            
click: function(){
                
this.focus();
            },
            
blur: function(){
                var 
date Date.parse(this.get('value'));
                if (
date.isValidself[(this == startInput 'start' 'end') + 'Date'] = date;
                
self.updateRangeSelection();
            },
            
keydown: function(event){
                if (
event.key == 'enter'self.selectRange();
            }
        };

        var 
startInput this.startInput = new Element('input', {eventsevents}).inject(footer);
        new 
Element('span', {text' - '}).inject(footer);
        var 
endInput this.endInput = new Element('input', {eventsevents}).inject(footer);

        
this.applyButton = new Element('button.apply', {
            
textLocale.get('DatePicker.apply_range'),
            
events: {clickself.selectRange.pass([], self)}
        }).
inject(footer);

        
this.cancelButton = new Element('button.cancel', {
            
textLocale.get('DatePicker.cancel'),
            
events: {clickself.close.pass(falseself)}
        }).
inject(footer);
    },

    
renderDays: function(){
        
this.parent.apply(thisarguments);
        
this.updateRangeSelection();
    },

    
select: function(date){
        if (
this.startDate && (this.endDate == this.startDate || date this.endDate) && date >= this.startDatethis.endDate date;
        else {
            
this.startDate date;
            
this.endDate date;
        }
        
this.updateRangeSelection();
    },

    
selectRange: function(){
        
this.date this.startDate;
        var 
dates = [this.startDatethis.endDate], input this.input;

        
this.options.setStartEndDate.call(thisinputdates);
        
input.store('datepicker:value'dates.map(function(date){
            return 
date.strftime();
        })).
fireEvent('change');

        
this.fireEvent('select'datesinput);
        
this.close();
        return 
this;
    },

    
updateRangeSelection: function(){
        var 
start this.startDate,
            
end this.endDate || start;

        if (
this.dateElements) for (var this.dateElements.lengthi--;){
            var 
el this.dateElements[i];
            if (
el.time >= start && el.time <= endel.element.addClass('selected');
            else 
el.element.removeClass('selected');
        }

        var 
formattedFirst start.format(this.options.format)
            
formattedEnd end.format(this.options.format);

        
this.startInput.set('value'formattedFirst);
        
this.endInput.set('value'formattedEnd);

        return 
this;
    }

});
?>
Онлайн: 2
Реклама