1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 01:07:36 +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
*/
#pragma once
#include <LibWeb/DOM/Event.h>
namespace Web::DOM {
// https://dom.spec.whatwg.org/#customevent
class CustomEvent : public Event {
public:
using WrapperType = Bindings::CustomEventWrapper;
static NonnullRefPtr<CustomEvent> create(FlyString const& event_name)
{
return adopt_ref(*new CustomEvent(event_name));
}
virtual ~CustomEvent() override;
// https://dom.spec.whatwg.org/#dom-customevent-detail
JS::Value detail() const { return m_detail; }
void visit_edges(JS::Cell::Visitor&);
void init_custom_event(String const& type, bool bubbles, bool cancelable, JS::Value detail);
private:
CustomEvent(FlyString const&);
// https://dom.spec.whatwg.org/#dom-customevent-initcustomevent-type-bubbles-cancelable-detail-detail
JS::Value m_detail { JS::js_null() };
};
}