Как работает просмотр
Абзац с жирным и ссылкой.
Цитата живёт в blockquote.
- Планирование
- Собрать требования
- Разработка
const a = 1
const b = 2После разделителя — обычный абзац.
Слева правится, справа читается. Разметка просмотра семантическая и без служебных узлов правки.
Абзац с жирным и ссылкой.
Цитата живёт в blockquote.
const a = 1
const b = 2После разделителя — обычный абзац.
Типы блоков: header → paragraph → quote → list → raw → delimiter → paragraph
Режим a — те <a>, режим router — внутренний адрес через NuxtLink.
Внутренний и наружный адрес.
Внутренний и наружный адрес.
Типа нет в реестре — содержимое остаётся: его рисует запасное представление.
Ниже блок типа, которого в реестре нет.
Набор, который надо сохранить
Семантическому тегу роль не нужна — имя у него есть по умолчанию. Произвольному div доступное имя даётся через роль region, иначе скринридер его не прочитает.
Контейнер — article с aria-label.
Контейнер — article с aria-label.
Цитата того же документа рисуется своим компонентом, остальные типы остаются встроенными.
Абзац с жирным и ссылкой.
const a = 1
const b = 2После разделителя — обычный абзац.
Слот заменяет представления всех блоков: сюда приходит блок, его индекс и режим ссылок.
0headerКак работает просмотр
1paragraphАбзац с жирным и ссылкой.
2quoteЦитата живёт в blockquote.
3list
4rawconst a = 1 const b = 2
5delimiter
6paragraphПосле разделителя — обычный абзац.
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
value | C3EditorValue | undefined | Документ редактора — значение v-model компонента C3Editor. У пустого или битого значения ничего не рендерится. |
tag | string | 'div' | Тег контейнера: article для статьи, section для раздела. |
links | 'a' | 'router' | 'a' | Как рисовать ссылки. router отдаёт внутренний адрес компонентом NuxtLink, наружный остаётся <a>. |
views | Record<string, Component> | undefined | Представления типов блоков: компонент, который рисует этот тип вместо встроенного. |
ariaLabel | string | undefined | Доступное имя контейнера. Несемантическому тегу добавляется роль region. |
Событий и v-model нет: просмотр только читает значение.
Компонент C3EditorView показывает значение блочного редактора как читаемый текст: <p>, <h1>…<h6>, <blockquote>, вложенные <ul>/<ol>, <pre><code> и <hr>. Начертания из data.marks разворачиваются в <strong>, <em>, <code> и <a>.
Разметка строится компонентами, без v-html: значение проходит тот же разбор, что и редактор (normalizeDocument), поэтому вид при наборе и вид в статье не расходятся. Служебные узлы правки — contenteditable, плейсхолдеры, классы блоков — в чтение не попадают.
Для отображения текста письма или SEO берите тот же value и рендерите его этим компонентом.
#block — единственный слот. Параметры: block (блок документа), index (порядковый номер) и links (режим ссылок просмотра). paragraph, header, quote, list, raw, delimiter. Компоненты — C3EditorBlockParagraph, C3EditorBlockHeader, C3EditorBlockQuote, C3EditorBlockList, C3EditorBlockRaw, C3EditorBlockDelimiter, запасное C3EditorBlockUnknown. Каждому передаётся контракт { data, links }. C3EditorInline (текст с начертаниями), C3EditorInlineMark (фрагмент с одним набором начертаний), C3EditorListBranch (ветка списка). Их можно использовать отдельно. :is имя компонента модуля не разрешает. Тег блока меняется слотом #block. http, https, mailto, tel и относительные пути; javascript: и data: ссылкой не становятся. Метка языка блока кода попадает в класс только если это короткое имя без служебных символов. region с доступным именем; заголовки строят оглавление документа, список сохраняет уровни в атрибуте data-level. assets/styles/components/editor-view.scss, только переменные --c3-* и логические свойства, поэтому работают в RTL и тёмной теме.