diff --git a/public/scripts/extensions/quick-reply/src/QuickReply.js b/public/scripts/extensions/quick-reply/src/QuickReply.js index 491ec6106..095204af7 100644 --- a/public/scripts/extensions/quick-reply/src/QuickReply.js +++ b/public/scripts/extensions/quick-reply/src/QuickReply.js @@ -328,18 +328,20 @@ export class QuickReply { if (this.isExecuting) return; if (evt.key == 'Tab' && !evt.shiftKey && !evt.ctrlKey && !evt.altKey) { evt.preventDefault(); - evt.stopImmediatePropagation(); - evt.stopPropagation(); const start = message.selectionStart; const end = message.selectionEnd; if (end - start > 0 && message.value.substring(start, end).includes('\n')) { + evt.stopImmediatePropagation(); + evt.stopPropagation(); const lineStart = message.value.lastIndexOf('\n', start - 1); const count = message.value.substring(lineStart, end).split('\n').length - 1; message.value = `${message.value.substring(0, lineStart)}${message.value.substring(lineStart, end).replace(/\n/g, '\n\t')}${message.value.substring(end)}`; message.selectionStart = start + 1; message.selectionEnd = end + count; updateSyntax(); - } else { + } else if (!(ac.isReplaceable && ac.isActive)) { + evt.stopImmediatePropagation(); + evt.stopPropagation(); message.value = `${message.value.substring(0, start)}\t${message.value.substring(end)}`; message.selectionStart = start + 1; message.selectionEnd = end + 1; @@ -357,7 +359,7 @@ export class QuickReply { message.selectionStart = start - 1; message.selectionEnd = end - count; updateSyntax(); - } else if (evt.key == 'Enter' && !evt.ctrlKey && !evt.shiftKey && !evt.altKey) { + } else if (evt.key == 'Enter' && !evt.ctrlKey && !evt.shiftKey && !evt.altKey && !(ac.isReplaceable && ac.isActive)) { evt.stopImmediatePropagation(); evt.stopPropagation(); evt.preventDefault(); @@ -389,7 +391,7 @@ export class QuickReply { } } }); - setSlashCommandAutoComplete(message, true); + const ac = await setSlashCommandAutoComplete(message, true); message.addEventListener('wheel', (evt)=>{ updateScrollDebounced(evt); }); diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index 1c1a45414..f852d75ec 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -3507,6 +3507,7 @@ async function executeSlashCommands(text, handleParserErrors = true, scope = nul * * @param {HTMLTextAreaElement} textarea The textarea to receive autocomplete * @param {Boolean} isFloating Whether to show the auto complete as a floating window (e.g., large QR editor) + * @returns {Promise} */ export async function setSlashCommandAutoComplete(textarea, isFloating = false) { function canUseNegativeLookbehind() { @@ -3530,6 +3531,7 @@ export async function setSlashCommandAutoComplete(textarea, isFloating = false) async (text, index) => await parser.getNameAt(text, index), isFloating, ); + return ac; } /**@type {HTMLTextAreaElement} */ const sendTextarea = document.querySelector('#send_textarea');