思源笔记默认的块操作 api 不支持撤回,需要额外使用 Transaction 来实现撤回操作
只更新一个块 updateTransaction
await updateBlock('dom', updatedDom, blockId);
protyle.getInstance().updateTransaction(blockId, updatedDom, originalDom);
操作多个块 transaction
-
更新块撤回
await updateBlock('dom', updatedDom, blockId); let doOperations: IOperation[] = []; let undoOperations: IOperation[] = []; doOperations.push({ action: "update", id: blockId, data: updatedDom }); undoOperations.push({ action: "update", id: blockId, data: originalDom }); protyle.getInstance().transaction(doOperations, undoOperations);
-
删除块撤回
await deleteBlock(blockData.id); let doOperations: IOperation[] = []; let undoOperations: IOperation[] = []; doOperations.push({ action: "delete", id: blockData.id, data: null }); undoOperations.push({ action: "insert", id: blockData.id, data: blockData.dom, previousID: firstBlockId, parentID: protyle.block.id }); protyle.getInstance().transaction(doOperations, undoOperations);
-
插入块撤回:
const newBlock = await insertBlock('markdown', content, null, previousId, null); let doOperations: IOperation[] = []; let undoOperations: IOperation[] = []; doOperations.push({ action: "insert", id: newId, data: newDom, previousID: previousId, parentID: protyle.block.id }); undoOperations.push({ action: "delete", id: newId, data: null }); protyle.getInstance().transaction(doOperations, undoOperations);
插件例子
Achuan-2/siyuan-plugin-text-process
实现了合并块、拆分块、去除上标、去除空格、链接转文本、英文符号转中文符号等块操作的撤回
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于