X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.widgets%2Fmw.widgets.DateInputWidget.js;h=f10c93db48c0488926ea7c3cde758c1be068dbb9;hp=d41a147666b8e7574b0bc923f563b7bac34b18d7;hb=956c2430c7b8fceb289aaeacc8d6c2e0def2c56e;hpb=2c4185b3217a78c8857c4b593f2a8c85a46ea6d4 diff --git a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js index d41a147666..f10c93db48 100644 --- a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js +++ b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js @@ -243,6 +243,16 @@ OO.inheritClass( mw.widgets.DateInputWidget, OO.ui.TextInputWidget ); OO.mixinClass( mw.widgets.DateInputWidget, OO.ui.mixin.IndicatorElement ); + /* Events */ + + /** + * Fired when the widget is deactivated (i.e. the calendar is closed). This can happen because + * the user selected a value, or because the user blurred the widget. + * + * @event deactivate + * @param {boolean} userSelected Whether the deactivation happened because the user selected a value + */ + /* Methods */ /** @@ -387,13 +397,23 @@ * Deactivate this input field for data entry. Closes the calendar and hides the text field. * * @private + * @param {boolean} [userSelected] Whether we are deactivating because the user selected a value */ - mw.widgets.DateInputWidget.prototype.deactivate = function () { + mw.widgets.DateInputWidget.prototype.deactivate = function ( userSelected ) { this.$element.removeClass( 'mw-widget-dateInputWidget-active' ); this.$handle.show(); this.textInput.toggle( false ); this.calendar.toggle( false ); this.setValidityFlag(); + + if ( userSelected ) { + // Prevent focusing the handle from reopening the calendar + this.closing = true; + this.$handle.focus(); + this.closing = false; + } + + this.emit( 'deactivate', !!userSelected ); }; /** @@ -542,13 +562,7 @@ */ mw.widgets.DateInputWidget.prototype.onCalendarKeyPress = function ( e ) { if ( !this.isDisabled() && e.which === OO.ui.Keys.ENTER ) { - // Prevent focusing the handle from reopening the calendar - this.closing = true; - - this.deactivate(); - this.$handle.focus(); - - this.closing = false; + this.deactivate( true ); return false; } }; @@ -561,21 +575,15 @@ * @return {boolean} False to cancel the default event */ mw.widgets.DateInputWidget.prototype.onCalendarClick = function ( e ) { + var targetClass = this.calendar.getPrecision() === 'month' ? + 'mw-widget-calendarWidget-month' : + 'mw-widget-calendarWidget-day'; if ( !this.isDisabled() && e.which === 1 && - ( - $( e.target ).hasClass( 'mw-widget-calendarWidget-day' ) || - $( e.target ).hasClass( 'mw-widget-calendarWidget-month' ) - ) + $( e.target ).hasClass( targetClass ) ) { - // Prevent focusing the handle from reopening the calendar - this.closing = true; - - this.deactivate(); - this.$handle.focus(); - - this.closing = false; + this.deactivate( true ); return false; } }; @@ -586,13 +594,7 @@ * @private */ mw.widgets.DateInputWidget.prototype.onEnter = function () { - // Prevent focusing the handle from reopening the calendar - this.closing = true; - - this.deactivate(); - this.$handle.focus(); - - this.closing = false; + this.deactivate( true ); }; /**