From ab0fd51b1ed43ce06c95cd2fe30c42c4a9beb681 Mon Sep 17 00:00:00 2001 From: "James D. Forrester" Date: Mon, 27 Apr 2015 10:23:52 -0700 Subject: [PATCH] Update OOjs UI to v0.10.1 Release notes: https://git.wikimedia.org/blob/oojs%2Fui.git/v0.10.1/History.md Change-Id: If390a691c73491be4f080e70788b6b8b8f698be0 --- composer.json | 2 +- resources/lib/oojs-ui/i18n/fo.json | 11 +- resources/lib/oojs-ui/i18n/kn.json | 5 +- .../oojs-ui-mediawiki-icons-alerts.css | 4 +- .../oojs-ui-mediawiki-icons-content.css | 4 +- ...js-ui-mediawiki-icons-editing-advanced.css | 4 +- .../oojs-ui-mediawiki-icons-editing-core.css | 4 +- .../oojs-ui-mediawiki-icons-editing-list.css | 4 +- ...ojs-ui-mediawiki-icons-editing-styling.css | 4 +- .../oojs-ui-mediawiki-icons-interactions.css | 4 +- .../oojs-ui-mediawiki-icons-layout.css | 4 +- .../oojs-ui-mediawiki-icons-location.css | 4 +- .../oojs-ui/oojs-ui-mediawiki-icons-media.css | 4 +- .../oojs-ui-mediawiki-icons-moderation.css | 4 +- .../oojs-ui-mediawiki-icons-movement.css | 4 +- .../oojs-ui/oojs-ui-mediawiki-icons-user.css | 4 +- .../oojs-ui-mediawiki-icons-wikimedia.css | 4 +- .../oojs-ui/oojs-ui-mediawiki-noimages.css | 16 +- resources/lib/oojs-ui/oojs-ui-mediawiki.css | 16 +- resources/lib/oojs-ui/oojs-ui-mediawiki.js | 4 +- resources/lib/oojs-ui/oojs-ui.js | 171 +++++++++++------- 21 files changed, 170 insertions(+), 111 deletions(-) diff --git a/composer.json b/composer.json index 4ea8a4e6fa..c8f16ba792 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "ext-iconv": "*", "leafo/lessphp": "0.5.0", "liuggio/statsd-php-client": "1.0.12", - "oojs/oojs-ui": "0.10.0", + "oojs/oojs-ui": "0.10.1", "php": ">=5.3.3", "psr/log": "1.0.0", "wikimedia/cdb": "1.0.1", diff --git a/resources/lib/oojs-ui/i18n/fo.json b/resources/lib/oojs-ui/i18n/fo.json index b84df25f83..6230cc9b4f 100644 --- a/resources/lib/oojs-ui/i18n/fo.json +++ b/resources/lib/oojs-ui/i18n/fo.json @@ -6,5 +6,14 @@ }, "ooui-outline-control-move-down": "Flyt lutin niður", "ooui-outline-control-move-up": "Flyt lutin upp", - "ooui-toolbar-more": "Meira" + "ooui-outline-control-remove": "Tak ein lut burtur", + "ooui-toolbar-more": "Meira", + "ooui-toolgroup-expand": "Meira", + "ooui-toolgroup-collapse": "Færri", + "ooui-dialog-message-accept": "OK", + "ooui-dialog-message-reject": "Avbrót", + "ooui-dialog-process-error": "Okkurt gekk galið", + "ooui-dialog-process-dismiss": "Lat aftur", + "ooui-dialog-process-retry": "Royn aftur", + "ooui-dialog-process-continue": "Halt fram" } diff --git a/resources/lib/oojs-ui/i18n/kn.json b/resources/lib/oojs-ui/i18n/kn.json index b003e8c57e..982a3cdf9f 100644 --- a/resources/lib/oojs-ui/i18n/kn.json +++ b/resources/lib/oojs-ui/i18n/kn.json @@ -3,7 +3,8 @@ "authors": [ "Vikassy", "Nayvik", - "Omshivaprakash" + "Omshivaprakash", + "Pavanaja" ] }, "ooui-outline-control-move-down": "ವಸ್ತುವನ್ನು ಕೆಳಗೆ ಸರಿಸು", @@ -14,7 +15,7 @@ "ooui-toolgroup-collapse": "ಕೆಲವೇ ಕೆಲವು", "ooui-dialog-message-accept": "ಸರಿ", "ooui-dialog-message-reject": "ರದ್ದುಮಾಡು", - "ooui-dialog-process-error": "ಎನೋ ಎಡವಟ್ಟಾಗಿದೆ....", + "ooui-dialog-process-error": "ಏನೋ ಎಡವಟ್ಟಾಗಿದೆ....", "ooui-dialog-process-dismiss": "ತೆಗೆದುಹಾಕು", "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ", "ooui-dialog-process-continue": "ಮುಂದುವರೆಸು" diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css index 37012b2814..ee5f281b2a 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-bell { background-image: url("themes/mediawiki/images/icons/bell.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css index b48bbdf9d1..d26af40c02 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-article { background-image: url("themes/mediawiki/images/icons/article-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css index a61f63060b..90d85554b3 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-alignCentre { background-image: url("themes/mediawiki/images/icons/align-center.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css index 42c2b14deb..b7ded14849 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-edit { background-image: url("themes/mediawiki/images/icons/edit-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css index 4fe87caabe..9a1532bfc0 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-indent { background-image: url("themes/mediawiki/images/icons/indent-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css index 6990522e0c..6b657b7a3b 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-bigger { background-image: url("themes/mediawiki/images/icons/bigger-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css index e310e39208..782b410903 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-beta { background-image: url("themes/mediawiki/images/icons/beta.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css index 76f456ddf1..a274181c5c 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-stripeFlow { background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css index 2842e3b546..19ac130f3f 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-map { background-image: url("themes/mediawiki/images/icons/map-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css index 82df52fd17..61b3361fee 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-image { background-image: url("themes/mediawiki/images/icons/image-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css index 6b5befd718..6dc10b4112 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-block { background-image: url("themes/mediawiki/images/icons/block.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css index 5161f0a8c4..9e54697004 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-arrowNext { background-image: url("themes/mediawiki/images/icons/arrow-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css index 2ea8adf69a..e748f76cf5 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-userActive { background-image: url("themes/mediawiki/images/icons/userActive-ltr.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css index fbafe175c8..28c95c6f7c 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ .oo-ui-icon-logoCC { background-image: url("themes/mediawiki/images/icons/logo-cc.png"); diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css index 54be6b42a0..c32d7ca2f7 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ @-webkit-keyframes oo-ui-progressBarWidget-slide { from { @@ -1301,10 +1301,10 @@ .oo-ui-buttonGroupWidget:last-child { margin-right: 0; } -.oo-ui-buttonGroupWidget .oo-ui-buttonWidget { +.oo-ui-buttonGroupWidget .oo-ui-buttonElement { margin-right: 0; } -.oo-ui-buttonGroupWidget .oo-ui-buttonWidget:last-child { +.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child { margin-right: 0; } .oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button { @@ -1320,6 +1320,14 @@ border-bottom-right-radius: 2px; border-top-right-radius: 2px; } +.oo-ui-toggleButtonWidget { + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} +.oo-ui-toggleButtonWidget:last-child { + margin-right: 0; +} .oo-ui-toggleSwitchWidget { position: relative; display: inline-block; diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.css index 17ab620984..7ee64a23c1 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:33Z + * Date: 2015-04-27T17:17:17Z */ @-webkit-keyframes oo-ui-progressBarWidget-slide { from { @@ -1301,10 +1301,10 @@ .oo-ui-buttonGroupWidget:last-child { margin-right: 0; } -.oo-ui-buttonGroupWidget .oo-ui-buttonWidget { +.oo-ui-buttonGroupWidget .oo-ui-buttonElement { margin-right: 0; } -.oo-ui-buttonGroupWidget .oo-ui-buttonWidget:last-child { +.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child { margin-right: 0; } .oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button { @@ -1320,6 +1320,14 @@ border-bottom-right-radius: 2px; border-top-right-radius: 2px; } +.oo-ui-toggleButtonWidget { + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} +.oo-ui-toggleButtonWidget:last-child { + margin-right: 0; +} .oo-ui-toggleSwitchWidget { position: relative; display: inline-block; diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index a03734ac2d..7d346bb5b0 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.js +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:26Z + * Date: 2015-04-27T17:17:10Z */ /** * @class diff --git a/resources/lib/oojs-ui/oojs-ui.js b/resources/lib/oojs-ui/oojs-ui.js index 1011949cea..f836042287 100644 --- a/resources/lib/oojs-ui/oojs-ui.js +++ b/resources/lib/oojs-ui/oojs-ui.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.10.0 + * OOjs UI v0.10.1 * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2015 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2015-04-23T00:54:26Z + * Date: 2015-04-27T17:17:10Z */ ( function ( OO ) { @@ -1809,7 +1809,7 @@ OO.ui.Window = function OoUiWindow( config ) { this.$overlay.addClass( 'oo-ui-window-overlay' ); this.$content .addClass( 'oo-ui-window-content' ) - .attr( 'tabIndex', 0 ); + .attr( 'tabindex', 0 ); this.$frame .addClass( 'oo-ui-window-frame' ) .append( this.$content ); @@ -6399,6 +6399,7 @@ OO.ui.ClippableElement.prototype.clip = function () { * @extends OO.ui.Widget * @mixins OO.ui.IconElement * @mixins OO.ui.FlaggedElement + * @mixins OO.ui.TabIndexedElement * * @constructor * @param {OO.ui.ToolGroup} toolGroup @@ -6418,10 +6419,6 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) { // Parent constructor OO.ui.Tool.super.call( this, config ); - // Mixin constructors - OO.ui.IconElement.call( this, config ); - OO.ui.FlaggedElement.call( this, config ); - // Properties this.toolGroup = toolGroup; this.toolbar = this.toolGroup.getToolbar(); @@ -6431,6 +6428,11 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) { this.$link = $( '' ); this.title = null; + // Mixin constructors + OO.ui.IconElement.call( this, config ); + OO.ui.FlaggedElement.call( this, config ); + OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) ); + // Events this.toolbar.connect( this, { updateState: 'onUpdateState' } ); @@ -6447,7 +6449,6 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) { this.$link .addClass( 'oo-ui-tool-link' ) .append( this.$icon, this.$title, this.$accel ) - .prop( 'tabIndex', 0 ) .attr( 'role', 'button' ); this.$element .data( 'oo-ui-tool', this ) @@ -6464,6 +6465,7 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) { OO.inheritClass( OO.ui.Tool, OO.ui.Widget ); OO.mixinClass( OO.ui.Tool, OO.ui.IconElement ); OO.mixinClass( OO.ui.Tool, OO.ui.FlaggedElement ); +OO.mixinClass( OO.ui.Tool, OO.ui.TabIndexedElement ); /* Events */ @@ -6830,7 +6832,7 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) { // Events this.$element .add( this.$bar ).add( this.$group ).add( this.$actions ) - .on( 'mousedown', this.onPointerDown.bind( this ) ); + .on( 'mousedown keydown', this.onPointerDown.bind( this ) ); // Initialization this.$group.addClass( 'oo-ui-toolbar-tools' ); @@ -7065,14 +7067,18 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) { this.exclude = config.exclude || []; this.promote = config.promote || []; this.demote = config.demote || []; - this.onCapturedMouseUpHandler = this.onCapturedMouseUp.bind( this ); + this.onCapturedMouseKeyUpHandler = this.onCapturedMouseKeyUp.bind( this ); // Events this.$element.on( { - mousedown: this.onPointerDown.bind( this ), - mouseup: this.onPointerUp.bind( this ), - mouseover: this.onMouseOver.bind( this ), - mouseout: this.onMouseOut.bind( this ) + mousedown: this.onMouseKeyDown.bind( this ), + mouseup: this.onMouseKeyUp.bind( this ), + keydown: this.onMouseKeyDown.bind( this ), + keyup: this.onMouseKeyUp.bind( this ), + focus: this.onMouseOverFocus.bind( this ), + blur: this.onMouseOutBlur.bind( this ), + mouseover: this.onMouseOverFocus.bind( this ), + mouseout: this.onMouseOutBlur.bind( this ) } ); this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } ); this.aggregate( { disable: 'itemDisable' } ); @@ -7155,57 +7161,64 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () { }; /** - * Handle mouse down events. + * Handle mouse down and key down events. * - * @param {jQuery.Event} e Mouse down event + * @param {jQuery.Event} e Mouse down or key down event */ -OO.ui.ToolGroup.prototype.onPointerDown = function ( e ) { - if ( !this.isDisabled() && e.which === 1 ) { +OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) { + if ( + !this.isDisabled() && + ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) + ) { this.pressed = this.getTargetTool( e ); if ( this.pressed ) { this.pressed.setActive( true ); - this.getElementDocument().addEventListener( - 'mouseup', this.onCapturedMouseUpHandler, true - ); + this.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true ); + this.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true ); } + return false; } - return false; }; /** - * Handle captured mouse up events. + * Handle captured mouse up and key up events. * - * @param {Event} e Mouse up event + * @param {Event} e Mouse up or key up event */ -OO.ui.ToolGroup.prototype.onCapturedMouseUp = function ( e ) { - this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseUpHandler, true ); - // onPointerUp may be called a second time, depending on where the mouse is when the button is +OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) { + this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true ); + this.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true ); + // onMouseKeyUp may be called a second time, depending on where the mouse is when the button is // released, but since `this.pressed` will no longer be true, the second call will be ignored. - this.onPointerUp( e ); + this.onMouseKeyUp( e ); }; /** - * Handle mouse up events. + * Handle mouse up and key up events. * - * @param {jQuery.Event} e Mouse up event + * @param {jQuery.Event} e Mouse up or key up event */ -OO.ui.ToolGroup.prototype.onPointerUp = function ( e ) { +OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) { var tool = this.getTargetTool( e ); - if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === tool ) { + if ( + !this.isDisabled() && this.pressed && this.pressed === tool && + ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) + ) { this.pressed.onSelect(); + this.pressed = null; + return false; } this.pressed = null; - return false; }; /** - * Handle mouse over events. + * Handle mouse over and focus events. * - * @param {jQuery.Event} e Mouse over event + * @param {jQuery.Event} e Mouse over or focus event */ -OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) { +OO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) { var tool = this.getTargetTool( e ); if ( this.pressed && this.pressed === tool ) { @@ -7214,11 +7227,11 @@ OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) { }; /** - * Handle mouse out events. + * Handle mouse out and blur events. * - * @param {jQuery.Event} e Mouse out event + * @param {jQuery.Event} e Mouse out or blur event */ -OO.ui.ToolGroup.prototype.onMouseOut = function ( e ) { +OO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) { var tool = this.getTargetTool( e ); if ( this.pressed && this.pressed === tool ) { @@ -9575,6 +9588,7 @@ OO.ui.BarToolGroup.static.name = 'bar'; * @mixins OO.ui.LabelElement * @mixins OO.ui.TitledElement * @mixins OO.ui.ClippableElement + * @mixins OO.ui.TabIndexedElement * * @constructor * @param {OO.ui.Toolbar} toolbar @@ -9594,23 +9608,26 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, 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 = $( '' ); + // 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 } ) ); - - // Properties - this.active = false; - this.dragging = false; - this.onBlurHandler = this.onBlur.bind( this ); - this.$handle = $( '' ); + OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) ); // Events this.$handle.on( { - mousedown: this.onHandlePointerDown.bind( this ), - mouseup: this.onHandlePointerUp.bind( this ) + keydown: this.onHandleMouseKeyDown.bind( this ), + keyup: this.onHandleMouseKeyUp.bind( this ), + mousedown: this.onHandleMouseKeyDown.bind( this ), + mouseup: this.onHandleMouseKeyUp.bind( this ) } ); // Initialization @@ -9640,6 +9657,7 @@ 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 ); /* Static Properties */ @@ -9660,9 +9678,9 @@ OO.ui.PopupToolGroup.prototype.setDisabled = function () { /** * Handle focus being lost. * - * The event is actually generated from a mouseup, so it is not a normal blur event object. + * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object. * - * @param {jQuery.Event} e Mouse up event + * @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 @@ -9674,33 +9692,44 @@ OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) { /** * @inheritdoc */ -OO.ui.PopupToolGroup.prototype.onPointerUp = function ( e ) { +OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) { // Only close toolgroup when a tool was actually selected - if ( !this.isDisabled() && e.which === 1 && this.pressed && this.pressed === this.getTargetTool( e ) ) { + 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.onPointerUp.call( this, e ); + return OO.ui.PopupToolGroup.super.prototype.onMouseKeyUp.call( this, e ); }; /** - * Handle mouse up events. + * Handle mouse up and key up events. * - * @param {jQuery.Event} e Mouse up event + * @param {jQuery.Event} e Mouse up or key up event */ -OO.ui.PopupToolGroup.prototype.onHandlePointerUp = function () { - return false; +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 events. + * Handle mouse down and key down events. * - * @param {jQuery.Event} e Mouse down event + * @param {jQuery.Event} e Mouse down or key down event */ -OO.ui.PopupToolGroup.prototype.onHandlePointerDown = function ( e ) { - if ( !this.isDisabled() && e.which === 1 ) { +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; } - return false; }; /** @@ -9714,6 +9743,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( 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' ); @@ -9728,6 +9758,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) { } } 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' ); @@ -9846,16 +9877,18 @@ OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () { /** * @inheritdoc */ -OO.ui.ListToolGroup.prototype.onPointerUp = function ( e ) { - var ret = OO.ui.ListToolGroup.super.prototype.onPointerUp.call( this, e ); - +OO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) { // Do not close the popup when the user wants to show more/fewer tools - if ( $( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length ) { - // Prevent the popup list from being hidden - this.setActive( true ); + if ( + $( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length && + ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) + ) { + // HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which + // hides the popup list when a tool is selected) and call ToolGroup's implementation directly. + return OO.ui.ListToolGroup.super.super.prototype.onMouseKeyUp.call( this, e ); + } else { + return OO.ui.ListToolGroup.super.prototype.onMouseKeyUp.call( this, e ); } - - return ret; }; OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () { -- 2.20.1