tiptap/packages/extension-history/src/history.ts

61 lines
1.2 KiB
TypeScript
Raw Normal View History

2021-06-05 03:56:29 +08:00
import { Extension } from '@tiptap/core'
2020-10-23 04:40:40 +08:00
import { history, undo, redo } from 'prosemirror-history'
2020-03-06 18:02:35 +08:00
2020-09-10 00:55:19 +08:00
export interface HistoryOptions {
2020-09-28 03:29:51 +08:00
depth: number,
newGroupDelay: number,
2020-04-14 04:32:39 +08:00
}
2021-02-10 16:59:35 +08:00
declare module '@tiptap/core' {
2021-06-05 03:56:29 +08:00
interface Commands<ReturnType> {
2021-02-16 18:27:58 +08:00
history: {
/**
* Undo recent changes
*/
2021-06-05 03:56:29 +08:00
undo: () => ReturnType,
2021-02-16 18:27:58 +08:00
/**
* Reapply reverted changes
*/
2021-06-05 03:56:29 +08:00
redo: () => ReturnType,
2021-02-16 18:27:58 +08:00
}
2021-02-10 16:59:35 +08:00
}
}
2021-02-11 01:25:08 +08:00
export const History = Extension.create<HistoryOptions>({
2020-12-01 21:55:11 +08:00
name: 'history',
2021-02-11 01:25:08 +08:00
defaultOptions: {
2020-09-27 16:52:09 +08:00
depth: 100,
newGroupDelay: 500,
2020-10-22 18:34:49 +08:00
},
addCommands() {
return {
2021-02-10 16:59:35 +08:00
undo: () => ({ state, dispatch }) => {
2020-10-22 18:34:49 +08:00
return undo(state, dispatch)
},
2021-02-10 16:59:35 +08:00
redo: () => ({ state, dispatch }) => {
2020-10-22 18:34:49 +08:00
return redo(state, dispatch)
},
}
},
addProseMirrorPlugins() {
return [
history(this.options),
]
},
addKeyboardShortcuts() {
return {
'Mod-z': () => this.editor.commands.undo(),
'Mod-y': () => this.editor.commands.redo(),
'Shift-Mod-z': () => this.editor.commands.redo(),
2021-07-15 05:51:53 +08:00
// Russian keyboard layouts
'Mod-я': () => this.editor.commands.undo(),
'Shift-Mod-я': () => this.editor.commands.redo(),
2020-10-22 18:34:49 +08:00
}
},
})