Warning, /network/tokodon/src/content/ui/ModerationTools/MainFederationToolPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Rishi Kumar <rsi.dev17@gmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 import QtQuick
0005 import QtQuick.Layouts
0006 import QtQuick.Controls 2 as QQC2
0007 import org.kde.kirigami 2 as Kirigami
0008 import org.kde.kirigamiaddons.formcard 1 as FormCard
0009 
0010 FormCard.FormCardPage {
0011     id: root
0012 
0013     property int index
0014     property var model
0015     property int id
0016     property string domain
0017     property date createdAt
0018     property string severity
0019     property bool rejectMedia
0020     property bool rejectReports
0021     property bool obfuscate
0022     property string privateComment
0023     property string publicComment
0024 
0025     title: root.domain
0026 
0027     actions.contextualActions: Kirigami.Action {
0028         icon.name: "edit-delete-remove"
0029         text: i18n("Remove Domain Block")
0030         onTriggered: {
0031             root.model.removeDomainBlock(root.index)
0032             showPassiveNotification(i18n("Domain Block Removed"))
0033             pageStack.layers.pop()
0034         }
0035     }
0036 
0037     data: Kirigami.PromptDialog {
0038         id: textPromptDialog
0039 
0040         title: i18n("Edit domain block")
0041 
0042         contentPadding: 0
0043         implicitWidth: Kirigami.Units.gridUnit * 20
0044 
0045         mainItem: ColumnLayout {
0046             spacing: 0
0047 
0048             FormCard.FormComboBoxDelegate {
0049                 id: severityCombobox
0050                 text: i18n("Moderation")
0051                 textRole: "display"
0052                 valueRole: "value"
0053                 model: [
0054                     {
0055                         display: i18nc("@info:Filter out all the allowed domains", "Silence"),
0056                         value: "silence"
0057                     },
0058                     {
0059                         display: i18nc("@info:Filter out all the blocked domains", "Suspend"),
0060                         value: "suspend"
0061                     },
0062                     {
0063                         display: i18nc("@info:Filter out all the blocked domains", "None"),
0064                         value: "noop"
0065                     },
0066                 ]
0067                 onCurrentIndexChanged: root.severity = model[currentIndex].value
0068                 Component.onCompleted: severityCombobox.currentIndex = severityCombobox.indexOfValue(root.severity);
0069             }
0070             FormCard.FormDelegateSeparator {}
0071             FormCard.FormTextFieldDelegate {
0072                 id: publicComment
0073                 text: root.publicComment
0074                 label: i18n("Public comment")
0075             }
0076             FormCard.FormDelegateSeparator {}
0077             FormCard.FormTextFieldDelegate {
0078                 id: privateComment
0079                 text: root.privateComment
0080                 label: i18n("Private comment")
0081             }
0082             FormCard.FormDelegateSeparator { above: rejectMedia }
0083             FormCard.FormCheckDelegate {
0084                 id: rejectMedia
0085                 text: i18n("Reject media files")
0086                 description: i18n("Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions")
0087                 checked: root.rejectMedia
0088                 onToggled: root.rejectMedia = rejectMedia.checked
0089             }
0090             FormCard.FormDelegateSeparator { below: rejectMedia; above: rejectReports }
0091             FormCard.FormCheckDelegate {
0092                 id: rejectReports
0093                 text: i18n("Reject reports")
0094                 description: i18n("Ignore all reports coming from this domain. Irrelevant for suspensions")
0095                 checked: root.rejectReports
0096                 onToggled: root.rejectReports = rejectReports.checked
0097             }
0098             FormCard.FormDelegateSeparator { below: rejectReports; above: obfuscateReport }
0099             FormCard.FormCheckDelegate {
0100                 id: obfuscateReports
0101                 text: i18n("Obfuscate domain name")
0102                 description: i18n("Partially obfuscate the domain name in the list if advertising the list of domain limitations is enabled")
0103                 checked: root.obfuscate
0104                 onToggled: root.obfuscate = obfuscateReports.checked
0105             }
0106         }
0107         standardButtons: Kirigami.Dialog.NoButton
0108         customFooterActions: [
0109             Kirigami.Action {
0110                 text: i18nc("@info:Cancel button to close the dailog", "Cancel")
0111                 icon.name: "dialog-cancel"
0112                 onTriggered: textPromptDialog.close();
0113             },
0114             Kirigami.Action {
0115                 text: i18nc("@info:Button to update the domain block with new values", "Update Block")
0116                 icon.name: "view-refresh"
0117                 onTriggered: {
0118                     root.privateComment = privateComment.text
0119                     root.publicComment = publicComment.text
0120                     root.model.updateDomainBlock(root.index, severityCombobox.currentValue, publicComment.text, privateComment.text, rejectMedia.checked, rejectReports.checked, obfuscateReports.checked)
0121                     textPromptDialog.close();
0122                     showPassiveNotification(i18n("Domain block updated"))
0123                 }
0124             }
0125         ]
0126     }
0127 
0128     FormCard.FormCard {
0129         Layout.topMargin: Kirigami.Units.largeSpacing
0130 
0131         FormCard.FormTextDelegate {
0132             text: i18n("Blocked at")
0133             description: root.createdAt.toLocaleDateString()
0134         }
0135 
0136         FormCard.FormDelegateSeparator {}
0137 
0138         FormCard.FormTextDelegate {
0139             text: i18n("Public comment")
0140             description: root.publicComment.length !== 0 ? root.publicComment : i18nc("@info: No public comment provided", "None")
0141         }
0142 
0143         FormCard.FormDelegateSeparator {}
0144 
0145         FormCard.FormTextDelegate {
0146             text: i18n("Private comment")
0147             description: root.privateComment.length !== 0 ? root.privateComment : i18nc("@info: No private comment provided", "None")
0148         }
0149 
0150         FormCard.FormDelegateSeparator {}
0151 
0152         FormCard.FormTextDelegate {
0153             text: i18nc("@info:The policy to be applied by this domain block", "Policy")
0154             description: root.severity
0155         }
0156 
0157         FormCard.FormDelegateSeparator {}
0158 
0159         FormCard.FormTextDelegate {
0160             text: i18nc("@info:Whether to obfuscate public displays of this domain block", "Obfuscate")
0161             description: root.obfuscate
0162         }
0163 
0164         FormCard.FormDelegateSeparator {}
0165 
0166         FormCard.FormTextDelegate {
0167             text: i18nc("@info:Whether to reject incoming media from this domain", "Reject media")
0168             description: root.rejectMedia
0169         }
0170 
0171         FormCard.FormDelegateSeparator {}
0172 
0173         FormCard.FormTextDelegate {
0174             text: i18nc("@info:Whether to reject incoming reports from this domain", "Reject reports")
0175             description: root.rejectReports
0176         }
0177     }
0178 
0179     footer: QQC2.ToolBar {
0180         contentItem: RowLayout {
0181             Item {
0182                 Layout.fillWidth: true
0183             }
0184             QQC2.Button {
0185                 text: i18n("Edit Domain Block")
0186                 icon.name: 'cell_edit'
0187                 Layout.margins: Kirigami.Units.smallSpacing
0188                 onClicked: {
0189                     textPromptDialog.open()
0190                 }
0191             }
0192         }
0193     }
0194 }