diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2015-12-20 09:00:55 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2015-12-20 09:00:55 +0100 |
commit | a2190ac74dd4d7080b12bab90e552d7aa81209ef (patch) | |
tree | 8b31f38de9882d18df54cf8d9e0de74167a094eb /vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js | |
parent | 15e69f7b20b6596b9148030acce5b59993b95a45 (diff) | |
parent | 257401d8b2cf661adf36c84b0e3fd1cf85e33c22 (diff) |
Merge branch 'mw-1.26'
Diffstat (limited to 'vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js')
-rw-r--r-- | vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js b/vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js deleted file mode 100644 index 0fbdf4fc..00000000 --- a/vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js +++ /dev/null @@ -1,187 +0,0 @@ -/** - * Popup list of tools with an icon and optional label. - * - * @abstract - * @class - * @extends OO.ui.ToolGroup - * @mixins OO.ui.IconElement - * @mixins OO.ui.IndicatorElement - * @mixins OO.ui.LabelElement - * @mixins OO.ui.TitledElement - * @mixins OO.ui.ClippableElement - * @mixins OO.ui.TabIndexedElement - * - * @constructor - * @param {OO.ui.Toolbar} toolbar - * @param {Object} [config] Configuration options - * @cfg {string} [header] Text to display at the top of the pop-up - */ -OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) { - // Allow passing positional parameters inside the config object - if ( OO.isPlainObject( toolbar ) && config === undefined ) { - config = toolbar; - toolbar = config.toolbar; - } - - // Configuration initialization - config = config || {}; - - // Parent constructor - OO.ui.PopupToolGroup.super.call( this, toolbar, config ); - - // Properties - this.active = false; - this.dragging = false; - this.onBlurHandler = this.onBlur.bind( this ); - this.$handle = $( '<span>' ); - - // Mixin constructors - OO.ui.IconElement.call( this, config ); - OO.ui.IndicatorElement.call( this, config ); - OO.ui.LabelElement.call( this, config ); - OO.ui.TitledElement.call( this, config ); - OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) ); - OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) ); - - // Events - this.$handle.on( { - keydown: this.onHandleMouseKeyDown.bind( this ), - keyup: this.onHandleMouseKeyUp.bind( this ), - mousedown: this.onHandleMouseKeyDown.bind( this ), - mouseup: this.onHandleMouseKeyUp.bind( this ) - } ); - - // Initialization - this.$handle - .addClass( 'oo-ui-popupToolGroup-handle' ) - .append( this.$icon, this.$label, this.$indicator ); - // If the pop-up should have a header, add it to the top of the toolGroup. - // Note: If this feature is useful for other widgets, we could abstract it into an - // OO.ui.HeaderedElement mixin constructor. - if ( config.header !== undefined ) { - this.$group - .prepend( $( '<span>' ) - .addClass( 'oo-ui-popupToolGroup-header' ) - .text( config.header ) - ); - } - this.$element - .addClass( 'oo-ui-popupToolGroup' ) - .prepend( this.$handle ); -}; - -/* Setup */ - -OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup ); -OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconElement ); -OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement ); -OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement ); -OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement ); -OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement ); -OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TabIndexedElement ); - -/* Methods */ - -/** - * @inheritdoc - */ -OO.ui.PopupToolGroup.prototype.setDisabled = function () { - // Parent method - OO.ui.PopupToolGroup.super.prototype.setDisabled.apply( this, arguments ); - - if ( this.isDisabled() && this.isElementAttached() ) { - this.setActive( false ); - } -}; - -/** - * Handle focus being lost. - * - * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object. - * - * @param {jQuery.Event} e Mouse up or key up event - */ -OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) { - // Only deactivate when clicking outside the dropdown element - if ( $( e.target ).closest( '.oo-ui-popupToolGroup' )[ 0 ] !== this.$element[ 0 ] ) { - this.setActive( false ); - } -}; - -/** - * @inheritdoc - */ -OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) { - // Only close toolgroup when a tool was actually selected - if ( - !this.isDisabled() && this.pressed && this.pressed === this.getTargetTool( e ) && - ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) - ) { - this.setActive( false ); - } - return OO.ui.PopupToolGroup.super.prototype.onMouseKeyUp.call( this, e ); -}; - -/** - * Handle mouse up and key up events. - * - * @param {jQuery.Event} e Mouse up or key up event - */ -OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) { - if ( - !this.isDisabled() && - ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) - ) { - return false; - } -}; - -/** - * Handle mouse down and key down events. - * - * @param {jQuery.Event} e Mouse down or key down event - */ -OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) { - if ( - !this.isDisabled() && - ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) - ) { - this.setActive( !this.active ); - return false; - } -}; - -/** - * Switch into active mode. - * - * When active, mouseup events anywhere in the document will trigger deactivation. - */ -OO.ui.PopupToolGroup.prototype.setActive = function ( value ) { - value = !!value; - if ( this.active !== value ) { - this.active = value; - if ( value ) { - this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true ); - this.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true ); - - // Try anchoring the popup to the left first - this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' ); - this.toggleClipping( true ); - if ( this.isClippedHorizontally() ) { - // Anchoring to the left caused the popup to clip, so anchor it to the right instead - this.toggleClipping( false ); - this.$element - .removeClass( 'oo-ui-popupToolGroup-left' ) - .addClass( 'oo-ui-popupToolGroup-right' ); - this.toggleClipping( true ); - } - } else { - this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true ); - this.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true ); - this.$element.removeClass( - 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left oo-ui-popupToolGroup-right' - ); - this.toggleClipping( false ); - } - } -}; |