jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/400461 )

Change subject: Implement basic keyboard accessibility for Query.Wikidata.org
......................................................................


Implement basic keyboard accessibility for Query.Wikidata.org

Ctrl/Command+Enter: Run query
Esc: Leave current input field/textarea
?: Toggle Help menu
i: Focus on query textarea
r: Jump to query result
f: Focus on "Fliter" button in Query Helper
s: Focus on "Show" button in Query Helper
m: Click "Limit" button in Query Helper
e: Show examples
l: Show language menu

Bug: T173213
Change-Id: I6a4315992c6509b043b8f522fb15f037b68b699f
---
M index.html
M wikibase/queryService/ui/App.js
M wikibase/queryService/ui/queryHelper/QueryHelper.js
M wikibase/queryService/ui/resultBrowser/helper/FormatterHelper.js
4 files changed, 70 insertions(+), 18 deletions(-)

Approvals:
  Jonas Kress (WMDE): Looks good to me, approved
  jenkins-bot: Verified



diff --git a/index.html b/index.html
index e2170ab..3065117 100644
--- a/index.html
+++ b/index.html
@@ -60,7 +60,7 @@
                                <div class="collapse navbar-collapse" 
id="header-navbar-collapse">
                                        <ul class="nav navbar-nav">
                                                <li>
-                                                       <button type="button" 
class="btn navbar-btn btn-default" data-toggle="modal" 
data-target="#QueryExamples">
+                                                       <button type="button" 
class="btn navbar-btn btn-default" id="open-example" data-toggle="modal" 
data-target="#QueryExamples">
                                                        <span class="fa 
fa-folder-open-o"></span> <span data-i18n="wdqs-app-button-examples"></span>
                                                        </button>
                                                </li>
@@ -69,7 +69,7 @@
                                                                <a 
href="https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/Wikidata_Query_Help";
 target="_blank" class="btn btn-default">
                                                                        <span 
class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> <span 
data-i18n="wdqs-app-button-help"></span>
                                                                </a>
-                                                               <button 
data-toggle="dropdown" class="btn btn-default dropdown-toggle">
+                                                               <button 
data-toggle="dropdown" class="btn btn-default dropdown-toggle" id="help-toggle">
                                                                        <span 
class="caret"></span>
                                                                </button>
                                                                <ul 
class="dropdown-menu">
@@ -102,7 +102,7 @@
                                        </ul>
                                        <ul class="nav navbar-nav navbar-right">
                                                <li>
-                                                       <a href="#" 
class="uls-trigger" data-toggle="tooltip"></a>
+                                                       <a href="#" 
class="uls-trigger" id="language-toggle" data-toggle="tooltip"></a>
                                                </li>
                                        </ul>
                                </div>
@@ -115,14 +115,14 @@
                                                <div class="toolbar">
                                                        <div 
class="toolbar-top">
                                                                <div>
-                                                                       <a 
class="btn query-helper-trigger" target="_blank" title="Show query 
explanation"> <span class="fa fa-info-circle" aria-hidden="true"></span></a>
+                                                                       <a 
href="#" class="btn query-helper-trigger" target="_blank" title="Show query 
explanation"> <span class="fa fa-info-circle" aria-hidden="true"></span></a>
                                                                </div>
                                                                <div>
-                                                                       <a 
class="btn fullscreen" data-toggle="tooltip" data-placement="top" 
data-i18n="[title]wdqs-app-button-fullscreen-title"> <span class="fa 
fa-arrows-alt" aria-hidden="true"></span>
+                                                                       <a 
href="#" class="btn fullscreen" data-toggle="tooltip" data-placement="top" 
data-i18n="[title]wdqs-app-button-fullscreen-title"> <span class="fa 
fa-arrows-alt" aria-hidden="true"></span>
                                                                        </a>
                                                                </div>
                                                                <div 
class="dropdown">
-                                                                       <a 
class="btn dropdown-toggle" data-toggle="dropdown" role="button" 
aria-haspopup="true" aria-expanded="false" 
data-i18n="[title]wdqs-app-button-prefixes"> <span class="fa fa-thumb-tack"
+                                                                       <a 
href="#" class="btn dropdown-toggle" data-toggle="dropdown" role="button" 
aria-haspopup="true" aria-expanded="false" 
data-i18n="[title]wdqs-app-button-prefixes"> <span class="fa fa-thumb-tack"
                                                                                
aria-hidden="true"
                                                                        
></span><span class="caret"></span></a>
                                                                        <ul 
class="dropdown-menu">
@@ -134,15 +134,15 @@
                                                                        </ul>
                                                                </div>
                                                                <div>
-                                                                       <a 
class="btn" data-i18n="[title]wdqs-app-button-examples" data-toggle="modal" 
data-target="#QueryExamples"> <span class="fa fa-folder-open-o" 
aria-hidden="true"></span>
+                                                                       <a 
href="#" class="btn" data-i18n="[title]wdqs-app-button-examples" 
data-toggle="modal" data-target="#QueryExamples"> <span class="fa 
fa-folder-open-o" aria-hidden="true"></span>
                                                                        </a>
                                                                </div>
                                                                <div>
-                                                                       <a 
class="btn restore" data-toggle="tooltip" data-placement="top" 
data-i18n="[title]wdqs-app-button-restore-title"> <span class="fa fa-history" 
aria-hidden="true"></span>
+                                                                       <a 
href="#" class="btn restore" id="restore-button" data-toggle="tooltip" 
data-placement="top" data-i18n="[title]wdqs-app-button-restore-title"> <span 
class="fa fa-history" aria-hidden="true"></span>
                                                                        </a>
                                                                </div>
                                                                <div>
-                                                                       <a 
class="btn" id="clear-button" data-toggle="tooltip" data-placement="top" 
data-i18n="[title]wdqs-app-button-clear-title"> <span class="fa fa-trash-o" 
aria-hidden="true"></span>
+                                                                       <a 
href="#" class="btn" id="clear-button" data-toggle="tooltip" 
data-placement="top" data-i18n="[title]wdqs-app-button-clear-title"> <span 
class="fa fa-trash-o" aria-hidden="true"></span>
                                                                        </a>
                                                                </div>
                                                                <div>
@@ -159,7 +159,7 @@
                                                        <div 
class="query-helper query-helper-hidden">
                                                                <div 
class="panel panel-info">
                                                                        <div 
class="panel-heading">
-                                                                               
<strong data-i18n="wdqs-app-help-queryhelper"></strong> <a target="_blank" 
rel="noopener" 
href="https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/Query_Helper";><span
+                                                                               
<strong data-i18n="wdqs-app-help-queryhelper"></strong> <a target="_blank" 
rel="noopener" id="query-helper-help" 
href="https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/Query_Helper";><span
                                                                                
        class="glyphicon glyphicon-question-sign"
                                                                                
></span></a>
                                                                                
<button type="button" class="close" aria-label="Close">
diff --git a/wikibase/queryService/ui/App.js b/wikibase/queryService/ui/App.js
index d571ea1..bff9858 100644
--- a/wikibase/queryService/ui/App.js
+++ b/wikibase/queryService/ui/App.js
@@ -151,11 +151,10 @@
         * @private
         */
        SELF.prototype._initApp = function() {
-               // ctr + enter executes query
+               var self = this;
+
                $( window ).keydown( function( e ) {
-                       if ( e.ctrlKey && e.keyCode === 13 ) {
-                               $( '#execute-button' ).click();
-                       }
+                       return self._keyboardShortcut( e );
                } );
 
                // add tooltip to dropdown
@@ -169,6 +168,56 @@
        /**
         * @private
         */
+       SELF.prototype._keyboardShortcut = function( e ) {
+               if ( ( e.ctrlKey || e.metaKey ) && e.key === 'Enter' ) {
+                       // e.metaKey is used for Mac 
(https://stackoverflow.com/a/21996827)
+                       $( 'button#execute-button' ).click();
+                       return false;
+               }
+
+               if ( $( document.activeElement ).is( 'textarea, input' ) ) {
+                       if ( e.key === 'Escape' ) {
+                               $( document.activeElement ).blur();
+                       }
+                       return;
+               }
+
+               if ( this._KeyboardShortcutKeys( e ) ) {
+                       return false;
+               }
+       };
+
+       /**
+        * @private
+        */
+       SELF.prototype._KeyboardShortcutKeys = function( e ) {
+
+               if ( e.ctrlKey || e.metaKey || e.altKey ) {
+                       return false;
+               }
+
+               var keys = {
+                       '?': function () { $( 'button#help-toggle' ).click(); },
+                       i: function () { $( '.CodeMirror textarea' ).focus(); },
+                       r: function () { $( '#query-result' ).find( 
'a.item-link' ).first().focus(); },
+                       f: function () { $( 'a#query-helper-filter' ).focus(); 
},
+                       s: function () { $( 'a#query-helper-show' ).focus(); },
+                       m: function () { $( 'a#query-helper-limit' ).click(); },
+                       e: function () { if ( !$( '#QueryExamples' ).is( 
':visible' ) ) { $( 'button#open-example' ).click(); } },
+                       l: function () { $( 'a#language-toggle' ).click(); }
+               };
+
+               if ( e.key in keys ) {
+                       keys[e.key]();
+                       return true;
+               }
+
+               return false;
+       };
+
+       /**
+        * @private
+        */
        SELF.prototype._initEditor = function() {
                var self = this;
 
diff --git a/wikibase/queryService/ui/queryHelper/QueryHelper.js 
b/wikibase/queryService/ui/queryHelper/QueryHelper.js
index d51b0f5..e27aaae 100644
--- a/wikibase/queryService/ui/queryHelper/QueryHelper.js
+++ b/wikibase/queryService/ui/queryHelper/QueryHelper.js
@@ -244,6 +244,7 @@
                var $limitSection = $( '<div>' ),
                        $limit = $( '<a data-type="number">' )
                                .attr( 'href', '#' )
+                               .attr( 'id', 'query-helper-limit' )
                                .text( 'Limit' )
                                .data( 'value', this._query.getLimit() ),
                        $value = $( '<span>' )
@@ -297,7 +298,8 @@
                                '<span class="fa fa-plus" 
aria-hidden="true"></span>', ' ' )
                                .tooltip( {
                                        title: 'Click to add new item'
-                               } ).attr( 'data-type', 'item' ).attr( 
'data-auto_open', true );
+                       } ).attr( 'id', 'query-helper-filter' )
+                       .attr( 'data-type', 'item' ).attr( 'data-auto_open', 
true );
 
                // SelectorBox
                var self = this;
@@ -338,7 +340,8 @@
                                '<span class="fa fa-plus" 
aria-hidden="true"></span>', ' ' )
                                .tooltip( {
                                        title: 'Click to add new property'
-                               } ).attr( 'data-type', 'property' ).attr( 
'data-auto_open', true );
+                       } ).attr( 'id', 'query-helper-show' )
+                       .attr( 'data-type', 'property' ).attr( 
'data-auto_open', true );
 
                // SelectorBox
                var self = this;
diff --git a/wikibase/queryService/ui/resultBrowser/helper/FormatterHelper.js 
b/wikibase/queryService/ui/resultBrowser/helper/FormatterHelper.js
index 0ea5bc5..c864cc6 100644
--- a/wikibase/queryService/ui/resultBrowser/helper/FormatterHelper.js
+++ b/wikibase/queryService/ui/resultBrowser/helper/FormatterHelper.js
@@ -134,7 +134,7 @@
 
                switch ( data.datatype || data.type ) {
                case TYPE_URI:
-                       var $link = $( '<a>' ).attr( { title: title, href: 
value, target: '_blank', rel: 'noopener' } );
+                       var $link = $( '<a>' ).attr( { title: title, href: 
value, target: '_blank', class: 'item-link', rel: 'noopener' } );
                        $html.append( $link );
 
                        if ( this.isCommonsResource( value ) ) {
@@ -252,7 +252,7 @@
         */
        SELF.prototype.createExploreButton = function( url ) {
                var $button = $( '<a href="' + url +
-                               '" title="Explore item" class="explore 
glyphicon glyphicon-search" aria-hidden="true">' );
+                               '" title="Explore item" class="explore 
glyphicon glyphicon-search" tabindex="-1" aria-hidden="true">' );
                $button.click( $.proxy( this.handleExploreItem, this ) );
 
                return $button;

-- 
To view, visit https://gerrit.wikimedia.org/r/400461
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6a4315992c6509b043b8f522fb15f037b68b699f
Gerrit-PatchSet: 16
Gerrit-Project: wikidata/query/gui
Gerrit-Branch: master
Gerrit-Owner: Eflyjason <[email protected]>
Gerrit-Reviewer: Eflyjason <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Rafidaslam <[email protected]>
Gerrit-Reviewer: Smalyshev <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to