compose: Clean code to fix `up` hotkey to edit previous message.

This is a follow up to 875ad8e implementing a better approach. We call
`cursor_at_start_of_whitespace_in_compose` from `focus_in_empty_compose`
itself if and when needed.
This commit is contained in:
N-Shar-ma 2023-02-06 16:54:57 +05:30 committed by Tim Abbott
parent 34fa712220
commit d2ea65da10
2 changed files with 14 additions and 13 deletions

View File

@ -86,24 +86,26 @@ export const message_content = get_or_set("compose-textarea", true);
const untrimmed_message_content = get_or_set("compose-textarea", true, true);
export function cursor_at_start_of_whitespace_in_compose() {
// First check if the compose box is focused. TODO: Maybe we
// should make `consider_start_of_whitespace_message_empty` a
// parameter to `focus_in_empty_compose` instead.
const focused_element_id = document.activeElement.id;
if (focused_element_id !== "compose-textarea") {
return false;
}
function cursor_at_start_of_whitespace_in_compose() {
const cursor_position = $("#compose-textarea").caret();
return message_content() === "" && cursor_position === 0;
}
export function focus_in_empty_compose() {
export function focus_in_empty_compose(consider_start_of_whitespace_message_empty = false) {
// A user trying to press arrow keys in an empty compose is mostly
// likely trying to navigate messages. This helper function
// decides whether the compose box is empty for this purpose.
if (!composing() || untrimmed_message_content() !== "") {
if (!composing()) {
return false;
}
// We treat the compose box as empty if it's completely empty, or
// if the caller requested, if it contains only whitespace and we're
// at the start of te compose box.
const treat_compose_as_empty =
untrimmed_message_content() === "" ||
(consider_start_of_whitespace_message_empty && cursor_at_start_of_whitespace_in_compose());
if (!treat_compose_as_empty) {
return false;
}

View File

@ -732,8 +732,7 @@ export function process_hotkey(e, hotkey) {
((event_name === "down_arrow" || event_name === "page_down" || event_name === "end") &&
compose_state.focus_in_empty_compose()) ||
((event_name === "up_arrow" || event_name === "page_up" || event_name === "home") &&
(compose_state.focus_in_empty_compose() ||
compose_state.cursor_at_start_of_whitespace_in_compose()))
compose_state.focus_in_empty_compose(true))
) {
compose_actions.cancel();
// don't return, as we still want it to be picked up by the code below