Read-only API: включение и выключение правки
Управление режимом только для чтения в редакторе. Переключение происходит на месте, пока каждый зарегистрированный блочный инструмент реализует setReadOnly(state) в своём прототипе. У всех встроенных инструментов он есть.
Тогда тот же экземпляр редактора меняет режим и сохраняет позицию курсора, историю отмен и прокрутку. Поэтому переключатель «редактирование/просмотр» это readOnly.set(!isEditing) на ОДНОМ экземпляре, а не уничтожение одного редактора и создание другого.
Проверка работает по принципу «всё или ничего». Достаточно установить один блочный инструмент без setReadOnly, и КАЖДОЕ переключение уходит на запасной путь: сохранение, очистка, повторный рендер. Этот путь пересоздаёт все экземпляры блоков и не восстанавливает курсор. Прокрутка при этом восстанавливается, а история отмен намеренно остаётся нетронутой.
Как получить экземпляр редактора
Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.
// You already hold the instance returned by the constructor.
const editor = new Blok({ holder: 'editor' });
await editor.isReady;
// Call any API method on it.
editor.caret.setToLastBlock('end');Методы
readOnly.set(state, options?)
Promise<boolean>Устанавливает режим только для чтения в указанное булево состояние. Переключение происходит на месте, без уничтожения и пересоздания: экземпляры блоков, позиция курсора, история отмен и прокрутка сохраняются.
Это работает, только если каждый зарегистрированный блочный инструмент реализует setReadOnly(state) в своём прототипе. Проверка идёт по принципу «всё или ничего».
Один инструмент без него отправляет КАЖДОЕ переключение на запасной путь: сохранение, очистка, повторный рендер (у всех встроенных инструментов он есть, у стороннего может не быть). Этот путь пересоздаёт все экземпляры блоков и не восстанавливает курсор, но прокрутка и история отмен всё же сохраняются.
Передайте { hideControls: true }, чтобы заодно скрыть hover-панель инструментов, настройки блока и строчную панель инструментов, пока активен режим только для чтения. Опция записывает объектную форму config.readOnly, поэтому живое состояние её отражает. Возвращает новое состояние.
Когда использовать
Предпочтительный способ войти в режим только для чтения и выйти из него. Переключает на месте и сохраняет курсор, историю отмен и прокрутку, пока каждый зарегистрированный блочный инструмент реализует setReadOnly(). Возвращает промис, который отдаёт новое состояние после применения.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
state | boolean | Обязательный | — | Устанавливаемое состояние режима только для чтения. |
options.hideControls | boolean | — | unchanged (inherits the current `config.readOnly`) | Скрывает все элементы управления редактора (hover-панель инструментов, поповер настроек блока, строчную панель инструментов), пока активен режим только для чтения. Значение «липкое». Передайте |
// The edit/view toggle: ONE instance, flipped in place —
// caret, undo history and scroll survive the switch
await editor.readOnly.set(!isEditing);
// Enable read-only and hide all controls
// (hover toolbar, block settings, inline toolbar)
await editor.readOnly.set(true, { hideControls: true });
// Check state
console.log(editor.readOnly.isEnabled); // true or false
console.log(editor.readOnly.togglesInPlace); // truereadOnly.toggle(state?)
Promise<boolean>УстарелоПереключает состояние режима только для чтения. Без параметра переключает текущее состояние. С параметром устанавливает указанное состояние.
Используйте вместо: readOnly.set
Когда использовать
Оставлен для совместимости. Без параметра переключает текущее состояние.
// Toggle current state
const isReadOnly = await editor.readOnly.toggle();
// Enable read-only
await editor.readOnly.toggle(true);
// Disable read-only
await editor.readOnly.toggle(false);Свойства
| Свойство | Тип | Описание |
|---|---|---|
isEnabled | boolean | Текущее состояние режима только для чтения |
togglesInPlace | true | Маркер уровня сборки, жёстко равный Это не проба возможностей. Он не сообщает, подходит ли под этот путь текущий набор установленных инструментов. Для этого пути нужно, чтобы каждый блочный инструмент реализовал Используйте маркер только чтобы определить сборку Blok настолько старую, что переключения на месте в ней ещё нет. |
// The edit/view toggle: one instance, one call.
// Caret, undo history and scroll survive the switch —
// no destroy-and-recreate.
async function setEditing(isEditing: boolean) {
await editor.readOnly.set(!isEditing);
}
// Framework adapters do this for you: change the readOnly
// prop (React/Vue) or input (Angular) and the adapter calls
// readOnly.set on the existing instance — same editor identity.