mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 02:12:09 -05:00
LibWeb: Remove duplicated event handler attribute code in WebSocket
This functionality is now inherited from EventTarget, so we can simply remove the whole thing in WebSocket. :^)
This commit is contained in:
parent
51b33b5678
commit
57f3535c4a
2 changed files with 1 additions and 44 deletions
|
@ -226,49 +226,9 @@ JS::Object* WebSocket::create_wrapper(JS::GlobalObject& global_object)
|
|||
} \
|
||||
HTML::EventHandler WebSocket::attribute_name() \
|
||||
{ \
|
||||
return get_event_handler_attribute(event_name); \
|
||||
return event_handler_attribute(event_name); \
|
||||
}
|
||||
ENUMERATE_WEBSOCKET_EVENT_HANDLERS(__ENUMERATE)
|
||||
#undef __ENUMERATE
|
||||
|
||||
// FIXME: This is copied from GlobalEventHandlers.cpp. Find a way to deduplicate it.
|
||||
void WebSocket::set_event_handler_attribute(const FlyString& name, HTML::EventHandler value)
|
||||
{
|
||||
RefPtr<DOM::EventListener> listener;
|
||||
if (!value.callback.is_null()) {
|
||||
listener = adopt_ref(*new DOM::EventListener(move(value.callback)));
|
||||
} else {
|
||||
StringBuilder builder;
|
||||
builder.appendff("function {}(event) {{\n{}\n}}", name, value.string);
|
||||
auto parser = JS::Parser(JS::Lexer(builder.string_view()));
|
||||
auto program = parser.parse_function_node<JS::FunctionExpression>();
|
||||
if (parser.has_errors()) {
|
||||
dbgln("Failed to parse script in event handler attribute '{}'", name);
|
||||
return;
|
||||
}
|
||||
auto* function = JS::OrdinaryFunctionObject::create(script_execution_context()->interpreter().global_object(), name, program->body(), program->parameters(), program->function_length(), nullptr, JS::FunctionKind::Regular, false, false);
|
||||
VERIFY(function);
|
||||
listener = adopt_ref(*new DOM::EventListener(JS::make_handle(static_cast<JS::FunctionObject*>(function))));
|
||||
}
|
||||
if (listener) {
|
||||
for (auto& registered_listener : listeners()) {
|
||||
if (registered_listener.event_name == name && registered_listener.listener->is_attribute()) {
|
||||
remove_event_listener(name, registered_listener.listener);
|
||||
break;
|
||||
}
|
||||
}
|
||||
add_event_listener(name, listener.release_nonnull());
|
||||
}
|
||||
}
|
||||
|
||||
HTML::EventHandler WebSocket::get_event_handler_attribute(const FlyString& name)
|
||||
{
|
||||
for (auto& listener : listeners()) {
|
||||
if (listener.event_name == name && listener.listener->is_attribute())
|
||||
return HTML::EventHandler { JS::make_handle(&listener.listener->function()) };
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -78,9 +78,6 @@ public:
|
|||
ENUMERATE_WEBSOCKET_EVENT_HANDLERS(__ENUMERATE)
|
||||
#undef __ENUMERATE
|
||||
|
||||
void set_event_handler_attribute(const FlyString& name, HTML::EventHandler);
|
||||
HTML::EventHandler get_event_handler_attribute(const FlyString& name);
|
||||
|
||||
ReadyState ready_state() const;
|
||||
String extensions() const;
|
||||
String protocol() const;
|
||||
|
|
Loading…
Add table
Reference in a new issue