status-desktop/ui/imports/shared/status/StatusChatInputReplyArea.qml
Stefan D 1c52dd3b8e fix(chat): fix removal of emojis in reply preview
Emojis are parsed in a message to transform from special emojis characters
in qml image links. After this transformation, an XSS filter was applied
that "fixes" all the image URLs introduced by the previous stage.
Reversing the order of these opperations fixed the issue.

fixes #4899
2022-03-23 18:02:27 -04:00

147 lines
4.2 KiB
QML

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtGraphicalEffects 1.13
import utils 1.0
import shared 1.0
import shared.panels 1.0
import StatusQ.Core.Utils 0.1 as StatusQUtils
Rectangle {
id: root
height: (root.contentType === Constants.messageContentType.imageType) ?
replyToUsername.height + imageThumbnail.height + Style.current.padding :
(root.contentType === Constants.messageContentType.stickerType) ?
replyToUsername.height + stickerThumbnail.height + Style.current.padding : 50
color: Style.current.replyBackground
radius: 16
clip: true
property string userName: ""
property string message : ""
property string identicon: ""
property string image: ""
property string stickerData: ""
property string messageId: ""
property int contentType: -1
signal closeButtonClicked()
Rectangle {
color: parent.color
anchors.bottom: parent.bottom
anchors.right: parent.right
height: parent.height / 2
width: 32
radius: Style.current.radius
}
StyledText {
id: replyToUsername
text: "↪ " + userName
color: Style.current.textColor
anchors.top: parent.top
anchors.topMargin: Style.current.halfPadding
anchors.left: parent.left
anchors.leftMargin: Style.current.smallPadding
font.pixelSize: 13
font.weight: Font.Medium
}
Rectangle {
anchors.left: replyToUsername.left
anchors.top: replyToUsername.bottom
anchors.topMargin: -3
anchors.right: parent.right
anchors.rightMargin: Style.current.padding
anchors.bottom: parent.bottom
clip: true
color: Style.current.transparent
visible: (root.contentType !== Constants.messageContentType.imageType) && (root.contentType !== Constants.messageContentType.stickerType)
StyledText {
id: replyText
text: Utils.getMessageWithStyle(StatusQUtils.Emoji.parse(Utils.linkifyAndXSS(message)), false)
anchors.fill: parent
elide: Text.ElideRight
font.pixelSize: 13
font.weight: Font.Normal
textFormat: Text.RichText
color: Style.current.textColor
}
}
StatusChatImage {
id: imageThumbnail
anchors.left: replyToUsername.left
anchors.top: replyToUsername.bottom
anchors.topMargin: 2
imageWidth: 64
imageSource: root.image
chatHorizontalPadding: 0
container: root.container
visible: root.contentType === Constants.messageContentType.imageType
playing: false
}
StatusSticker {
id: stickerThumbnail
anchors.left: replyToUsername.left
anchors.top: replyToUsername.bottom
anchors.topMargin: 2
imageWidth: 64
imageHeight: 64
stickerData: root.stickerData
color: Style.current.transparent
contentType: root.contentType
}
RoundButton {
id: closeBtn
implicitWidth: 20
implicitHeight: 20
radius: 10
padding: 0
anchors.top: parent.top
anchors.topMargin: 4
anchors.right: parent.right
anchors.rightMargin: 4
contentItem: SVGImage {
id: iconImg
source: Style.svg("close")
width: closeBtn.width
height: closeBtn.height
ColorOverlay {
anchors.fill: iconImg
source: iconImg
color: Style.current.textColor
antialiasing: true
}
}
background: Rectangle {
color: "transparent"
width: closeBtn.width
height: closeBtn.height
radius: closeBtn.radius
}
onClicked: {
root.userName = ""
root.message = ""
root.identicon = ""
root.messageId = ""
root.stickerData = ""
root.image = ""
root.contentType = -1
root.closeButtonClicked()
}
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onPressed: mouse.accepted = false
}
}
}