Calendar: Do not rebuild whole calendar when selecting date

This commit is contained in:
Felix Nagel 2015-12-03 18:16:40 +01:00
parent 7ac903b076
commit 3cf5308917

View File

@ -99,7 +99,7 @@ return $.widget( "ui.calendar", {
}, },
"mousedown .ui-calendar-calendar button": function( event ) { "mousedown .ui-calendar-calendar button": function( event ) {
this._setOption( "value", new Date( $( event.currentTarget ).data( "timestamp" ) ) ); this._setOption( "value", new Date( $( event.currentTarget ).data( "timestamp" ) ) );
this.refresh(); this._updateDayElement( "ui-state-active" );
// Allow datepicker to handle focus // Allow datepicker to handle focus
if ( this._trigger( "select", event ) !== false ) { if ( this._trigger( "select", event ) !== false ) {
@ -180,25 +180,29 @@ return $.widget( "ui.calendar", {
// Check if the needed day is already present in our grid due // Check if the needed day is already present in our grid due
// to eachDay option changes (eg. other-months demo) // to eachDay option changes (eg. other-months demo)
return !this.grid.find( return !this._getDateElement( this._getDayId( this.date ) ).length;
"#" + $.ui.escapeSelector( this._getDayId( this.date ) )
).length;
} }
return false; return false;
}, },
_setActiveDescendant: function() { _setActiveDescendant: function() {
this.activeDescendant = this._updateDayElement( "ui-state-focus" );
},
_updateDayElement: function( state ) {
var id = this._getDayId( this.date ); var id = this._getDayId( this.date );
this.grid this.grid
.attr( "aria-activedescendant", id ) .attr( "aria-activedescendant", id )
.find( ".ui-state-focus" ) .find( "button." + state )
.removeClass( "ui-state-focus" ); .removeClass( state );
this.activeDescendant = this.grid.find( return this._getDateElement( id ).children( "button" ).addClass( state );
"#" + $.ui.escapeSelector( id ) + " > button" },
).addClass( "ui-state-focus" );
_getDateElement: function( id ) {
return this.grid.find( "#" + $.ui.escapeSelector( id ) );
}, },
_setLocale: function( locale, dateFormat ) { _setLocale: function( locale, dateFormat ) {
@ -518,7 +522,7 @@ return $.widget( "ui.calendar", {
refresh: function() { refresh: function() {
this.labels = this.options.labels; this.labels = this.options.labels;
// Determine which day gridcell to focus after refresh // Determine which day grid cell to focus after refresh
// TODO: Prevent disabled cells from being focused // TODO: Prevent disabled cells from being focused
if ( this.options.numberOfMonths === 1 ) { if ( this.options.numberOfMonths === 1 ) {
this.element.find( ".ui-calendar-title" ).html( this._buildTitle() ); this.element.find( ".ui-calendar-title" ).html( this._buildTitle() );