diff --git a/src/web/waiters/InputWaiter.mjs b/src/web/waiters/InputWaiter.mjs index d32ed9d1..c4d26571 100644 --- a/src/web/waiters/InputWaiter.mjs +++ b/src/web/waiters/InputWaiter.mjs @@ -758,6 +758,15 @@ class InputWaiter { * @param {string | ArrayBuffer} value */ updateInputValue(inputNum, value, force=false) { + // Preserve current selection + const inputElement = document.getElementById("input-text"); + let selectionStart = null; + let selectionEnd = null; + if (inputElement) { + selectionStart = inputElement.selectionStart; + selectionEnd = inputElement.selectionEnd; + } + // Prepare the value as a buffer (full value) and a string sample (up to 4096 bytes) let buffer; let stringSample = ""; @@ -796,6 +805,14 @@ class InputWaiter { eolSequence: this.getEOLSeq() } }, transferable); + + // Restore selection if it was set + if (inputElement && selectionStart !== null && selectionEnd !== null) { + requestAnimationFrame(() => { + inputElement.selectionStart = selectionStart; + inputElement.selectionEnd = selectionEnd; + }); + } } /** diff --git a/src/web/waiters/OutputWaiter.mjs b/src/web/waiters/OutputWaiter.mjs index 2b2cb096..3bfd5eb3 100755 --- a/src/web/waiters/OutputWaiter.mjs +++ b/src/web/waiters/OutputWaiter.mjs @@ -551,17 +551,27 @@ class OutputWaiter { if (!this.outputExists(inputNum)) { this.addOutput(inputNum); } - - if (Object.prototype.hasOwnProperty.call(data, "dish")) { - data.dish = new Dish(data.dish); + // Preserve current selection + const outputElement = document.getElementById("output-text"); + let selectionStart = null; + let selectionEnd = null; + if (outputElement) { + selectionStart = outputElement.selectionStart; + selectionEnd = outputElement.selectionEnd; } - this.outputs[inputNum].data = data; + this.outputs[inputNum].statusMessage = statusMessage; + if (set) { + this.set(inputNum); - const tabItem = this.manager.tabs.getTabItem(inputNum, "output"); - if (tabItem) tabItem.style.background = ""; - - if (set) this.set(inputNum); + // Restore selection if it was set + if (outputElement && selectionStart !== null && selectionEnd !== null) { + requestAnimationFrame(() => { + outputElement.selectionStart = selectionStart; + outputElement.selectionEnd = selectionEnd; + }); + } + } } /**