From 913a7e5b5d43dafc64dc04afa6d5b4edd8aeb25b Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Mon, 16 Nov 2020 12:44:23 -0400 Subject: [PATCH] feat: message dialogs --- ui/app/AppLayouts/Browser/BrowserLayout.qml | 9 ++ ui/app/AppLayouts/Browser/JSDialogWindow.qml | 103 +++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 ui/app/AppLayouts/Browser/JSDialogWindow.qml diff --git a/ui/app/AppLayouts/Browser/BrowserLayout.qml b/ui/app/AppLayouts/Browser/BrowserLayout.qml index 4470839b58..35cc5c1ded 100644 --- a/ui/app/AppLayouts/Browser/BrowserLayout.qml +++ b/ui/app/AppLayouts/Browser/BrowserLayout.qml @@ -25,6 +25,9 @@ Rectangle { property Component browserDialogComponent: BrowserDialog { onClosing: destroy() } + + property Component jsDialogComponent: JSDialogWindow {} + property bool currentTabConnected: false ListModel { @@ -491,6 +494,12 @@ Rectangle { sslDialog.enqueue(error); } + onJavaScriptDialogRequested: function(request) { + request.accepted = true; + var dialog = jsDialogComponent.createObject(browserWindow, {"request": request}); + dialog.open(); + } + onNewViewRequested: function(request) { if (!request.userInitiated) { print("Warning: Blocked a popup window."); diff --git a/ui/app/AppLayouts/Browser/JSDialogWindow.qml b/ui/app/AppLayouts/Browser/JSDialogWindow.qml new file mode 100644 index 0000000000..df70d662e7 --- /dev/null +++ b/ui/app/AppLayouts/Browser/JSDialogWindow.qml @@ -0,0 +1,103 @@ +import QtQuick 2.13 +import QtQuick.Controls 2.13 +import QtQuick.Layouts 1.13 +import QtWebEngine 1.10 +import "../../../shared" +import "../../../imports" + +ModalPopup { + id: root + property QtObject request + + onClosed: { + request.dialogReject(); + root.destroy(); + } + + Component.onCompleted: { + switch (request.type) { + case JavaScriptDialogRequest.DialogTypeAlert: + cancelButton.visible = false; + title.text = qsTr("Alert"); + message.text = request.message; + prompt.text = ""; + prompt.visible = false; + break; + case JavaScriptDialogRequest.DialogTypeConfirm: + title.text = qsTr("Confirm"); + message.text = request.message; + prompt.text = ""; + prompt.visible = false; + break; + case JavaScriptDialogRequest.DialogTypePrompt: + title.text = qsTr("Prompt"); + message.text = request.message; + prompt.text = request.defaultText; + prompt.visible = true; + break; + } + } + + Rectangle { + id: rectangle + height: 30 + anchors.rightMargin: 0 + anchors.leftMargin: 0 + anchors.right: parent.right + anchors.left: parent.left + + Text { + id: title + x: 54 + y: 5 + color: "#ffffff" + text: qsTr("Title") + font.pointSize: 12 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + } + + + ScrollView { + width: parent.width + height: 100 + TextArea { + id: message + wrapMode: TextEdit.Wrap + readOnly: true + text: "" + } + } + + TextField { + id: prompt + width: 300 + height: 22 + Layout.fillWidth: true + font.pointSize: 12 + } + + Button { + id: okButton + width: 90 + height: 30 + text: qsTr("OK") + onClicked: { + request.dialogAccept(prompt.text); + close(); + } + } + + Button { + id: cancelButton + width: 90 + height: 30 + anchors.top: okButton.bottom + text: qsTr("Cancel") + onClicked: { + request.dialogReject(); + close(); + } + } +} \ No newline at end of file