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