diff options
author | Andreas Kling <kling@serenityos.org> | 2021-02-03 22:47:50 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-02-03 23:03:05 +0100 |
commit | a59b1825ce3ba5d6e6adf51ab2745c7212789c31 (patch) | |
tree | 8d7a09b0705fa05bb1d0921bf8400ca7d0aaa241 /Userland/Libraries/LibWeb/HTML/GlobalEventHandlers.h | |
parent | b43db4cc5027c7aa1c4780a8ab2851f4a5f1cca0 (diff) | |
download | serenity-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.h | 25 |
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; +}; + +} |