mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:37:35 +00:00
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.
This commit is contained in:
parent
b43db4cc50
commit
a59b1825ce
15 changed files with 391 additions and 2 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue