Плагин

Конфигурация редактора

Конфигурация задаётся объектом с несколькими уровнями вложенности: внешний вид редактора, стартовое содержимое и обработчики событий.

Повторный вызов init на тот же DOM-элемент внутри приводит к reset с новыми опциями — не запускайте параллельно два init на один контейнер.

element

Строка-селектор, Element или DocumentFragment: контейнер, куда монтируется редактор. Если элемент не задан, приложение может работать в фоновом режиме без видимого контейнера.

content

Секция content задаёт данные для редактора. Варианты:

{string}
HTML-разметка письма.

{object} параметры письма

{
  id?: string; // Уникальный ID письма в вашей системе.
  html?: string; // HTML письма.
  subject?: string; // Тема письма.
  preheader?: string; // Прехедер.
}

{object} шаблон, блоки, комментарии

{
  templateId?: string | number; // ID шаблона в EmailMaker.
  email?: object; // параметры письма (см. выше).
  blocks?: []; // блоки.
  comments?: []; // комментарии к письму.
}

Сменить контент после инициализации: instance.show(content).

Стили контента (commonStyles)

Не путать с config: объект commonStyles передаётся на верхнем уровне init / reset (тип ExportedApi.AppConfigMixin.Options).

  • Дефолт из сборки: именованный экспорт COMMON_STYLES (см. исходник src/constants/commonStyles.defaults.ts, там же подробный JSDoc для IDE).
  • Частичное переопределение: можно передать только нужные ветки (например { block: { backgroundColor: '#000' } }) — приложение сливает их с COMMON_STYLES, чтобы панель «Стили контента», iframe и список общих блоков не ломались на «дырах» в объекте.
  • Приоритет: сохранённое email.common_styles важнее, чем init.commonStyles.
  • Сброс сохранённого в сторе плагина override: commonStyles: undefined в reset или updateConfig (с ключом).
  • Вкладка в UI: флаг config.commonStylesEnabled (часто true по умолчанию).

Полное описание: docs/plugin-content-styles.md в репозитории EmailMaker.

config

Настройки UI редактора. После init используйте instance.setConfiginstance.updateConfig и instance.getConfig — не методы объекта emailmaker.

Список параметров секции config

ПараметрОписаниеЗначение по умолчанию
themeТема плагина: light, dark.light
autosaveTimeoutЗадержка перед автосохранением, мс.10000
mergeTagsJSON со списком динамических переменных.undefined
stylesСтрока со стилями в формате CSS.»
headerShowПоказ шапки.true
headerArrowBackVisibleПоказ стрелки «Назад».true
headerTitleVisibleПоказ поля «Тема».true
headerPreheaderVisibleПоказ поля «Прехедер».true
historyEnabledПоказ кнопки «История версий».true
codeEnabledПоказ кнопки «Code-mode».true
codeModeDirectionРежим показа редактора кода по умолчаниюnone
codeSideEnabledПоказ кнопки «Code-mode» в режиме, когда есть переключатель десктоп/мобайл.true
previewIconEnabledПоказ кнопки «Предпросмотр».true
previewModeEnabledСсылка на Предпросмотр.true
livePreviewEnabledПоказ кнопки «Тестировние в почтовиках».true
sendTestEnabledПоказ кнопки «Отправить тест».true
sharePreviewEnabledПоказ кнопки «Поделиться».true
webversionEnabledПоказ ссылки на веб-версию.true
commonStylesEnabledПоказ стилей контента.true
emailResponsiveControlEnabledПоказ переключателя адаптивности письма.true
templateNotEmAlertShowПоказ уведомления о том, что шаблон не из EM.true
emailDropdownMenuEnabledПоказ меню письма.true
emailDropdownMenuCloneПоказ пункта «Клонировать».true
emailDropdownMenuImportПоказ пункта «Импортировать».true
emailDropdownMenuImportButtonПоказ пункта «Импортировать» кнопкойtrue
emailDropdownMenuLockПоказ пункта «Заблокировать».true
emailDropdownMenuRemoveПоказ пункта «Удалить».true
emailExportEnabledПоказ кнопки «Экспорт».true
exportHtmlEnabledЭкспорт в HTML.true
exportZipEnabledЭкспорт в ZIP.true
exportClipboardEnabledЭкспорт в буфер.true
exportWebHookEnabledЭкспорт в вебхук.true
exportOutlookEnabledЭкспорт в Outlook.true
exportPdfEnabledЭкспорт в PDF.true
exportPngEnabledЭкспорт в PNG.true
nextButtonEnabledПоказ второстепенной кнопки.false
nextButtonTextТекст на второстепенной кнопке.»
saveButtonEnabledПоказ основной кнопки.true
saveButtonTextТекст основной кнопки.»
commandButtonsEnabledПоказ основной и второстепенной кнопки.true
sidePanelFloatingПлавающая боковая панель.true
desktopMobileSwitchRuleПолоса переключения режимов.true
desktopMobileSwitchPanelПанель переключения режимов.false
onlyCodeModeInMobileвывод в мобиле только кода.false
pathEnabledПоказ хлебных крошек.true
copyPasteEnabledПоказ копирования-вставки блока в iframe.true
saveBlockEnabledПоказ кнопки сохранения блока.true
editImageControlEnabledПоказ кнопки редактирования изображения.true
menuDirectionРасположение боковой панели.‘right’
defaultBuildPanelНастройка открывающейся вкладки по умолчанию.’empty’/’project’/’common’/’template’
commentsEnabledПоказ кнопки «Комментарии».true
aiAssistentEnabledПоказ «AI ассистента».true
optimizeEnabledПоказ кнопки «Оптимизация».true
optimizeLinksEnabledПоказ проверки ссылок.true
optimizeImagesEnabledПоказ проверки картинок.true
optimizeSpamAssassinEnabledПоказ проверки SpamAssassin.true
optimizeCheckCodeEnabledПоказ проверки кода.true
settingsEnabledПоказ кнопки «Настройки».true
UTMEnabledПоказ таба UTM-метки.true
descriptionEnabledПоказ поля «Описание» в настройках.true
tagsEnabledПоказ поля Теги в настройках.true
switchDesktopMobilePropsEnabledПоказ переключателя мобильных свойств.true
stepToOtherElementEnabledПоказ кнопок перехода к другим элементам.true
deleteButtonEnabledПоказ кнопки удаления элемента.true
toggleSidePanelВозможность схлопывать боковую панель.true
blocksSectionsShowПоказ меню блоков.true
blocksEmptyEnabledПоказ пустых блоков.true
blocksSavedEnabledПоказ сохранённых блоков.true
blocksCommonEnabledПоказ общих блоков.true
blocksTemplateEnabledПоказ блоков шаблона.true
blocksSearchEnabledПоказ поиска по блокам.true
blocksAddPanelEnabledПоказ панели добавления блока в визуальном редакторе.true
imagePathDropdownEnabledПоказ выпадашки с путём к изображению.true
formFieldImageTitleEnabledПоказ поля title в форме картинки.true
formFieldBorderEnabledПоказ полей изменения рамки.true
formFieldBorderRadiusEnabledПоказ полей изменения скругления.true
formFieldBoxShadowEnabledПоказ полей изменения тени.true
formFieldVisibilityEnabledПоказ кнопок изменения видимости элемента.true
formFieldExportAsPictureEnabledПоказ переключателя экспорт в картинку.true
formButtonFieldInsertImageEnabledПоказ кнопки вставки изображения в текст у кнопки.true
formButtonFieldVerticalAlignEnabledПоказ кнопок вертикального выравнивания у кнопки.true
formButtonFieldTextAlignEnabledПоказ кнопок выравнивания текста у кнопки.true
formButtonFieldBackgroundImageEnabledПоказ полей фонового изображения у кнопки.true
formButtonFieldPaddingsEnabledПоказ полей внутренних отступов у кнопки.true
formButtonFieldReplacerEnabledПоказ реплейсера у кнопки.true
formCellFieldVerticalAlignEnabledПоказ кнопок вертикального выравнивания у ячейки.true
formCellFieldBackgroundImageEnabledПоказ полей фонового изображения у ячейки.true
formCellFieldPaddingsEnabledПоказ полей внутренних отступов у ячейки.true
formCellFieldSizeEnabledПоказ полей ширины и высоты.true
formImageFieldVerticalAlignEnabledПоказ кнопок вертикального выравнивания у картинки.true
formImageFieldReplacerEnabledПоказ кнопок вертикального выравнивания у картинки.true
formImageFieldHeightEnabledПоказ поля высоты у картинки.true
formTableFieldBackgroundImageEnabledПоказ полей фонового изображения у таблицы.true
formDivFieldBackgroundImageEnabledПоказ полей фонового изображения у контейнера.true
formEmailFieldBackgroundImageEnabledПоказ полей фонового изображения у письма.true
formTextFieldTypografEnabledПоказ кнопки типографа.true
formTextFieldReplacerEnabledПоказ кнопки реплейсера.true
elementImageEnabledЭлемент Картинка.true
elementTextEnabledЭлемент Текст.true
elementHeaderEnabledЭлемент Заголовок.true
elementButtonEnabledЭлемент Кнопка.true
elementListULEnabledЭлемент Список UL.true
elementListOLEnabledЭлемент Список OL.true
elementDividerEnabledЭлемент Разделитель.true
elementSpacerEnabledЭлемент Отступ.true
elementSocialEnabledЭлемент Соцсетиtrue
elementTableEnabledЭлемент Таблица.true
elementCountdownEnabledЭлемент Счётчик.true
elementVideoEnabledЭлемент Видео.true
elementAIimageEnabledЭлемент AI картинка.true
elementAItextEnabledЭлемент AI текст.true
elementCarouselEnabledЭлемент AMP карусель.true
elementAccordionEnabledЭлемент AMP аккордион.true
elementFormEnabledЭлемент AMP форма.true
imageCenterLocalUploadEnabledПоле загрузки файла с компьютера в Image Center.true
imageCenterStockEnabledТаб Стока фотографий.true
imageCenterGifEnabledТаб Стока гифок.true
imageCenterEditorEnabledТаб редактора изображений.true
compressMaxSizeМакс. размер файла для клиентского сжатия в файловом менеджере, байт (по умолчанию порядка 5 MiB).см. типы
compressMaxWidthOrHeightМакс. ширина/высота после ресайза, px (по умолчанию 2000).см. типы

Обработка событий

Обработчики передаются в init({ ... }) или подписываются на экземпляре: instance.handle*(listener, priority?). Подписка обычно возвращает функцию отписки. Обработчики могут быть async.

События handleSaveEmailhandleSaveBlockhandleSaveComment получают не сырой объект, а SaveEventPayload{ patch, value, prev?, source? } — полезно сравнивать patch и итоговое value.

handleSubjectChanged и handlePreheaderChanged оформлены иначе: через них подписываются на строковые значения темы и прехедера — см. emailmaker.d.ts.

Пример

emailmaker.init({
  element: '#test',
  content: { email: { id: '1' } },
  getAuthToken,
  handleReadEmail: async (id) => fetchEmail(id),
  handleSaveEmail: async (payload) => saveEmail(payload.value),
}).then((instance) => {
  const unsubscribe = instance.handleEmailChanged(async () => {
    /* ... */
  });
  /* unsubscribe(); */
});

События

ОбработчикОписание
handleReadEmailЗагрузка письма по id с вашего API (аргумент — строка id).
handleSaveEmailСохранение письма; полезная нагрузка — SaveEventPayload с value и patch.
handleRemoveEmailУдаление письма.
handleReadEmailRevisionsСписок автосохранений / ревизий для письма.
handleEmailAutosaveСоздано автосохранение (EmailRevision).
handleRemoveEmailAutoSaveУдалено автосохранение.
handleReadBlocksСписок блоков проекта.
handleReadCommonBlocksОбщие блоки.
handleReadTemplateBlocksБлоки шаблона в контексте письма.
handleSaveBlockСохранение блока (SaveEventPayload).
handleRemoveBlockУдаление блока.
handleReadCommentsКомментарии к письму.
handleSaveCommentСохранение комментария.
handleRemoveCommentУдаление комментария.
handleSaveButtonClickКлик по основной кнопке (например «Сохранить»).
handleNextButtonClickКлик по «Далее».
handlePreviousButtonClickКлик «Назад» в шапке.
handleEmailInitИнициализирован контур письма.
handleEmailChangedИзменился параметр письма.
handleHtmlChangedИзменился HTML-код.
handleSubjectChangedИзменилась тема (особая подпись — см. типы).
handlePreheaderChangedИзменился прехедер (особая подпись — см. типы).
handleCloneEmailКлонирование письма.
handleShareEmailПоделиться.
handleLivePreviewEmailЖивой предпросмотр.
handlePreviewEmailПредпросмотр.
handleValidateРезультат проверки кода (CodeError[]).
handleTestEmailSendОтправка тестового письма.
handleTestEmailModalОткрыто окно тестовой отправки.
handleDestroyПеред уничтожением экземпляра.
handleLoadЗавершена загрузка экземпляра; можно безопасно вызывать getEmail и др.
handleLoadImageЗагрузка изображения пользователем; handleFileProxyhandleUrlProxy — прокси файлов/URL при необходимости.
handleNotifyПроизвольное уведомление.
handleErrorОшибка (можно переопределить UI).
handleSuccessУспешная операция.
handleReadLocaleЯзык интерфейса (AppConfigMixin).
handleTranslateПользовательский перевод строк.
handleLimitUsageОтображение квот / лимитов.

Полный перечень и сигнатуры — в emailmaker.d.ts (ExportedApi.DataMixin.Events и смежные миксины).

Методы

Модуль экспортирует init (и именованные символы в ESM). Остальное — методы экземпляра после await emailmaker.init(...).

МетодОписание
initАсинхронная инициализация: Promise<Instance>.
showПодмена контента (строка или объект Content).
saveСохранить текущее письмо по цепочке приложения.
getEmailТекущее письмо; для скомпилированных полей см. compileEmail / CompiledEmail.
compileEmailЯвная компиляция HTML/AMP/текста; опционально email и флаги форматов.
setEmailMetaОбновить meta текущего письма без полной замены.
getBlocksБлоки в текущем контексте.
getCommentsКомментарии.
getEmailRevisionsРевизии / автосохранения.
getCodeErrorsОшибки линтера кода в редакторе.
getConfigТекущий config.
setConfigПолная замена настроек UI.
updateConfigГлубокое слияние с текущим config.
notifyПоказать уведомление (строка или объект).
getElementDOM-узел или фрагмент монтирования.
destroyУничтожить экземпляр (вызывайте при размонтировании в SPA).
resetПереинициализация с новыми Options (Promise<Instance>).
undoRedoServiceСервис отмены/повтора (undoredo, снимки истории и др.).