X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=resources%2Flib%2Fooui%2Foojs-ui-widgets.js;h=1a96f5668986b1175b254e91e1b9dffa5c11e36d;hb=ceb1cd276fd6b46bf063b30232dd54af2c613b01;hp=81b2a6fc31ad13ccff2a62aecd3cd0f5288a9085;hpb=044d888c41427967cd6f14303d300ceefa54d0c5;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/lib/ooui/oojs-ui-widgets.js b/resources/lib/ooui/oojs-ui-widgets.js index 81b2a6fc31..1a96f56689 100644 --- a/resources/lib/ooui/oojs-ui-widgets.js +++ b/resources/lib/ooui/oojs-ui-widgets.js @@ -1,12 +1,12 @@ /*! - * OOUI v0.31.3 + * OOUI v0.32.0 * https://www.mediawiki.org/wiki/OOUI * * Copyright 2011–2019 OOUI Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2019-04-04T19:10:48Z + * Date: 2019-05-29T00:38:42Z */ ( function ( OO ) { @@ -494,11 +494,15 @@ OO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () { * @abstract * * @constructor + * @param {Object} [config] Configuration options + * @cfg {boolean} [showPendingRequest=true] Show pending state while request data is being fetched. + * Requires widget to have also mixed in {@link OO.ui.mixin.PendingElement}. */ -OO.ui.mixin.RequestManager = function OoUiMixinRequestManager() { +OO.ui.mixin.RequestManager = function OoUiMixinRequestManager( config ) { this.requestCache = {}; this.requestQuery = null; this.requestRequest = null; + this.showPendingRequest = !!this.pushPending && config.showPendingRequest !== false; }; /* Setup */ @@ -522,7 +526,7 @@ OO.ui.mixin.RequestManager.prototype.getRequestData = function () { if ( Object.prototype.hasOwnProperty.call( this.requestCache, value ) ) { deferred.resolve( this.requestCache[ value ] ); } else { - if ( this.pushPending ) { + if ( this.showPendingRequest ) { this.pushPending(); } this.requestQuery = value; @@ -535,7 +539,7 @@ OO.ui.mixin.RequestManager.prototype.getRequestData = function () { // being aborted, or at least eventually. It would be nice if we could popPending() // at abort time, but only if we knew that we hadn't already called popPending() // for that request. - if ( widget.popPending ) { + if ( widget.showPendingRequest ) { widget.popPending(); } } ) @@ -646,6 +650,9 @@ OO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null; * @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted * (so, that the user can take it over into the input with simply pressing return) automatically * or not. + * @cfg {boolean} [showSuggestionsOnFocus=true] Show suggestions when focusing the input. If this + * is set to false, suggestions will still be shown on a mousedown triggered focus. This matches + * browser autocomplete behavior. */ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) { // Configuration initialization @@ -668,6 +675,7 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) { this.lookupsDisabled = false; this.lookupInputFocused = false; this.lookupHighlightFirstItem = config.highlightFirst; + this.showSuggestionsOnFocus = config.showSuggestionsOnFocus !== false; // Events this.$input.on( { @@ -708,7 +716,9 @@ OO.mixinClass( OO.ui.mixin.LookupElement, OO.ui.mixin.RequestManager ); */ OO.ui.mixin.LookupElement.prototype.onLookupInputFocus = function () { this.lookupInputFocused = true; - this.populateLookupMenu(); + if ( this.showSuggestionsOnFocus ) { + this.populateLookupMenu(); + } }; /** @@ -729,11 +739,17 @@ OO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () { * @param {jQuery.Event} e Input mouse down event */ OO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () { - // Only open the menu if the input was already focused. - // This way we allow the user to open the menu again after closing it with Escape (esc) - // by clicking in the input. Opening (and populating) the menu when initially - // clicking into the input is handled by the focus handler. - if ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) { + if ( + !this.lookupMenu.isVisible() && + ( + // Open the menu if the input was already focused. + // This way we allow the user to open the menu again after closing it with Escape (esc) + // by clicking in the input. + this.lookupInputFocused || + // If showSuggestionsOnFocus is disabled, still open the menu on mousedown. + !this.showSuggestionsOnFocus + ) + ) { this.populateLookupMenu(); } }; @@ -2498,6 +2514,7 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () { * @cfg {boolean} [continuous=false] Show all tab panels, one after another * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is * displayed. Disabled on mobile. + * @cfg {boolean} [framed=true] Render the tabs with frames */ OO.ui.IndexLayout = function OoUiIndexLayout( config ) { // Configuration initialization @@ -2520,7 +2537,9 @@ OO.ui.IndexLayout = function OoUiIndexLayout( config ) { this.autoFocus = config.autoFocus === undefined || !!config.autoFocus; // Allow infused widgets to pass an existing tabSelectWidget - this.tabSelectWidget = config.tabSelectWidget || new OO.ui.TabSelectWidget(); + this.tabSelectWidget = config.tabSelectWidget || new OO.ui.TabSelectWidget( { + framed: config.framed === undefined || config.framed + } ); this.tabPanel = this.menuPanel || new OO.ui.PanelLayout( { expanded: this.expanded } ); @@ -3209,7 +3228,7 @@ OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.mixin.TabIndexedElement ); * * @private * @param {jQuery.Event} e Mouse click event - * @return {undefined/boolean} False to prevent default if event is handled + * @return {undefined|boolean} False to prevent default if event is handled */ OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) { if ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) { @@ -3223,7 +3242,7 @@ OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) { * * @private * @param {jQuery.Event} e Key press event - * @return {undefined/boolean} False to prevent default if event is handled + * @return {undefined|boolean} False to prevent default if event is handled */ OO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) { if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) { @@ -3791,6 +3810,7 @@ OO.ui.TabOptionWidget.static.highlightable = false; * * @constructor * @param {Object} [config] Configuration options + * @cfg {boolean} [framed=true] Use framed tabs */ OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) { // Parent constructor @@ -3809,6 +3829,12 @@ OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) { this.$element .addClass( 'oo-ui-tabSelectWidget' ) .attr( 'role', 'tablist' ); + + this.toggleFramed( config.framed === undefined || config.framed ); + + if ( OO.ui.isMobile() ) { + this.$element.addClass( 'oo-ui-tabSelectWidget-mobile' ); + } }; /* Setup */ @@ -3816,6 +3842,36 @@ OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) { OO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget ); OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.mixin.TabIndexedElement ); +/* Methods */ + +/** + * Check if tabs are framed. + * + * @return {boolean} Tabs are framed + */ +OO.ui.TabSelectWidget.prototype.isFramed = function () { + return this.framed; +}; + +/** + * Render the tabs with or without frames. + * + * @param {boolean} [framed] Make tabs framed, omit to toggle + * @chainable + * @return {OO.ui.Element} The element, for chaining + */ +OO.ui.TabSelectWidget.prototype.toggleFramed = function ( framed ) { + framed = framed === undefined ? !this.framed : !!framed; + if ( framed !== this.framed ) { + this.framed = framed; + this.$element + .toggleClass( 'oo-ui-tabSelectWidget-frameless', !framed ) + .toggleClass( 'oo-ui-tabSelectWidget-framed', framed ); + } + + return this; +}; + /** * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget * TagMultiselectWidget} to display the selected items. @@ -5844,7 +5900,7 @@ OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) { * * @private * @param {jQuery.Event} e Key press event - * @return {undefined/boolean} False to prevent default if event is handled + * @return {undefined|boolean} False to prevent default if event is handled */ OO.ui.SelectFileWidget.prototype.onDropTargetClick = function () { if ( !this.isDisabled() && this.$input ) { @@ -5858,7 +5914,7 @@ OO.ui.SelectFileWidget.prototype.onDropTargetClick = function () { * * @private * @param {jQuery.Event} e Drag event - * @return {undefined/boolean} False to prevent default if event is handled + * @return {undefined|boolean} False to prevent default if event is handled */ OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) { var itemsOrFiles, @@ -5912,7 +5968,7 @@ OO.ui.SelectFileWidget.prototype.onDragLeave = function () { * * @private * @param {jQuery.Event} e Drop event - * @return {undefined/boolean} False to prevent default if event is handled + * @return {undefined|boolean} False to prevent default if event is handled */ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) { var files,