From ff0a96c02bfc0ff3eeecfd1bf449027d2e029032 Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Thu, 29 Oct 2020 11:19:27 -0400 Subject: [PATCH] feat: add the Add favorite popup --- .../AppLayouts/Browser/AddFavoriteModal.qml | 69 +++++++++++++++++++ ui/app/AppLayouts/Browser/BrowserLayout.qml | 7 +- ui/imports/Utils.qml | 4 ++ ui/nim-status-client.pro | 1 + 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 ui/app/AppLayouts/Browser/AddFavoriteModal.qml diff --git a/ui/app/AppLayouts/Browser/AddFavoriteModal.qml b/ui/app/AppLayouts/Browser/AddFavoriteModal.qml new file mode 100644 index 0000000000..8d35f5e70b --- /dev/null +++ b/ui/app/AppLayouts/Browser/AddFavoriteModal.qml @@ -0,0 +1,69 @@ +import QtQuick 2.13 +import QtQuick.Controls 2.13 +import QtQuick.Layouts 1.13 +import "../../../imports" +import "../../../shared" + +ModalPopup { + property string urlError: "" + property string nameError: "" + + id: popup + width: 480 + height: 480 + + onOpened: { + urlInput.forceActiveFocus(Qt.MouseFocusReason) + } + + function validate() { + urlError = "" + if (!urlInput.text) { + urlError = qsTr("Please enter a URL") + } else if (!Utils.isURL(urlInput.text)) { + urlError = qsTr("This fields needs to be a valid URL") + } + + nameError = !nameInput.text ? qsTr("Please enter a Name") : "" + + return !urlError && !nameError + } + + title: qsTr("Add favorite") + + Column { + width: parent.width + spacing: Style.current.padding + + Input { + id: urlInput + label: qsTr("URL") + placeholderText: qsTr("Paste URL") + pasteFromClipboard: true + validationError: popup.urlError + } + + Input { + id: nameInput + label: qsTr("Name") + placeholderText: qsTr("Name the website") + validationError: popup.nameError + } + } + + footer: StyledButton { + id: addBtn + anchors.right: parent.right + anchors.rightMargin: Style.current.smallPadding + label: qsTr("Add") + anchors.bottom: parent.bottom + onClicked: { + if (!validate()) { + return + } + + browserModel.addBookmark(urlInput.text, nameInput.text) + popup.close() + } + } +} diff --git a/ui/app/AppLayouts/Browser/BrowserLayout.qml b/ui/app/AppLayouts/Browser/BrowserLayout.qml index 924c1d7ae2..4c870600ec 100644 --- a/ui/app/AppLayouts/Browser/BrowserLayout.qml +++ b/ui/app/AppLayouts/Browser/BrowserLayout.qml @@ -91,6 +91,10 @@ Rectangle { standardButtons: StandardButton.Ok } + AddFavoriteModal { + id: addFavoriteModal + } + QtObject { id: provider WebChannel.id: "backend" @@ -637,8 +641,7 @@ Rectangle { id: addBookmarkBtn text: qsTr("Add favorite") onClicked: { - // TODO add a popup - browserModel.addBookmark("https://dap.ps/", "dap.ps") + addFavoriteModal.open() } anchors.left: bookmarkList.right anchors.leftMargin: bookmarkList.spacing diff --git a/ui/imports/Utils.qml b/ui/imports/Utils.qml index 33edd91f70..87549cc3cd 100644 --- a/ui/imports/Utils.qml +++ b/ui/imports/Utils.qml @@ -150,6 +150,10 @@ QtObject { return (/^[a-z0-9\-]+$/.test(channelName)) } + function isURL(text) { + return (/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/.test(text)) + } + function isSpace(c) { return (/( |\t|\n|\r)/.test(c)) } diff --git a/ui/nim-status-client.pro b/ui/nim-status-client.pro index 235375e32e..00442436ff 100644 --- a/ui/nim-status-client.pro +++ b/ui/nim-status-client.pro @@ -121,6 +121,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target DISTFILES += \ + app/AppLayouts/Browser/AddFavoriteModal.qml \ app/AppLayouts/Browser/BrowserConnectionModal.qml \ app/AppLayouts/Browser/BrowserHeader.qml \ app/AppLayouts/Browser/BrowserSettingsMenu.qml \