add paste rules

This commit is contained in:
Philipp Kühn
2018-11-26 11:11:39 +01:00
parent df402a66ad
commit d27b0deb6a
6 changed files with 97 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ export default class Editor {
this.plugins = this.createPlugins()
this.keymaps = this.createKeymaps()
this.inputRules = this.createInputRules()
this.pasteRules = this.createPasteRules()
this.state = this.createState()
this.view = this.createView()
this.commands = this.createCommands()
@@ -94,6 +95,12 @@ export default class Editor {
})
}
createPasteRules() {
return this.extensions.pasteRules({
schema: this.schema,
})
}
createCommands() {
return this.extensions.commands({
schema: this.schema,
@@ -126,6 +133,7 @@ export default class Editor {
inputRules({
rules: this.inputRules,
}),
...this.pasteRules,
...this.keymaps,
keymap({
Backspace: undoInputRule,

View File

@@ -76,6 +76,29 @@ export default class ExtensionManager {
]), [])
}
pasteRules({ schema }) {
const extensionPasteRules = this.extensions
.filter(extension => ['extension'].includes(extension.type))
.filter(extension => extension.pasteRules)
.map(extension => extension.pasteRules({ schema }))
const nodeMarkPasteRules = this.extensions
.filter(extension => ['node', 'mark'].includes(extension.type))
.filter(extension => extension.pasteRules)
.map(extension => extension.pasteRules({
type: schema[`${extension.type}s`][extension.name],
schema,
}))
return [
...extensionPasteRules,
...nodeMarkPasteRules,
].reduce((allPasteRules, pasteRules) => ([
...allPasteRules,
...pasteRules,
]), [])
}
commands({ schema, view, editable }) {
return this.extensions
.filter(extension => extension.commands)