Olddevs UI3.38.0
Рецепты

Спойлер: свой Блок и Остров в Просмотре

Блок, который в Редакторе — просто текст в рамке, а в RichTextView прячется за кнопкой.

RichTextView показывает Документ очищенным HTML и движка не грузит. Чтобы свой Блок в показе что-то делал — раскрывался, играл видео, считал голоса, — ему дают Остров: клиентский компонент в поле island правил Схемы.

The butler did not do it.

It was the gardener all along.

Слева Редактор, справа RichTextView того же Документа. Превратите абзац в спойлер через «¶» или «/» — справа появится кнопка.

Как устроено

  • Один массив tools на всё. Редактор, серверная очистка (sanitizeRichText(html, DOMPurify, tools)) и Просмотр получают то же описание. Просмотр берёт из него только Острова.
  • Остров получает данные, а не HTML: имя Блока, его объявленные атрибуты и text — текст Блока из серверного HTML.
  • Серверный HTML виден всегда. До гидратации, без JS и пока грузится код Острова читатель видит содержимое Блока как оно сохранено.
  • island — компонент из модуля с "use client". Через границу серверных компонентов проходит только ссылка на него; код Острова грузится, лишь когда такой Блок есть в Документе.
  • turnInto: true — Признак «можно превратить в»: пункт из раздела turnInto стоит в «¶», «/» и «Формат ›» Ручки.

RichTextView не чистит HTML. В приложении Документ очищается на сервере при сохранении тем же tools; в примере HTML приходит прямо из Редактора.

На этой странице