mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 13:03:29 +00:00
input_pill: Fix backspace with selected text.
The logic added in b57ebe717e introduced
a different bug, namely that if you had selected text in the input,
Backspace would delete the input pill itself, not your selected text.
Fix this, without re-introducing the old bug, by checking explicitly
if there's a range selected before inspecting anchorOffset.
Also improve the comments.
Fixes #19544.
This commit is contained in:
@@ -339,11 +339,14 @@ export function create<T>(opts: InputPillCreateOptions<T>): InputPillContainer<T
|
||||
return;
|
||||
}
|
||||
|
||||
// if the user backspaces and there is input, just do normal char
|
||||
// deletion, otherwise delete the last pill in the sequence.
|
||||
const selection = window.getSelection();
|
||||
// If no text is selected, and the cursor is just to the
|
||||
// right of the last pill (with or without text in the
|
||||
// input), then backspace deletes the last pill.
|
||||
if (
|
||||
selection?.type !== "range" &&
|
||||
e.key === "Backspace" &&
|
||||
(funcs.value(e.target).length === 0 || window.getSelection()?.anchorOffset === 0)
|
||||
(funcs.value(e.target).length === 0 || selection?.anchorOffset === 0)
|
||||
) {
|
||||
e.preventDefault();
|
||||
funcs.removeLastPill();
|
||||
@@ -355,7 +358,7 @@ export function create<T>(opts: InputPillCreateOptions<T>): InputPillContainer<T
|
||||
// should switch to focus the last pill in the list.
|
||||
// the rest of the events then will be taken care of in the function
|
||||
// below that handles events on the ".pill" class.
|
||||
if (e.key === "ArrowLeft" && window.getSelection()?.anchorOffset === 0) {
|
||||
if (e.key === "ArrowLeft" && selection?.anchorOffset === 0) {
|
||||
store.$parent.find(".pill").last().trigger("focus");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user