feedback fixes to input box
the build was successful
Details
the build was successful
Details
This commit is contained in:
parent
0634d34bf2
commit
f8d3277a6f
28
qml/main.qml
28
qml/main.qml
|
@ -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, " ")
|
||||
|
||||
// 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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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, " ");
|
||||
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
|
||||
|
|
|
@ -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"
|
||||
|
|
Reference in New Issue