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)