diff --git a/Tests/LibWeb/Text/expected/all-window-properties.txt b/Tests/LibWeb/Text/expected/all-window-properties.txt index 2b922e1c889..2e1951ee824 100644 --- a/Tests/LibWeb/Text/expected/all-window-properties.txt +++ b/Tests/LibWeb/Text/expected/all-window-properties.txt @@ -74,6 +74,7 @@ DOMStringList DOMStringMap DOMTokenList DataTransfer +DataTransferItem DataView Date DisposableStack diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index fd136edca27..450ea6be313 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -275,6 +275,7 @@ set(SOURCES HTML/CustomElements/CustomElementReactionNames.cpp HTML/CustomElements/CustomElementRegistry.cpp HTML/DataTransfer.cpp + HTML/DataTransferItem.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 6c5eed5d65d..3c9261ab9e2 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -353,6 +353,7 @@ class CloseWatcher; class CloseWatcherManager; class CustomElementDefinition; class CustomElementRegistry; +class DataTransferItem; class DecodedImageData; class DocumentState; class DOMParser; diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItem.cpp b/Userland/Libraries/LibWeb/HTML/DataTransferItem.cpp new file mode 100644 index 00000000000..b5ac6db658d --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItem.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(DataTransferItem); + +JS::NonnullGCPtr DataTransferItem::construct_impl(JS::Realm& realm) +{ + return realm.heap().allocate(realm, realm); +} + +DataTransferItem::DataTransferItem(JS::Realm& realm) + : PlatformObject(realm) +{ +} + +DataTransferItem::~DataTransferItem() = default; + +void DataTransferItem::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(DataTransferItem); +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItem.h b/Userland/Libraries/LibWeb/HTML/DataTransferItem.h new file mode 100644 index 00000000000..bb19783d07f --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItem.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-datatransferitem-interface +class DataTransferItem : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(DataTransferItem, Bindings::PlatformObject); + JS_DECLARE_ALLOCATOR(DataTransferItem); + +public: + static JS::NonnullGCPtr construct_impl(JS::Realm&); + virtual ~DataTransferItem() override; + +private: + DataTransferItem(JS::Realm&); + + virtual void initialize(JS::Realm&) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItem.idl b/Userland/Libraries/LibWeb/HTML/DataTransferItem.idl new file mode 100644 index 00000000000..785667f4d43 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItem.idl @@ -0,0 +1,12 @@ +#import + +callback FunctionStringCallback = undefined (DOMString data); + +// https://html.spec.whatwg.org/multipage/dnd.html#datatransferitem +[Exposed=Window] +interface DataTransferItem { + [FIXME] readonly attribute DOMString kind; + [FIXME] readonly attribute DOMString type; + [FIXME] undefined getAsString(FunctionStringCallback? _callback); + [FIXME] File? getAsFile(); +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index dcc9f706403..04fdbc0fa91 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -102,6 +102,7 @@ libweb_js_bindings(HTML/CloseEvent) 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/DedicatedWorkerGlobalScope GLOBAL) libweb_js_bindings(HTML/DOMParser) libweb_js_bindings(HTML/DOMStringList)