Skip to content

Commit eca5abd

Browse files
fracmakmikesherov
authored andcommitted
Datepicker: Updated the range tests so you can't navigate past the yearRange. Fixes #7362 - Datepicker allows changing year to something outside yearRange
1 parent 2553d61 commit eca5abd

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

tests/unit/datepicker/datepicker_options.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,10 @@ test('miscellaneous', function() {
322322
});
323323

324324
test('minMax', function() {
325-
expect( 17 );
325+
expect( 19 );
326326
var date,
327327
inp = TestHelpers.datepicker.init('#inp'),
328+
dp = $('#ui-datepicker-div'),
328329
lastYear = new Date(2007, 6 - 1, 4),
329330
nextYear = new Date(2009, 6 - 1, 4),
330331
minDate = new Date(2008, 2 - 1, 29),
@@ -404,6 +405,11 @@ test('minMax', function() {
404405
TestHelpers.datepicker.equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min, < max');
405406
inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {minDate: minDate, maxDate: maxDate});
406407
TestHelpers.datepicker.equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max');
408+
409+
inp.datepicker('option', {yearRange: '-0:+1'}).val('01/01/' + new Date().getFullYear());
410+
ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - previous button disabled at 1/1/minYear");
411+
inp.datepicker("setDate", "12/30/" + new Date().getFullYear());
412+
ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled at 12/30/maxYear");
407413
});
408414

409415
test('setDate', function() {

ui/jquery.ui.datepicker.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1742,8 +1742,20 @@ $.extend(Datepicker.prototype, {
17421742
_isInRange: function(inst, date) {
17431743
var minDate = this._getMinMaxDate(inst, 'min');
17441744
var maxDate = this._getMinMaxDate(inst, 'max');
1745+
var minYear = null;
1746+
var maxYear = null;
1747+
var years = this._get(inst, 'yearRange');
1748+
if (years){
1749+
var yearSplit = years.split(':');
1750+
var currentYear = new Date().getFullYear();
1751+
minYear = parseInt(yearSplit[0], 10) + currentYear;
1752+
maxYear = parseInt(yearSplit[1], 10) + currentYear;
1753+
}
1754+
17451755
return ((!minDate || date.getTime() >= minDate.getTime()) &&
1746-
(!maxDate || date.getTime() <= maxDate.getTime()));
1756+
(!maxDate || date.getTime() <= maxDate.getTime()) &&
1757+
(!minYear || date.getFullYear() >= minYear) &&
1758+
(!maxYear || date.getFullYear() <= maxYear));
17471759
},
17481760

17491761
/* Provide the configuration settings for formatting/parsing. */

0 commit comments

Comments
 (0)