diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 738abe203a..f8fafab1fc 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -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 diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index dd75acf5a9..44dea0fde0 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -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; } diff --git a/Userland/Libraries/LibWeb/HTML/ToggleEvent.cpp b/Userland/Libraries/LibWeb/HTML/ToggleEvent.cpp new file mode 100644 index 0000000000..79662d8924 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/ToggleEvent.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace Web::HTML { + +JS::NonnullGCPtr ToggleEvent::create(JS::Realm& realm, FlyString const& event_name, ToggleEventInit event_init) +{ + return realm.heap().allocate(realm, realm, event_name, move(event_init)); +} + +WebIDL::ExceptionOr> 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(realm, "ToggleEvent")); +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/ToggleEvent.h b/Userland/Libraries/LibWeb/HTML/ToggleEvent.h new file mode 100644 index 0000000000..45061991f6 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/ToggleEvent.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +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 create(JS::Realm&, FlyString const& event_name, ToggleEventInit = {}); + static WebIDL::ExceptionOr> 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; +}; + +} diff --git a/Userland/Libraries/LibWeb/HTML/ToggleEvent.idl b/Userland/Libraries/LibWeb/HTML/ToggleEvent.idl new file mode 100644 index 0000000000..3c1fa86b98 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/ToggleEvent.idl @@ -0,0 +1,14 @@ +#import + +// 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 = ""; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 839f9db8eb..0bb760b397 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -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)