mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-22 01:08:56 +00:00
LibWeb: Implement DataTransfer.clearData()
This commit is contained in:
parent
d9341adb1e
commit
0c1532626f
Notes:
github-actions[bot]
2025-09-12 10:31:44 +00:00
Author: https://github.com/tcl3
Commit: 0c1532626f
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6088
Reviewed-by: https://github.com/gmta
3 changed files with 48 additions and 1 deletions
|
@ -264,6 +264,52 @@ void DataTransfer::remove_item(size_t index)
|
||||||
update_data_transfer_types_list();
|
update_data_transfer_types_list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-cleardata
|
||||||
|
void DataTransfer::clear_data(Optional<String> maybe_format)
|
||||||
|
{
|
||||||
|
// 1. If the DataTransfer object is no longer associated with a drag data store, return. Nothing happens.
|
||||||
|
if (!m_associated_drag_data_store)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 2. If the drag data store's mode is not the read/write mode, return. Nothing happens.
|
||||||
|
if (m_associated_drag_data_store->mode() != DragDataStore::Mode::ReadWrite)
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto remove_items_from_drag_data_store = [&](Optional<String> const& format = {}) {
|
||||||
|
auto did_remove_item = false;
|
||||||
|
for (size_t i = m_associated_drag_data_store->item_list().size(); i > 0; --i) {
|
||||||
|
auto const& item = m_associated_drag_data_store->item_list().at(i - 1);
|
||||||
|
if (item.kind == DragDataStoreItem::Kind::Text && (!format.has_value() || item.type_string == *format)) {
|
||||||
|
m_associated_drag_data_store->remove_item_at(i - 1);
|
||||||
|
did_remove_item = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (did_remove_item)
|
||||||
|
update_data_transfer_types_list();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 3. If the method was called with no arguments, remove each item in the drag data store item list whose kind is
|
||||||
|
// Plain Unicode string, and return.
|
||||||
|
if (!maybe_format.has_value()) {
|
||||||
|
remove_items_from_drag_data_store();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Set format to format, converted to ASCII lowercase.
|
||||||
|
auto format = maybe_format->to_ascii_lowercase();
|
||||||
|
|
||||||
|
// 5. If format equals "text", change it to "text/plain".
|
||||||
|
// If format equals "url", change it to "text/uri-list".
|
||||||
|
if (format == "text"sv) {
|
||||||
|
format = "text/plain"_string;
|
||||||
|
} else if (format == "url"sv) {
|
||||||
|
format = "text/uri-list"_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. Remove each item in the drag data store item list whose kind is Plain Unicode string and whose type string is equal to format.
|
||||||
|
remove_items_from_drag_data_store(format);
|
||||||
|
}
|
||||||
|
|
||||||
bool DataTransfer::contains_item_with_type(DragDataStoreItem::Kind kind, String const& type) const
|
bool DataTransfer::contains_item_with_type(DragDataStoreItem::Kind kind, String const& type) const
|
||||||
{
|
{
|
||||||
VERIFY(m_associated_drag_data_store);
|
VERIFY(m_associated_drag_data_store);
|
||||||
|
|
|
@ -54,6 +54,7 @@ public:
|
||||||
|
|
||||||
ReadonlySpan<String> types() const;
|
ReadonlySpan<String> types() const;
|
||||||
String get_data(String const& format) const;
|
String get_data(String const& format) const;
|
||||||
|
void clear_data(Optional<String> maybe_format = {});
|
||||||
GC::Ref<FileAPI::FileList> files() const;
|
GC::Ref<FileAPI::FileList> files() const;
|
||||||
|
|
||||||
Optional<DragDataStore::Mode> mode() const;
|
Optional<DragDataStore::Mode> mode() const;
|
||||||
|
|
|
@ -17,6 +17,6 @@ interface DataTransfer {
|
||||||
readonly attribute FrozenArray<DOMString> types;
|
readonly attribute FrozenArray<DOMString> types;
|
||||||
DOMString getData(DOMString format);
|
DOMString getData(DOMString format);
|
||||||
[FIXME] undefined setData(DOMString format, DOMString data);
|
[FIXME] undefined setData(DOMString format, DOMString data);
|
||||||
[FIXME] undefined clearData(optional DOMString format);
|
undefined clearData(optional DOMString format);
|
||||||
[SameObject] readonly attribute FileList files;
|
[SameObject] readonly attribute FileList files;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue