Skip to content

Модели

Для реализации специфической функциональности редактора используются модели, унаследованные от базового класса BaseModel. Ниже приведены описания основных моделей (без учёта методов, определённых в базовом классе): ActionModel, BlockModel, ExtensionModel, ToolModel и FileActionModel.

ActionModel

Модель действий блока.

Методы ActionModel

ФункцияСигнатураОписание
getBlockElementpublic getBlockElement(): BlockElement | nullВозвращает родительский элемент блока, связанный с этим действием.
isDropdownpublic isDropdown(): booleanПроверяет, отображается ли выпадающий список действий при клике.
isConfirmpublic isConfirm(): booleanПроверяет, требует ли действие подтверждения перед выполнением.

Защищённые и статические методы ActionModel

ФункцияСигнатураОписание
setuppublic static setup(config: Partial<ActionModelConfig>): ActionModelConstructorУстанавливает глобальную конфигурацию для модели.
parentConfigprotected parentConfig(): Partial<ActionModelConfig>Возвращает конфигурацию родительской модели.
parentOnCreateElementprotected parentOnCreateElement(el: ActionElement): voidРодительский хук, вызываемый после создания элемента модели.
confirmprotected confirm(evt: MouseEvent): voidОбрабатывает поток подтверждения для действий, требующих проверки пользователя.
parentOnClickprotected parentOnClick(evt: MouseEvent): voidРодительский хук, вызываемый после клика на элемент модели.
dropdownprotected 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

ФункцияСигнатураОписание
changepublic change(name: string, params?: TexditorEventBase, globalParams?: TexditorEventBase): voidВызывает событие изменения модели.
isEnterCreatepublic isEnterCreate(): booleanПроверяет, создаёт ли нажатие Enter новый блок.
isAutoMergepublic isAutoMerge(): booleanПроверяет, включено ли автоматическое объединение с соседними блоками.
isAutoParsepublic isAutoParse(): booleanПроверяет, включён ли автоматический парсинг содержимого.
getRelatedNamespublic getRelatedNames(): string[]Возвращает массив связанных имён блоков и тегов.
getSupportedNamespublic getSupportedNames(): string[]Возвращает массив всех поддерживаемых типов имён блока.
getPlaceholderpublic getPlaceholder(): stringВозвращает плейсхолдер блока.
getContentClassNamepublic getContentClassName(): stringВозвращает имя CSS-класса для элемента содержимого.
getContentElementpublic getContentElement(): HTMLElementВозвращает DOM-элемент содержимого блока.
getTagNamepublic getTagName(): stringВозвращает имя тега блока.
getGroupCodepublic getGroupCode(): stringВозвращает код группы блока.
getItemTagNamepublic getItemTagName(): stringВозвращает имя тега элемента списка.
getItemBodyClassNamepublic getItemBodyClassName(): stringВозвращает имя CSS-класса для тела элемента списка.
getItemClassNamepublic getItemClassName(): stringВозвращает имя CSS-класса для элемента списка.
getItemNamepublic getItemName(): stringВозвращает имя элемента списка.
getMaxItemspublic getMaxItems(): numberВозвращает максимально допустимое количество элементов.
getItemRelatedNamespublic getItemRelatedNames(): string[]Возвращает массив связанных типов имён элемента списка.
getItemSupportedNamespublic getItemSupportedNames(): string[]Возвращает массив всех поддерживаемых типов имён элемента списка.
isSortableItemspublic isSortableItems(): booleanПроверяет, включена ли сортировка элементов.
getDragZoneClassNamepublic getDragZoneClassName(): stringВозвращает имя CSS-класса для зоны перетаскивания.
getItemIndexpublic getItemIndex(itemElement?: HTMLElement): numberВозвращает индекс элемента.
showActionspublic showActions(): voidПоказывает меню действий блока.
hideActionspublic hideActions(): voidСкрывает меню действий блока.
createItempublic createItem(content?: string | unknown, index?: number, skipEvents?: boolean): booleanСоздаёт новый элемент списка.
removeItempublic removeItem(index?: number): booleanУдаляет элемент списка.
getItempublic getItem(index: number): HTMLElement | nullВозвращает элемент списка по индексу.
getItemspublic getItems(): HTMLElement[]Возвращает массив всех элементов списка.
getItemBodypublic getItemBody(index: number): HTMLElement | nullВозвращает тело элемента списка по индексу.
moveItempublic moveItem(index: number, targetIndex: number, skipEvents?: boolean): voidПеремещает элемент списка на новую позицию.
getItemsLengthpublic getItemsLength(): numberВозвращает количество элементов в списке.
canCreateItempublic canCreateItem(): booleanПроверяет, можно ли создать новый элемент без превышения лимита.
isEmptypublic isEmpty(): booleanПроверяет, пуст ли блок.
isEmptyItempublic isEmptyItem(index: number): booleanПроверяет, пуст ли конкретный элемент списка.
isEmptyDetectpublic isEmptyDetect(): booleanПроверяет, включено ли обнаружение пустых блоков.
isBackspaceRemovepublic isBackspaceRemove(): booleanПроверяет, удаляется ли блок при нажатии Backspace.
isEditablepublic isEditable(): booleanПроверяет, редактируемо ли содержимое блока.
isEditableItemspublic isEditableItems(): booleanПроверяет, редактируемы ли элементы списка.
isRawpublic isRaw(): booleanПроверяет, обрабатывается ли содержимое как сырой текст.
isNormalizepublic isNormalize(): booleanПроверяет, включена ли нормализация содержимого.
isSingleItempublic isSingleItem(): booleanПроверяет, поддерживает ли блок только один элемент списка.
isConvertiblepublic isConvertible(): booleanПроверяет, можно ли конвертировать блок.
isCustomSavepublic isCustomSave(): booleanПроверяет, включено ли пользовательское сохранение.
isVisibleToolspublic isVisibleTools(): booleanПроверяет, отображаются ли инструменты блока.
getAvailableToolspublic getAvailableTools(): string[]Возвращает массив доступных инструментов.
isSanitizerpublic isSanitizer(): booleanПроверяет, включена ли очистка HTML.
sanitizepublic sanitize(): voidОчищает элемент блока от небезопасного HTML.
toNormalizepublic toNormalize(): BlockElement | HTMLElement | HTMLElement[] | nullВозвращает элемент для нормализации.
toSanitizepublic toSanitize(): BlockElement | HTMLElement | HTMLElement[] | nullВозвращает элемент для очистки.
getSanitizerConfigpublic getSanitizerConfig(): SanitizerConfigВозвращает конфигурацию очистителя HTML.
getToastsClassNamepublic getToastsClassName(): stringВозвращает имя CSS-класса для уведомлений.
getToastTimeoutpublic getToastTimeout(): numberВозвращает время автоматического скрытия уведомлений в миллисекундах.
toastspublic toasts(): ToastsВозвращает экземпляр сервиса уведомлений.

Защищённые и статические методы BlockModel

ФункцияСигнатураОписание
setuppublic static setup(config: Partial<BlockModelConfig>): BlockModelConstructorУстанавливает глобальную конфигурацию для модели.
parentConfigprotected parentConfig(): Partial<BlockModelConfig>Возвращает конфигурацию родительской модели.
parentOnCreateElementprotected parentOnCreateElement(el: BlockElement): voidРодительский хук, вызываемый после создания элемента модели.
refreshSortableItemsprotected refreshSortableItems(): voidОбновляет функциональность сортируемых элементов.
composeprotected compose(createSchema?: BlockCreateSchema): BlockElementФормирует содержимое из схемы перед монтированием.
onComposeprotected onCompose(_createSchema?: BlockCreateSchema): voidХук, вызываемый после завершения компоновки.
parseprotected parse(item: BlockSchema): BlockCreateSchemaПарсит схему блока, подготавливая её для компоновки.
mergeprotected merge(): HTMLElement | nullМетод обработки объединения блока с соседним блоком.
makeItemDragZoneprotected makeItemDragZone(): HTMLSpanElementСоздаёт зону перетаскивания для элемента списка.
makeItemElementprotected makeItemElement(content: string | unknown = ''): HTMLElementСоздаёт элемент списка.
saveprotected save(blockSchema: BlockSchema, _blockElement?: BlockElement): BlockSchemaСохраняет данные блока в формат вывода.
parentOnMountprotected parentOnMount(): voidРодительский хук, вызываемый после монтирования в DOM.
onPasteprotected onPaste(_evt: Event, _map: PasteMap): booleanОбрабатывает событие вставки.
onKeyDownprotected onKeyDown(_evt: KeyboardEvent): booleanОбрабатывает событие нажатия клавиши.
onKeyUpprotected onKeyUp(_evt: KeyboardEvent): booleanОбрабатывает событие отпускания клавиши.
onFocusprotected onFocus(_evt: FocusEvent): booleanОбрабатывает событие фокусировки.
onBlurprotected onBlur(_evt: FocusEvent): booleanОбрабатывает событие потери фокуса.
onSelectionChangeprotected onSelectionChange(_evt: Event, _range: Range): booleanОбрабатывает событие изменения выделения.
onDragStartprotected onDragStart(_evt: DragEvent): booleanОбрабатывает событие начала перетаскивания.
onDragLeaveprotected onDragLeave(_evt: DragEvent): booleanОбрабатывает событие покидания зоны перетаскивания.
onDragOverprotected onDragOver(_evt: DragEvent): booleanОбрабатывает событие перетаскивания над зоной.
onDragprotected onDrag(_evt: DragEvent): booleanОбрабатывает событие перетаскивания.
onDragEndprotected onDragEnd(_evt: DragEvent): booleanОбрабатывает событие завершения перетаскивания.
onDropprotected onDrop(_evt: DragEvent): booleanОбрабатывает событие сброса.
beforeConvertprotected beforeConvert(blockElement: BlockElement, targetModel: BlockModel): [BlockElement, BlockModel]Хук, вызываемый перед конвертацией блока.
afterConvertprotected afterConvert(newBlockElement: BlockElement): BlockElementХук, вызываемый после конвертации блока.
parentDestroyprotected 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

ФункцияСигнатураОписание
isToggleActivepublic isToggleActive(): booleanПроверяет, переключает ли расширение активное состояние при клике.
getGroupNamepublic getGroupName(): stringВозвращает имя группы.

Защищённые и статические методы ExtensionModel

ФункцияСигнатураОписание
setuppublic static setup(config: Partial<ExtensionModelConfig>): ExtensionModelConstructorУстанавливает глобальную конфигурацию для модели.
parentConfigprotected parentConfig(): Partial<ExtensionModelConfig>Возвращает конфигурацию родительской модели.
parentOnClickprotected 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

ФункцияСигнатураОписание
getBlockElementpublic getBlockElement(): BlockElement | nullВозвращает родительский элемент блока, связанный с этим инструментом.
getTagNamepublic getTagName(): stringВозвращает имя тега инструмента для форматирования.
formatpublic format(): voidПрименяет форматирование к выделенному содержимому.
forcedFormatpublic forcedFormat(): voidПринудительно создаёт форматирование на выделенном содержимом.
removeFormatpublic removeFormat(): voidУдаляет форматирование из выделенного содержимого.
isOverridepublic isOverride(): booleanПроверяет, является ли тег инструмента переопределяемым.

Защищённые и статические методы ToolModel

ФункцияСигнатураОписание
setuppublic static setup(config: Partial<ToolModelConfig>): ToolModelConstructorУстанавливает глобальную конфигурацию для модели.
parentConfigprotected parentConfig(): Partial<ToolModelConfig>Возвращает конфигурацию родительской модели.
onFormatprotected onFormat(_tags: HTMLElement[]): voidХук, вызываемый после применения форматирования.
onClickprotected onClick(_evt: MouseEvent): voidОбрабатывает событие клика.
isVisibleprotected 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

ФункцияСигнатураОписание
getItemElementpublic getItemElement(): FileItemElement | nullВозвращает элемент файла, связанный с этим действием.
getBlockElementpublic getBlockElement(): BlockElement | nullВозвращает родительский элемент блока, связанный с этим действием.

Защищённые и статические методы FileActionModel

ФункцияСигнатураОписание
setuppublic static setup(config: Partial<FileActionModelConfig>): FileActionModelConstructorУстанавливает глобальную конфигурацию для модели.
parentConfigprotected 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;
}

dev@priveted.com | priveted.com