Bug Tracker

Changeset 4410

Show
Ignore:
Timestamp:
01/11/08 01:50:44 (1 year ago)
Author:
kbwood.au
Message:

Allow defaultDate/minDate/maxDate to be set as relative days/weeks/months/years

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/ui/current/datepicker/core/ui.datepicker.js

    r4405 r4410  
    10621062        shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : 
    10631063            new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); 
    1064         var date = this._getDefaultDate(); 
     1064        var date = defaultDate = this._getDefaultDate(); 
    10651065        if (dates.length > 0) { 
    10661066            var dayNamesShort = this._get('dayNamesShort'); 
     
    10701070            if (dates.length > 1) { 
    10711071                date = $.datepicker.parseDate(dateFormat, dates[1], shortYearCutoff, 
    1072                     dayNamesShort, dayNames, monthNamesShort, monthNames) || 
    1073                     this._getDefaultDate(); 
     1072                    dayNamesShort, dayNames, monthNamesShort, monthNames) || defaultDate; 
    10741073                this._endDay = date.getDate(); 
    10751074                this._endMonth = date.getMonth(); 
     
    10781077            try { 
    10791078                date = $.datepicker.parseDate(dateFormat, dates[0], shortYearCutoff, 
    1080                     dayNamesShort, dayNames, monthNamesShort, monthNames) || 
    1081                     this._getDefaultDate(); 
     1079                    dayNamesShort, dayNames, monthNamesShort, monthNames) ||defaultDate; 
    10821080            } 
    10831081            catch (e) { 
    10841082                $.datepicker.log(e); 
    1085                 date = this._getDefaultDate(); 
     1083                date = defaultDate; 
    10861084            } 
    10871085        } 
     
    10941092    /* Retrieve the default date shown on opening. */ 
    10951093    _getDefaultDate: function() { 
    1096         var offsetDate = function(offset) { 
     1094        return this._determineDate('defaultDate', new Date()); 
     1095    }, 
     1096 
     1097    /* A date may be specified as an exact value or a relative one. */ 
     1098    _determineDate: function(name, defaultDate) { 
     1099        var offsetNumeric = function(offset) { 
    10971100            var date = new Date(); 
    10981101            date.setDate(date.getDate() + offset); 
    10991102            return date; 
    11001103        }; 
    1101         var defaultDate = this._get('defaultDate'); 
    1102         return (defaultDate == null ? new Date() : 
    1103             (typeof defaultDate == 'number' ? offsetDate(defaultDate) : defaultDate)); 
     1104        var offsetString = function(offset, getDaysInMonth) { 
     1105            var date = new Date(); 
     1106            var matches = /^([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?$/.exec(offset); 
     1107            if (matches) { 
     1108                var year = date.getFullYear(); 
     1109                var month = date.getMonth(); 
     1110                var day = date.getDate(); 
     1111                switch (matches[2] || 'd') { 
     1112                    case 'd' : case 'D' : 
     1113                        day += (matches[1] - 0); break; 
     1114                    case 'w' : case 'W' : 
     1115                        day += (matches[1] * 7); break; 
     1116                    case 'm' : case 'M' : 
     1117                        month += (matches[1] - 0);  
     1118                        day = Math.min(day, getDaysInMonth(year, month)); 
     1119                        break; 
     1120                    case 'y': case 'Y' : 
     1121                        year += (matches[1] - 0); 
     1122                        day = Math.min(day, getDaysInMonth(year, month)); 
     1123                        break; 
     1124                } 
     1125                date = new Date(year, month, day); 
     1126            } 
     1127            return date; 
     1128        }; 
     1129        var date = this._get(name); 
     1130        return (date == null ? defaultDate : 
     1131            (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) : 
     1132            (typeof date == 'number' ? offsetNumeric(date) : date))); 
    11041133    }, 
    11051134 
     
    13591388    /* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */ 
    13601389    _getMinMaxDate: function(minMax, checkRange) { 
    1361         var date = this._get(minMax + 'Date'); 
    1362         if (typeof date == 'number') { 
    1363             var offset = date; 
    1364             date = new Date(); 
    1365             date.setDate(date.getDate() + offset); 
    1366         } 
     1390        var date = this._determineDate(minMax + 'Date', null); 
    13671391        if (date) { 
    13681392            date.setHours(0);