From 928ee5a76fed7283af45504693dd774a33077a80 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Fri, 9 Aug 2019 10:39:05 -0700 Subject: [PATCH] UI Twraks - Double Spacing - Emoji + Spacing - linebreaks --- qml/main.qml | 3 ++- qml/overlays/ChatOverlay.qml | 30 +++++++++++++++++------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/qml/main.qml b/qml/main.qml index 69adad83..9bb29407 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -37,7 +37,8 @@ ApplicationWindow { T.twemoji.ext = ".png" T.twemoji.size = "72x72" T.twemoji.className = "\" height=\""+size+"\" width=\""+size - return T.twemoji.parse(Utils.htmlEscaped(text)) + var retText = T.twemoji.parse(Utils.htmlEscaped(text)) + return retText.replace(/\n/g,"
") } function restoreEmoji(text) { // REPLACE TAGS WITH EMOJI diff --git a/qml/overlays/ChatOverlay.qml b/qml/overlays/ChatOverlay.qml index bdf44afa..061e14b5 100644 --- a/qml/overlays/ChatOverlay.qml +++ b/qml/overlays/ChatOverlay.qml @@ -168,6 +168,7 @@ ColumnLayout { width: rectMessage.width property bool skipOneUpdate: false + property int previousCursor Keys.onReturnPressed: { // CTRL+ENTER = LINEBREAK if ((event.modifiers & Qt.ControlModifier) && gcd.os != "android") { @@ -185,8 +186,6 @@ ColumnLayout { return } - //console.log("onTextChanged()") - // we're taking advantage of TextEdit.getText()'s parsing capability, which means occasionally // passing text into it to be filtered. this prevents recursive calls putting us into an // infinite loop @@ -195,6 +194,9 @@ ColumnLayout { return } + previousCursor = cursorPosition + //console.log("onTextChanged() at position " + previousCursor) + //console.log("1: " + txtMessage.getText(0, txtMessage.text.length)) // convert tags back to their emoji form @@ -206,7 +208,11 @@ ColumnLayout { } //console.log("2: " + txtMessage.getText(0, txtMessage.text.length)) - + var preserveSpaces = txtMessage.text.replace(/
/g,"[:newline:]"); + if (preserveSpaces != txtMessage.text) { + skipOneUpdate = true + txtMessage.text = preserveSpaces + } // strip all HTML tags var theText = Utils.htmlEscaped(txtMessage.getText(0, txtMessage.text.length)) //console.log("3: " + theText) @@ -215,19 +221,15 @@ ColumnLayout { nt = parse(theText, 10) //console.log("4: " + nt) - - // first we need to update the cursor position to be the same distance from the end - var oldcursor = txtMessage.cursorPosition - var oldlen = txtMessage.getText(0, txtMessage.text.length).length + // preserve double spacing + nt = nt.replace(/\s\s/g, "  "); + nt = nt.replace(/\[\:newline\:\]/g, "
"); // then we actually put the updated text in skipOneUpdate = true txtMessage.text = nt - // and then restore the cursor - var newlen = txtMessage.getText(0, txtMessage.text.length).length - txtMessage.cursorPosition = newlen - (oldlen - oldcursor) - + txtMessage.cursorPosition = previousCursor // autoscroll down only when the scrollbar is already all the way down if (flkMessage.contentY + flkMessage.height >= flkMessage.contentHeight - txtMessage.height && flkMessage.contentHeight > flkMessage.height) { @@ -263,9 +265,11 @@ ColumnLayout { onClicked: { if (txtMessage.text != "") { txtHidden.text = restoreEmoji(txtMessage.text) - var txt = txtHidden.getText(0, txtHidden.text.length).trim() + txtHidden.text = txtHidden.text.replace(/
/g,"[:newline:]"); + var txt = txtHidden.text.trim() if (txt.length > 0) { - var msg = JSON.stringify({"o":1, "d":txtHidden.getText(0, txtHidden.text.length)}) + var rawText = txtHidden.getText(0, txtHidden.text.length) + var msg = JSON.stringify({"o":1, "d":rawText.replace(/\[\:newline\:\]/g,"\n")}) gcd.sendMessage(msg, nextMessageID++) } }