События и подключение редактора к приложению
Через события можно настроить интерфейс, выбрать файлы и подключить расширения. Приложение подписывается на них, сохраняет документ и снимает обработчики при закрытии редактора.
События браузера
Добавьте обработчики до создания редактора. Если событие передаёт editorElement, сравните его со своим элементом: на странице могут быть другие редакторы. При закрытии снимите обработчики. Ответ, который пришёл уже после закрытия, не применяйте.
| Событие | Данные и назначение |
|---|---|
glit:collect-button-variants |
Варианты кнопок: editorElement?, siteId?, variants, методы registerButtonVariant(s), removeButtonVariant, setButtonVariants |
glit:collect-font-families |
Шрифты: editorElement?, siteId?, fonts, методы registerFontFamily, registerFontFamilies, removeFontFamily, setFontFamilies |
glit:collect-components |
Прежний механизм регистрации элементов панели вставки: elements, registerElement, registerElements |
glit:collect-content-templates |
Регистрация шаблонов через ContentTemplateRegistryApi |
glit-wysiwyg-extensions-status |
Состояние загрузки: state со значением loading, ready или error; необязательные digest и message |
update на элементе редактора |
Новые html и json, которые приложение передаёт своему механизму сохранения |
imageRequest, videoRequest |
Запрос открытия окна выбора файла; содержит requestId |
imagePickerAcknowledged, videoPickerAcknowledged |
Подтверждение получения запроса с тем же requestId |
imageResponse, videoResponse |
Результат выбора: requestId, необязательные data, message, status |
Полные типы находятся в browser-globals.d.ts и editor-element.ts из архива контрактов. Знак ? обозначает необязательное поле.
Пример: шрифт для одного редактора
В примере editorElement — ссылка на конкретный элемент <glit-wysiwyg>, созданный вашим приложением. Зарегистрируйте обработчик до запуска этого редактора:
const onFonts = event => {
if (event.detail.editorElement !== editorElement) return;
event.detail.registerFontFamily({name: 'Проектный шрифт', value: 'Georgia'});
};
window.addEventListener('glit:collect-font-families', onFonts);
// При закрытии редактора вызовите:
// window.removeEventListener('glit:collect-font-families', onFonts);
Настраивайте каждый редактор отдельно. Глобальные переменные прежней интеграции задают общие значения для страницы и не подходят для нескольких независимых редакторов.
Стили блоков
Подключите CSS через приложение или пакет расширения. Начинайте селекторы с класса своего блока, например .project-notice, чтобы правила не меняли соседние блоки, другие редакторы и страницу сайта.
Серверные события расширений
Все события ниже принадлежат модулю globalit.wysiwyg. Параметр с индексом 0 содержит реестр либо контекст операции.
| Событие | Для чего используется |
|---|---|
GLOBALIT_WYSIWYG_COLLECT_RUNTIME_EXTENSIONS |
Регистрация манифестов через register() переданного ExtensionRegistry |
GLOBALIT_WYSIWYG_CONFIGURE_RUNTIME_EXTENSIONS |
Выбор расширений при открытии редактора |
GLOBALIT_WYSIWYG_CONFIGURE_IBLOCK_EXTENSIONS |
Применение или публикация содержимого поля Битрикс |
GLOBALIT_WYSIWYG_CONFIGURE_PREVIEW_EXTENSIONS |
Формирование серверного предпросмотра |
GLOBALIT_WYSIWYG_CONFIGURE_REGENERATION_EXTENSIONS |
Повторное формирование HTML в фоновой задаче; userId равен 0 |
GLOBALIT_WYSIWYG_CONFIGURE_TRANSFER_EXTENSIONS |
Перенос страницы |
GLOBALIT_WYSIWYG_CONFIGURE_PUBLIC_EXTENSIONS |
Публичный вывод компонента |
GLOBALIT_WYSIWYG_CONFIGURE_IBLOCK_PUBLIC_EXTENSIONS |
Публичный вывод поля Битрикс |
В ExtensionSelection доступны поля contentUid: string, siteId: string и userId: int; менять их нельзя. Метод configure(registry, enabledIds, authorize) выбирает пакеты и проверяет доступ. Затем snapshot() возвращает полученную конфигурацию.
Функция authorize(id, version, context) вызывается для каждого пакета, включая зависимости. Чтобы разрешить пакет, она должна вернуть true. Пример обработчика есть в Runtime SDK.
Проверки для фоновых задач и анонимных посетителей настройте отдельно. В этих вызовах нет пользователя, который редактирует документ, и проверка из обработчика открытия редактора здесь не подходит. Точные типы контекстов публичного вывода и преобразования документов лежат в архиве PHP-контрактов.
Провайдеры, права и ресурсы страницы
| Событие | Назначение |
|---|---|
GLOBALIT_WYSIWYG_COLLECT_ENTITY_PROVIDERS |
Регистрация EntityProviderDefinition |
GLOBALIT_WYSIWYG_RESOLVE_ENTITY_EDITOR_SITE |
Сайт документа в редакторе, если стандартный способ его не определил |
GLOBALIT_WYSIWYG_RESOLVE_ENTITY_PUBLIC_SITE |
Сайт для публичного вывода при том же условии |
OnCheckContentAccess |
Проверка доступа к редактированию или предпросмотру; ответ ERROR имеет приоритет |
OnCollectEditorSiteShellAssets |
Подключение скриптов и стилей оформления сайта к редактору |
GLOBALIT_WYSIWYG_ON_PUBLIC_CACHE_INVALIDATE |
Уведомление об изменении опубликованного содержимого для очистки внешнего кеша |
В обработчике смотрите на документ, его версию и права пользователя. SUCCESS возвращайте только после проверки доступа, а не на любой запрос. Типы провайдеров и правила их использования описаны в справочнике Provider SDK.