Interface: BaseControl
Базовый интерфейс для всех элементов пользовательского интерфейса редактора.
Определяет общую функциональность и структуру для всех UI компонентов, включая кнопки, пункты меню, селекторы, индикаторы и другие элементы управления.
Объединяет функциональность из четырёх базовых интерфейсов для обеспечения единообразия и совместимости всех UI элементов.
Remarks
Иерархия интерфейсов:
BaseControl (текущий интерфейс)
├── extends BaseUiElement
│ ├── id: string (обязательно)
│ ├── onClick?: Callback (опционально)
│ └── ...
├── extends HasTitle
│ └── title: string (обязательно)
├── extends MayHaveOrder
│ └── order?: number (опционально)
└── extends MayHaveGroupingId
└── groupingId?: string (опционально)
Компоненты, использующие BaseControl:
- SimpleContextMenuItem — пункты контекстного меню
- BaseContextMenuItem — базовые пункты контекстного меню
- Кнопки в панели инструментов
- Элементы боковых панелей
- Селекторы и выпадающие списки
- Пункты в основном меню
Обязательные свойства:
id— уникальный идентификатор элементаtitle— текст, отображаемый пользователю
Опциональные свойства:
onClick?— обработчик события кликаorder?— порядок отображения элементаgroupingId?— идентификатор группы для группировки элементов
Когда использовать BaseControl:
- Это базовый интерфейс, используемый внутренне другими интерфейсами
- Прямое использование редко, обычно используются более специфичные интерфейсы
- Расширение для создания кастомных UI компонентов
Example
Элемент, использующий BaseControl
const button: SimpleContextMenuItem = {
id: 'plugin:my-button', // от BaseUiElement
title: 'Моя кнопка', // от HasTitle
order: 10, // от MayHaveOrder
groupingId: 'plugin_actions', // от MayHaveGroupingId
onClick: editorApi.createCallback(() => {
console.log('Кнопка нажата');
})
};
editorApi.ui.contextMenu.addItems([button]);
Структура наследуемых свойств
// BaseUiElement: базовые свойства элемента
{
id: 'plugin:element',
onClick: callback
}
// HasTitle: название элемента
{
title: 'Название элемента'
}
// MayHaveOrder: порядок отображения
{
order: 100
}
// MayHaveGroupingId: группировка элементов
{
groupingId: 'group_name'
}
Разные типы UI элементов с BaseControl
// Пункт контекстного меню (использует BaseControl через SimpleContextMenuItem)
const menuItem: SimpleContextMenuItem = {
id: 'plugin:menu-item',
title: 'Пункт меню',
groupingId: 'plugin_menu',
onClick: editorApi.createCallback(() => {})
};
// Кнопка в панели инструментов (использует BaseControl через RibbonButton)
const button: Button = {
id: 'plugin:button',
title: 'Кнопка',
order: 1,
onClick: editorApi.createCallback(() => {})
};
// Элемент в боковой панели (использует BaseControl)
const panelItem = {
id: 'plugin:panel-item',
title: 'Элемент панели',
groupingId: 'plugin_panel',
order: 5,
onClick: editorApi.createCallback(() => {})
};
Общие принципы для всех UI элементов:
- id должен быть уникален в контексте надстройки
- title должен быть понятным и лаконичным
- order используется для сортировки элементов (меньше — выше/левее)
- groupingId используется для визуальной группировки однотипных элементов
- onClick содержит логику при клике пользователя
Рекомендации дизайна:
- Используйте единообразные ID для похожих элементов
- Группируйте связанные элементы с одинаковым groupingId
- Используйте order для логичного расположения элементов
- Используйте понятные названия в title
See
- BaseUiElement — базовые свойства с id и onClick
- HasTitle — интерфейс для элементов с названием
- MayHaveOrder — интерфейс для опционального порядка
- MayHaveGroupingId — интерфейс для опциональной группировки
- SimpleContextMenuItem — реальное использование BaseControl
- BaseContextMenuItem — пример наследования BaseControl
Extends
Extended by
Properties
groupingId?
readonlyoptionalgroupingId:string
Идентификатор группы, к которой относится элемент.
Remarks
Поведение:
- Элементы с одинаковым groupingId визуально группируются
- Между группами (разные groupingId) отображается разделитель
- Элементы без groupingId не группируются
- Порядок групп определяется order первого элемента в группе
Example
[
{ id: 'copy', title: 'Copy', groupingId: 'clipboard' },
{ id: 'cut', title: 'Cut', groupingId: 'clipboard' },
{ id: 'paste', title: 'Paste', groupingId: 'clipboard' },
// Разделитель добавляется автоматически
{ id: 'delete', title: 'Delete', groupingId: 'edit' }
]
Inherited from
id
readonlyid:string
Уникальный идентификатор элемента пользовательского интерфейса.
Remarks
Требования:
- Должен быть уникален среди всех элементов UI редактора
- Не может быть пустой строкой
- Не может содержать спецсимволы (кроме :, -, _)
- Чувствителен к регистру (case-sensitive)
Использование:
- Идентификация элемента при обновлении
- Идентификация элемента при событиях
- Ссылка на элемент в других местах кода
Соглашения:
'plugin:button:save' // Кнопка надстройки
'plugin:input:username' // Поле ввода
'plugin:panel:settings' // Панель параметров
'plugin:group:formatting' // Группа элементов
Example
// Создание элемента с уникальным id
{
id: 'plugin:button:submit',
title: 'Отправить',
type: 'button'
}
// Использование id для обновления
editorApi.ui.updateUiNodes([
{
id: 'plugin:button:submit',
disabled: false,
}
]);
// Использование id для удаления
editorApi.ui.ribbon.removeTabs(['plugin:ribbon:tab']);
Inherited from
title
readonlytitle:string
Название/заголовок элемента пользовательского интерфейса.
Remarks
Требования:
- Должен быть локализирован (переведён на язык пользователя)
- Должен быть понятным и кратким
- Не должен быть пустой строкой
- Может содержать спецсимволы (кроме < и >)
Примеры:
- "Сохранить документ"
- "Экспортировать в PDF"
- "Параметры надстройки"
- "Об приложении"
Советы:
- Используйте глаголы для действий (Сохранить, Удалить)
- Используйте существительные для панелей (Параметры, Информация)
- Сохраняйте названия короткими
- Будьте конкретными (не просто "Опции", а "Параметры надстройки")
Example
{
id: 'button:save',
title: 'Сохранить',
type: 'button'
}