Перейти к содержимому
ФреймворкJavaScript

Read-only API: включение и выключение правки

Управление режимом только для чтения. Переключение происходит на месте, пока каждый зарегистрированный блочный инструмент реализует `setReadOnly(state)` в своём прототипе — все встроенные инструменты это делают, — поэтому тот же экземпляр редактора меняет режим, сохраняя позицию курсора, историю отмен и прокрутку, а переключатель «редактирование/просмотр» — это `readOnly.set(!isEditing)` на ОДНОМ экземпляре вместо уничтожения одного редактора и создания другого. Проверка работает по принципу «всё или ничего»: достаточно установить один блочный инструмент без `setReadOnly`, и КАЖДОЕ переключение уходит на запасной путь save → clear → повторный рендер, который пересоздаёт все экземпляры блоков и не восстанавливает курсор (прокрутка при этом восстанавливается, а история отмен намеренно остаётся нетронутой).

Как получить экземпляр редактора

Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.

TypeScript
// 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>

Устанавливает режим только для чтения в указанное булево состояние. Переключение происходит на месте — без destroy/recreate: экземпляры блоков, позиция курсора, история отмен и прокрутка сохраняются — при условии что каждый зарегистрированный блочный инструмент реализует `setReadOnly(state)` в своём прототипе. Проверка работает по принципу «всё или ничего», и один инструмент без него (у всех встроенных он есть, у стороннего может не быть) отправляет КАЖДОЕ переключение на запасной путь — save → clear → повторный рендер, — который пересоздаёт все экземпляры блоков и не восстанавливает курсор, тогда как прокрутка и история отмен всё же сохраняются. Передайте `{ hideControls: true }`, чтобы дополнительно скрыть hover-панель инструментов, настройки блока и строчную панель, пока активен режим только для чтения — опция записывает объектную форму `config.readOnly`, так что живое состояние её отражает. Возвращает новое состояние.

Когда использовать

Предпочтительный способ войти в режим только для чтения и выйти из него — переключает на месте, сохраняя курсор, историю отмен и прокрутку, при условии что каждый зарегистрированный блочный инструмент реализует setReadOnly(). Возвращает промис с новым состоянием после применения.

Параметры

ПараметрТипОбязательныйПо умолчаниюОписание
statebooleanОбязательныйУстанавливаемое состояние режима только для чтения.
options.hideControlsbooleanunchanged (inherits the current `config.readOnly`)Скрыть все элементы управления редактора (hover-панель инструментов, настройки блока, строчную панель), пока активен режим только для чтения. Значение «липкое»: set() пишет config.readOnly, только когда вы передаёте настоящее булево значение, поэтому если опцию опустить, сохранится текущее значение hideControls — из конфигурации конструктора или из более раннего вызова set(). Передайте { hideControls: false } явно, чтобы вернуть элементы управления; false действует по умолчанию, только если config.readOnly никогда не задавался в объектной форме.
TypeScript
// 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); // true

readOnly.toggle(state?)

Promise<boolean>Устарело

Переключить состояние режима только для чтения. Без параметра переключает текущее состояние. С параметром устанавливает указанное состояние.

Используйте вместо: readOnly.set

Когда использовать

Оставлен для совместимости; без параметра переключает текущее состояние.

TypeScript
// 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);

Свойства

СвойствоТипОписание
isEnabledbooleanТекущее состояние режима только для чтения
togglesInPlacetrueМаркер уровня сборки, жёстко равный `true`: эта сборка Blok реализует путь переключения на месте вместо постоянного пересоздания редактора. Это не проба возможностей — он не сообщает, подходит ли под этот путь текущий набор установленных инструментов (для чего нужно, чтобы каждый блочный инструмент реализовал `setReadOnly`, и что нигде не публикуется). Используйте его только чтобы определить сборку Blok настолько старую, что переключения на месте в ней ещё нет.
TypeScript
// 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.