From bda3000147eae97acf6bd92d855debd17c8a7c98 Mon Sep 17 00:00:00 2001
From: Yang Wang <yang.wang@savoirfairelinux.com>
Date: Mon, 5 Aug 2019 17:36:22 -0400
Subject: [PATCH] chatview: fix pasting text not replacing the selection

Change-Id: I0937289a45c4e379e7d30dd7330a73951472981b
Gitlab: #491
---
 messagewebview.cpp |  2 +-
 web/chatview.js    | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/messagewebview.cpp b/messagewebview.cpp
index fc61e38..7444dbf 100644
--- a/messagewebview.cpp
+++ b/messagewebview.cpp
@@ -188,7 +188,7 @@ bool MessageWebView::eventFilter(QObject *watched, QEvent *event)
 
 void MessageWebView::setMessagesContent(const QString& text)
 {
-    page()->runJavaScript(QStringLiteral("document.getElementById('message').value += '%1';").arg(text));
+    page()->runJavaScript(QStringLiteral("replaceText('%1');").arg(text));
 }
 
 void
diff --git a/web/chatview.js b/web/chatview.js
index 51b84d7..c4b1bdd 100644
--- a/web/chatview.js
+++ b/web/chatview.js
@@ -1761,3 +1761,28 @@ function pasteKeyDetected(e) {
     e.preventDefault();
     window.jsbridge.emitPasteKeyDetected();
 }
+
+// Set the curser to a target position
+function setCaretPosition(elem, caretPos) {
+    var range;
+
+    if (elem.createTextRange) {
+        range = elem.createTextRange();
+        range.move('character', caretPos);
+        range.select();
+    } else {
+        elem.focus();
+        if (elem.selectionStart !== undefined) {
+            elem.setSelectionRange(caretPos, caretPos);
+        }
+    }
+}
+function replaceText(text) {
+    var input = messageBarInput;
+    var currentContent = input.value;
+    var start = input.selectionStart;
+    var end = input.selectionEnd;
+    var output = [currentContent.slice(0, start), text, currentContent.slice(end)].join('');
+    input.value = output;
+    setCaretPosition(input, start + text.length);
+}
-- 
GitLab