/* * 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 { JS_CELL(EditingHostManager, JS::Cell); JS_DECLARE_ALLOCATOR(EditingHostManager); public: [[nodiscard]] static JS::NonnullGCPtr create(JS::Realm&, JS::NonnullGCPtr); 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(JS::NonnullGCPtr, size_t offset) override; virtual void set_selection_focus(JS::NonnullGCPtr, 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(JS::GCPtr element) { m_active_contenteditable_element = element; } private: EditingHostManager(JS::NonnullGCPtr); JS::NonnullGCPtr m_document; JS::GCPtr m_active_contenteditable_element; }; }