From 4d7f70b923996931c4635d5044950644aa70ef44 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 29 Oct 2024 10:18:52 +1100 Subject: [PATCH] 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. --- .../discourse/app/components/d-editor.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/app/components/d-editor.js b/app/assets/javascripts/discourse/app/components/d-editor.js index a1c863b30fa..00ae361da04 100644 --- a/app/assets/javascripts/discourse/app/components/d-editor.js +++ b/app/assets/javascripts/discourse/app/components/d-editor.js @@ -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); } }