From 13cd6c2fe5f25181ea0fcea6f7a20f57469a317b Mon Sep 17 00:00:00 2001 From: TJ VanToll Date: Tue, 19 Nov 2013 08:35:19 -0500 Subject: [PATCH] Datepicker: Support changing `eachDay` after initialization --- tests/unit/datepicker/datepicker_options.js | 38 ++++++++++++++++++++- ui/datepicker.js | 5 +++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 9218303ed..52ae74a74 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -45,7 +45,43 @@ test( "dateFormat", function() { }); test( "eachDay", function() { - expect( 0 ); + expect( 5 ); + var timestamp, + input = $( "#datepicker" ).datepicker(), + picker = input.datepicker( "widget" ); + firstCell = picker.find( "td[id]:first" ); + + equal( firstCell.find( "a" ).length, 1, "days are selectable by default" ); + timestamp = parseInt( firstCell.find( "a" ).attr( "data-timestamp" ), 10 ); + equal( new Date( timestamp ).getDate(), 1, "first available day is the 1st by default" ); + + // Do not render the 1st of the month + input.datepicker( "option", "eachDay", function( day ) { + if ( day.date === 1 ) { + day.render = false; + } + }); + firstCell = picker.find( "td[id]:first" ); + timestamp = parseInt( firstCell.find( "a" ).attr( "data-timestamp" ), 10 ); + equal( new Date( timestamp ).getDate(), 2, "first available day is the 2nd" ); + + // Display the 1st of the month but make it not selectable. + input.datepicker( "option", "eachDay", function( day ) { + if ( day.date === 1 ) { + day.selectable = false; + } + }); + firstCell = picker.find( "td[id]:first" ); + equal( firstCell.find( "a" ).length, 0, "the 1st is not selectable" ); + + input.datepicker( "option", "eachDay", function( day ) { + if ( day.date === 1 ) { + day.extraClasses = "ui-custom"; + } + }); + ok( picker.find( "td[id]:first a" ).hasClass( "ui-custom" ), "extraClasses applied" ); + + input.datepicker( "destroy" ); }); test( "numberOfMonths", function() { diff --git a/ui/datepicker.js b/ui/datepicker.js index 6839ca7e4..3afe5afd0 100644 --- a/ui/datepicker.js +++ b/ui/datepicker.js @@ -627,6 +627,11 @@ $.widget( "ui.datepicker", { this.picker.appendTo( this._appendTo() ); } + if ( key === "eachDay" ) { + this.date.eachDay = this.options.eachDay; + this.refresh(); + } + if ( key === "showWeek" ) { this.refresh(); }