Warning, /network/tokodon/src/content/ui/StatusDelegate/LinkPreview.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003
0004 import QtQuick
0005 import org.kde.kirigami 2 as Kirigami
0006 import QtQuick.Controls 2 as QQC2
0007 import QtQuick.Layouts
0008 import org.kde.tokodon
0009 import Qt5Compat.GraphicalEffects
0010
0011 // The visual "link preview box" when there's some data attached to a link
0012 // Such as the website page description and title
0013 QQC2.AbstractButton {
0014 id: root
0015
0016 required property var card
0017 required property bool selected
0018
0019 Accessible.name: i18n("Link preview: %1", root.card ? root.card.title : '')
0020 Accessible.description: root.card ? root.card.providerName : ''
0021
0022 leftPadding: Kirigami.Units.largeSpacing
0023 topPadding: Kirigami.Units.largeSpacing
0024 rightPadding: Kirigami.Units.largeSpacing
0025 bottomPadding: Kirigami.Units.largeSpacing
0026
0027 onClicked: Qt.openUrlExternally(root.card.url)
0028
0029 HoverHandler {
0030 cursorShape: Qt.PointingHandCursor
0031 onHoveredChanged: if (hovered) {
0032 applicationWindow().hoverLinkIndicator.text = root.card.url;
0033 } else {
0034 applicationWindow().hoverLinkIndicator.text = "";
0035 }
0036 }
0037
0038 background: Rectangle {
0039 Kirigami.Theme.colorSet: Kirigami.Theme.Window
0040 Kirigami.Theme.inherit: false
0041
0042 radius: Kirigami.Units.mediumSpacing
0043 color: Kirigami.Theme.alternateBackgroundColor
0044 border {
0045 width: root.visualFocus ? 2 : 0
0046 color: root.visualFocus ? Kirigami.Theme.focusColor : 'transparent'
0047 }
0048 }
0049
0050 contentItem: RowLayout {
0051 spacing: 0
0052
0053 Image {
0054 id: img
0055 mipmap: true
0056 smooth: true
0057
0058 visible: root.card && root.card.image
0059
0060 Layout.minimumHeight: Kirigami.Units.gridUnit * 3
0061 Layout.maximumHeight: Kirigami.Units.gridUnit * 3
0062 Layout.minimumWidth: Kirigami.Units.gridUnit * 3
0063 Layout.maximumWidth: Kirigami.Units.gridUnit * 3
0064 Layout.topMargin: 0
0065 Layout.bottomMargin: 0
0066 Layout.leftMargin: Kirigami.Units.smallSpacing
0067
0068 layer.enabled: true
0069 layer.effect: OpacityMask {
0070 maskSource: Item {
0071 width: img.width
0072 height: img.height
0073 Kirigami.ShadowedRectangle {
0074 anchors.centerIn: parent
0075 radius: Kirigami.Units.mediumSpacing
0076 width: img.width
0077 height: img.height
0078 }
0079 }
0080 }
0081
0082 fillMode: Image.PreserveAspectCrop
0083 source: root.card ? root.card.image : ''
0084 }
0085 ColumnLayout {
0086 Layout.fillWidth: true
0087 Layout.margins: Kirigami.Units.smallSpacing
0088 Layout.leftMargin: Kirigami.Units.largeSpacing
0089 spacing: 0
0090 QQC2.Label {
0091 text: root.card ? root.card.providerName : ''
0092 elide: Text.ElideRight
0093 font: Kirigami.Theme.smallFont
0094 visible: text
0095 Layout.fillWidth: true
0096 maximumLineCount: 1
0097 }
0098 Kirigami.Heading {
0099 level: 5
0100 text: root.card ? root.card.title : ''
0101 elide: Text.ElideRight
0102 font.weight: Font.DemiBold
0103 maximumLineCount: 1
0104 visible: text
0105 Layout.fillWidth: true
0106 }
0107 QQC2.Label {
0108 text: root.card ? root.card.description : ''
0109 elide: Text.ElideRight
0110 visible: text
0111 maximumLineCount: 1
0112 Layout.fillWidth: true
0113 }
0114 }
0115 }
0116
0117 HoverHandler {
0118 cursorShape: Qt.PointingHandCursor
0119 }
0120 }