diff --git a/src/lib/UI/GUI/TextAreaInput.svelte b/src/lib/UI/GUI/TextAreaInput.svelte index 00efa45f..5b1cc5bf 100644 --- a/src/lib/UI/GUI/TextAreaInput.svelte +++ b/src/lib/UI/GUI/TextAreaInput.svelte @@ -71,7 +71,7 @@
{ handleKeyDown(e) onInput() @@ -83,7 +83,7 @@ e.preventDefault() const text = e.clipboardData.getData('text/plain') if(text){ - insertContent(text, 'paste') + insertTextAtSelection(text) } }} bind:this={inputDom} @@ -93,7 +93,7 @@
{ handleKeyDown(e) onInput() @@ -265,10 +265,30 @@ if(e.key === 'Enter' && isFirefox){ e.stopPropagation() e.preventDefault() - insertContent('\n') + insertTextAtSelection('\n') } } - + + function insertTextAtSelection(txt:string) { + let div = inputDom; + let sel = window.getSelection(); + let text = div.textContent; + let before = Math.min(sel.focusOffset, sel.anchorOffset); + let after = Math.max(sel.focusOffset, sel.anchorOffset); + let afterStr = text.substring(after); + if (afterStr == "") afterStr = "\n"; + div.textContent = text.substring(0, before) + txt + afterStr; + sel.removeAllRanges(); + let range = document.createRange(); + range.setStart(div.childNodes[0], before + txt.length); + range.setEnd(div.childNodes[0], before + txt.length); + sel.addRange(range); + try { + inputDom.dispatchEvent(new Event('input')) + inputDom.dispatchEvent(new Event('change')) + } catch (error) {} + } + $: optiValue = value $: highlightChange(value, highlightId)