2021-10-02 20:33:45 +01:00
/*
* Copyright ( c ) 2021 , Luke Wilde < lukew @ serenityos . org >
*
* SPDX - License - Identifier : BSD - 2 - Clause
*/
# include <LibWeb/DOM/LiveNodeList.h>
# include <LibWeb/DOM/Node.h>
namespace Web : : DOM {
LiveNodeList : : LiveNodeList ( Node & root , Function < bool ( Node const & ) > filter )
: m_root ( root )
, m_filter ( move ( filter ) )
{
}
NonnullRefPtrVector < Node > LiveNodeList : : collection ( ) const
{
NonnullRefPtrVector < Node > nodes ;
2022-04-03 00:48:37 +02:00
m_root - > for_each_in_inclusive_subtree ( [ & ] ( auto & node ) {
2021-10-02 20:33:45 +01:00
if ( m_filter ( node ) )
nodes . append ( node ) ;
return IterationDecision : : Continue ;
} ) ;
return nodes ;
}
// https://dom.spec.whatwg.org/#dom-nodelist-length
u32 LiveNodeList : : length ( ) const
{
return collection ( ) . size ( ) ;
}
// https://dom.spec.whatwg.org/#dom-nodelist-item
Node const * LiveNodeList : : item ( u32 index ) const
{
// The item(index) method must return the indexth node in the collection. If there is no indexth node in the collection, then the method must return null.
auto nodes = collection ( ) ;
if ( index > = nodes . size ( ) )
return nullptr ;
return & nodes [ index ] ;
}
// https://dom.spec.whatwg.org/#ref-for-dfn-supported-property-indices
bool LiveNodeList : : is_supported_property_index ( u32 index ) const
{
// The object’ s supported property indices are the numbers in the range zero to one less than the number of nodes represented by the collection.
// If there are no such elements, then there are no supported property indices.
return index < length ( ) ;
}
}