Changeset 3485

Show
Ignore:
Timestamp:
11/30/09 17:27:25 (4 months ago)
Author:
kbwood.au@…
Message:

Datepicker - Fixed #4870 - yearRange doesn't work as expected

Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/tests/unit/datepicker/datepicker_options.js

    r3484 r3485  
    268268                return range; 
    269269        }; 
     270        var curYear = new Date().getFullYear(); 
    270271        inp.val('02/04/2008').datepicker('show'); 
    271272        equals(dp.find('.ui-datepicker-year').text(), '2008', 'Year range - read-only default'); 
    272273        inp.datepicker('hide').datepicker('option', {changeYear: true}).datepicker('show');              
    273274        equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 10, 21), 'Year range - changeable default'); 
    274         inp.datepicker('hide').datepicker('option', {yearRange: '-6:+2', changeYear: true}).datepicker('show'); 
    275         equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 6, 9), 'Year range - -6:+2'); 
     275        inp.datepicker('hide').datepicker('option', {yearRange: 'c-6:c+2', changeYear: true}).datepicker('show'); 
     276        equals(dp.find('.ui-datepicker-year').text(), genRange(2008 - 6, 9), 'Year range - c-6:c+2'); 
    276277        inp.datepicker('hide').datepicker('option', {yearRange: '2000:2010', changeYear: true}).datepicker('show'); 
    277278        equals(dp.find('.ui-datepicker-year').text(), genRange(2000, 11), 'Year range - 2000:2010'); 
     279        inp.datepicker('hide').datepicker('option', {yearRange: '-5:+3', changeYear: true}).datepicker('show'); 
     280        equals(dp.find('.ui-datepicker-year').text(), genRange(curYear - 5, 9), 'Year range - -5:+3'); 
     281        inp.datepicker('hide').datepicker('option', {yearRange: '2000:-5', changeYear: true}).datepicker('show'); 
     282        equals(dp.find('.ui-datepicker-year').text(), genRange(2000, curYear - 2004), 'Year range - 2000:-5'); 
     283        inp.datepicker('hide').datepicker('option', {yearRange: '', changeYear: true}).datepicker('show'); 
     284        equals(dp.find('.ui-datepicker-year').text(), genRange(curYear, 1), 'Year range - -6:+2'); 
    278285 
    279286        // Navigation as date format 
  • trunk/ui/jquery.ui.datepicker.js

    r3483 r3485  
    7575                changeMonth: false, // True if month can be selected directly, false if only prev/next 
    7676                changeYear: false, // True if year can be selected directly, false if only prev/next 
    77                 yearRange: '-10:+10', // Range of years to display in drop-down, 
    78                         // either relative to current year (-nn:+nn) or absolute (nnnn:nnnn) 
     77                yearRange: 'c-10:c+10', // Range of years to display in drop-down, 
     78                        // either relative to today's year (-nn:+nn), relative to currently displayed year 
     79                        // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) 
    7980                showOtherMonths: false, // True to show dates in other months, false to leave blank 
    8081                selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable 
     
    15121513                        // determine range of years to display 
    15131514                        var years = this._get(inst, 'yearRange').split(':'); 
    1514                         var year = 0; 
    1515                         var endYear = 0; 
    1516                         if (years.length != 2) { 
    1517                                 year = drawYear - 10; 
    1518                                 endYear = drawYear + 10; 
    1519                         } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') { 
    1520                                 year = drawYear + parseInt(years[0], 10); 
    1521                                 endYear = drawYear + parseInt(years[1], 10); 
    1522                         } else { 
    1523                                 year = parseInt(years[0], 10); 
    1524                                 endYear = parseInt(years[1], 10); 
    1525                         } 
     1515                        var thisYear = new Date().getFullYear(); 
     1516                        var determineYear = function(value) { 
     1517                                var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : 
     1518                                        (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : 
     1519                                        parseInt(value, 10))); 
     1520                                return (isNaN(year) ? thisYear : year); 
     1521                        }; 
     1522                        var year = determineYear(years[0]); 
     1523                        var endYear = Math.max(year, determineYear(years[1] || '')); 
    15261524                        year = (minDate ? Math.max(year, minDate.getFullYear()) : year); 
    15271525                        endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);