From b9e87320185a104c697cfb27835c0782d6a455da Mon Sep 17 00:00:00 2001 From: Sam Saffron <sam.saffron@gmail.com> Date: Mon, 8 Feb 2016 10:51:59 +1100 Subject: [PATCH] UX: tweak autocomplete to limit hijacking - Stop eating up back arrow when you hit @ - Clicking anywhere closes autocomplete - Forward arrow no longer issues autocompletion, instead functions as right arrow --- .../discourse/lib/autocomplete.js.es6 | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 index aeb2ffb1d..71dce2d1d 100644 --- a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 +++ b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 @@ -47,7 +47,8 @@ export default function(options) { $(this).off('keypress.autocomplete') .off('keydown.autocomplete') - .off('paste.autocomplete'); + .off('paste.autocomplete') + .off('click.autocomplete'); return; } @@ -276,6 +277,10 @@ export default function(options) { closeAutocomplete(); }); + $(this).on('click.autocomplete', function() { + closeAutocomplete(); + }); + $(this).on('paste.autocomplete', function() { _.delay(function(){ me.trigger("keydown"); @@ -375,16 +380,21 @@ export default function(options) { if (completeStart !== null) { caretPosition = Discourse.Utilities.caretPosition(me[0]); + // allow people to right arrow out of completion + if (e.which === keys.rightArrow && me[0].value[caretPosition] === ' ') { + closeAutocomplete(); + return true; + } + // If we've backspaced past the beginning, cancel unless no key if (caretPosition <= completeStart && options.key) { closeAutocomplete(); - return false; + return true; } // Keyboard codes! So 80's. switch (e.which) { case keys.enter: - case keys.rightArrow: case keys.tab: if (!autocompleteOptions) return true; if (selectedOption >= 0 && (userToComplete = autocompleteOptions[selectedOption])) {