Henning Snater has uploaded a new change for review. https://gerrit.wikimedia.org/r/171554
Change subject: Added .foucs() to $.ui.TemplatedWidget and child widgets ...................................................................... Added .foucs() to $.ui.TemplatedWidget and child widgets Enforces consistency across $.ui.TemplatedWidget widgets. Change-Id: I97583a451fd9e8148fd37689cb5bec60b81616bf --- M lib/resources/jquery.ui/jquery.ui.TemplatedWidget.js M lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js M lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js M lib/resources/jquery.wikibase/jquery.wikibase.claimgrouplistview.js M lib/resources/jquery.wikibase/jquery.wikibase.claimlistview.js M lib/resources/jquery.wikibase/jquery.wikibase.claimview.js M lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js M lib/resources/jquery.wikibase/jquery.wikibase.entityview.js M lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js M lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js M lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js M lib/resources/jquery.wikibase/jquery.wikibase.labelview.js M lib/resources/jquery.wikibase/jquery.wikibase.listview.js M lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js M lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgrouplistview.js M lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js M lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js M lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js M lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js M lib/resources/jquery.wikibase/jquery.wikibase.statementview.RankSelector.js M lib/resources/jquery.wikibase/jquery.wikibase.statementview.js M lib/resources/jquery.wikibase/snakview/snakview.js M lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js M lib/resources/jquery.wikibase/toolbar/jquery.wikibase.movetoolbar.js M lib/resources/jquery.wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js M lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbar.js M lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js M lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbaritem.js 28 files changed, 249 insertions(+), 25 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/54/171554/1 diff --git a/lib/resources/jquery.ui/jquery.ui.TemplatedWidget.js b/lib/resources/jquery.ui/jquery.ui.TemplatedWidget.js index 939994c..c4974c0 100644 --- a/lib/resources/jquery.ui/jquery.ui.TemplatedWidget.js +++ b/lib/resources/jquery.ui/jquery.ui.TemplatedWidget.js @@ -151,6 +151,13 @@ } return response; + }, + + /** + * Applies focus to the widget. + */ + focus: function() { + this.element.focus(); } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js b/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js index 869a271..81abffa 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js @@ -373,11 +373,13 @@ }, /** - * Puts Keyboard focus on the widget. + * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { if( this._isInEditMode ) { this.$list.data( 'tagadata' ).getHelperTag().find( 'input' ).focus(); + } else { + this.element.focus(); } } diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js b/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js index 8d77e7f..b6b5f9b 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js @@ -5,7 +5,7 @@ ( function( wb, $, mw ) { 'use strict'; -var PARENT = $.TemplatedWidget; +var PARENT = $.ui.TemplatedWidget; /** * References one single $menu instance that is reused for all badgeselector instances. @@ -22,6 +22,7 @@ /** * Selector for toggling badges. * @since 0.5 + * @extends jQuery.ui.TemplatedWidget * * @option {string[]} [value] * Item ids of badges currently assigned. diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.claimgrouplistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.claimgrouplistview.js index b9f3b72..7c506a2 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.claimgrouplistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.claimgrouplistview.js @@ -5,12 +5,12 @@ ( function( wb, $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying claim groups (claimlistviews). * @since 0.5 - * @extends jQuery.TemplatedWidget + * @extends jQuery.ui.TemplatedWidget * * @option {wb.datamodel.Claim[]|null} value The claims to be displayed by this view. If null, the view * will display only an add button to add new claims. @@ -358,6 +358,20 @@ } return response; + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + var listview = this.listview(), + $items = listview.items(); + + if( $items.length ) { + listview.listItemAdapter().liInstance( $items.first() ).focus(); + } else { + this.element.focus(); + } } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.claimlistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.claimlistview.js index 66534c5..f58bec5 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.claimlistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.claimlistview.js @@ -5,12 +5,12 @@ ( function( mw, wb, $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing a list of statements (wb.datamodel.Statement objects). * @since 0.4 - * @extends jQuery.TemplatedWidget + * @extends jQuery.ui.TemplatedWidget * * @option {wb.datamodel.Statement[]|null} value The list of statements to be displayed this view. If null, the * view will initialize an empty statementview with edit mode started. @@ -387,6 +387,20 @@ } return response; + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + var listview = this.listview(), + $items = listview.items(); + + if( $items.length ) { + listview.listItemAdapter().liInstance( $items.first() ).focus(); + } else { + this.element.focus(); + } } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js b/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js index 2d9e614..abcacbd 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js @@ -7,11 +7,12 @@ ( function( mw, wb, $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing Wikibase Claims. * @since 0.3 + * @extends jQuery.ui.TemplatedWidget * * @option {wb.datamodel.Claim|null} value The claim displayed by this view. This can only be set initially, * the value function doesn't work as a setter in this view. If this is null, this view will @@ -692,6 +693,13 @@ } return response; + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + this.$mainSnak.data( 'snakview' ).focus(); } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js b/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js index cb16fa7..a2ea587 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js @@ -337,11 +337,13 @@ }, /** - * Puts Keyboard focus on the widget. + * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { if( this._isInEditMode ) { this.$text.children( 'input' ).focus(); + } else { + this.element.focus(); } } diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js index ed89bbd..aa04ae1 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js @@ -416,6 +416,13 @@ .removeClass( 'tocsection-' + i ) .addClass( 'tocsection-' + ( i + 1 ) ); } ); + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + this.$label.data( 'labelview' ).focus(); } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js index 5c4c653..a0e0177 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintgroupview.js @@ -232,6 +232,9 @@ this.stopEditing( true ); }, + /** + * @see jQuery.ui.TemplatedWidget.focus + */ focus: function() { this.$fingerprintlistview.data( 'fingerprintlistview' ).focus(); }, diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js index a1a580e..0854026 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintlistview.js @@ -312,13 +312,17 @@ this.stopEditing( true ); }, + /** + * @see jQuery.ui.TemplatedWidget.focus + */ focus: function() { var listview = this.element.data( 'listview' ), - lia = listview.listItemAdapter(), $items = listview.items(); if( $items.length ) { - lia.liInstance( $items.first() ).focus(); + listview.listItemAdapter().liInstance( $items.first() ).focus(); + } else { + this.element.focus(); } }, diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js index fb0425b..da33b4e 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.fingerprintview.js @@ -426,7 +426,7 @@ }, /** - * Sets keyboard focus on the first input element. + * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { this.$labelview.data( 'labelview' ).focus(); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js b/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js index 0e4825f..7aef2aa 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js @@ -349,11 +349,13 @@ }, /** - * Puts Keyboard focus on the widget. + * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { if( this._isInEditMode ) { this.$text.children( 'input' ).focus(); + } else { + this.element.focus(); } } diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.listview.js b/lib/resources/jquery.wikibase/jquery.wikibase.listview.js index f5b0d86..d7288ab 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.listview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.listview.js @@ -7,11 +7,12 @@ ( function( $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing several list items, each represented by another widget. * @since 0.4 + * @extends jQuery.ui.TemplatedWidget * * @option {*|null} value The values displayed by this view. Each value is represented by a widget * defined in the 'listItemAdapter' option. @@ -397,6 +398,23 @@ enterNewItem: function() { var $newLi = this.addItem(); this._trigger( 'enternewitem', null, [ $newLi ] ); + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + var $items = this.items(); + + if( $items.length ) { + var item = this.listItemAdapter().liInstance( $items.first() ); + if( item.focus ) { + item.focus(); + return; + } + } + + this.element.focus(); } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js b/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js index 0d10b45..88489b9 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js @@ -6,10 +6,12 @@ ( function( mw, wb, $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing Wikibase Statements. + * @since 0.4 + * @extends jQuery.ui.TemplatedWidget * * @option statementGuid {string} (REQUIRED) The GUID of the statement the reference belongs to. * @@ -53,9 +55,6 @@ * (1) {jQuery.Event} event * (2) {wb.RepoApiError|undefined} wb.RepoApiError object if an error occurred, undefined if * the current error state is resolved. - * - * @since 0.4 - * @extends jQuery.TemplatedWidget */ $.widget( 'wikibase.referenceview', PARENT, { /** @@ -584,6 +583,19 @@ } return response; + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + var $items = this._listview.items(); + + if( $items.length ) { + this._listview.listItemAdapter().liInstance( $items.first() ).focus(); + } else { + this.element.focus(); + } } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgrouplistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgrouplistview.js index 1995f5c..13be374 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgrouplistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgrouplistview.js @@ -10,7 +10,7 @@ /** * Encapsulates multiple sitelinkgroupview widgets. * @since 0.5 - * @extends jQuery.TemplatedWidget + * @extends jQuery.ui.TemplatedWidget * * @option {Object[]} value * Array of objects representing the widget's value. @@ -105,6 +105,20 @@ } return response; + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + var listview = this.$listview.data( 'listview' ), + $items = listview.items(); + + if( $items.length ) { + listview.listItemAdapter().liInstance( $items.first() ); + } else { + this.element.focus(); + } } } ); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js index c891ec5..a02979b 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkgroupview.js @@ -269,6 +269,9 @@ this.stopEditing( true ); }, + /** + * @see jQuery.ui.TemplatedWidget.focus + */ focus: function() { this.$sitelinklistview.data( 'sitelinklistview' ).focus(); }, diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js index 1b2eec1..1046b3d 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinklistview.js @@ -10,7 +10,7 @@ /** * Displays and allows editing multiple site links. * @since 0.5 - * @extends jQuery.TemplatedWidget + * @extends jQuery.ui.TemplatedWidget * * @option {wikibase.datamodel.SiteLink[]} [value] * Default: [] @@ -628,6 +628,9 @@ this.stopEditing( true ); }, + /** + * @see jQuery.ui.TemplatedWidget.focus + */ focus: function() { // Focus first invalid/incomplete item or - if there is none - the first item. var listview = this.$listview.data( 'listview' ), @@ -635,6 +638,7 @@ $items = listview.items(); if( !$items.length ) { + this.element.focus(); return; } diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js index 2640d02..c8e2a43 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.sitelinkview.js @@ -465,7 +465,7 @@ }, /** - * Sets keyboard focus on the first input element. + * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { var $siteselector = this.element.find( ':wikibase-siteselector' ), @@ -478,6 +478,8 @@ $pagesuggester.focus(); } else if( $siteselector.length ) { $siteselector.focus(); + } else { + this.element.focus(); } }, diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js index 9f707cd..e552ba8 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js @@ -7,11 +7,12 @@ ( function( mw, wb, $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing a list of snaks (wb.datamodel.Snak objects). * @since 0.4 + * @extends jQuery.ui.TemplatedWidget * * @option {wb.datamodel.SnakList|null} value The list of snaks displayed by this view. This should only be * set initially. If this is null, the view will start edit mode upon initialization. @@ -465,6 +466,19 @@ }, /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + var $items = this._listview.items(); + + if( $items.length ) { + this._listview.listItemAdapter().liInstance( $items.first() ).focus(); + } else { + this.element.focus(); + } + }, + + /** * Moves a snak within the snak list. * @since 0.4 * diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.statementview.RankSelector.js b/lib/resources/jquery.wikibase/jquery.wikibase.statementview.RankSelector.js index 272bafc..0e5068d 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.statementview.RankSelector.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.statementview.RankSelector.js @@ -5,7 +5,7 @@ ( function( mw, wb, $, util ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * The node of the rank selector menu to select a rank from. @@ -16,6 +16,7 @@ /** * Selector for choosing a statement rank. * @since 0.5 + * @extends jQuery.ui.TemplatedWidget * * @option [rank] {boolean} The rank that shall be selected. * Default: wb.datamodel.Statement.RANK.NORMAL diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js b/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js index 5b7620d..b394d85 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.statementview.js @@ -7,11 +7,12 @@ ( function( mw, wb, $ ) { 'use strict'; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing Wikibase Statements. * @since 0.4 + * @extends jQuery.ui.TemplatedWidget * * @option {wikibase.datamodel.Statement|null} [value] * The statement displayed by this view. This can only be set initially, the value function @@ -674,6 +675,13 @@ } return true; + }, + + /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + this._claimview.focus(); } } ); diff --git a/lib/resources/jquery.wikibase/snakview/snakview.js b/lib/resources/jquery.wikibase/snakview/snakview.js index 8e07eee..2fde9cb 100644 --- a/lib/resources/jquery.wikibase/snakview/snakview.js +++ b/lib/resources/jquery.wikibase/snakview/snakview.js @@ -14,11 +14,12 @@ // Erase existing object to prevent jQuery.Widget detecting an existing constructor: delete $.wikibase.snakview; - var PARENT = $.TemplatedWidget; + var PARENT = $.ui.TemplatedWidget; /** * View for displaying and editing Wikibase Snaks. * @since 0.3 + * @extends jQuery.ui.TemplatedWidget * * @option {Object|wb.datamodel.Snak|null} value The snak this view should represent initially. If omitted, * an empty view will be served, ready to take some input by the user. The value can also be @@ -343,6 +344,22 @@ } ), /** + * @see jQuery.ui.TemplatedWidget.focus + */ + focus: function() { + if( this._variation && this._variation.isFocusable() ) { + this._variation.focus(); + } else { + var propertySelector = this._getPropertySelector(); + if( propertySelector ) { + propertySelector.element.focus(); + } else { + this.element.focus(); + } + } + }, + + /** * Ends the edit mode where the snak can be edited. * @since 0.3 * diff --git a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js index 9b0582b..08ddcce 100644 --- a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js +++ b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.edittoolbar.js @@ -481,6 +481,33 @@ } return response; + }, + + /** + * @see jQuery.wikibase.toolbar.focus + */ + focus: function() { + if( this._isInEditMode() ) { + var btnSave = this._buttons.save && this._buttons.save.data( 'toolbarbutton' ), + btnCancel = this._buttons.cancel && this._buttons.cancel.data( 'toolbarbutton' ); + + if( btnSave && !btnSave.option( 'disabled' ) ) { + btnSave.focus(); + return; + } else if( btnCancel && btnCancel.option( 'disabled' ) ) { + btnCancel.focus(); + return; + } + } else { + var btnEdit = this._buttons.edit && this._buttons.edit.data( 'toolbarbutton' ); + + if( btnEdit && !btnEdit.option( 'disabled' ) ) { + btnEdit.focus(); + return; + } + } + + this.element.focus(); } } ); diff --git a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.movetoolbar.js b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.movetoolbar.js index 3a980a5..80f4627 100644 --- a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.movetoolbar.js +++ b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.movetoolbar.js @@ -76,6 +76,22 @@ */ getButton: function( buttonName ) { return this._buttons[buttonName].data( 'toolbarbutton' ); + }, + + /** + * @see jQuery.wikibase.toolbar.focus + */ + focus: function() { + var buttonUp = this._buttons.up && this._buttons.up.data( 'toolbarbutton' ), + buttonDown = this._buttons.down && this._buttons.down.data( 'toolbarbutton' ); + + if( buttonUp && !buttonUp.option( 'disabled' ) ) { + buttonUp.focus(); + } else if( buttonDown && !buttonDown.option( 'disabled' ) ) { + buttonDown.focus(); + } else { + this.element.focus(); + } } } ); diff --git a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js index 6746904..794ca41 100644 --- a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js +++ b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.singlebuttontoolbar.js @@ -89,10 +89,15 @@ return $defaultButton; }, + /** + * @see jQuery.wikibase.toolbaritem.focus + */ focus: function() { var button = this.options.$content.first().data( 'toolbarbutton' ); if( button ) { button.focus(); + } else { + this.element.focus(); } } } ); diff --git a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbar.js b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbar.js index 441cc23..8ddf7c1 100644 --- a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbar.js +++ b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbar.js @@ -167,6 +167,22 @@ $.each( this._getItems(), function() { this[state](); } ); + }, + + /** + * @see jQuery.wikibase.toolbaritem.focus + */ + focus: function() { + var items = this._getItems(); + + for( var i = 0; i < items.length; i++ ) { + if( !items[i].option( 'disabled' ) ) { + items[i].focus(); + return; + } + } + + this.element.focus(); } } ); diff --git a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js index ae2ec89..45fe88d 100644 --- a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js +++ b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbarbutton.js @@ -101,6 +101,9 @@ : this.options.$label; }, + /** + * @see jQuery.wikibase.toolbaritem.focus + */ focus: function() { this.$link.focus(); }, diff --git a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbaritem.js b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbaritem.js index 17d8dac..ddba1e1 100644 --- a/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbaritem.js +++ b/lib/resources/jquery.wikibase/toolbar/jquery.wikibase.toolbaritem.js @@ -5,7 +5,7 @@ ( function( $ ) { 'use strict'; -var PARENT = $.TemplatedWidget; +var PARENT = $.ui.TemplatedWidget; /** * Represents a generic item to be wrapped by a jQuery.wikibase.toolbar. -- To view, visit https://gerrit.wikimedia.org/r/171554 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I97583a451fd9e8148fd37689cb5bec60b81616bf Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits