diff --git a/static/js/composebox_typeahead.js b/static/js/composebox_typeahead.js index c9176e91eb..7a01098d8a 100644 --- a/static/js/composebox_typeahead.js +++ b/static/js/composebox_typeahead.js @@ -112,12 +112,6 @@ function get_topic_matcher(query) { }; } -// nextFocus is set on a keydown event to indicate where we should focus on keyup. -// We can't focus at the time of keydown because we need to wait for typeahead. -// And we can't compute where to focus at the time of keyup because only the keydown -// has reliable information about whether it was a Tab or a Shift+Tab. -let nextFocus = false; - exports.should_enter_send = function (e) { const has_non_shift_modifier_key = e.ctrlKey || e.metaKey || e.altKey; const has_modifier_key = e.shiftKey || has_non_shift_modifier_key; @@ -173,6 +167,8 @@ exports.handle_enter = function (textarea, e) { // Fall through to native browser behavior, otherwise. }; +let nextFocus = false; + function handle_keydown(e) { const code = e.keyCode || e.which; @@ -189,67 +185,27 @@ function handle_keydown(e) { const on_pm = target_sel === "#private_message_recipient"; const on_compose = target_sel === "#compose-textarea"; - if (on_stream || on_topic || on_pm) { - // For Enter, prevent the form from submitting - // For Tab, prevent the focus from changing again - e.preventDefault(); - } - - // In the compose_textarea box, preventDefault() for Tab but not for Enter - if (on_compose && code !== 13) { - e.preventDefault(); - } - - if (on_stream) { - nextFocus = "#stream_message_recipient_topic"; - } else if (on_topic) { - if (code === 13) { + if (on_compose && code === 13) { + if (exports.should_enter_send(e)) { e.preventDefault(); - } - nextFocus = "#compose-textarea"; - } else if (on_pm) { - nextFocus = "#compose-textarea"; - } else if (on_compose) { - if (code === 13) { - nextFocus = false; - } else { - nextFocus = "#compose-send-button"; - } - } else { - nextFocus = false; - } - - // If no typeaheads are shown... - if ( - !( - $("#stream_message_recipient_topic").data().typeahead.shown || - $("#stream_message_recipient_stream").data().typeahead.shown || - $("#private_message_recipient").data().typeahead.shown || - $("#compose-textarea").data().typeahead.shown - ) - ) { - // If no typeaheads are shown and the user is tabbing from the message content box, - // then there's no need to wait and we can change the focus right away. - // Without this code to change the focus right away, if the user presses Enter - // before they fully release the Tab key, the Tab will be lost. Note that we don't - // want to change focus right away in the private_message_recipient box since it - // takes the typeaheads a little time to open after the user finishes typing, which - // can lead to the focus moving without the autocomplete having a chance to happen. - if (nextFocus) { - $(nextFocus).trigger("focus"); - nextFocus = false; - } - - if (on_compose && code === 13) { - if (exports.should_enter_send(e)) { - e.preventDefault(); - if (!$("#compose-send-button").prop("disabled")) { - $("#compose-send-button").prop("disabled", true); - compose.finish(); - } - return; + if (!$("#compose-send-button").prop("disabled")) { + $("#compose-send-button").prop("disabled", true); + compose.finish(); } - exports.handle_enter($("#compose-textarea"), e); + return; + } + exports.handle_enter($("#compose-textarea"), e); + } else if (on_stream || on_topic || on_pm) { + // Prevent the form from submitting + e.preventDefault(); + + // We are doing the focusing on keyup to not abort the typeahead. + if (on_stream) { + nextFocus = $("#stream_message_recipient_topic"); + } else if (on_topic) { + nextFocus = $("#compose-textarea"); + } else if (on_pm) { + nextFocus = $("#compose-textarea"); } } } @@ -257,10 +213,11 @@ function handle_keydown(e) { function handle_keyup(e) { const code = e.keyCode || e.which; + if (code === 13 || (code === 9 && !e.shiftKey)) { // Enter key or Tab key if (nextFocus) { - $(nextFocus).trigger("focus"); + nextFocus.trigger("focus"); nextFocus = false; } } diff --git a/templates/zerver/app/compose.html b/templates/zerver/app/compose.html index 63ffa462bb..113c9fd017 100644 --- a/templates/zerver/app/compose.html +++ b/templates/zerver/app/compose.html @@ -110,7 +110,7 @@ {{ _('Press Enter to send') }} - +