Olddevs UI3.38.0
Справочник

Словарь Редактора

Термины RichTextEditor и RichTextView (@olddevs/ui/editor). В документации, ADR и комментариях кода они пишутся с большой буквы — так видно, что слово значит ровно то, что в таблице, а не обиходное «блок» или «метка». Одно понятие — одно слово: синоним из соседнего редактора (плагин, сервис, нода) заводит второй смысл, и разойдутся они молча. Новый термин Редактора попадает сюда в том же изменении, где появился.

ТерминЗначениеНе путать с
РедакторRichTextEditor — поле ввода форматированного текстаРедактором кода: его в ките нет, показ кода — CodeView
ПросмотрRichTextView — только чтение сохранённого ДокументаreadOnly-режимом Редактора: тот держит движок, Просмотр — нет
ДокументЗначение Редактора: HTML-строка, ограниченная СхемойJSON-деревом ProseMirror — оно внутреннее и наружу не выходит
СхемаБелый список Блоков, Меток и атрибутов, которые Редактор принимает и отдаётСанитизацией на сервере — её делает потребитель (sanitizeRichText)
БлокСтруктурный элемент Документа: абзац, заголовок, список, таблица, картинка…Меткой
МеткаСтрочное форматирование внутри Блока: жирный, ссылка, цвет…Блоком
АтомБлок или строчный элемент, который выделяется, переносится и удаляется целиком: картинка (подпись внутри неё правится), разделитель, мягкий перенос, упоминание. Всегда делает поле непустымПустым Блоком: абзац без текста — не атом и содержимым не считается
Текст атомаСтрока, которой атом представлен в тексте Документа: её отдают getText и getSelectedText, её длина — вес атома в maxLength, ею атом выгружается в Markdown без своих правил. У картинки — текст подписи, у разделителя — пустая строкаАтрибутом Блока
ПанельНабор кнопок форматирования. Фиксированная — над полем, липнет при прокрутке; плавающая — над выделениемToolbar кита — примитивом, из которого Панель собрана
Меню вставкиСписок «Добавить» и «Превратить в»: открывается по / в тексте и по кнопке «+»Контекстным меню браузера
Меню выделенияКороткая плашка над непустым выделением: «¶», частые Метки, «…», ссылкаПлавающей Панелью: у той полный набор кнопок
Ручка Блока«⋮» у Блока с кареткой и её меню действий над Блоком целиком: «Добавить ›», «Формат ›», «Вверх», «Вниз», «Дублировать», «Удалить»Панелью: та работает с выделением, а не с Блоком
Пункт вставкиСтрока Меню вставки: вставляет Блок или превращает текущий. Один пункт виден и по /, и по «+», и в Ручке БлокаКнопкой Панели
Действие над БлокомПункт меню Ручки Блока, который работает с Блоком целиком, например «Дублировать»Кнопкой: та работает с выделением
UI-записьЭлемент интерфейса своего Инструмента, описанный данными: кнопка, Пункт вставки, Действие над Блоком или Карточка у текста. Рисует её кит в Отведённом месте; выключенный Инструмент убирает и свои записиReact-узлом в интерфейсе: произвольный React допускается только в содержимом поповера кнопки и Карточки у текста
Отведённое местоОдно место на поверхности, где стоят записи своих Инструментов, в порядке tools: группа Панели перед «Отменить», конец раздела Меню вставки, секция Ручки Блока перед «Удалить»Позицией относительно встроенной кнопки: id встроенных публичным API не являются
ПресетГотовый набор встроенных Инструментов: full или basic (RICH_TEXT_PRESETS). Не замороженный список: новый встроенный приходит в него minor-версиейТочным списком tools: его состав меняет только экран
ИнструментОдна возможность Редактора: её Блоки и Метки, их правила в Схеме и место в интерфейсе, например table. Встроенный задаётся именем, свой — описаниемКнопкой: выключенный Инструмент убирает и Блок из Схемы. Плагином Redactor: тот — класс поведения над DOM без Схемы
Свой ИнструментИнструмент, который описывает потребитель (CustomTool): правила Схемы данными, Часть для движка и UI-записи. Передаётся в tools вперемешку с именами китаВнутренним описанием кита: то — надмножество публичной формы для встроенных, наружу не экспортируется
Префикс потребителяНачало имени всего своего — Инструмента, его Блоков, Меток и атрибутов — до подчёркивания: acme_mergeTag, data-acme_size. В именах кита подчёркивания нет, поэтому своё и встроенное не совпадают ни в наборе, ни в ДокументеПресетом: тот — набор встроенных Инструментов, а не пространство имён
HTML-соглашениеФорма своего в Документе: Блок — div или span с data-block, Метка — span с data-mark, атрибуты — data-<префикс>_<имя>. Заморожено: расширяется только добавлениемТегами Схемы кита (p, table, img): свой Блок их занять не может
Признак БлокаСвойство Блока, которое понимает только кит, а не движок: «контейнер» (детям своя Ручка), «можно превратить в», «атом без меню форматирования»Атрибутом Блока: тот хранится в Документе
Часть для движкаТо в описании Инструмента, что нужно только живому Редактору: расширения Tiptap и вид узла. Подаётся сразу или ЗагрузчикомПравилами Схемы: те — данные, их читают сервер и Просмотр без движка
ЗагрузчикФункция с динамическим импортом вместо Части для движка: engine: () => import(…). Так же грузятся тяжёлые встроенные вне basic — блок кода и таблицаПредзагрузкой (modulepreload): её кит не публикует, ставит потребитель
ХэндлИмперативный доступ кода экрана к Редактору через ref: вставка у каретки, чтение, фокус, историяСервисами Redactor: те — внутренности движка, а не API экрана
ГотовностьМомент, когда движок создан и Загрузчики всех включённых Инструментов, своих и встроенных, отработали: с него методы Хэндла действуют, а не молчат. Наступает один раз за монтаж, о нём сообщает onReadyГидратацией: после неё движок может ещё ждать Загрузчики
Фокус поляФокус внутри Редактора целиком: Документ, Панель, поповеры кита, поле HTML. Переход между ними Фокус поля не теряет; onFocus и onBlur — о нёмФокусом Документа (focus и blur движка): клик в Панель его снимает
Правка автораИзменение Документа, равное набору с клавиатуры: шаг истории, onChange после задержки, предел символов действует. Сюда же вставка, отмена и повтор из ХэндлаЗаменой снаружи
Замена снаружиПодмена Документа целиком (value, clear(), setMarkdown()): onChange сразу, предел символов не режетПравкой автора
СкелетВид Редактора до Готовности: рамка поля, место Панели и Документ, очищенный Схемой, статичным HTML с ритмом Просмотра, без ввода. На сервере — рамка без Документа. Сбой Загрузчика превращает Скелет в ошибку поля с «Повторить»Просмотром: тот — отдельный компонент только для чтения, а Скелет — состояние Редактора, которое сменяется движком. Компонентом Skeleton кита — заглушкой загрузки
Строка статусаСтрока внутри рамки поля под Документом: слева содержимое экрана (status: число слов, «Сохранено», соавтор), справа счётчик символов китаСообщением поля: строка показывает длительное состояние экрана, а не событие
Сообщение поляОдно событие, привязанное к полю (showNotice): тон status (только озвучивается) или error (видимая строка под полем до следующей Правки автора). Новое заменяет прежнееТостом кита: тот глобален и к полю не привязан
Карточка у текстаНемодальная карточка под диапазоном Документа, который объявил свой Инструмент (callouts): комментарий, подсказка проверки. Открывается кареткой или щелчком, фокус остаётся в текстеПоповером кнопки: тот открывает кнопка, а Карточку — место Документа
ОстровКлиентский кусок Просмотра, который после монтирования оживляет Блок в уже показанном HTML: кнопка «Копировать» у блока кода, island своего БлокаВидом узла: тот живёт только в движке Редактора