diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn index 901bdc3a7a..428cd033e9 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/HTML/BUILD.gn @@ -24,6 +24,7 @@ source_set("HTML") { "CloseEvent.cpp", "DOMParser.cpp", "DOMStringMap.cpp", + "DataTransfer.cpp", "Dates.cpp", "DecodedImageData.cpp", "DocumentState.cpp", diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni b/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni index d28de606f4..28ab9687c8 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni @@ -113,6 +113,7 @@ standard_idl_files = [ "//Userland/Libraries/LibWeb/HTML/CustomElements/CustomElementRegistry.idl", "//Userland/Libraries/LibWeb/HTML/DOMParser.idl", "//Userland/Libraries/LibWeb/HTML/DOMStringMap.idl", + "//Userland/Libraries/LibWeb/HTML/DataTransfer.idl", "//Userland/Libraries/LibWeb/HTML/ErrorEvent.idl", "//Userland/Libraries/LibWeb/HTML/FormDataEvent.idl", "//Userland/Libraries/LibWeb/HTML/History.idl", diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 6495c098e3..96850dc0dc 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -260,6 +260,7 @@ set(SOURCES HTML/DocumentState.cpp HTML/DOMParser.cpp HTML/DOMStringMap.cpp + HTML/DataTransfer.cpp HTML/ErrorEvent.cpp HTML/EventHandler.cpp HTML/EventLoop/EventLoop.cpp diff --git a/Userland/Libraries/LibWeb/HTML/DataTransfer.cpp b/Userland/Libraries/LibWeb/HTML/DataTransfer.cpp new file mode 100644 index 0000000000..091a3ee221 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransfer.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace Web::HTML { + +JS_DEFINE_ALLOCATOR(DataTransfer); + +JS::NonnullGCPtr DataTransfer::construct_impl(JS::Realm& realm) +{ + return realm.heap().allocate(realm, realm); +} + +DataTransfer::DataTransfer(JS::Realm& realm) + : PlatformObject(realm) +{ +} + +DataTransfer::~DataTransfer() = default; + +void DataTransfer::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + set_prototype(&Bindings::ensure_web_prototype(realm, "DataTransfer"_fly_string)); +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/DataTransfer.h b/Userland/Libraries/LibWeb/HTML/DataTransfer.h new file mode 100644 index 0000000000..5073a6a894 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransfer.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Web::HTML { + +class DataTransfer : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(DataTransfer, Bindings::PlatformObject); + JS_DECLARE_ALLOCATOR(DataTransfer); + +public: + static JS::NonnullGCPtr construct_impl(JS::Realm&); + virtual ~DataTransfer() override; + +private: + DataTransfer(JS::Realm&); + + virtual void initialize(JS::Realm&) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/HTML/DataTransfer.idl b/Userland/Libraries/LibWeb/HTML/DataTransfer.idl new file mode 100644 index 0000000000..cad37aa4ab --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransfer.idl @@ -0,0 +1,19 @@ +// https://html.spec.whatwg.org/multipage/dnd.html#datatransfer +[Exposed=Window] +interface DataTransfer { + constructor(); + + // FIXME: attribute DOMString dropEffect; + // FIXME: attribute DOMString effectAllowed; + + // FIXME: [SameObject] readonly attribute DataTransferItemList items; + + // FIXME: undefined setDragImage(Element image, long x, long y); + + // old interface + // FIXME: readonly attribute FrozenArray types; + // FIXME: DOMString getData(DOMString format); + // FIXME: undefined setData(DOMString format, DOMString data); + // FIXME: undefined clearData(optional DOMString format); + // FIXME: [SameObject] readonly attribute FileList files; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 39b11c6722..464e468ba0 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -97,6 +97,7 @@ libweb_js_bindings(HTML/CloseEvent) libweb_js_bindings(HTML/CustomElements/CustomElementRegistry) libweb_js_bindings(HTML/DOMParser) libweb_js_bindings(HTML/DOMStringMap) +libweb_js_bindings(HTML/DataTransfer) libweb_js_bindings(HTML/ErrorEvent) libweb_js_bindings(HTML/FormDataEvent) libweb_js_bindings(HTML/History)