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

Reply via email to