mirror of
https://github.com/RGBCube/serenity
synced 2025-05-19 19:45:08 +00:00
LibWeb: Introduce the FormDataEvent interface
This commit is contained in:
parent
d5b5b94a35
commit
a6cdf6374f
6 changed files with 95 additions and 0 deletions
|
@ -186,6 +186,7 @@ set(SOURCES
|
||||||
HTML/Focus.cpp
|
HTML/Focus.cpp
|
||||||
HTML/FormAssociatedElement.cpp
|
HTML/FormAssociatedElement.cpp
|
||||||
HTML/FormControlInfrastructure.cpp
|
HTML/FormControlInfrastructure.cpp
|
||||||
|
HTML/FormDataEvent.cpp
|
||||||
HTML/GlobalEventHandlers.cpp
|
HTML/GlobalEventHandlers.cpp
|
||||||
HTML/History.cpp
|
HTML/History.cpp
|
||||||
HTML/HTMLAnchorElement.cpp
|
HTML/HTMLAnchorElement.cpp
|
||||||
|
|
|
@ -246,6 +246,7 @@ struct EnvironmentSettingsObject;
|
||||||
class ErrorEvent;
|
class ErrorEvent;
|
||||||
class EventHandler;
|
class EventHandler;
|
||||||
class EventLoop;
|
class EventLoop;
|
||||||
|
class FormDataEvent;
|
||||||
class HTMLAnchorElement;
|
class HTMLAnchorElement;
|
||||||
class HTMLAreaElement;
|
class HTMLAreaElement;
|
||||||
class HTMLAudioElement;
|
class HTMLAudioElement;
|
||||||
|
|
40
Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp
Normal file
40
Userland/Libraries/LibWeb/HTML/FormDataEvent.cpp
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <LibWeb/Bindings/FormDataEventPrototype.h>
|
||||||
|
#include <LibWeb/Bindings/Intrinsics.h>
|
||||||
|
#include <LibWeb/HTML/FormDataEvent.h>
|
||||||
|
|
||||||
|
namespace Web::HTML {
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<FormDataEvent>> FormDataEvent::construct_impl(JS::Realm& realm, DeprecatedString const& event_name, FormDataEventInit const& event_init)
|
||||||
|
{
|
||||||
|
return MUST_OR_THROW_OOM(realm.heap().allocate<FormDataEvent>(realm, realm, event_name, event_init));
|
||||||
|
}
|
||||||
|
|
||||||
|
FormDataEvent::FormDataEvent(JS::Realm& realm, DeprecatedString const& event_name, FormDataEventInit const& event_init)
|
||||||
|
: DOM::Event(realm, event_name, event_init)
|
||||||
|
, m_form_data(event_init.form_data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
FormDataEvent::~FormDataEvent() = default;
|
||||||
|
|
||||||
|
JS::ThrowCompletionOr<void> FormDataEvent::initialize(JS::Realm& realm)
|
||||||
|
{
|
||||||
|
MUST_OR_THROW_OOM(Base::initialize(realm));
|
||||||
|
set_prototype(&Bindings::ensure_web_prototype<Bindings::FormDataEventPrototype>(realm, "FormDataEvent"));
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
void FormDataEvent::visit_edges(Cell::Visitor& visitor)
|
||||||
|
{
|
||||||
|
Base::visit_edges(visitor);
|
||||||
|
visitor.visit(m_form_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
Userland/Libraries/LibWeb/HTML/FormDataEvent.h
Normal file
38
Userland/Libraries/LibWeb/HTML/FormDataEvent.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <LibWeb/DOM/Event.h>
|
||||||
|
#include <LibWeb/XHR/FormData.h>
|
||||||
|
|
||||||
|
namespace Web::HTML {
|
||||||
|
|
||||||
|
struct FormDataEventInit : public DOM::EventInit {
|
||||||
|
JS::GCPtr<XHR::FormData> form_data {};
|
||||||
|
};
|
||||||
|
|
||||||
|
class FormDataEvent final : public DOM::Event {
|
||||||
|
WEB_PLATFORM_OBJECT(FormDataEvent, DOM::Event);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<FormDataEvent>> construct_impl(JS::Realm&, DeprecatedString const& event_name, FormDataEventInit const& event_init);
|
||||||
|
|
||||||
|
virtual ~FormDataEvent() override;
|
||||||
|
|
||||||
|
JS::GCPtr<XHR::FormData> form_data() const { return m_form_data; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
FormDataEvent(JS::Realm&, DeprecatedString const& event_name, FormDataEventInit const& event_init);
|
||||||
|
|
||||||
|
JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
|
||||||
|
|
||||||
|
virtual void visit_edges(Cell::Visitor&) override;
|
||||||
|
|
||||||
|
JS::GCPtr<XHR::FormData> m_form_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
14
Userland/Libraries/LibWeb/HTML/FormDataEvent.idl
Normal file
14
Userland/Libraries/LibWeb/HTML/FormDataEvent.idl
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#import <DOM/Event.idl>
|
||||||
|
#import <XHR/FormData.idl>
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-formdataevent-interface
|
||||||
|
[Exposed=Window]
|
||||||
|
interface FormDataEvent : Event {
|
||||||
|
constructor(DOMString type, FormDataEventInit eventInitDict);
|
||||||
|
|
||||||
|
readonly attribute FormData formData;
|
||||||
|
};
|
||||||
|
|
||||||
|
dictionary FormDataEventInit : EventInit {
|
||||||
|
required FormData formData;
|
||||||
|
};
|
|
@ -71,6 +71,7 @@ libweb_js_bindings(HTML/CloseEvent)
|
||||||
libweb_js_bindings(HTML/DOMParser)
|
libweb_js_bindings(HTML/DOMParser)
|
||||||
libweb_js_bindings(HTML/DOMStringMap)
|
libweb_js_bindings(HTML/DOMStringMap)
|
||||||
libweb_js_bindings(HTML/ErrorEvent)
|
libweb_js_bindings(HTML/ErrorEvent)
|
||||||
|
libweb_js_bindings(HTML/FormDataEvent)
|
||||||
libweb_js_bindings(HTML/History)
|
libweb_js_bindings(HTML/History)
|
||||||
libweb_js_bindings(HTML/HTMLAnchorElement)
|
libweb_js_bindings(HTML/HTMLAnchorElement)
|
||||||
libweb_js_bindings(HTML/HTMLAreaElement)
|
libweb_js_bindings(HTML/HTMLAreaElement)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue