]> source.dussan.org Git - jquery-ui.git/commitdiff
Datepicker: Re-introduce formatDate option, simplify Globalize usage
authorFelix Nagel <info@felixnagel.com>
Tue, 28 Jul 2015 21:10:16 +0000 (23:10 +0200)
committerFelix Nagel <info@felixnagel.com>
Tue, 28 Jul 2015 22:06:30 +0000 (00:06 +0200)
tests/unit/datepicker/common.js
tests/unit/datepicker/options.js
ui/datepicker.js

index 84b97fa3a3cefad03bb9105cd7b2c81d81da96c6..6389adaec08b9b7bf0d9cb0ebfbb6f90a8c37722 100644 (file)
@@ -10,6 +10,7 @@ common.testWidget( "datepicker", {
                buttons: [],
                classes: {},
                disabled: false,
+               dateFormat: { date: "short" },
                eachDay: $.noop,
                labels: {
                        "datePickerRole": "date picker",
index 32979eac8f7e31a98f48f1a6703ce1d0b80df522..6bad27b6a4f1cda3e1fda8037c19e531d98f76dc 100644 (file)
@@ -45,13 +45,14 @@ test( "appendTo", function() {
 });
 
 test( "Pass-through options", function() {
-       expect( 9 );
+       expect( 11 );
 
        var options = {
                        buttons: { "Test": $.noop },
                        dateFormat: { date: "full" },
                        disabled: true,
                        eachDay: function( day ) { day; },
+                       locale: "de",
                        max: new Date( 2000, 0, 1 ),
                        min: new Date( 2000, 0, 2 ),
                        numberOfMonths: 3,
@@ -72,6 +73,10 @@ test( "Pass-through options", function() {
                if ( key === "dateFormat" ) {
                        equal( input.val(), "Wednesday, January 1, 2014", "option " + key + ": updated format" );
                }
+
+               if ( key === "locale" ) {
+                       equal( input.val(), "Mittwoch, 1. Januar 2014", "option " + key + ": updated locale" );
+               }
        });
 });
 
index ba6fd75279b410dc92490642d3c63c76895ef1a0..2056d9443b5c316f213757aa162ca77a4a7923bc 100644 (file)
@@ -51,19 +51,17 @@ var widget = $.widget( "ui.datepicker", {
                select: null
        },
 
-       calendarOptions: [ "buttons", "disabled", "eachDay", "labels", "locale",
-               "max", "min", "numberOfMonths", "showWeek" ],
+       calendarOptions: [ "buttons", "disabled", "dateFormat", "eachDay", "labels",
+               "locale", "max", "min", "numberOfMonths", "showWeek" ],
 
        _create: function() {
                this.suppressExpandOnFocus = false;
 
-               this._setLocale( this.options.locale );
-
                if ( $.type( this.options.max ) === "string" ) {
-                       this.options.max = this._parseYMD( this.options.max );
+                       this.options.max = Globalize.parseDate( this.options.max, { raw: "yyyy-MM-dd" } );
                }
                if ( $.type( this.options.min ) === "string" ) {
-                       this.options.min = this._parseYMD( this.options.min );
+                       this.options.min = Globalize.parseDate( this.options.min, { raw: "yyyy-MM-dd" } );
                }
 
                this._createCalendar();
@@ -90,7 +88,8 @@ var widget = $.widget( "ui.datepicker", {
        },
 
        _createCalendar: function() {
-               var that = this;
+               var that = this,
+                       globalize = new Globalize( this.options.locale );
 
                this.calendar = $( "<div>" )
                        .addClass( "ui-front ui-datepicker" )
@@ -99,7 +98,7 @@ var widget = $.widget( "ui.datepicker", {
                // Initialize calendar widget
                this.calendarInstance = this.calendar
                        .calendar( $.extend( {}, this.options, {
-                               value: this._getParsedValue(),
+                               value: globalize.dateParser( this.options.dateFormat )( this.element.val() ),
                                select: function( event ) {
                                        that.element.val( that.calendarInstance.value() );
                                        that.close();
@@ -280,21 +279,13 @@ var widget = $.widget( "ui.datepicker", {
                });
        },
 
-       _setLocale: function( locale ) {
-               var globalize = new Globalize( locale );
-
-               this._format = globalize.dateFormatter({ date: "short" });
-               this._parse = globalize.dateParser({ date: "short" });
-               this._parseYMD = globalize.dateParser({ raw: "yyyy-MM-dd" });
-       },
-
        _buildPosition: function() {
                return $.extend( { of: this.element }, this.options.position );
        },
 
        value: function( value ) {
                if ( arguments.length ) {
-                       this.valueAsDate( this._parse( value ) );
+                       this.valueAsDate( this.calendarInstance._parse( value ) );
                } else {
                        return this._getParsedValue() ? this.element.val() : null;
                }
@@ -304,7 +295,7 @@ var widget = $.widget( "ui.datepicker", {
                if ( arguments.length ) {
                        if ( this.calendarInstance._isValid( value ) ) {
                                this.calendarInstance.valueAsDate( value );
-                               this.element.val( this._format( value ) );
+                               this.element.val( this.calendarInstance._format( value ) );
                        }
                } else {
                        return this._getParsedValue();
@@ -326,7 +317,7 @@ var widget = $.widget( "ui.datepicker", {
        },
 
        _getParsedValue: function() {
-               return this._parse( this.element.val() );
+               return this.calendarInstance._parse( this.element.val() );
        },
 
        _setOption: function( key, value ) {
@@ -340,8 +331,7 @@ var widget = $.widget( "ui.datepicker", {
                        this.calendar.appendTo( this._appendTo() );
                }
 
-               if ( key === "locale" ) {
-                       this._setLocale( value );
+               if ( key === "locale" || key === "dateFormat" ) {
                        this.element.val( this.calendarInstance.value() );
                }