add extension keymaps
This commit is contained in:
@@ -54,6 +54,9 @@ export class Editor extends EventEmitter {
|
||||
constructor(options: Options) {
|
||||
super()
|
||||
this.options = { ...this.options, ...options }
|
||||
}
|
||||
|
||||
private init() {
|
||||
this.createExtensionManager()
|
||||
this.createSchema()
|
||||
this.createView()
|
||||
@@ -86,7 +89,7 @@ export class Editor extends EventEmitter {
|
||||
if (this.commands[name]) {
|
||||
throw new Error(`tiptap: command '${name}' is already defined.`)
|
||||
}
|
||||
|
||||
|
||||
if (getAllMethodNames(this).includes(name)) {
|
||||
throw new Error(`tiptap: '${name}' is a protected name.`)
|
||||
}
|
||||
@@ -103,7 +106,7 @@ export class Editor extends EventEmitter {
|
||||
}
|
||||
|
||||
private createExtensionManager() {
|
||||
this.extensionManager = new ExtensionManager(this.options.extensions, this)
|
||||
this.extensionManager = new ExtensionManager(this.options.extensions, this.proxy)
|
||||
}
|
||||
|
||||
private createSchema() {
|
||||
@@ -116,8 +119,10 @@ export class Editor extends EventEmitter {
|
||||
}
|
||||
|
||||
private get plugins() {
|
||||
console.log(this.extensionManager.plugins)
|
||||
return [
|
||||
...this.extensionManager.plugins,
|
||||
...this.extensionManager.keymaps,
|
||||
keymap({ Backspace: undoInputRule }),
|
||||
keymap(baseKeymap),
|
||||
dropCursor(),
|
||||
|
||||
@@ -39,8 +39,8 @@ export default abstract class Extension {
|
||||
return []
|
||||
}
|
||||
|
||||
keys(): any {
|
||||
keys(): { [key: string]: any } {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,9 +6,11 @@ import Node from './Node'
|
||||
|
||||
export default class ExtensionManager {
|
||||
|
||||
editor: Editor
|
||||
extensions: (Extension | Node)[]
|
||||
|
||||
constructor(extensions: (Extension | Node)[], editor: Editor) {
|
||||
this.editor = editor
|
||||
this.extensions = extensions
|
||||
this.extensions.forEach(extension => {
|
||||
extension.bindEditor(editor)
|
||||
@@ -46,4 +48,12 @@ export default class ExtensionManager {
|
||||
.toArray()
|
||||
}
|
||||
|
||||
get keymaps() {
|
||||
return collect(this.extensions)
|
||||
.map(extension => extension.keys())
|
||||
.filter(keys => !!Object.keys(keys).length)
|
||||
.map(keys => keymap(keys))
|
||||
.toArray()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import minMax from '../utils/minMax'
|
||||
|
||||
declare module '../Editor' {
|
||||
interface Editor {
|
||||
focus(position: Position): Editor
|
||||
focus(position?: Position): Editor
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ export default function magicMethods(clazz: any) {
|
||||
}
|
||||
|
||||
instance.proxy = new Proxy(instance, instanceHandler)
|
||||
instance.init()
|
||||
|
||||
return instance.proxy
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user