jenkins-bot has submitted this change and it was merged.

Change subject: Added .focus() to $.ui.TemplatedWidget and child widgets
......................................................................


Added .focus() 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/snakview/snakview.variations.Value.js
M lib/resources/jquery.wikibase/snakview/snakview.variations.Variation.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
30 files changed, 265 insertions(+), 25 deletions(-)

Approvals:
  Thiemo Mättig (WMDE): Looks good to me, approved
  jenkins-bot: Verified



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 d282541..1d06b7d 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 7696c06..fd78b56 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 
{wikibase.datamodel.ClaimGroupSet|{wikibase.datamodel.StatementGroupSet} [value]
  *         The claims to be displayed by this view. If null, the view will 
display only an add
@@ -365,6 +365,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 dd5b7e3..2cbab2c 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 {wikibase.datamodel.ClaimGroup|wikibase.datamodel.StatementGroup} 
[value]
  *         The list of statements to be displayed by this view. If null, the 
view will initialize an
@@ -389,6 +389,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 95f2188..75cda6d 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 c4a1707..6a9ad48 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js
@@ -432,6 +432,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 3ead314..57ecc33 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, {
        /**
@@ -586,6 +585,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..1f6eeec 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() 
).focus();
+               } 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 704a861..c285bba 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: []
@@ -632,6 +632,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' ),
@@ -639,6 +642,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 9b85eae..e39b6fb 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 dbfd8b6..ee61459 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
@@ -672,6 +673,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 3badefd..9e700e5 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
@@ -342,6 +343,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/snakview/snakview.variations.Value.js 
b/lib/resources/jquery.wikibase/snakview/snakview.variations.Value.js
index 585a776..cc9d5d0 100644
--- a/lib/resources/jquery.wikibase/snakview/snakview.variations.Value.js
+++ b/lib/resources/jquery.wikibase/snakview/snakview.variations.Value.js
@@ -346,6 +346,13 @@
                        return true;
                },
 
+               /*
+                * @see 
jQuery.wikibase.snakview.variations.Variation.isFocusable
+                */
+               isFocusable: function() {
+                       return true;
+               },
+
                /**
                 * @see jQuery.wikibase.snakview.variations.Variation.focus
                 */
diff --git 
a/lib/resources/jquery.wikibase/snakview/snakview.variations.Variation.js 
b/lib/resources/jquery.wikibase/snakview/snakview.variations.Variation.js
index 0a021f8..20f0bdc 100644
--- a/lib/resources/jquery.wikibase/snakview/snakview.variations.Variation.js
+++ b/lib/resources/jquery.wikibase/snakview/snakview.variations.Variation.js
@@ -191,6 +191,15 @@
                stopEditing: function( dropValue ) {},
 
                /**
+                * @since 0.5
+                *
+                * @return {boolean}
+                */
+               isFocusable: function() {
+                       return false;
+               },
+
+               /**
                 * Will set the focus if there is some focusable input object.
                 *
                 * @since 0.4
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: merged
Gerrit-Change-Id: I97583a451fd9e8148fd37689cb5bec60b81616bf
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to