LibWeb: Implement ToggleEvent for HTMLDetailsElement
This commit is contained in:
parent
f598a357ad
commit
153ae93f9c
Notes:
sideshowbarker
2024-07-17 10:16:43 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/153ae93f9c Pull-request: https://github.com/SerenityOS/serenity/pull/20965 Reviewed-by: https://github.com/Lubrsi Reviewed-by: https://github.com/shannonbooth
6 changed files with 98 additions and 3 deletions
Userland/Libraries/LibWeb
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
36
Userland/Libraries/LibWeb/HTML/ToggleEvent.cpp
Normal file
36
Userland/Libraries/LibWeb/HTML/ToggleEvent.cpp
Normal 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"));
|
||||
}
|
||||
|
||||
}
|
42
Userland/Libraries/LibWeb/HTML/ToggleEvent.h
Normal file
42
Userland/Libraries/LibWeb/HTML/ToggleEvent.h
Normal 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;
|
||||
};
|
||||
|
||||
}
|
14
Userland/Libraries/LibWeb/HTML/ToggleEvent.idl
Normal file
14
Userland/Libraries/LibWeb/HTML/ToggleEvent.idl
Normal 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 = "";
|
||||
};
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue