History API: отмена, повтор и транзакции
Управляйте отменой и повтором операций редактора.
Как получить экземпляр редактора
Методы ниже вызываются на редакторе, созданном через 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');Методы
history.undo()
voidОтменить последнюю операцию. В режиме только для чтения метод ничего не делает, как и Cmd+Z.
Когда использовать
Программный Ctrl/Cmd+Z. Ничего не делает, когда отменять нечего или редактор в режиме только для чтения. Проверяйте canUndo() для своих кнопок.
// Undo last change
editor.history.undo();
// Undo multiple times
for (let i = 0; i < 3; i++) {
editor.history.undo();
}history.redo()
voidПовторить последнюю отменённую операцию. В режиме только для чтения метод ничего не делает, как и Cmd+Shift+Z.
Когда использовать
Программный Ctrl/Cmd+Shift+Z. В режиме только для чтения ничего не делает. Проверяйте canRedo() в своём UI, чтобы кнопка корректно отключалась.
// Redo last undone change
editor.history.redo();
// Redo multiple times
for (let i = 0; i < 3; i++) {
editor.history.redo();
}history.canUndo()
booleanПроверить, доступна ли отмена (есть ли операции для отмены).
Когда использовать
Используйте, чтобы включать и отключать свою кнопку отмены. Работает в паре с undo().
if (editor.history.canUndo()) {
editor.history.undo();
} else {
console.log('Nothing to undo');
}history.canRedo()
booleanПроверить, доступен ли повтор (есть ли отменённые операции для повтора).
Когда использовать
Используйте, чтобы включать и отключать свою кнопку повтора. Работает в паре с redo().
if (editor.history.canRedo()) {
editor.history.redo();
} else {
console.log('Nothing to redo');
}history.clear()
voidОчистить всю историю. Удаляет все записи отмены и повтора.
Когда использовать
Сбрасывает весь стек отмены. render() уже делает это сам, поэтому вызывайте метод после загрузки контента другим способом, например через insertMany(). Тогда нельзя будет отменить действия и вернуться к предыдущему документу.
// render() already clears history.
// Clear it yourself after loading content another way.
editor.blocks.insertMany(loadedBlocks);
editor.history.clear();