/* * Copyright (c) 2021, Luke Wilde * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::DOM { // FIXME: Just like HTMLCollection, LiveNodeList currently does no caching. class LiveNodeList final : public NodeList { WEB_PLATFORM_OBJECT(LiveNodeList, NodeList); public: static JS::NonnullGCPtr create(JS::Realm&, Node& root, Function filter); virtual ~LiveNodeList() override; virtual u32 length() const override; virtual Node const* item(u32 index) const override; virtual bool is_supported_property_index(u32) const override; private: LiveNodeList(JS::Realm&, Node& root, Function filter); virtual void visit_edges(Cell::Visitor&) override; JS::MarkedVector collection() const; JS::NonnullGCPtr m_root; Function m_filter; }; }