Структурированный текст
Текст заголовков и абзацев хранится не строкой HTML, а маленьким деревом:
- отрезок текста
{"type": "text", "value": "…"}с необязательными отметкамиmarks:strong,em,code; - ссылка
{"type": "link", "href": "…", "children": [...]}, внутри которой — только отрезки текста.
Пример ниже показывает абзац со ссылкой, текст которой выделен жирным:
{"id": "lead", "type": "content.paragraph", "data": {"content": [
{"type": "text", "value": "Откройте "},
{"type": "link", "href": "/catalog/",
"children": [{"type": "text", "value": "каталог", "marks": ["strong"]}]}
]}}
Встроенный рендерер выводит этот абзац так:
<p data-sf-composition-id="lead">Откройте <a href="/catalog/"><strong>каталог</strong></a></p>
- Отметки становятся тегами
<strong>,<em>и<code>. Несколько отметок вкладываются в порядке списка: первая — внутренняя, поэтому"marks": ["strong", "code"]даёт<code><strong>…</strong></code>. - Ссылка выводится как
<a href="…">без классов и других атрибутов. - Заголовок и абзац не получают классов оформления: их вид задают стили текста по умолчанию и CSS страницы.
Framework экранирует текст перед выводом, поэтому редактору не нужно принимать произвольный HTML.
Правила адресов в ссылках:
- разрешены
http,https,mailto,tel, пути от корня и относительные пути (/,./,../) и якоря#; - остальное отклоняется с кодом
unsafe_url.
Исполняемые и файловые схемы отклоняются, как и адреса вида //host и адреса
с обратной косой чертой.
Структурированный текст применяют для заголовков и абзацев, которые правит человек, система управления сайтом или ИИ. Готовый HTML — только результат рендерера, а не исходные данные.
Модель структурированного текста содержит отрезки текста и ссылки. Для длинных материалов со списками и таблицами используется отдельный редактор содержимого.