mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 16:02:46 +08:00
FEATURE: do not insert smart list if SHIFT+Enter is pressed (#29452)
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:
parent
0839bce7b6
commit
4d7f70b923
|
@ -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,12 +419,19 @@ 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`.
|
||||
if (!this._shiftPressed) {
|
||||
this.handleSmartListAutocomplete = event.inputType === "insertLineBreak";
|
||||
}
|
||||
}
|
||||
|
||||
@bind
|
||||
onInputSmartList() {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user