Skip to content

API выделения

Класс для управления выделением текста и курсором в редакторе.

WARNING

Этот класс предназначен для внутреннего использования в редакторе и для разработки сторонних компонентов. Однако его методы следует применять с осторожностью, поскольку они обходят систему менеджера событий и менеджера истории. Неправильное использование может привести к ошибкам и непредсказуемому поведению во всём приложении.

Методы SelectionAPI

ФункцияСигнатураОписание
setStatesetState(state: SelectionState): voidСохраняет текущее состояние выделения.
getStategetState(): SelectionStateВозвращает сохранённое состояние выделения.
clearStateclearState(): voidОчищает сохранённое состояние выделения.
applyStateapplyState(): voidПрименяет текущее состояние выделения на контейнере.
selectselect(startPos: number, endPos: number, container?: Element, scrollToContainer?: boolean): voidВыделяет текст внутри контейнера от начальной до конечной позиции.
insertinsert(content: string, isHtml?: boolean, strip?: boolean): booleanВставляет содержимое в текущую позицию курсора.
insertTextinsertText(content: string, cleanHtml?: boolean): booleanВставляет обычный текст в текущую позицию курсора.
splitContentsplitContent(container?: HTMLElement | null): stringРазбивает содержимое в текущем положении курсора.
findTagsfindTags(container: Element | HTMLElement, children?: boolean): HTMLElement[]Находит HTML-теги, которые пересекаются с текущим выделением.
getSelectiongetSelection(): Selection | nullПолучить объект текущего выделения.
getRangegetRange(index?: number): Range | nullПолучает определенный диапазон из текущего выделения.
getAbsoluteOffsetgetAbsoluteOffset(container: Node, offset: number): numberВычисляет абсолютное смещение символов внутри контейнера.
getOffsetgetOffset(container?: Node | HTMLElement | null): [number, number]Возвращает начальное и конечное смещения текущего выделения.
getBoundsgetBounds(): DOMRect | nullВозвращает границы текущего выделения.
getFirstLineBoundsgetFirstLineBounds(): DOMRect | nullВозвращает границы текущего выделения для одной линии.

Типы и интерфейсы SelectionAPI

typescript
/**
 * Интерфейс позиции курсора.
 * @property start - Начальное смещение выделения
 * @property end - Конечное смещение выделения
 */
export interface CursorPosition {
 /** Начальное смещение выделения */
 start: number;
 /** Конечное смещение выделения */
 end: number;
}

/**
 * Интерфейс состояния текущего выделения.
 * @property position - Позиция курсора с начальным и конечным смещениями
 * @property element - HTML-элемент, содержащий выделение, или null, если выделения нет
 */
export interface SelectionState {
 /** Позиция курсора с начальным и конечным смещениями */
 position: CursorPosition;
 /** HTML-элемент, содержащий выделение, или null, если выделения нет */
 element: HTMLElement | null;
}

/**
 * Интерфейс API выделения.
 */
export interface SelectionAPI {
 setState(state: SelectionState): void;
 getState(): SelectionState;
 clearState(): void;
 applyState(): void;
 select(startPos: number, endPos: number, container?: Element, scrollToContainer?: boolean): void;
 insert(content: string, isHtml?: boolean, strip?: boolean): boolean;
 insertText(content: string, cleanHtml?: boolean): boolean;
 splitContent(container?: HTMLElement | null): string;
 findTags(container: Element | HTMLElement, children?: boolean): HTMLElement[];
 getSelection(): Selection | null;
 getRange(index?: number): Range | null;
 getAbsoluteOffset(container: Node, offset: number): number;
 getOffset(container?: Node | HTMLElement | null): [number, number];
 getBounds(): DOMRect | null;
 getFirstLineBounds(): DOMRect | null;
}

Пример использования SelectionAPI

javascript
import Texditor from "texditor";
const editor = new Texditor({
  handle: "my-editor"
});

// Сохранение состояния выделения
const selectionState = editor.selectionApi.getState();
console.log('Текущее состояние выделения:', selectionState);

// Установка выделения в контейнере
editor.selectionApi.select(0, 10, editor.blockManager.getContentElement());

// Вставка текста в текущую позицию курсора
editor.selectionApi.insertText('Новый текст');

// Вставка HTML в текущую позицию курсора
editor.selectionApi.insert('<strong>Жирный текст</strong>', true);

dev@priveted.com | priveted.com