From feedc57486debc7db9154dae3e507218f8acb135 Mon Sep 17 00:00:00 2001 From: TJ VanToll Date: Fri, 3 Jan 2014 09:16:03 -0500 Subject: [PATCH] Datepicker: Handle invalid values in `value()` and `valueAsDate()` --- tests/unit/datepicker/datepicker_methods.js | 15 +++++++++------ ui/datepicker.js | 7 +++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tests/unit/datepicker/datepicker_methods.js b/tests/unit/datepicker/datepicker_methods.js index 98034dacd..281a81c8d 100644 --- a/tests/unit/datepicker/datepicker_methods.js +++ b/tests/unit/datepicker/datepicker_methods.js @@ -64,7 +64,7 @@ test( "open", function() { }); test( "value", function() { - expect( 5 ); + expect( 6 ); var input = $( "#datepicker" ).datepicker(), picker = input.datepicker( "widget" ), inline = $( "#inline" ).datepicker(); @@ -75,19 +75,21 @@ test( "value", function() { "first day marked as selected" ); equal( input.datepicker( "value" ), "1/1/14", "getter" ); + input.val( "abc" ); + equal( input.datepicker( "value" ), "abc", + "Invalid values should be returned without formatting." ); + inline.datepicker( "value", "1/1/14" ); ok( inline.find( "a[data-timestamp]:first" ).hasClass( "ui-state-focus" ), "first day marked as selected" ); equal( inline.datepicker( "value" ), "1/1/14", "getter" ); - // TODO: Handle for invalid values. - input.datepicker( "destroy" ); inline.datepicker( "destroy" ); }); test( "valueAsDate", function() { - expect( 5 ); + expect( 6 ); var input = $( "#datepicker" ).datepicker(), picker = input.datepicker( "widget" ), inline = $( "#inline" ).datepicker(); @@ -99,14 +101,15 @@ test( "valueAsDate", function() { TestHelpers.datepicker.equalsDate( input.datepicker( "valueAsDate" ), new Date( 2014, 0, 1 ), "getter" ); + input.val( "a/b/c" ); + equal( input.datepicker( "valueAsDate" ), null, "Invalid dates return null" ); + inline.datepicker( "valueAsDate", new Date( 2014, 0, 1 ) ); ok( inline.find( "a[data-timestamp]:first" ).hasClass( "ui-state-focus" ), "first day marked as selected" ); TestHelpers.datepicker.equalsDate( inline.datepicker( "valueAsDate" ), new Date( 2014, 0, 1 ), "getter" ); - // TODO: Handle for invalid values. - input.datepicker( "destroy" ); inline.datepicker( "destroy" ); }); diff --git a/ui/datepicker.js b/ui/datepicker.js index 9f0e1905e..8711b5329 100644 --- a/ui/datepicker.js +++ b/ui/datepicker.js @@ -644,17 +644,20 @@ $.widget( "ui.datepicker", { if ( arguments.length ) { this._value( value ); } else { - return this.date.format(); + return this.isValid() ? this.date.format() : this.element.val(); } }, valueAsDate: function( value ) { if ( arguments.length ) { this._value( value ); } else { - return this.date.date(); + return this.isValid() ? this.date.date() : null; } }, isValid: function() { + if ( this.inline ) { + return true; + } return Globalize.parseDate( this.element.val(), this.options.dateFormat ) !== null; }, _destroy: function() { -- 2.39.5