Перейти к содержанию

События и подключение редактора к приложению

Через события можно настроить интерфейс, выбрать файлы и подключить расширения. Приложение подписывается на них, сохраняет документ и снимает обработчики при закрытии редактора.

События браузера

Добавьте обработчики до создания редактора. Если событие передаёт 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>, созданный вашим приложением. Зарегистрируйте обработчик до запуска этого редактора:

JavaScript
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.