feedback fixes to input box
the build was successful Details

This commit is contained in:
erinn 2020-11-26 16:30:54 -08:00
parent 0634d34bf2
commit f8d3277a6f
7 changed files with 5 additions and 85 deletions

View File

@ -7,7 +7,6 @@ import QtQuick.Window 2.11
import "opaque"
import "opaque/fonts"
import "opaque/fonts/Twemoji.js" as T
import "opaque/fonts/MutantStandard.js" as Mutant
import "opaque/theme"
@ -36,37 +35,16 @@ ApplicationWindow {
source: "qrc:/qml/opaque/fonts/AdobeBlank.ttf"
}
function parse(text, size, isntEditable) { // REPLACE EMOJI WITH <IMG> TAGS
T.twemoji.base = gcd.assetPath + "twemoji/"
T.twemoji.ext = ".png"
T.twemoji.size = "72x72"
T.twemoji.className = "\" height=\""+size+"\" width=\""+size
var retText = Utils.htmlEscaped(text)//T.twemoji.parse(Utils.htmlEscaped(text))//
retText = retText.replace(/\n/g,"<br/>")
var retText = Utils.htmlEscaped(text)
retText = retText.replace(/\n/g,"<br/>").replace(/\s\s/g, "&nbsp;&nbsp;")
// mutant standard stickers
if (isntEditable) retText = Mutant.standard.parse(retText)
if (isntEditable) retText = Mutant.standard.parse(retText, 1.5 * gcd.themeScale * Theme.chatSize)
return retText
}
function restoreEmoji(text) { // REPLACE <IMG> TAGS WITH EMOJI
var re = RegExp('<img src="' + gcd.assetPath + 'twemoji/72x72/([^"]*?)\.png" width="10" height="10" \/>', 'g')
var arr
var newtext = text
while (arr = re.exec(text)) {
var pieces = arr[1].split("-")
var replacement = ""
for (var i = 0; i < pieces.length; i++) {
replacement += T.twemoji.convert.fromCodePoint(pieces[i])
}
newtext = newtext.replace(arr[0], replacement)
}
return newtext
}
function ptToPx(pt) {
return Screen.pixelDensity * 25.4 * pt / 72
}

View File

@ -7,7 +7,6 @@ import QtQuick.Layouts 1.3
import "../opaque" as Opaque
import "../opaque/fonts/Twemoji.js" as T
import "../opaque/styles"
import "../utils.js" as Utils

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts 1.3
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../utils.js" as Utils
import "../widgets" as W
import "../opaque/theme"

View File

@ -7,7 +7,6 @@ import QtQuick.Layouts 1.3
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../utils.js" as Utils
import "../opaque/styles"
import "../opaque/theme"

View File

@ -7,7 +7,6 @@ import QtQuick.Layouts 1.3
import "../opaque"
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../opaque/styles"
import "../utils.js" as Utils
import "../widgets"

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts 1.3
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../utils.js" as Utils
import "../widgets"
import "../opaque/theme"
@ -119,66 +118,14 @@ ColumnLayout {
property int previousCursor
Keys.onReturnPressed: { // CTRL+ENTER = LINEBREAK // TODO: Broken
if ((event.modifiers & Qt.ControlModifier) && gcd.os != "android") {
txtMessage.insert(txtMessage.cursorPosition, "<br>")
if ((event.modifiers & Qt.ShiftModifier) && gcd.os != "android") {
txtMessage.insert(txtMessage.cursorPosition, "\n")
} else if (event.modifiers == Qt.NoModifier) {
btnSend.clicked()
}
}
// welcome to the emoji parser! it is horrifying code that needs to leave in <img src="[emoji]">
// while also stripping any other tag, including other images.
// TODO: this probably breaks if people actually do want to paste html
onTextChanged: {
if (gcd.os == "android") {
return
}
// 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
if (skipOneUpdate) {
skipOneUpdate = false
return
}
previousCursor = cursorPosition
//console.log("onTextChanged() at position " + previousCursor)
//console.log("1: " + txtMessage.getText(0, txtMessage.text.length))
// convert <img> tags back to their emoji form
// Then parse out the rest of the HTML
var nt = restoreEmoji(txtMessage.text)
if (nt != txtMessage.text) {
skipOneUpdate = true
txtMessage.text = nt
}
//console.log("2: " + txtMessage.getText(0, txtMessage.text.length))
var preserveSpaces = txtMessage.text.replace(/<br \/>/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)
// convert emoji back to <img> tags
nt = parse(theText, 10)
//console.log("4: " + nt)
// preserve double spacing
nt = nt.replace(/\s\s/g, "&nbsp;&nbsp;");
nt = nt.replace(/\[\:newline\:\]/g, "<br/>");
// then we actually put the updated text in
skipOneUpdate = true
txtMessage.text = nt
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) {
flkMessage.contentY = flkMessage.contentHeight - flkMessage.height

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts 1.3
import "../opaque" as Opaque
import "../opaque/controls" as Awesome
import "../opaque/fonts/Twemoji.js" as T
import "../utils.js" as Utils
import "../widgets"
import "../opaque/theme"