move history plugin to extension package
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
"url": "https://github.com/heyscrumpy/tiptap/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"prosemirror-history": "^1.0.2",
|
||||
"tiptap": "^0.5.1",
|
||||
"tiptap-commands": "^0.2.0"
|
||||
}
|
||||
|
||||
30
packages/tiptap-extensions/src/extensions/History.js
Normal file
30
packages/tiptap-extensions/src/extensions/History.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import { Extension } from 'tiptap'
|
||||
import { history, undo, redo } from 'prosemirror-history'
|
||||
|
||||
export default class HistoryExtension extends Extension {
|
||||
|
||||
get name() {
|
||||
return 'history'
|
||||
}
|
||||
|
||||
keys() {
|
||||
const isMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false
|
||||
const keymap = {
|
||||
'Mod-z': undo,
|
||||
'Shift-Mod-z': redo,
|
||||
}
|
||||
|
||||
if (!isMac) {
|
||||
keymap['Mod-y'] = redo
|
||||
}
|
||||
|
||||
return keymap
|
||||
}
|
||||
|
||||
get plugins() {
|
||||
return [
|
||||
history(),
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,3 +12,5 @@ export { default as Bold } from './marks/Bold'
|
||||
export { default as Code } from './marks/Code'
|
||||
export { default as Italic } from './marks/Italic'
|
||||
export { default as Link } from './marks/Link'
|
||||
|
||||
export { default as History } from './extensions/History'
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
"dependencies": {
|
||||
"prosemirror-commands": "^1.0.7",
|
||||
"prosemirror-gapcursor": "^1.0.2",
|
||||
"prosemirror-history": "^1.0.2",
|
||||
"prosemirror-inputrules": "^1.0.1",
|
||||
"prosemirror-keymap": "^1.0.1",
|
||||
"prosemirror-model": "^1.5.0",
|
||||
|
||||
@@ -2,7 +2,6 @@ import { EditorState, Plugin } from 'prosemirror-state'
|
||||
import { EditorView } from 'prosemirror-view'
|
||||
import { Schema, DOMParser } from 'prosemirror-model'
|
||||
import { gapCursor } from 'prosemirror-gapcursor'
|
||||
import { history } from 'prosemirror-history'
|
||||
import { keymap } from 'prosemirror-keymap'
|
||||
import { baseKeymap } from 'prosemirror-commands'
|
||||
import { inputRules } from 'prosemirror-inputrules'
|
||||
@@ -165,7 +164,6 @@ export default {
|
||||
keymap(builtInKeymap),
|
||||
keymap(baseKeymap),
|
||||
gapCursor(),
|
||||
history(),
|
||||
new Plugin({
|
||||
props: {
|
||||
editable: () => this.editable,
|
||||
|
||||
@@ -35,6 +35,7 @@ export default class ExtensionManager {
|
||||
|
||||
get views() {
|
||||
return this.extensions
|
||||
.filter(extension => ['node', 'mark'].includes(extension.type))
|
||||
.filter(extension => extension.view)
|
||||
.reduce((views, { name, view }) => ({
|
||||
...views,
|
||||
@@ -43,30 +44,60 @@ export default class ExtensionManager {
|
||||
}
|
||||
|
||||
keymaps({ schema }) {
|
||||
return this.extensions
|
||||
const extensionKeymaps = this.extensions
|
||||
.filter(extension => ['extension'].includes(extension.type))
|
||||
.filter(extension => extension.keys)
|
||||
.map(extension => extension.keys({ schema }))
|
||||
|
||||
const nodeMarkKeymaps = this.extensions
|
||||
.filter(extension => ['node', 'mark'].includes(extension.type))
|
||||
.filter(extension => extension.keys)
|
||||
.map(extension => extension.keys({
|
||||
type: schema[`${extension.type}s`][extension.name],
|
||||
schema,
|
||||
}))
|
||||
.map(keys => keymap(keys))
|
||||
|
||||
return [
|
||||
...extensionKeymaps,
|
||||
...nodeMarkKeymaps,
|
||||
].map(keys => keymap(keys))
|
||||
|
||||
// return this.extensions
|
||||
// .filter(extension => ['node', 'mark'].includes(extension.type))
|
||||
// .filter(extension => extension.keys)
|
||||
// .map(extension => extension.keys({
|
||||
// type: schema[`${extension.type}s`][extension.name],
|
||||
// schema,
|
||||
// }))
|
||||
// .map(keys => keymap(keys))
|
||||
}
|
||||
|
||||
inputRules({ schema }) {
|
||||
return this.extensions
|
||||
const extensionInputRules = this.extensions
|
||||
.filter(extension => ['extension'].includes(extension.type))
|
||||
.filter(extension => extension.inputRules)
|
||||
.map(extension => extension.inputRules({ schema }))
|
||||
|
||||
const nodeMarkInputRules = this.extensions
|
||||
.filter(extension => ['node', 'mark'].includes(extension.type))
|
||||
.filter(extension => extension.inputRules)
|
||||
.map(extension => extension.inputRules({
|
||||
type: schema[`${extension.type}s`][extension.name],
|
||||
schema,
|
||||
}))
|
||||
.reduce((allInputRules, inputRules) => ([
|
||||
...allInputRules,
|
||||
...inputRules,
|
||||
]), [])
|
||||
|
||||
return [
|
||||
...extensionInputRules,
|
||||
...nodeMarkInputRules,
|
||||
].reduce((allInputRules, inputRules) => ([
|
||||
...allInputRules,
|
||||
...inputRules,
|
||||
]), [])
|
||||
}
|
||||
|
||||
commands({ schema, view }) {
|
||||
return this.extensions
|
||||
.filter(extension => ['node', 'mark'].includes(extension.type))
|
||||
.filter(extension => extension.command)
|
||||
.reduce((commands, { name, type, command }) => ({
|
||||
...commands,
|
||||
|
||||
@@ -1,18 +1,10 @@
|
||||
import { lift, selectParentNode } from 'prosemirror-commands'
|
||||
import { undo, redo } from 'prosemirror-history'
|
||||
import { undoInputRule } from 'prosemirror-inputrules'
|
||||
import isMac from './isMac'
|
||||
|
||||
const keymap = {
|
||||
'Mod-z': undo,
|
||||
'Shift-Mod-z': undo,
|
||||
'Mod-BracketLeft': lift,
|
||||
Backspace: undoInputRule,
|
||||
Escape: selectParentNode,
|
||||
}
|
||||
|
||||
if (!isMac) {
|
||||
keymap['Mod-y'] = redo
|
||||
}
|
||||
|
||||
export default keymap
|
||||
|
||||
@@ -27,4 +27,8 @@ export default class Extension {
|
||||
return []
|
||||
}
|
||||
|
||||
keys() {
|
||||
return {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,5 @@ export { default as buildMenuActions } from './buildMenuActions'
|
||||
export { default as builtInKeymap } from './builtInKeymap'
|
||||
export { default as ComponentView } from './ComponentView'
|
||||
export { default as initNodeViews } from './initNodeViews'
|
||||
export { default as isMac } from './isMac'
|
||||
export { default as menuBubble } from './menuBubble'
|
||||
export { default as ExtensionManager } from './ExtensionManager'
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export default typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false
|
||||
@@ -22,8 +22,4 @@ export default class Mark extends Extension {
|
||||
return () => {}
|
||||
}
|
||||
|
||||
keys() {
|
||||
return {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,8 +22,4 @@ export default class Node extends Extension {
|
||||
return () => {}
|
||||
}
|
||||
|
||||
keys() {
|
||||
return {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user