mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-10-30 17:40:47 +03:00
Enable link handling
This commit is contained in:
parent
993926e189
commit
88dc72df4f
6 changed files with 41 additions and 18 deletions
33
resources/qml/MatrixText.qml
Normal file
33
resources/qml/MatrixText.qml
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import QtQuick 2.5
|
||||||
|
import QtQuick.Controls 2.3
|
||||||
|
|
||||||
|
TextEdit {
|
||||||
|
textFormat: TextEdit.RichText
|
||||||
|
readOnly: true
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
selectByMouse: true
|
||||||
|
color: colors.text
|
||||||
|
|
||||||
|
onLinkActivated: {
|
||||||
|
if (/^https:\/\/matrix.to\/#\/(@.*)$/.test(link)) chat.model.openUserProfile(/^https:\/\/matrix.to\/#\/(@.*)$/.exec(link)[1])
|
||||||
|
if (/^https:\/\/matrix.to\/#\/(![^\/]*)$/.test(link)) timelineManager.setHistoryView(/^https:\/\/matrix.to\/#\/(!.*)$/.exec(link)[1])
|
||||||
|
if (/^https:\/\/matrix.to\/#\/(![^\/]*)\/(\$.*)$/.test(link)) {
|
||||||
|
var match = /^https:\/\/matrix.to\/#\/(![^\/]*)\/(\$.*)$/.exec(link)
|
||||||
|
timelineManager.setHistoryView(match[1])
|
||||||
|
chat.positionViewAtIndex(chat.model.idToIndex(match[2]), ListView.Contain)
|
||||||
|
}
|
||||||
|
else Qt.openUrlExternally(link)
|
||||||
|
}
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
anchors.fill: parent
|
||||||
|
onPressed: mouse.accepted = false
|
||||||
|
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolTip {
|
||||||
|
visible: parent.hoveredLink
|
||||||
|
text: parent.hoveredLink
|
||||||
|
palette: colors
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,8 @@
|
||||||
import QtQuick 2.5
|
import ".."
|
||||||
|
|
||||||
TextEdit {
|
MatrixText {
|
||||||
text: model.formattedBody
|
text: model.formattedBody
|
||||||
textFormat: TextEdit.RichText
|
|
||||||
readOnly: true
|
|
||||||
wrapMode: Text.Wrap
|
|
||||||
width: parent ? parent.width : undefined
|
width: parent ? parent.width : undefined
|
||||||
selectByMouse: true
|
|
||||||
font.italic: true
|
font.italic: true
|
||||||
color: inactiveColors.text
|
color: inactiveColors.text
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
import QtQuick 2.5
|
import ".."
|
||||||
import QtQuick.Controls 2.1
|
|
||||||
|
|
||||||
Label {
|
MatrixText {
|
||||||
text: qsTr("unimplemented event: ") + model.type
|
text: qsTr("unimplemented event: ") + model.type
|
||||||
textFormat: Text.PlainText
|
|
||||||
wrapMode: Text.Wrap
|
|
||||||
width: parent ? parent.width : undefined
|
width: parent ? parent.width : undefined
|
||||||
color: inactiveColors.text
|
color: inactiveColors.text
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
import QtQuick 2.5
|
import ".."
|
||||||
|
|
||||||
TextEdit {
|
MatrixText {
|
||||||
text: model.formattedBody
|
text: model.formattedBody
|
||||||
textFormat: TextEdit.RichText
|
|
||||||
readOnly: true
|
|
||||||
wrapMode: Text.Wrap
|
|
||||||
width: parent ? parent.width : undefined
|
width: parent ? parent.width : undefined
|
||||||
selectByMouse: true
|
|
||||||
color: colors.text
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,7 @@
|
||||||
<file>qml/TimelineView.qml</file>
|
<file>qml/TimelineView.qml</file>
|
||||||
<file>qml/Avatar.qml</file>
|
<file>qml/Avatar.qml</file>
|
||||||
<file>qml/ImageButton.qml</file>
|
<file>qml/ImageButton.qml</file>
|
||||||
|
<file>qml/MatrixText.qml</file>
|
||||||
<file>qml/StatusIndicator.qml</file>
|
<file>qml/StatusIndicator.qml</file>
|
||||||
<file>qml/EncryptionIndicator.qml</file>
|
<file>qml/EncryptionIndicator.qml</file>
|
||||||
<file>qml/TimelineRow.qml</file>
|
<file>qml/TimelineRow.qml</file>
|
||||||
|
|
|
@ -827,6 +827,7 @@ TimelineModel::replyAction(QString id)
|
||||||
[](const auto &e) -> std::string { return eventMsgType(e); }, event));
|
[](const auto &e) -> std::string { return eventMsgType(e); }, event));
|
||||||
related.quoted_body =
|
related.quoted_body =
|
||||||
boost::apply_visitor([](const auto &e) -> QString { return eventBody(e); }, event);
|
boost::apply_visitor([](const auto &e) -> QString { return eventBody(e); }, event);
|
||||||
|
related.room = room_id_;
|
||||||
|
|
||||||
if (related.quoted_body.isEmpty())
|
if (related.quoted_body.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue