LibWeb: Implement ToggleEvent for HTMLDetailsElement

This commit is contained in:
Timothy Flynn 2023-08-31 13:28:49 -04:00 committed by Andreas Kling
parent f598a357ad
commit 153ae93f9c
Notes: sideshowbarker 2024-07-17 10:16:43 +09:00
6 changed files with 98 additions and 3 deletions

View file

@ -395,6 +395,7 @@ set(SOURCES
HTML/TextMetrics.cpp
HTML/Timer.cpp
HTML/TimeRanges.cpp
HTML/ToggleEvent.cpp
HTML/TrackEvent.cpp
HTML/TraversableNavigable.cpp
HTML/VideoTrack.cpp

View file

@ -425,7 +425,6 @@ class NavigationDestination;
class NavigationHistoryEntry;
class NavigationTransition;
class Navigator;
struct NavigationParams;
class Origin;
class PageTransitionEvent;
class Path2D;
@ -438,6 +437,7 @@ class SubmitEvent;
class TextMetrics;
class Timer;
class TimeRanges;
class ToggleEvent;
class TrackEvent;
class TraversableNavigable;
class VideoTrack;
@ -453,15 +453,16 @@ class WorkerLocation;
class WorkerNavigator;
enum class MediaSeekMode;
enum class SandboxingFlagSet;
struct CrossOriginOpenerPolicy;
struct CrossOriginOpenerPolicyEnforcementResult;
struct Environment;
struct EnvironmentSettingsObject;
struct NavigationParams;
struct POSTResource;
struct NavigationParams;
struct PolicyContainer;
enum class SandboxingFlagSet;
struct POSTResource;
struct SerializedFormData;
struct SessionHistoryEntry;
}

View file

@ -0,0 +1,36 @@
/*
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/Bindings/ToggleEventPrototype.h>
#include <LibWeb/HTML/ToggleEvent.h>
namespace Web::HTML {
JS::NonnullGCPtr<ToggleEvent> ToggleEvent::create(JS::Realm& realm, FlyString const& event_name, ToggleEventInit event_init)
{
return realm.heap().allocate<ToggleEvent>(realm, realm, event_name, move(event_init));
}
WebIDL::ExceptionOr<JS::NonnullGCPtr<ToggleEvent>> ToggleEvent::construct_impl(JS::Realm& realm, FlyString const& event_name, ToggleEventInit event_init)
{
return create(realm, event_name, move(event_init));
}
ToggleEvent::ToggleEvent(JS::Realm& realm, FlyString const& event_name, ToggleEventInit event_init)
: DOM::Event(realm, event_name, event_init)
, m_old_state(move(event_init.old_state))
, m_new_state(move(event_init.new_state))
{
}
void ToggleEvent::initialize(JS::Realm& realm)
{
Base::initialize(realm);
set_prototype(&Bindings::ensure_web_prototype<Bindings::ToggleEventPrototype>(realm, "ToggleEvent"));
}
}

View file

@ -0,0 +1,42 @@
/*
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/FlyString.h>
#include <AK/String.h>
#include <LibWeb/DOM/Event.h>
namespace Web::HTML {
struct ToggleEventInit : public DOM::EventInit {
String old_state;
String new_state;
};
class ToggleEvent : public DOM::Event {
WEB_PLATFORM_OBJECT(ToggleEvent, DOM::Event);
public:
[[nodiscard]] static JS::NonnullGCPtr<ToggleEvent> create(JS::Realm&, FlyString const& event_name, ToggleEventInit = {});
static WebIDL::ExceptionOr<JS::NonnullGCPtr<ToggleEvent>> construct_impl(JS::Realm&, FlyString const& event_name, ToggleEventInit);
// https://html.spec.whatwg.org/multipage/interaction.html#dom-toggleevent-oldstate
String const& old_state() const { return m_old_state; }
// https://html.spec.whatwg.org/multipage/interaction.html#dom-toggleevent-newstate
String const& new_state() const { return m_new_state; }
private:
ToggleEvent(JS::Realm&, FlyString const& event_name, ToggleEventInit event_init);
virtual void initialize(JS::Realm&) override;
String m_old_state;
String m_new_state;
};
}

View file

@ -0,0 +1,14 @@
#import <DOM/Event.idl>
// https://html.spec.whatwg.org/multipage/interaction.html#toggleevent
[Exposed=Window]
interface ToggleEvent : Event {
constructor(DOMString type, optional ToggleEventInit eventInitDict = {});
readonly attribute DOMString oldState;
readonly attribute DOMString newState;
};
dictionary ToggleEventInit : EventInit {
DOMString oldState = "";
DOMString newState = "";
};

View file

@ -184,6 +184,7 @@ libweb_js_bindings(HTML/Storage)
libweb_js_bindings(HTML/SubmitEvent)
libweb_js_bindings(HTML/TextMetrics)
libweb_js_bindings(HTML/TimeRanges)
libweb_js_bindings(HTML/ToggleEvent)
libweb_js_bindings(HTML/TrackEvent)
libweb_js_bindings(HTML/VideoTrack)
libweb_js_bindings(HTML/VideoTrackList)