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