status-desktop/ui/app/AppLayouts/Browser/AddFavoriteModal.qml

160 lines
4.3 KiB
QML
Raw Normal View History

2020-10-29 15:19:27 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import QtGraphicalEffects 1.13
2020-10-29 15:19:27 +00:00
import "../../../imports"
import "../../../shared"
import "../../../shared/status"
2020-10-29 15:19:27 +00:00
ModalPopup {
property string urlError: ""
property string nameError: ""
property string ogUrl
property string ogName
property bool modifiyModal: false
2020-10-29 20:07:52 +00:00
property bool toolbarMode: false
2020-10-29 15:19:27 +00:00
id: popup
2020-10-29 20:07:52 +00:00
width: toolbarMode ? 345 : 480
height: toolbarMode ? 345 : 480
2020-10-29 20:07:52 +00:00
modal: !toolbarMode
background: Rectangle {
id: bgPopup
color: Style.current.background
radius: Style.current.radius
layer.enabled: true
layer.effect: DropShadow{
width: bgPopup.width
height: bgPopup.height
x: bgPopup.x
y: bgPopup.y + 10
visible: bgPopup.visible
source: bgPopup
horizontalOffset: 0
verticalOffset: 5
radius: 10
samples: 15
color: "#22000000"
}
}
2020-10-29 15:19:27 +00:00
onOpened: {
urlInput.forceActiveFocus(Qt.MouseFocusReason)
}
onClosed: {
reset()
}
2020-10-29 15:19:27 +00:00
function validate() {
urlError = ""
if (!urlInput.text) {
2021-02-18 16:36:05 +00:00
//% "Please enter a URL"
urlError = qsTrId("please-enter-a-url")
2020-10-29 15:19:27 +00:00
} else if (!Utils.isURL(urlInput.text)) {
2021-02-18 16:36:05 +00:00
//% "This fields needs to be a valid URL"
urlError = qsTrId("this-fields-needs-to-be-a-valid-url")
2020-10-29 15:19:27 +00:00
}
2021-02-18 16:36:05 +00:00
//% "Please enter a Name"
nameError = !nameInput.text ? qsTrId("please-enter-a-name") : ""
2020-10-29 15:19:27 +00:00
return !urlError && !nameError
}
function reset() {
modifiyModal = false
2020-10-29 20:07:52 +00:00
toolbarMode = false
urlError = ""
nameError = ""
ogUrl = ""
ogName = ""
x = Math.round(((parent ? parent.width : 0) - width) / 2)
y = Math.round(((parent ? parent.height : 0) - height) / 2)
}
title: modifiyModal ?
2020-10-29 20:07:52 +00:00
toolbarMode ?
2021-02-18 16:36:05 +00:00
//% "Favorite added"
qsTrId("favorite-added") :
//% "Edit"
qsTrId("edit")
//% "Add favorite"
: qsTrId("add-favorite")
2020-10-29 15:19:27 +00:00
Column {
width: parent.width
spacing: Style.current.padding
Input {
id: urlInput
2021-02-18 16:36:05 +00:00
//% "URL"
label: qsTrId("url")
//% "Paste URL"
placeholderText: qsTrId("paste-url")
2020-10-29 15:19:27 +00:00
pasteFromClipboard: true
validationError: popup.urlError
text: popup.ogUrl
2020-10-29 15:19:27 +00:00
}
Input {
id: nameInput
2021-02-18 16:36:05 +00:00
//% "Name"
label: qsTrId("name")
//% "Name the website"
placeholderText: qsTrId("name-the-website")
2020-10-29 15:19:27 +00:00
validationError: popup.nameError
text: popup.ogName
2020-10-29 15:19:27 +00:00
}
}
footer: Item {
width: parent.width
height: removeBtn.height
StatusButton {
id: removeBtn
anchors.right: addBtn.left
anchors.rightMargin: Style.current.padding
visible: popup.modifiyModal
2021-02-18 16:36:05 +00:00
//% "Remove"
text: qsTrId("remove")
anchors.bottom: parent.bottom
color: Style.current.danger
bgColor: Utils.setColorAlpha(Style.current.danger, 0.1)
bgHoverColor: Utils.setColorAlpha(Style.current.danger, 0.2)
onClicked: {
browserModel.removeBookmark(popup.ogUrl)
popup.close()
2020-10-29 15:19:27 +00:00
}
}
2020-10-29 15:19:27 +00:00
StatusButton {
id: addBtn
anchors.right: parent.right
anchors.rightMargin: Style.current.smallPadding
text: popup.modifiyModal ?
2021-02-18 16:36:05 +00:00
//% "Done"
qsTrId("done") :
//% "Add"
qsTrId("add")
anchors.bottom: parent.bottom
onClicked: {
if (!validate()) {
return
}
if (!popup.modifiyModal) {
browserModel.addBookmark(urlInput.text, nameInput.text)
} else if (popup.ogName !== nameInput.text || popup.ogUrl !== urlInput.text) {
browserModel.modifyBookmark(popup.ogUrl, urlInput.text, nameInput.text)
}
popup.close()
}
2020-10-29 15:19:27 +00:00
}
}
}