/* * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::HTML { #define ENUMERATE_DATA_TRANSFER_EFFECTS \ __ENUMERATE_DATA_TRANSFER_EFFECT(none) \ __ENUMERATE_DATA_TRANSFER_EFFECT(copy) \ __ENUMERATE_DATA_TRANSFER_EFFECT(copyLink) \ __ENUMERATE_DATA_TRANSFER_EFFECT(copyMove) \ __ENUMERATE_DATA_TRANSFER_EFFECT(link) \ __ENUMERATE_DATA_TRANSFER_EFFECT(linkMove) \ __ENUMERATE_DATA_TRANSFER_EFFECT(move) \ __ENUMERATE_DATA_TRANSFER_EFFECT(all) \ __ENUMERATE_DATA_TRANSFER_EFFECT(uninitialized) namespace DataTransferEffect { #define __ENUMERATE_DATA_TRANSFER_EFFECT(name) extern FlyString name; ENUMERATE_DATA_TRANSFER_EFFECTS #undef __ENUMERATE_DATA_TRANSFER_EFFECT } // https://html.spec.whatwg.org/multipage/dnd.html#the-datatransfer-interface class DataTransfer : public Bindings::PlatformObject { WEB_PLATFORM_OBJECT(DataTransfer, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(DataTransfer); public: static GC::Ref create(JS::Realm&, NonnullRefPtr); static GC::Ref construct_impl(JS::Realm&); virtual ~DataTransfer() override; FlyString const& drop_effect() const { return m_drop_effect; } void set_drop_effect(String const&); void set_drop_effect(FlyString); FlyString const& effect_allowed() const { return m_effect_allowed; } void set_effect_allowed(String const&); void set_effect_allowed(FlyString); void set_effect_allowed_internal(FlyString); GC::Ref items(); ReadonlySpan types() const; String get_data(String const& format) const; GC::Ref files() const; Optional mode() const; void disassociate_with_drag_data_store(); GC::Ref add_item(DragDataStoreItem item); bool contains_item_with_type(DragDataStoreItem::Kind, String const& type) const; GC::Ref item(size_t index) const; DragDataStoreItem const& drag_data(size_t index) const; size_t length() const; private: DataTransfer(JS::Realm&, NonnullRefPtr); virtual void initialize(JS::Realm&) override; virtual void visit_edges(JS::Cell::Visitor&) override; void update_data_transfer_types_list(); // https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-dropeffect FlyString m_drop_effect { DataTransferEffect::none }; // https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-effectallowed FlyString m_effect_allowed { DataTransferEffect::none }; // https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-items GC::Ptr m_items; Vector> m_item_list; // https://html.spec.whatwg.org/multipage/dnd.html#concept-datatransfer-types Vector m_types; // https://html.spec.whatwg.org/multipage/dnd.html#the-datatransfer-interface:drag-data-store-3 RefPtr m_associated_drag_data_store; }; }