mirror of https://github.com/zulip/zulip.git
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:
parent
34fa712220
commit
d2ea65da10
|
@ -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);
|
const untrimmed_message_content = get_or_set("compose-textarea", true, true);
|
||||||
|
|
||||||
export function cursor_at_start_of_whitespace_in_compose() {
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
const cursor_position = $("#compose-textarea").caret();
|
const cursor_position = $("#compose-textarea").caret();
|
||||||
return message_content() === "" && cursor_position === 0;
|
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
|
// A user trying to press arrow keys in an empty compose is mostly
|
||||||
// likely trying to navigate messages. This helper function
|
// likely trying to navigate messages. This helper function
|
||||||
// decides whether the compose box is empty for this purpose.
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -732,8 +732,7 @@ export function process_hotkey(e, hotkey) {
|
||||||
((event_name === "down_arrow" || event_name === "page_down" || event_name === "end") &&
|
((event_name === "down_arrow" || event_name === "page_down" || event_name === "end") &&
|
||||||
compose_state.focus_in_empty_compose()) ||
|
compose_state.focus_in_empty_compose()) ||
|
||||||
((event_name === "up_arrow" || event_name === "page_up" || event_name === "home") &&
|
((event_name === "up_arrow" || event_name === "page_up" || event_name === "home") &&
|
||||||
(compose_state.focus_in_empty_compose() ||
|
compose_state.focus_in_empty_compose(true))
|
||||||
compose_state.cursor_at_start_of_whitespace_in_compose()))
|
|
||||||
) {
|
) {
|
||||||
compose_actions.cancel();
|
compose_actions.cancel();
|
||||||
// don't return, as we still want it to be picked up by the code below
|
// don't return, as we still want it to be picked up by the code below
|
||||||
|
|
Loading…
Reference in New Issue