Модели
Для реализации специфической функциональности редактора используются модели, унаследованные от базового класса BaseModel. Ниже приведены описания основных моделей (без учёта методов, определённых в базовом классе): ActionModel, BlockModel, ExtensionModel, ToolModel и FileActionModel.
ActionModel
Модель действий блока.
Методы ActionModel
| Функция | Сигнатура | Описание |
|---|---|---|
| getBlockElement | public getBlockElement(): BlockElement | null | Возвращает родительский элемент блока, связанный с этим действием. |
| isDropdown | public isDropdown(): boolean | Проверяет, отображается ли выпадающий список действий при клике. |
| isConfirm | public isConfirm(): boolean | Проверяет, требует ли действие подтверждения перед выполнением. |
Защищённые и статические методы ActionModel
| Функция | Сигнатура | Описание |
|---|---|---|
| setup | public static setup(config: Partial<ActionModelConfig>): ActionModelConstructor | Устанавливает глобальную конфигурацию для модели. |
| parentConfig | protected parentConfig(): Partial<ActionModelConfig> | Возвращает конфигурацию родительской модели. |
| parentOnCreateElement | protected parentOnCreateElement(el: ActionElement): void | Родительский хук, вызываемый после создания элемента модели. |
| confirm | protected confirm(evt: MouseEvent): void | Обрабатывает поток подтверждения для действий, требующих проверки пользователя. |
| parentOnClick | protected parentOnClick(evt: MouseEvent): void | Родительский хук, вызываемый после клика на элемент модели. |
| dropdown | protected dropdown(): HTMLElement | Создаёт и возвращает элемент выпадающего меню. |
Типы и интерфейсы ActionModel
typescript
/**
* Тип конструктора модели действий блока.
*/
export type ActionModelConstructor = ModelConstructor<ActionModel, ActionModelConfig>;
/**
* Интерфейс DOM-элемента действия.
*/
export interface ActionElement extends BaseElement {
/** Ссылка на экземпляр модели действия */
baseModel: ActionModel;
}
/**
* Интерфейс конфигурации модели действий блока.
* @property dropdown - Отображать ли выпадающий список при клике
* @property confirm - Требует ли действие подтверждения перед выполнением
*/
export interface ActionModelConfig extends BaseModelConfig {
dropdown: boolean;
confirm: boolean;
}
/**
* Интерфейс модели действий блока.
*/
export interface ActionModel extends BaseModel<ActionElement> {
getBlockElement(): BlockElement | null;
isDropdown(): boolean;
isConfirm(): boolean;
}Примеры работы с модели действий
BlockModel
Модель блока.
Методы BlockModel
| Функция | Сигнатура | Описание |
|---|---|---|
| change | public change(name: string, params?: TexditorEventBase, globalParams?: TexditorEventBase): void | Вызывает событие изменения модели. |
| isEnterCreate | public isEnterCreate(): boolean | Проверяет, создаёт ли нажатие Enter новый блок. |
| isAutoMerge | public isAutoMerge(): boolean | Проверяет, включено ли автоматическое объединение с соседними блоками. |
| isAutoParse | public isAutoParse(): boolean | Проверяет, включён ли автоматический парсинг содержимого. |
| getRelatedNames | public getRelatedNames(): string[] | Возвращает массив связанных имён блоков и тегов. |
| getSupportedNames | public getSupportedNames(): string[] | Возвращает массив всех поддерживаемых типов имён блока. |
| getPlaceholder | public getPlaceholder(): string | Возвращает плейсхолдер блока. |
| getContentClassName | public getContentClassName(): string | Возвращает имя CSS-класса для элемента содержимого. |
| getContentElement | public getContentElement(): HTMLElement | Возвращает DOM-элемент содержимого блока. |
| getTagName | public getTagName(): string | Возвращает имя тега блока. |
| getGroupCode | public getGroupCode(): string | Возвращает код группы блока. |
| getItemTagName | public getItemTagName(): string | Возвращает имя тега элемента списка. |
| getItemBodyClassName | public getItemBodyClassName(): string | Возвращает имя CSS-класса для тела элемента списка. |
| getItemClassName | public getItemClassName(): string | Возвращает имя CSS-класса для элемента списка. |
| getItemName | public getItemName(): string | Возвращает имя элемента списка. |
| getMaxItems | public getMaxItems(): number | Возвращает максимально допустимое количество элементов. |
| getItemRelatedNames | public getItemRelatedNames(): string[] | Возвращает массив связанных типов имён элемента списка. |
| getItemSupportedNames | public getItemSupportedNames(): string[] | Возвращает массив всех поддерживаемых типов имён элемента списка. |
| isSortableItems | public isSortableItems(): boolean | Проверяет, включена ли сортировка элементов. |
| getDragZoneClassName | public getDragZoneClassName(): string | Возвращает имя CSS-класса для зоны перетаскивания. |
| getItemIndex | public getItemIndex(itemElement?: HTMLElement): number | Возвращает индекс элемента. |
| showActions | public showActions(): void | Показывает меню действий блока. |
| hideActions | public hideActions(): void | Скрывает меню действий блока. |
| createItem | public createItem(content?: string | unknown, index?: number, skipEvents?: boolean): boolean | Создаёт новый элемент списка. |
| removeItem | public removeItem(index?: number): boolean | Удаляет элемент списка. |
| getItem | public getItem(index: number): HTMLElement | null | Возвращает элемент списка по индексу. |
| getItems | public getItems(): HTMLElement[] | Возвращает массив всех элементов списка. |
| getItemBody | public getItemBody(index: number): HTMLElement | null | Возвращает тело элемента списка по индексу. |
| moveItem | public moveItem(index: number, targetIndex: number, skipEvents?: boolean): void | Перемещает элемент списка на новую позицию. |
| getItemsLength | public getItemsLength(): number | Возвращает количество элементов в списке. |
| canCreateItem | public canCreateItem(): boolean | Проверяет, можно ли создать новый элемент без превышения лимита. |
| isEmpty | public isEmpty(): boolean | Проверяет, пуст ли блок. |
| isEmptyItem | public isEmptyItem(index: number): boolean | Проверяет, пуст ли конкретный элемент списка. |
| isEmptyDetect | public isEmptyDetect(): boolean | Проверяет, включено ли обнаружение пустых блоков. |
| isBackspaceRemove | public isBackspaceRemove(): boolean | Проверяет, удаляется ли блок при нажатии Backspace. |
| isEditable | public isEditable(): boolean | Проверяет, редактируемо ли содержимое блока. |
| isEditableItems | public isEditableItems(): boolean | Проверяет, редактируемы ли элементы списка. |
| isRaw | public isRaw(): boolean | Проверяет, обрабатывается ли содержимое как сырой текст. |
| isNormalize | public isNormalize(): boolean | Проверяет, включена ли нормализация содержимого. |
| isSingleItem | public isSingleItem(): boolean | Проверяет, поддерживает ли блок только один элемент списка. |
| isConvertible | public isConvertible(): boolean | Проверяет, можно ли конвертировать блок. |
| isCustomSave | public isCustomSave(): boolean | Проверяет, включено ли пользовательское сохранение. |
| isVisibleTools | public isVisibleTools(): boolean | Проверяет, отображаются ли инструменты блока. |
| getAvailableTools | public getAvailableTools(): string[] | Возвращает массив доступных инструментов. |
| isSanitizer | public isSanitizer(): boolean | Проверяет, включена ли очистка HTML. |
| sanitize | public sanitize(): void | Очищает элемент блока от небезопасного HTML. |
| toNormalize | public toNormalize(): BlockElement | HTMLElement | HTMLElement[] | null | Возвращает элемент для нормализации. |
| toSanitize | public toSanitize(): BlockElement | HTMLElement | HTMLElement[] | null | Возвращает элемент для очистки. |
| getSanitizerConfig | public getSanitizerConfig(): SanitizerConfig | Возвращает конфигурацию очистителя HTML. |
| getToastsClassName | public getToastsClassName(): string | Возвращает имя CSS-класса для уведомлений. |
| getToastTimeout | public getToastTimeout(): number | Возвращает время автоматического скрытия уведомлений в миллисекундах. |
| toasts | public toasts(): Toasts | Возвращает экземпляр сервиса уведомлений. |
Защищённые и статические методы BlockModel
| Функция | Сигнатура | Описание |
|---|---|---|
| setup | public static setup(config: Partial<BlockModelConfig>): BlockModelConstructor | Устанавливает глобальную конфигурацию для модели. |
| parentConfig | protected parentConfig(): Partial<BlockModelConfig> | Возвращает конфигурацию родительской модели. |
| parentOnCreateElement | protected parentOnCreateElement(el: BlockElement): void | Родительский хук, вызываемый после создания элемента модели. |
| refreshSortableItems | protected refreshSortableItems(): void | Обновляет функциональность сортируемых элементов. |
| compose | protected compose(createSchema?: BlockCreateSchema): BlockElement | Формирует содержимое из схемы перед монтированием. |
| onCompose | protected onCompose(_createSchema?: BlockCreateSchema): void | Хук, вызываемый после завершения компоновки. |
| parse | protected parse(item: BlockSchema): BlockCreateSchema | Парсит схему блока, подготавливая её для компоновки. |
| merge | protected merge(): HTMLElement | null | Метод обработки объединения блока с соседним блоком. |
| makeItemDragZone | protected makeItemDragZone(): HTMLSpanElement | Создаёт зону перетаскивания для элемента списка. |
| makeItemElement | protected makeItemElement(content: string | unknown = ''): HTMLElement | Создаёт элемент списка. |
| save | protected save(blockSchema: BlockSchema, _blockElement?: BlockElement): BlockSchema | Сохраняет данные блока в формат вывода. |
| parentOnMount | protected parentOnMount(): void | Родительский хук, вызываемый после монтирования в DOM. |
| onPaste | protected onPaste(_evt: Event, _map: PasteMap): boolean | Обрабатывает событие вставки. |
| onKeyDown | protected onKeyDown(_evt: KeyboardEvent): boolean | Обрабатывает событие нажатия клавиши. |
| onKeyUp | protected onKeyUp(_evt: KeyboardEvent): boolean | Обрабатывает событие отпускания клавиши. |
| onFocus | protected onFocus(_evt: FocusEvent): boolean | Обрабатывает событие фокусировки. |
| onBlur | protected onBlur(_evt: FocusEvent): boolean | Обрабатывает событие потери фокуса. |
| onSelectionChange | protected onSelectionChange(_evt: Event, _range: Range): boolean | Обрабатывает событие изменения выделения. |
| onDragStart | protected onDragStart(_evt: DragEvent): boolean | Обрабатывает событие начала перетаскивания. |
| onDragLeave | protected onDragLeave(_evt: DragEvent): boolean | Обрабатывает событие покидания зоны перетаскивания. |
| onDragOver | protected onDragOver(_evt: DragEvent): boolean | Обрабатывает событие перетаскивания над зоной. |
| onDrag | protected onDrag(_evt: DragEvent): boolean | Обрабатывает событие перетаскивания. |
| onDragEnd | protected onDragEnd(_evt: DragEvent): boolean | Обрабатывает событие завершения перетаскивания. |
| onDrop | protected onDrop(_evt: DragEvent): boolean | Обрабатывает событие сброса. |
| beforeConvert | protected beforeConvert(blockElement: BlockElement, targetModel: BlockModel): [BlockElement, BlockModel] | Хук, вызываемый перед конвертацией блока. |
| afterConvert | protected afterConvert(newBlockElement: BlockElement): BlockElement | Хук, вызываемый после конвертации блока. |
| parentDestroy | protected parentDestroy(): void | Родительский хук, вызываемый перед уничтожением элемента. |
Типы и интерфейсы BlockModel
typescript
/**
* Тип конструктора модели блока.
*/
export type BlockModelConstructor = ModelConstructor<BlockModel, BlockModelConfig>;
/**
* Интерфейс DOM-элемента блока.
*/
export interface BlockElement extends BaseElement {
/** Ссылка на экземпляр модели блока */
baseModel: BlockModel;
}
/**
* Интерфейс схемы блока для регистрации.
* @property constructor - Ссылка на конструктор
* @property model - Экземпляр модели
*/
export interface BlockModelSchema {
constructor: BlockModelConstructor;
model: BlockModel;
}
/**
* Интерфейс конфигурации модели блока.
* @property autoMerge - Автоматически объединять с соседними блоками
* @property autoParse - Автоматически парсить содержимое
* @property groupCode - Код группы блока
* @property contentClassName - Имя CSS-класса для элемента содержимого
* @property backspaceRemove - Удалять блок при нажатии Backspace
* @property visibleTools - Показывать инструменты для блока
* @property availableTools - Список доступных инструментов
* @property editable - Содержимое редактируемо
* @property editableItems - Отдельные элементы редактируемы
* @property singleItem - Блок поддерживает только один элемент
* @property enterCreate - Нажатие Enter создаёт новый блок
* @property raw - Обрабатывать содержимое как сырой текст
* @property sanitizer - Включить очистку HTML
* @property sanitizerConfig - Конфигурация очистителя HTML
* @property tagName - HTML-тег блока
* @property itemTagName - HTML-тег элемента списка
* @property itemName - Тип элемента
* @property itemRelatedNames - Связанные имена элементов
* @property itemClassName - CSS-класс элемента
* @property itemBodyClassName - CSS-класс тела элемента
* @property maxItems - Максимальное количество элементов
* @property sortableItems - Включить сортировку элементов
* @property dragZoneClassName - Имя CSS-класса для зоны перетаскивания
* @property relatedNames - Связанные имена блоков
* @property emptyDetect - Включить обнаружение пустых блоков
* @property customSave - Использовать пользовательскую логику сохранения
* @property normalize - Включить нормализацию содержимого
* @property placeholder - Текст-заменитель
* @property convertible - Блок можно конвертировать
* @property toastTimeout - Время автоматического скрытия уведомлений в миллисекундах
* @property toastsClassName - Имя CSS-класса для элемента уведомлений
*/
export interface BlockModelConfig extends BaseModelConfig {
autoMerge: boolean;
autoParse: boolean;
groupCode?: string;
backspaceRemove: boolean;
visibleTools: boolean;
availableTools: string[];
editable: boolean;
editableItems: boolean;
singleItem: boolean;
enterCreate: boolean;
raw: boolean;
sanitizer: boolean;
sanitizerConfig: Record<string, unknown>;
tagName: string;
itemTagName: string;
itemName: string;
itemRelatedNames: string[];
itemClassName: string;
itemBodyClassName: string;
maxItems: number;
sortableItems: boolean;
dragZoneClassName: string;
relatedNames: string[];
emptyDetect: boolean;
customSave: boolean;
normalize: boolean;
placeholder?: string;
convertible: boolean;
contentClassName: string;
toastTimeout: number;
toastsClassName: string;
[key: string]: unknown;
}
/**
* Интерфейс модели блока.
*/
export interface BlockModel extends BaseModel<BlockElement> {
change(name: string, params?: TexditorEventBase, globalParams?: TexditorEventBase): void;
isEnterCreate(): boolean;
isAutoMerge(): boolean;
isAutoParse(): boolean;
getRelatedNames(): string[];
getSupportedNames(): string[];
getPlaceholder(): string;
getContentClassName(): string;
getContentElement(): HTMLElement;
getTagName(): string;
getGroupCode(): string;
getItemTagName(): string;
getItemBodyClassName(): string;
getItemClassName(): string;
getItemName(): string;
getMaxItems(): number;
getItemRelatedNames(): string[];
getItemSupportedNames(): string[];
isSortableItems(): boolean;
getDragZoneClassName(): string;
getItemIndex(itemElement?: HTMLElement): number;
showActions(): void;
hideActions(): void;
createItem(content?: string | unknown, index?: number, skipEvents?: boolean): boolean;
removeItem(index?: number): boolean;
getItem(index: number): HTMLElement | null;
getItems(): HTMLElement[];
getItemBody(index: number): HTMLElement | null;
moveItem(index: number, targetIndex: number, skipEvents?: boolean): void;
getItemsLength(): number;
canCreateItem(): boolean;
isEmpty(): boolean;
isEmptyItem(index: number): boolean;
isEmptyDetect(): boolean;
isBackspaceRemove(): boolean;
isEditable(): boolean;
isEditableItems(): boolean;
isRaw(): boolean;
isNormalize(): boolean;
isSingleItem(): boolean;
isConvertible(): boolean;
isCustomSave(): boolean;
isVisibleTools(): boolean;
getAvailableTools(): string[];
isSanitizer(): boolean;
sanitize(): void;
toNormalize(): BlockElement | HTMLElement | HTMLElement[] | null;
toSanitize(): BlockElement | HTMLElement | HTMLElement[] | null;
getSanitizerConfig(): SanitizerConfig;
getToastsClassName(): string;
getToastTimeout(): number;
toasts(): Toasts;
setup?(config: Partial<BlockModelConfig>): BlockModelConstructor;
}
/** Данные блока: обычный текст, массив строк или дочерние блоки. */
export type BlockSchemaData = string | string[] | BlockChildSchema[];
/** Атрибуты HTML блока в виде пар ключ-значение. */
export type BlockSchemaAttr = Record<string, string>;
/** Полная модель блока с типом, данными, атрибутами и метаданными. */
export interface BlockSchema {
type: string;
data: BlockSchemaData;
attr?: BlockSchemaAttr;
lang?: string;
caption?: string;
layout?: string;
style?: string;
[key: string]: unknown;
}
/** Дочерний элемент блока */
export interface BlockChildSchema {
type: string;
data: BlockSchemaData | [];
attr?: BlockSchemaAttr;
url?: string;
desc?: string;
caption?: string;
size?: number;
[key: string]: unknown;
}
/** Упрощённая модель для создания блока — тип предоставляется контекстом, требуются только данные. */
export interface BlockCreateSchema extends Omit<BlockSchema, 'type'> {
data: string | BlockCreateItemSchema[] | unknown[];
}
/** Упрощённая модель дочернего элемента для создания — требуются только тип и строковые данные. */
export interface BlockCreateItemSchema extends Omit<BlockChildSchema, 'data'> {
type: string;
data: string;
}Пример расширения модели блока
ExtensionModel
Модель расширений.
Методы ExtensionModel
| Функция | Сигнатура | Описание |
|---|---|---|
| isToggleActive | public isToggleActive(): boolean | Проверяет, переключает ли расширение активное состояние при клике. |
| getGroupName | public getGroupName(): string | Возвращает имя группы. |
Защищённые и статические методы ExtensionModel
| Функция | Сигнатура | Описание |
|---|---|---|
| setup | public static setup(config: Partial<ExtensionModelConfig>): ExtensionModelConstructor | Устанавливает глобальную конфигурацию для модели. |
| parentConfig | protected parentConfig(): Partial<ExtensionModelConfig> | Возвращает конфигурацию родительской модели. |
| parentOnClick | protected parentOnClick(evt: MouseEvent): void | Родительский хук, вызываемый после клика на элемент модели. |
Типы и интерфейсы ExtensionModel
typescript
/**
* Тип конструктора модели расширения.
*/
export type ExtensionModelConstructor = ModelConstructor<ExtensionModel, ExtensionModelConfig>;
/**
* Интерфейс DOM-элемента расширения.
*/
export interface ExtensionElement extends BaseElement {
/** Ссылка на экземпляр модели расширения */
baseModel: ExtensionModel;
}
/**
* Интерфейс конфигурации модели расширения.
* @property toggleActive - Переключает ли расширение активное состояние при клике
* @property groupName - Имя группы
*/
export interface ExtensionModelConfig extends BaseModelConfig {
toggleActive: boolean;
groupName: string;
}
/**
* Интерфейс модели расширения.
*/
export interface ExtensionModel extends BaseModel<ExtensionElement> {
getGroupName(): string;
isToggleActive(): boolean;
}Пример расширения модели расширения
ToolModel
Модель инструмента форматирования.
Методы ToolModel
| Функция | Сигнатура | Описание |
|---|---|---|
| getBlockElement | public getBlockElement(): BlockElement | null | Возвращает родительский элемент блока, связанный с этим инструментом. |
| getTagName | public getTagName(): string | Возвращает имя тега инструмента для форматирования. |
| format | public format(): void | Применяет форматирование к выделенному содержимому. |
| forcedFormat | public forcedFormat(): void | Принудительно создаёт форматирование на выделенном содержимом. |
| removeFormat | public removeFormat(): void | Удаляет форматирование из выделенного содержимого. |
| isOverride | public isOverride(): boolean | Проверяет, является ли тег инструмента переопределяемым. |
Защищённые и статические методы ToolModel
| Функция | Сигнатура | Описание |
|---|---|---|
| setup | public static setup(config: Partial<ToolModelConfig>): ToolModelConstructor | Устанавливает глобальную конфигурацию для модели. |
| parentConfig | protected parentConfig(): Partial<ToolModelConfig> | Возвращает конфигурацию родительской модели. |
| onFormat | protected onFormat(_tags: HTMLElement[]): void | Хук, вызываемый после применения форматирования. |
| onClick | protected onClick(_evt: MouseEvent): void | Обрабатывает событие клика. |
| isVisible | protected isVisible(): boolean | Проверяет, виден ли элемент модели инструмента. |
Типы и интерфейсы ToolModel
typescript
/**
* Тип конструктора модели инструмента.
*/
export type ToolModelConstructor = ModelConstructor<ToolModel, ToolModelConfig>;
/**
* Интерфейс DOM-элемента инструмента.
*/
export interface ToolElement extends BaseElement {
/** Ссылка на экземпляр модели инструмента */
baseModel: ToolModel;
}
/**
* Интерфейс конфигурации модели инструмента.
* @property tagName - Имя HTML-тега инструмента для форматирования
* @property override - Переопределение тега
*/
export interface ToolModelConfig extends BaseModelConfig {
tagName: string;
override: boolean;
}
/**
* Интерфейс модели инструмента.
*/
export interface ToolModel extends BaseModel<ToolElement> {
getTagName(): string;
getBlockElement(): BlockElement | null;
format(onlyRemove?: boolean): void;
forcedFormat(): void;
removeFormat(): void;
isOverride(): boolean;
}Пример расширения модели инструмента
FileActionModel
Модель действий файлов.
Методы FileActionModel
| Функция | Сигнатура | Описание |
|---|---|---|
| getItemElement | public getItemElement(): FileItemElement | null | Возвращает элемент файла, связанный с этим действием. |
| getBlockElement | public getBlockElement(): BlockElement | null | Возвращает родительский элемент блока, связанный с этим действием. |
Защищённые и статические методы FileActionModel
| Функция | Сигнатура | Описание |
|---|---|---|
| setup | public static setup(config: Partial<FileActionModelConfig>): FileActionModelConstructor | Устанавливает глобальную конфигурацию для модели. |
| parentConfig | protected parentConfig(): Partial<FileActionModelConfig> | Возвращает конфигурацию родительской модели. |
Типы и интерфейсы FileActionModel
typescript
/**
* Тип конструктора модели действий файлов.
*/
export type FileActionModelConstructor = ModelConstructor<FileActionModel, FileActionModelConfig>;
/**
* Интерфейс DOM-элемента действия файла.
*/
export interface FileActionElement extends BaseElement {
/** Ссылка на экземпляр модели действия файла */
baseModel: FileActionModel;
}
/**
* Интерфейс конфигурации модели действий файлов.
* @property actions - Список действий файлов
*/
export interface FileActionModelConfig extends BaseModelConfig {
actions: FileActionModelConstructor[];
}
/**
* Интерфейс модели действий файлов.
*/
export interface FileActionModel extends BaseModel<FileActionElement> {
getBlockElement(): BlockElement | null;
getItemElement(): FileItemElement | null;
}