diff --git a/Tests/LibWeb/Text/expected/all-window-properties.txt b/Tests/LibWeb/Text/expected/all-window-properties.txt index 2e1951ee824..d2f60b59a96 100644 --- a/Tests/LibWeb/Text/expected/all-window-properties.txt +++ b/Tests/LibWeb/Text/expected/all-window-properties.txt @@ -75,6 +75,7 @@ DOMStringMap DOMTokenList DataTransfer DataTransferItem +DataTransferItemList DataView Date DisposableStack diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 450ea6be313..fdef9a367e8 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -276,6 +276,7 @@ set(SOURCES HTML/CustomElements/CustomElementRegistry.cpp HTML/DataTransfer.cpp HTML/DataTransferItem.cpp + HTML/DataTransferItemList.cpp HTML/Dates.cpp HTML/DecodedImageData.cpp HTML/DedicatedWorkerGlobalScope.cpp diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 3c9261ab9e2..6fb89025b16 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -354,6 +354,7 @@ class CloseWatcherManager; class CustomElementDefinition; class CustomElementRegistry; class DataTransferItem; +class DataTransferItemList; class DecodedImageData; class DocumentState; class DOMParser; diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItemList.cpp b/Userland/Libraries/LibWeb/HTML/DataTransferItemList.cpp new file mode 100644 index 00000000000..75a4077284d --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItemList.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::HTML { + +JS_DEFINE_ALLOCATOR(DataTransferItemList); + +JS::NonnullGCPtr DataTransferItemList::construct_impl(JS::Realm& realm) +{ + return realm.heap().allocate(realm, realm); +} + +DataTransferItemList::DataTransferItemList(JS::Realm& realm) + : PlatformObject(realm) +{ +} + +DataTransferItemList::~DataTransferItemList() = default; + +void DataTransferItemList::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(DataTransferItemList); +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItemList.h b/Userland/Libraries/LibWeb/HTML/DataTransferItemList.h new file mode 100644 index 00000000000..9bf0c3502d0 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItemList.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Web::HTML { + +// https://html.spec.whatwg.org/multipage/dnd.html#the-datatransferitemlist-interface +class DataTransferItemList : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(DataTransferItemList, Bindings::PlatformObject); + JS_DECLARE_ALLOCATOR(DataTransferItemList); + +public: + static JS::NonnullGCPtr construct_impl(JS::Realm&); + virtual ~DataTransferItemList() override; + +private: + DataTransferItemList(JS::Realm&); + + virtual void initialize(JS::Realm&) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItemList.idl b/Userland/Libraries/LibWeb/HTML/DataTransferItemList.idl new file mode 100644 index 00000000000..211c089cf31 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItemList.idl @@ -0,0 +1,12 @@ +#import + +// https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist +[Exposed=Window] +interface DataTransferItemList { + [FIXME] readonly attribute unsigned long length; + [FIXME] getter DataTransferItem (unsigned long index); + [FIXME] DataTransferItem? add(DOMString data, DOMString type); + [FIXME] DataTransferItem? add(File data); + [FIXME] undefined remove(unsigned long index); + [FIXME] undefined clear(); +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 04fdbc0fa91..d830aa8f319 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -103,6 +103,7 @@ libweb_js_bindings(HTML/CloseWatcher) libweb_js_bindings(HTML/CustomElements/CustomElementRegistry) libweb_js_bindings(HTML/DataTransfer) libweb_js_bindings(HTML/DataTransferItem) +libweb_js_bindings(HTML/DataTransferItemList) libweb_js_bindings(HTML/DedicatedWorkerGlobalScope GLOBAL) libweb_js_bindings(HTML/DOMParser) libweb_js_bindings(HTML/DOMStringList)