1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 22:57:44 +00:00

LibWeb: Add initial support for CustomEvent

This is used surprisingly often. For example, it is used by a core
YouTube library called Structured Page Fragments.

It allows you to manually dispatch an event with arbitrary data
attached to it.

The only thing missing from this implementation is the constructor.
This is because WrapperGenerator is currently missing dictionary
capabilities.
This commit is contained in:
Luke Wilde 2021-09-27 16:10:56 +01:00 committed by Andreas Kling
parent b04fafee74
commit f7ac3545cc
8 changed files with 99 additions and 1 deletions

View file

@ -0,0 +1,39 @@
/*
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/DOM/CustomEvent.h>
namespace Web::DOM {
CustomEvent::CustomEvent(FlyString const& event_name)
: Event(event_name)
{
}
CustomEvent::~CustomEvent()
{
}
void CustomEvent::visit_edges(JS::Cell::Visitor& visitor)
{
visitor.visit(m_detail);
}
// https://dom.spec.whatwg.org/#dom-customevent-initcustomevent
void CustomEvent::init_custom_event(String const& type, bool bubbles, bool cancelable, JS::Value detail)
{
// 1. If thiss dispatch flag is set, then return.
if (dispatched())
return;
// 2. Initialize this with type, bubbles, and cancelable.
initialize(type, bubbles, cancelable);
// 3. Set thiss detail attribute to detail.
m_detail = detail;
}
}