mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb: Implement DataTransferItemList.remove()
This commit is contained in:
parent
8ab3549585
commit
d9341adb1e
Notes:
github-actions[bot]
2025-09-12 10:31:50 +00:00
Author: https://github.com/tcl3
Commit: d9341adb1e
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6088
Reviewed-by: https://github.com/gmta
9 changed files with 84 additions and 1 deletions
|
|
@ -248,6 +248,22 @@ GC::Ref<DataTransferItem> DataTransfer::add_item(DragDataStoreItem item)
|
|||
return data_transfer_item;
|
||||
}
|
||||
|
||||
void DataTransfer::remove_item(size_t index)
|
||||
{
|
||||
VERIFY(m_associated_drag_data_store);
|
||||
VERIFY(index < m_item_list.size());
|
||||
|
||||
m_associated_drag_data_store->remove_item_at(index);
|
||||
auto& item = m_item_list.at(index);
|
||||
item->set_item_index({}, OptionalNone {});
|
||||
m_item_list.remove(index);
|
||||
for (size_t i = index; i < m_item_list.size(); ++i) {
|
||||
m_item_list.at(i)->set_item_index({}, i);
|
||||
}
|
||||
|
||||
update_data_transfer_types_list();
|
||||
}
|
||||
|
||||
bool DataTransfer::contains_item_with_type(DragDataStoreItem::Kind kind, String const& type) const
|
||||
{
|
||||
VERIFY(m_associated_drag_data_store);
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ public:
|
|||
void disassociate_with_drag_data_store();
|
||||
|
||||
GC::Ref<DataTransferItem> add_item(DragDataStoreItem item);
|
||||
void remove_item(size_t index);
|
||||
bool contains_item_with_type(DragDataStoreItem::Kind, String const& type) const;
|
||||
GC::Ref<DataTransferItem> item(size_t index) const;
|
||||
DragDataStoreItem const& drag_data(size_t index) const;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ public:
|
|||
|
||||
String kind() const;
|
||||
String type() const;
|
||||
void set_item_index(Badge<DataTransfer>, Optional<size_t> index) { m_item_index = move(index); }
|
||||
|
||||
void get_as_string(GC::Ptr<WebIDL::CallbackType>) const;
|
||||
GC::Ptr<FileAPI::File> get_as_file() const;
|
||||
|
|
|
|||
|
|
@ -108,6 +108,23 @@ GC::Ptr<DataTransferItem> DataTransferItemList::add(GC::Ref<FileAPI::File> file)
|
|||
return item;
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransferitemlist-remove
|
||||
WebIDL::ExceptionOr<void> DataTransferItemList::remove(WebIDL::UnsignedLong index)
|
||||
{
|
||||
// 1. If the DataTransferItemList object is not in the read/write mode, throw an "InvalidStateError" DOMException.
|
||||
if (m_data_transfer->mode() != DragDataStore::Mode::ReadWrite)
|
||||
return WebIDL::InvalidStateError::create(realm(), "DataTransferItemList is not in read/write mode"_utf16);
|
||||
|
||||
// 2. If the drag data store does not contain an indexth item, then return.
|
||||
if (index >= m_data_transfer->length())
|
||||
return {};
|
||||
|
||||
// 3. Remove the indexth item from the drag data store
|
||||
m_data_transfer->remove_item(index);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransferitemlist-item
|
||||
Optional<JS::Value> DataTransferItemList::item_value(size_t index) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ public:
|
|||
|
||||
WebIDL::ExceptionOr<GC::Ptr<DataTransferItem>> add(String const& data, String const& type);
|
||||
GC::Ptr<DataTransferItem> add(GC::Ref<FileAPI::File>);
|
||||
WebIDL::ExceptionOr<void> remove(WebIDL::UnsignedLong index);
|
||||
|
||||
private:
|
||||
DataTransferItemList(JS::Realm&, GC::Ref<DataTransfer>);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,6 @@ interface DataTransferItemList {
|
|||
getter DataTransferItem (unsigned long index);
|
||||
DataTransferItem? add(DOMString data, DOMString type);
|
||||
DataTransferItem? add(File data);
|
||||
[FIXME] undefined remove(unsigned long index);
|
||||
undefined remove(unsigned long index);
|
||||
[FIXME] undefined clear();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public:
|
|||
~DragDataStore();
|
||||
|
||||
void add_item(DragDataStoreItem item) { m_item_list.append(move(item)); }
|
||||
void remove_item_at(size_t const& index) { m_item_list.remove(index); }
|
||||
ReadonlySpan<DragDataStoreItem> item_list() const { return m_item_list; }
|
||||
size_t size() const { return m_item_list.size(); }
|
||||
bool has_text_item() const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue