From 4fd73a2b2f841548ee59bfc82e4e8cb2d66bd602 Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 28 Aug 2014 16:04:54 -0400 Subject: [PATCH 1/6] Set focus on site-map and user menu Set focus on first item in the site-map and user drop down for keyboard users, so they can quickly tab to the link/item of their choosing. https://meta.discourse.org/t/keyboard-shortcuts-wish-list/15952 --- .../discourse/lib/keyboard_shortcuts.js | 14 ++++++++++++-- .../javascripts/discourse/views/header.js.es6 | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js b/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js index 473f9d14e5..9107c141ac 100644 --- a/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js +++ b/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js @@ -36,8 +36,6 @@ Discourse.KeyboardShortcuts = Ember.Object.createWithMixins({ 'm t': 'div.notification-options li[data-id="2"] a', // mark topic as tracking 'm w': 'div.notification-options li[data-id="3"] a', // mark topic as watching 'n': '#user-notifications', // open notifications menu - '=': '#site-map', // open site map menu - 'p': '#current-user', // open current user menu 'o,enter': '.topic-list tr.selected a.title', // open selected topic 'shift+r': '#topic-footer-buttons button.create', // reply to topic 'shift+s': '#topic-footer-buttons button.share', // share topic @@ -54,6 +52,8 @@ Discourse.KeyboardShortcuts = Ember.Object.createWithMixins({ '`': 'nextSection', '~': 'prevSection', '/': 'showSearch', + '=': 'showSiteMap', // open site map menu + 'p': 'showCurrentUser', // open current user menu 'ctrl+f': 'showBuiltinSearch', 'command+f': 'showBuiltinSearch', '?': 'showHelpModal', // open keyboard shortcut help @@ -145,6 +145,16 @@ Discourse.KeyboardShortcuts = Ember.Object.createWithMixins({ return false; }, + showSiteMap: function() { + $('#site-map').click(); + $('#site-map-dropdown').focus(); + }, + + showCurrentUser: function() { + $('#current-user').click(); + $('#user-dropdown').focus(); + }, + showHelpModal: function() { Discourse.__container__.lookup('controller:application').send('showKeyboardShortcutsHelp'); }, diff --git a/app/assets/javascripts/discourse/views/header.js.es6 b/app/assets/javascripts/discourse/views/header.js.es6 index 0986709a52..c6e7e3013b 100644 --- a/app/assets/javascripts/discourse/views/header.js.es6 +++ b/app/assets/javascripts/discourse/views/header.js.es6 @@ -58,7 +58,7 @@ export default Discourse.View.extend({ // fade it fast $dropdown.fadeIn('fast'); // autofocus any text input field - $dropdown.find('input[type=text],a:first').focus().select(); + $dropdown.find('input[type=text]').focus().select(); $html.on('click.d-dropdown', function(e) { return $(e.target).closest('.d-dropdown').length > 0 ? true : hideDropdown.apply(self); From 1acb2a13f10927086c4ca5d713c5d1ec4df9891c Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 28 Aug 2014 16:06:48 -0400 Subject: [PATCH 2/6] Added a:first --- app/assets/javascripts/discourse/lib/keyboard_shortcuts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js b/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js index 9107c141ac..991879ba00 100644 --- a/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js +++ b/app/assets/javascripts/discourse/lib/keyboard_shortcuts.js @@ -147,12 +147,12 @@ Discourse.KeyboardShortcuts = Ember.Object.createWithMixins({ showSiteMap: function() { $('#site-map').click(); - $('#site-map-dropdown').focus(); + $('#site-map-dropdown a:first').focus(); }, showCurrentUser: function() { $('#current-user').click(); - $('#user-dropdown').focus(); + $('#user-dropdown a:first').focus(); }, showHelpModal: function() { From 3e7084743c05dfe64e3b44dd870995811e975e63 Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 28 Aug 2014 19:58:07 -0400 Subject: [PATCH 3/6] FIX: Remove up/down key bindings for search results Up/down key bindings make it difficult to access Show More on search results. https://meta.discourse.org/t/keyboard-users-cant-select-show-more-in-search-results/19394 --- .../javascripts/discourse/views/search.js.es6 | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/app/assets/javascripts/discourse/views/search.js.es6 b/app/assets/javascripts/discourse/views/search.js.es6 index 261c656304..115d6fe1f1 100644 --- a/app/assets/javascripts/discourse/views/search.js.es6 +++ b/app/assets/javascripts/discourse/views/search.js.es6 @@ -2,28 +2,28 @@ export default Discourse.View.extend({ tagName: 'div', classNames: ['d-dropdown'], elementId: 'search-dropdown', - templateName: 'search', + templateName: 'search' - didInsertElement: function() { - // Delegate ESC to the composer - var controller = this.get('controller'); - return $('body').on('keydown.search', function(e) { - if ($('#search-dropdown').is(':visible')) { - switch (e.which) { - case 13: - controller.select(); - e.preventDefault(); - break; - case 38: - controller.moveUp(); - e.preventDefault(); - break; - case 40: - controller.moveDown(); - e.preventDefault(); - break; - } - } - }); - } +// didInsertElement: function() { +// // Delegate ESC to the composer +// var controller = this.get('controller'); +// return $('body').on('keydown.search', function(e) { +// if ($('#search-dropdown').is(':visible')) { +// switch (e.which) { +// case 13: +// controller.select(); +// e.preventDefault(); +// break; +// case 38: +// controller.moveUp(); +// e.preventDefault(); +// break; +// case 40: +// controller.moveDown(); +// e.preventDefault(); +// break; +// } +// } +// }); +// } }); From 0784c52a24f5ff743d3c3290e4fcbc05b0b37176 Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 28 Aug 2014 21:39:19 -0400 Subject: [PATCH 4/6] FIX: Remove up/down key bindings for search results Up/down key bindings make it difficult to access Show More on search results. https://meta.discourse.org/t/keyboard-users-cant-select-show-more-in-search-results/19394 --- .../views/search-results-type.js.es6 | 3 +-- .../javascripts/discourse/views/search.js.es6 | 23 ------------------- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/app/assets/javascripts/discourse/views/search-results-type.js.es6 b/app/assets/javascripts/discourse/views/search-results-type.js.es6 index b77d523c0d..9f88257d82 100644 --- a/app/assets/javascripts/discourse/views/search-results-type.js.es6 +++ b/app/assets/javascripts/discourse/views/search-results-type.js.es6 @@ -3,7 +3,6 @@ export default Ember.CollectionView.extend({ itemViewClass: Discourse.GroupedView.extend({ tagName: 'li', classNameBindings: ['selected'], - templateName: Discourse.computed.fmt('parentView.type', "search/%@_result"), - selected: Discourse.computed.propertyEqual('content.index', 'controller.selectedIndex') + templateName: Discourse.computed.fmt('parentView.type', "search/%@_result") }) }); diff --git a/app/assets/javascripts/discourse/views/search.js.es6 b/app/assets/javascripts/discourse/views/search.js.es6 index 115d6fe1f1..92490c1a7f 100644 --- a/app/assets/javascripts/discourse/views/search.js.es6 +++ b/app/assets/javascripts/discourse/views/search.js.es6 @@ -3,27 +3,4 @@ export default Discourse.View.extend({ classNames: ['d-dropdown'], elementId: 'search-dropdown', templateName: 'search' - -// didInsertElement: function() { -// // Delegate ESC to the composer -// var controller = this.get('controller'); -// return $('body').on('keydown.search', function(e) { -// if ($('#search-dropdown').is(':visible')) { -// switch (e.which) { -// case 13: -// controller.select(); -// e.preventDefault(); -// break; -// case 38: -// controller.moveUp(); -// e.preventDefault(); -// break; -// case 40: -// controller.moveDown(); -// e.preventDefault(); -// break; -// } -// } -// }); -// } }); From 185769c07b30b17144db310b209e0b50e6f25e69 Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 28 Aug 2014 23:21:43 -0400 Subject: [PATCH 5/6] Correct Perform Search Test --- test/javascripts/integration/header-anonymous-test.js.es6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/javascripts/integration/header-anonymous-test.js.es6 b/test/javascripts/integration/header-anonymous-test.js.es6 index 3a9d37912d..f1b1daa1cb 100644 --- a/test/javascripts/integration/header-anonymous-test.js.es6 +++ b/test/javascripts/integration/header-anonymous-test.js.es6 @@ -39,6 +39,6 @@ test("header", function() { fillIn("#search-term", "hello"); andThen(function() { ok(exists("#search-dropdown .heading"), "when user completes a search, search box shows search results"); - equal(find("#search-dropdown .selected a").attr("href"), "some-url", "the first search result is selected"); + equal(find("#search-dropdown a:first").attr("href"), "some-url", "there is a search result"); }); }); From 723798cc30c50dc99f8c8e11fea938669227bacc Mon Sep 17 00:00:00 2001 From: cpradio Date: Thu, 28 Aug 2014 23:32:56 -0400 Subject: [PATCH 6/6] Correct Perform Search Test --- test/javascripts/integration/header-anonymous-test.js.es6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/javascripts/integration/header-anonymous-test.js.es6 b/test/javascripts/integration/header-anonymous-test.js.es6 index f1b1daa1cb..c7a124017c 100644 --- a/test/javascripts/integration/header-anonymous-test.js.es6 +++ b/test/javascripts/integration/header-anonymous-test.js.es6 @@ -39,6 +39,6 @@ test("header", function() { fillIn("#search-term", "hello"); andThen(function() { ok(exists("#search-dropdown .heading"), "when user completes a search, search box shows search results"); - equal(find("#search-dropdown a:first").attr("href"), "some-url", "there is a search result"); + equal(find("#search-dropdown a:not(.filter):first").attr("href"), "some-url", "there is a search result"); }); });