FEATURE: do not insert smart list if SHIFT+Enter is pressed

A common pattern in the industry for bypassing smart lists is detection of
the shift key.

This information is not available in the "beforeinput" event but it always
fires afer keydown, so we track if shift is pressed on keydown.
This commit is contained in:
Sam Saffron 2024-10-29 09:48:55 +11:00
parent 4529b0614c
commit 3a0fd675ae
No known key found for this signature in database
GPG Key ID: B9606168D2FFD9F5
1 changed files with 16 additions and 1 deletions

View File

@ -379,6 +379,10 @@ export default class DEditor extends Component {
"beforeinput",
this.onBeforeInputSmartList
);
this._textarea.addEventListener(
"keydown",
this.onBeforeInputSmartListShiftDetect
);
this._textarea.addEventListener("input", this.onInputSmartList);
}
@ -415,11 +419,18 @@ export default class DEditor extends Component {
}
}
@bind
onBeforeInputSmartListShiftDetect(event) {
this._shiftPressed = event.shiftKey;
}
@bind
onBeforeInputSmartList(event) {
// This inputType is much more consistently fired in `beforeinput`
// rather than `input`.
this.handleSmartListAutocomplete = event.inputType === "insertLineBreak";
if (!this._shiftPressed) {
this.handleSmartListAutocomplete = event.inputType === "insertLineBreak";
}
}
@bind
@ -490,6 +501,10 @@ export default class DEditor extends Component {
"beforeinput",
this.onBeforeInputSmartList
);
this._textarea.removeEventListener(
"keydown",
this.onBeforeInputSmartListShiftDetect
);
this._textarea.removeEventListener("input", this.onInputSmartList);
}
}