summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-02-03 22:47:50 +0100
committerAndreas Kling <kling@serenityos.org>2021-02-03 23:03:05 +0100
commita59b1825ce3ba5d6e6adf51ab2745c7212789c31 (patch)
tree8d7a09b0705fa05bb1d0921bf8400ca7d0aaa241 /Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h
parentb43db4cc5027c7aa1c4780a8ab2851f4a5f1cca0 (diff)
downloadserenity-a59b1825ce3ba5d6e6adf51ab2745c7212789c31.zip
LibWeb: Basic implementation of global event handlers :^)
Document and HTMLElement now inherit from HTML::GlobalEventHandlers which allows them to support "onfoo" event handler attributes. These are assignable both via IDL attributes and content attributes. Event listeners constructed this way get a special "attribute" flag on them so we know which one to replace if you reassign them. This also allows them to coexist with EventTarget.addEventListener(). This is all a bit sloppy, but it works decently for a first cut. The Window object should also inherit GlobalEventHandlers, but since we don't generate it from IDL, I haven't taken that step here. Also this would be a lot nicer if we supported IDL mixins.
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h')
-rw-r--r--Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h b/Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h
index 7cf05ecf4e..cb272d249b 100644
--- a/Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h
+++ b/Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h
@@ -26,6 +26,9 @@
#pragma once
+#include <AK/Forward.h>
+#include <LibWeb/Forward.h>
+
#define ENUMERATE_GLOBAL_EVENT_HANDLERS(E) \
E(onabort, HTML::EventNames::abort) \
E(onauxclick, "auxclick") \
@@ -93,3 +96,25 @@
E(onwebkitanimationstart, "webkitanimationstart") \
E(onwebkittransitionend, "webkittransitionend") \
E(onwheel, "wheel")
+
+namespace Web::HTML {
+
+class GlobalEventHandlers {
+public:
+ virtual ~GlobalEventHandlers();
+
+#undef __ENUMERATE
+#define __ENUMERATE(attribute_name, event_name) \
+ void set_##attribute_name(HTML::EventHandler); \
+ HTML::EventHandler attribute_name();
+ ENUMERATE_GLOBAL_EVENT_HANDLERS(__ENUMERATE)
+#undef __ENUMERATE
+
+ void set_event_handler_attribute(const FlyString& name, HTML::EventHandler);
+ HTML::EventHandler get_event_handler_attribute(const FlyString& name);
+
+protected:
+ virtual DOM::EventTarget& global_event_handlers_to_event_target() = 0;
+};
+
+}