From 4eeab67ac7f15b403316b8edd067311193c31784 Mon Sep 17 00:00:00 2001 From: Jay Merrifield Date: Fri, 13 May 2011 18:25:23 -0400 Subject: [PATCH 1/3] Updated the range tests so you can't navigate past the yearRange which causes weird behavior where the UI and what you select become out of sync. Unit tests included --- tests/unit/datepicker/datepicker_options.js | 8 +++++++- ui/jquery.ui.datepicker.js | 14 +++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 9078a23747b..e7b68589e99 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -322,9 +322,10 @@ test('miscellaneous', function() { }); test('minMax', function() { - expect( 17 ); + expect( 19 ); var date, inp = TestHelpers.datepicker.init('#inp'), + dp = $('#ui-datepicker-div'), lastYear = new Date(2007, 6 - 1, 4), nextYear = new Date(2009, 6 - 1, 4), minDate = new Date(2008, 2 - 1, 29), @@ -404,6 +405,11 @@ test('minMax', function() { TestHelpers.datepicker.equalsDate(inp.datepicker('getDate'), new Date(2008, 6 - 1, 4), 'Min/max - setDate > min, < max'); inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {minDate: minDate, maxDate: maxDate}); TestHelpers.datepicker.equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); + + inp.datepicker('option', {yearRange: '-0:+1'}).val('01/01/' + new Date().getFullYear()); + ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "previous button disabled"); + inp.datepicker("setDate", "12/30/" + new Date().getFullYear()); + ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "next button disabled"); }); test('setDate', function() { diff --git a/ui/jquery.ui.datepicker.js b/ui/jquery.ui.datepicker.js index c7ecafffb26..6dc69fd18a6 100644 --- a/ui/jquery.ui.datepicker.js +++ b/ui/jquery.ui.datepicker.js @@ -1742,8 +1742,20 @@ $.extend(Datepicker.prototype, { _isInRange: function(inst, date) { var minDate = this._getMinMaxDate(inst, 'min'); var maxDate = this._getMinMaxDate(inst, 'max'); + var minYear = null; + var maxYear = null; + var years = this._get(inst, 'yearRange'); + if (years){ + var yearSplit = years.split(':'); + var currentYear = new Date().getFullYear(); + minYear = parseInt(yearSplit[0]) + currentYear; + maxYear = parseInt(yearSplit[1]) + currentYear; + } + return ((!minDate || date.getTime() >= minDate.getTime()) && - (!maxDate || date.getTime() <= maxDate.getTime())); + (!maxDate || date.getTime() <= maxDate.getTime()) && + (!minYear || date.getFullYear() >= minYear) && + (!maxYear || date.getFullYear() <= maxYear)); }, /* Provide the configuration settings for formatting/parsing. */ From d3f4ad2f374073bc2acc13b418b48bf386facb3d Mon Sep 17 00:00:00 2001 From: Jay Merrifield Date: Mon, 12 Nov 2012 23:26:55 -0500 Subject: [PATCH 2/3] made unit test description better --- tests/unit/datepicker/datepicker_options.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index e7b68589e99..7e3d3dea2c3 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -407,9 +407,9 @@ test('minMax', function() { TestHelpers.datepicker.equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); inp.datepicker('option', {yearRange: '-0:+1'}).val('01/01/' + new Date().getFullYear()); - ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "previous button disabled"); + ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - previous button disabled at 1/1/minYear"); inp.datepicker("setDate", "12/30/" + new Date().getFullYear()); - ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "next button disabled"); + ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled at 12/30/maxYear"); }); test('setDate', function() { From 43dc1ac1a465553a0e4cd3155e2dae2be2e57717 Mon Sep 17 00:00:00 2001 From: Jay Merrifield Date: Mon, 12 Nov 2012 23:31:15 -0500 Subject: [PATCH 3/3] fix whitespace --- tests/unit/datepicker/datepicker_options.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 7e3d3dea2c3..7d2b070fac7 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -325,7 +325,7 @@ test('minMax', function() { expect( 19 ); var date, inp = TestHelpers.datepicker.init('#inp'), - dp = $('#ui-datepicker-div'), + dp = $('#ui-datepicker-div'), lastYear = new Date(2007, 6 - 1, 4), nextYear = new Date(2009, 6 - 1, 4), minDate = new Date(2008, 2 - 1, 29), @@ -406,10 +406,10 @@ test('minMax', function() { inp.datepicker('option', {maxDate: null}).val('01/04/2009').datepicker('option', {minDate: minDate, maxDate: maxDate}); TestHelpers.datepicker.equalsDate(inp.datepicker('getDate'), maxDate, 'Min/max - setDate > max'); - inp.datepicker('option', {yearRange: '-0:+1'}).val('01/01/' + new Date().getFullYear()); - ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - previous button disabled at 1/1/minYear"); - inp.datepicker("setDate", "12/30/" + new Date().getFullYear()); - ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled at 12/30/maxYear"); + inp.datepicker('option', {yearRange: '-0:+1'}).val('01/01/' + new Date().getFullYear()); + ok(dp.find(".ui-datepicker-prev").hasClass("ui-state-disabled"), "Year Range Test - previous button disabled at 1/1/minYear"); + inp.datepicker("setDate", "12/30/" + new Date().getFullYear()); + ok(dp.find(".ui-datepicker-next").hasClass("ui-state-disabled"), "Year Range Test - next button disabled at 12/30/maxYear"); }); test('setDate', function() {