From 3a0fd675aedbe602d9470419a8404ed036aeacbd Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Tue, 29 Oct 2024 09:48:55 +1100 Subject: [PATCH] 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. --- .../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); } }