mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:37:35 +00:00
LibWeb: Add support for NodeList
This introduces 3 classes: NodeList, StaticNodeList and LiveNodeList. NodeList is the base of the static and live versions. Static is a snapshot whereas live acts on the underlying data and thus inhibits the same issues we have currently with HTMLCollection. They were split into separate classes to not have them weirdly mis-mashed together. The create functions for static and live both return a NNRP to the base class. This is to prevent having to do awkward casting at creation and/or return, as the bindings expect to see the base NodeList only.
This commit is contained in:
parent
bfd089fbd1
commit
8d6db36cbb
10 changed files with 221 additions and 1 deletions
37
Userland/Libraries/LibWeb/DOM/NodeList.h
Normal file
37
Userland/Libraries/LibWeb/DOM/NodeList.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Noncopyable.h>
|
||||
#include <AK/RefCounted.h>
|
||||
#include <LibWeb/Bindings/Wrappable.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
||||
namespace Web::DOM {
|
||||
|
||||
// https://dom.spec.whatwg.org/#nodelist
|
||||
class NodeList
|
||||
: public RefCounted<NodeList>
|
||||
, public Bindings::Wrappable {
|
||||
AK_MAKE_NONCOPYABLE(NodeList);
|
||||
AK_MAKE_NONMOVABLE(NodeList);
|
||||
|
||||
public:
|
||||
using WrapperType = Bindings::NodeListWrapper;
|
||||
|
||||
virtual ~NodeList() override = default;
|
||||
|
||||
virtual u32 length() const = 0;
|
||||
virtual Node const* item(u32 index) const = 0;
|
||||
|
||||
virtual bool is_supported_property_index(u32) const = 0;
|
||||
|
||||
protected:
|
||||
NodeList() = default;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue