Serenity Operating System
at master 49 lines 1.5 kB view raw
1/* 2 * Copyright (c) 2022, Luke Wilde <lukew@serenityos.org> 3 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org> 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#pragma once 9 10#include <LibWeb/Bindings/PlatformObject.h> 11#include <LibWeb/Forward.h> 12 13namespace Web::DOM { 14 15class AbstractRange : public Bindings::PlatformObject { 16 WEB_PLATFORM_OBJECT(AbstractRange, Bindings::PlatformObject); 17 18public: 19 virtual ~AbstractRange() override; 20 21 Node* start_container() { return m_start_container.ptr(); } 22 Node const* start_container() const { return m_start_container.ptr(); } 23 unsigned start_offset() const { return m_start_offset; } 24 25 Node* end_container() { return m_end_container.ptr(); } 26 Node const* end_container() const { return m_end_container.ptr(); } 27 unsigned end_offset() const { return m_end_offset; } 28 29 // https://dom.spec.whatwg.org/#range-collapsed 30 bool collapsed() const 31 { 32 // A range is collapsed if its start node is its end node and its start offset is its end offset. 33 return start_container() == end_container() && start_offset() == end_offset(); 34 } 35 36protected: 37 AbstractRange(Node& start_container, u32 start_offset, Node& end_container, u32 end_offset); 38 39 virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override; 40 virtual void visit_edges(Cell::Visitor&) override; 41 42 JS::NonnullGCPtr<Node> m_start_container; 43 u32 m_start_offset; 44 45 JS::NonnullGCPtr<Node> m_end_container; 46 u32 m_end_offset; 47}; 48 49}