/* * Copyright (c) 2022, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::DOM { class AbstractRange : public RefCounted , public Bindings::Wrappable { public: using WrapperType = Bindings::AbstractRangeWrapper; virtual ~AbstractRange() override = default; Node* start_container() { return m_start_container; } Node const* start_container() const { return m_start_container; } unsigned start_offset() const { return m_start_offset; } Node* end_container() { return m_end_container; } Node const* end_container() const { return m_end_container; } unsigned end_offset() const { return m_end_offset; } // https://dom.spec.whatwg.org/#range-collapsed bool collapsed() const { // A range is collapsed if its start node is its end node and its start offset is its end offset. return start_container() == end_container() && start_offset() == end_offset(); } protected: AbstractRange(Node& start_container, u32 start_offset, Node& end_container, u32 end_offset) : m_start_container(start_container) , m_start_offset(start_offset) , m_end_container(end_container) , m_end_offset(end_offset) { } NonnullRefPtr m_start_container; u32 m_start_offset; NonnullRefPtr m_end_container; u32 m_end_offset; }; }