Менеджер блоков
Менеджер блоков — это основной класс для управления блоками редактора. Он доступен из любой точки приложения и позволяет создавать, удалять, перемещать блоки, а также выполнять другие операции над ними.
BlockManager
Класс для управления блоками в редакторе.
Методы BlockManager
| Функция | Сигнатура | Описание |
|---|---|---|
| toasts | toasts(): IToasts | Возвращает экземпляр сервиса всплывающих уведомлений. |
| refreshVirtualSelection | refreshVirtualSelection(): IVirtualSelection | null | Обновляет виртуальное выделение и возвращает его экземпляр. |
| getVirtualSelection | getVirtualSelection(): IVirtualSelection | null | Возвращает экземпляр виртуального выделения или создаёт его, если он не существует. |
| clearVirtualSelection | clearVirtualSelection(): void | Очищает виртуальное выделение. |
| destroyVirtualSelection | destroyVirtualSelection(): void | Уничтожает виртуальное выделение. |
| getBlocksContainer | getBlocksContainer(): HTMLElement | null | Возвращает контейнер блоков. |
| focus | focus(index: number, startPos?: number, endPos?: number, itemIndex?: number): BlockElement | null | Устанавливает фокус на блок по индексу. |
| getBlocks | getBlocks(): BlockElement[] | Возвращает массив всех блоков. |
| getBlock | getBlock(index?: number): BlockElement | null | Возвращает блок по индексу или активный. |
| getContentElement | getContentElement(blockElement?: BlockElement): HTMLElement | null | Возвращает элемент содержимого блока. |
| getNextBlockElement | getNextBlockElement(): BlockElement | null | Возвращает следующий блок. |
| getPrevBlockElement | getPrevBlockElement(): BlockElement | null | Возвращает предыдущий блок. |
| findParent | findParent(targetElement: EventTarget | BlockElement | HTMLElement): BlockElement | null | Находит родительский блок для заданного элемента. |
| use | use(index: number): void | Устанавливает текущий активный блок по индексу. |
| getIndex | getIndex(el?: BlockElement | HTMLElement | EventTarget): number | Возвращает индекс блока. |
| count | count(): number | Возвращает количество блоков. |
| isEmpty | isEmpty(index?: number): boolean | Проверяет, пуст ли блок по индексу. |
| detectEmpty | detectEmpty(emptyAttr: boolean = true): void | Обнаруживает пустые блоки и устанавливает атрибут data-empty. |
| normalize | normalize(): void | Нормализует содержимое всех блоков. |
| getModel | getModel(index?: number): BlockModel | null | Возвращает модель блока по индексу. |
| removeBlock | removeBlock(index: number | number[] = -1, skipEvents: boolean = false): number | null | Удаляет блок(и) по индексу(ам). |
| createDefaultBlock | createDefaultBlock(index: number = -1, options?: BlockCreateSchema): BlockElement | null | Создаёт блок по умолчанию. |
| createBlock | createBlock(name: string, index: number = -1, options?: BlockCreateSchema, skipEvents: boolean = false, scrollIntoView: boolean | ScrollIntoViewOptions = true): BlockElement | null | Создаёт новый блок с заданным именем. |
| rebuild | rebuild(index: number): BlockElement | null | Перестраивает блок по индексу, обновляя всю его структуру. |
| moveBlock | moveBlock(index: number, targetIndex: number, skipEvents: boolean = false): void | Перемещает блок на новую позицию. |
| merge | merge(index: number, targetIndex: number, focus?: number, useItems?: boolean): void | Объединяет два редактируемых блока. |
| convert | convert(blockElement: BlockElement, targetModel: BlockModel): boolean | Конвертирует блок в другой тип (если поддерживается). |
| getModels | getModels(): BlockModel[] | Возвращает массив моделей всех блоков. |
| getSchemas | getSchemas(): BlockModelSchema[] | Возвращает массив схем блоков. |
| cleanupSchemas | cleanupSchemas(): void | Очищает кэш схем блоков. |
| getSchema | getSchema(name: string): BlockModelSchema | null | Возвращает схему блока по имени. |
| getRealName | getRealName(name: string): string | null | Возвращает реальное имя блока по псевдониму. |
| htmlToData | htmlToData(html: string): Array<BlockSchema | string> | Преобразует HTML в данные блоков. |
| parseBlock | parseBlock(blockSchema: BlockSchema, skipDecode: boolean = false): BlockElement | null | Парсит схему блока и возвращает элемент блока. |
| parseBlocks | parseBlocks(data: BlockSchema[], skipDecode: boolean = false): BlockElement[] | Парсит массив схем блоков и возвращает элементы блоков. |
| parseChildren | parseChildren(schema: BlockSchema | BlockChildSchema, skipDecode: boolean = false, returnElement: boolean = false): Node[] | Парсит дочерние элементы схемы блока. |
| destroy | destroy(): void | Уничтожает экземпляр BlockManager и очищает ресурсы. |
Пример использования BlockManager
javascript
import { BlockModel } from "@/core/models";
import { Paragraph } from "texditor/entities/blocks";
import Texditor from "texditor";
// Пример пользовательского блока и использование внутри него менеджера блоков (это только для ознакомления, не делайте так на реальных проектах)
class CustomHeader extends BlockModel {
onMount(evt) {
const { blockManager } = this.editor;
const currentBlock = blockManager.getBlock();
const index = blockManager.getIndex();
console.log(currentBlock, index)
}
}
const editor = new Texditor({
handle: "my-editor",
blocks: [
Paragraph,
CustomHeader.setup({
name: 'header',
tagName: 'h2',
})
]
});
// Удаление блока по индексу
editor.blockManager.removeBlock(1);
// Создание нового блока
editor.blockManager.createBlock('p', 0);
// Получение текущего блока
const currentBlock = editor.blockManager.getBlock();
// Фокусировка на блоке
editor.blockManager.focus(2);
// Перемещение блока
editor.blockManager.moveBlock(0, 3);
// Объединение блоков
editor.blockManager.merge(1, 2);