summaryrefslogtreecommitdiff
path: root/Libraries/LibWeb
diff options
context:
space:
mode:
authorNick Tiberi <nicktiberi@gmail.com>2020-04-16 21:29:26 -0400
committerAndreas Kling <kling@serenityos.org>2020-04-17 13:41:03 +0200
commit1f6578ee0a52e8302a1c485448b2e1736506ffec (patch)
treebe2d1d1dc3a002283f22d0a672a0c954eafc42e3 /Libraries/LibWeb
parent0a483cf6774bcac0a7435bc217fd81342205d225 (diff)
downloadserenity-1f6578ee0a52e8302a1c485448b2e1736506ffec.zip
LibWeb: Implement JS confirm()
Diffstat (limited to 'Libraries/LibWeb')
-rw-r--r--Libraries/LibWeb/Bindings/WindowObject.cpp12
-rw-r--r--Libraries/LibWeb/Bindings/WindowObject.h1
-rw-r--r--Libraries/LibWeb/DOM/Window.cpp6
-rw-r--r--Libraries/LibWeb/DOM/Window.h1
4 files changed, 20 insertions, 0 deletions
diff --git a/Libraries/LibWeb/Bindings/WindowObject.cpp b/Libraries/LibWeb/Bindings/WindowObject.cpp
index dd3b4c3c47..8fb3f642ca 100644
--- a/Libraries/LibWeb/Bindings/WindowObject.cpp
+++ b/Libraries/LibWeb/Bindings/WindowObject.cpp
@@ -46,6 +46,7 @@ WindowObject::WindowObject(Window& impl)
put("window", this);
put_native_property("document", document_getter, document_setter);
put_native_function("alert", alert);
+ put_native_function("confirm", confirm);
put_native_function("setInterval", set_interval, 1);
put_native_function("setTimeout", set_timeout, 1);
put_native_function("requestAnimationFrame", request_animation_frame, 1);
@@ -96,6 +97,17 @@ JS::Value WindowObject::alert(JS::Interpreter& interpreter)
return JS::js_undefined();
}
+JS::Value WindowObject::confirm(JS::Interpreter& interpreter)
+{
+ auto* impl = impl_from(interpreter);
+ if (!impl)
+ return {};
+ auto& arguments = interpreter.call_frame().arguments;
+ if (arguments.size() < 1)
+ return {};
+ return JS::Value(impl->confirm(arguments[0].to_string()));
+}
+
JS::Value WindowObject::set_interval(JS::Interpreter& interpreter)
{
auto* impl = impl_from(interpreter);
diff --git a/Libraries/LibWeb/Bindings/WindowObject.h b/Libraries/LibWeb/Bindings/WindowObject.h
index c3605ae7c9..65ff17d642 100644
--- a/Libraries/LibWeb/Bindings/WindowObject.h
+++ b/Libraries/LibWeb/Bindings/WindowObject.h
@@ -51,6 +51,7 @@ private:
static void document_setter(JS::Interpreter&, JS::Value);
static JS::Value alert(JS::Interpreter&);
+ static JS::Value confirm(JS::Interpreter&);
static JS::Value set_interval(JS::Interpreter&);
static JS::Value set_timeout(JS::Interpreter&);
static JS::Value request_animation_frame(JS::Interpreter&);
diff --git a/Libraries/LibWeb/DOM/Window.cpp b/Libraries/LibWeb/DOM/Window.cpp
index a70aa35b3d..f5f48e2a5b 100644
--- a/Libraries/LibWeb/DOM/Window.cpp
+++ b/Libraries/LibWeb/DOM/Window.cpp
@@ -52,6 +52,12 @@ void Window::alert(const String& message)
GUI::MessageBox::show(message, "Alert", GUI::MessageBox::Type::Information);
}
+bool Window::confirm(const String& message)
+{
+ auto confirm_result = GUI::MessageBox::show(message, "Confirm", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::OKCancel);
+ return confirm_result == GUI::Dialog::ExecResult::ExecOK;
+}
+
void Window::set_interval(JS::Function& callback, i32 interval)
{
// FIXME: This leaks the interval timer and makes it unstoppable.
diff --git a/Libraries/LibWeb/DOM/Window.h b/Libraries/LibWeb/DOM/Window.h
index 9390711c84..03d548b71a 100644
--- a/Libraries/LibWeb/DOM/Window.h
+++ b/Libraries/LibWeb/DOM/Window.h
@@ -43,6 +43,7 @@ public:
Document& document() { return m_document; }
void alert(const String&);
+ bool confirm(const String&);
i32 request_animation_frame(JS::Function&);
void cancel_animation_frame(i32);
void set_interval(JS::Function&, i32);