2024-03-13 15:35:39 -04:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <LibJS/Forward.h>
|
|
|
|
#include <LibWeb/Bindings/PlatformObject.h>
|
2024-08-16 13:40:56 -04:00
|
|
|
#include <LibWeb/HTML/DragDataStore.h>
|
2024-03-13 15:35:39 -04:00
|
|
|
|
|
|
|
namespace Web::HTML {
|
|
|
|
|
2024-08-16 13:40:56 -04:00
|
|
|
#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
|
2024-03-13 15:35:39 -04:00
|
|
|
class DataTransfer : public Bindings::PlatformObject {
|
|
|
|
WEB_PLATFORM_OBJECT(DataTransfer, Bindings::PlatformObject);
|
|
|
|
JS_DECLARE_ALLOCATOR(DataTransfer);
|
|
|
|
|
|
|
|
public:
|
|
|
|
static JS::NonnullGCPtr<DataTransfer> construct_impl(JS::Realm&);
|
|
|
|
virtual ~DataTransfer() override;
|
|
|
|
|
2024-08-16 13:40:56 -04:00
|
|
|
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);
|
|
|
|
|
2024-08-17 14:23:13 -04:00
|
|
|
ReadonlySpan<String> types() const;
|
|
|
|
|
2024-08-17 14:44:26 -04:00
|
|
|
JS::NonnullGCPtr<FileAPI::FileList> files() const;
|
|
|
|
|
2024-08-17 14:23:13 -04:00
|
|
|
void associate_with_drag_data_store(DragDataStore& drag_data_store);
|
|
|
|
void disassociate_with_drag_data_store();
|
2024-08-16 13:40:56 -04:00
|
|
|
|
2024-03-13 15:35:39 -04:00
|
|
|
private:
|
|
|
|
DataTransfer(JS::Realm&);
|
|
|
|
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
2024-08-16 13:40:56 -04:00
|
|
|
|
2024-08-17 14:23:13 -04:00
|
|
|
void update_data_transfer_types_list();
|
|
|
|
|
2024-08-16 13:40:56 -04:00
|
|
|
// 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 };
|
|
|
|
|
2024-08-17 14:23:13 -04:00
|
|
|
// https://html.spec.whatwg.org/multipage/dnd.html#concept-datatransfer-types
|
|
|
|
Vector<String> m_types;
|
|
|
|
|
2024-08-16 13:40:56 -04:00
|
|
|
// https://html.spec.whatwg.org/multipage/dnd.html#the-datatransfer-interface:drag-data-store-3
|
|
|
|
Optional<DragDataStore&> m_associated_drag_data_store;
|
2024-03-13 15:35:39 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|