mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 14:08:10 +00:00
LibWeb: Add FileList from the FileAPI spec
This commit is contained in:
parent
162e4179fc
commit
ffab9fb44e
6 changed files with 106 additions and 0 deletions
53
Userland/Libraries/LibWeb/FileAPI/FileList.cpp
Normal file
53
Userland/Libraries/LibWeb/FileAPI/FileList.cpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibJS/Runtime/Realm.h>
|
||||
#include <LibWeb/Bindings/Intrinsics.h>
|
||||
#include <LibWeb/Bindings/LegacyPlatformObject.h>
|
||||
#include <LibWeb/FileAPI/FileList.h>
|
||||
|
||||
namespace Web::FileAPI {
|
||||
|
||||
JS::NonnullGCPtr<FileList> FileList::create(JS::Realm& realm, Vector<JS::NonnullGCPtr<File>>&& files)
|
||||
{
|
||||
return *realm.heap().allocate<FileList>(realm, realm, move(files));
|
||||
}
|
||||
|
||||
FileList::FileList(JS::Realm& realm, Vector<JS::NonnullGCPtr<File>>&& files)
|
||||
: Bindings::LegacyPlatformObject(Bindings::cached_web_prototype(realm, "FileList"))
|
||||
, m_files(move(files))
|
||||
{
|
||||
}
|
||||
|
||||
FileList::~FileList() = default;
|
||||
|
||||
// https://w3c.github.io/FileAPI/#dfn-item
|
||||
bool FileList::is_supported_property_index(u32 index) const
|
||||
{
|
||||
// Supported property indices are the numbers in the range zero to one less than the number of File objects represented by the FileList object.
|
||||
// If there are no such File objects, then there are no supported property indices.
|
||||
if (m_files.is_empty())
|
||||
return false;
|
||||
|
||||
return m_files.size() < index;
|
||||
}
|
||||
|
||||
JS::Value FileList::item_value(size_t index) const
|
||||
{
|
||||
if (index >= m_files.size())
|
||||
return JS::js_undefined();
|
||||
|
||||
return m_files[index].ptr();
|
||||
}
|
||||
|
||||
void FileList::visit_edges(Cell::Visitor& visitor)
|
||||
{
|
||||
Base::visit_edges(visitor);
|
||||
for (auto file : m_files)
|
||||
visitor.visit(file);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue