/* * Copyright (c) 2024, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::DOM { class EditingHostManager : public JS::Cell , public InputEventsTarget { GC_CELL(EditingHostManager, JS::Cell); GC_DECLARE_ALLOCATOR(EditingHostManager); public: [[nodiscard]] static GC::Ref create(JS::Realm&, GC::Ref); virtual void handle_insert(String const&) override; virtual void handle_delete(DeleteDirection) override; virtual void handle_return_key() override; virtual void select_all() override; virtual void set_selection_anchor(GC::Ref, size_t offset) override; virtual void set_selection_focus(GC::Ref, size_t offset) override; virtual void move_cursor_to_start(CollapseSelection) override; virtual void move_cursor_to_end(CollapseSelection) override; virtual void increment_cursor_position_offset(CollapseSelection) override; virtual void decrement_cursor_position_offset(CollapseSelection) override; virtual void increment_cursor_position_to_next_word(CollapseSelection) override; virtual void decrement_cursor_position_to_previous_word(CollapseSelection) override; virtual void visit_edges(Cell::Visitor& visitor) override; void set_active_contenteditable_element(GC::Ptr element) { m_active_contenteditable_element = element; } private: EditingHostManager(GC::Ref); GC::Ref m_document; GC::Ptr m_active_contenteditable_element; }; }