refactoring
This commit is contained in:
@@ -71,6 +71,7 @@ export class Editor extends EventEmitter {
|
|||||||
private init() {
|
private init() {
|
||||||
this.createExtensionManager()
|
this.createExtensionManager()
|
||||||
this.createSchema()
|
this.createSchema()
|
||||||
|
this.extensionManager.resolveConfigs()
|
||||||
this.createView()
|
this.createView()
|
||||||
this.registerCommands(commands)
|
this.registerCommands(commands)
|
||||||
|
|
||||||
@@ -222,12 +223,7 @@ export class Editor extends EventEmitter {
|
|||||||
* Creates a ProseMirror schema.
|
* Creates a ProseMirror schema.
|
||||||
*/
|
*/
|
||||||
private createSchema() {
|
private createSchema() {
|
||||||
this.schema = new Schema({
|
this.schema = this.extensionManager.schema
|
||||||
topNode: this.extensionManager.topNode,
|
|
||||||
nodes: this.extensionManager.nodes,
|
|
||||||
marks: this.extensionManager.marks,
|
|
||||||
})
|
|
||||||
this.emit('schemaCreated')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,19 +2,18 @@ import deepmerge from 'deepmerge'
|
|||||||
import collect from 'collect.js'
|
import collect from 'collect.js'
|
||||||
import { Plugin } from 'prosemirror-state'
|
import { Plugin } from 'prosemirror-state'
|
||||||
import { keymap } from 'prosemirror-keymap'
|
import { keymap } from 'prosemirror-keymap'
|
||||||
|
import { Schema } from 'prosemirror-model'
|
||||||
import { inputRules } from 'prosemirror-inputrules'
|
import { inputRules } from 'prosemirror-inputrules'
|
||||||
import { EditorView, Decoration } from 'prosemirror-view'
|
import { EditorView, Decoration } from 'prosemirror-view'
|
||||||
import { Node as ProsemirrorNode } from 'prosemirror-model'
|
import { Node as ProsemirrorNode } from 'prosemirror-model'
|
||||||
import { Editor } from './Editor'
|
import { Editor } from './Editor'
|
||||||
import Extension from './Extension'
|
|
||||||
import Node from './Node'
|
|
||||||
import Mark from './Mark'
|
|
||||||
import capitalize from './utils/capitalize'
|
import capitalize from './utils/capitalize'
|
||||||
import { Extensions } from './types'
|
import { Extensions } from './types'
|
||||||
import getTopNodeFromExtensions from './utils/getTopNodeFromExtensions'
|
import getTopNodeFromExtensions from './utils/getTopNodeFromExtensions'
|
||||||
import getNodesFromExtensions from './utils/getNodesFromExtensions'
|
import getNodesFromExtensions from './utils/getNodesFromExtensions'
|
||||||
import getMarksFromExtensions from './utils/getMarksFromExtensions'
|
import getMarksFromExtensions from './utils/getMarksFromExtensions'
|
||||||
import resolveExtensionConfig from './utils/resolveExtensionConfig'
|
import resolveExtensionConfig from './utils/resolveExtensionConfig'
|
||||||
|
import getSchema from './utils/getSchema'
|
||||||
|
|
||||||
export default class ExtensionManager {
|
export default class ExtensionManager {
|
||||||
|
|
||||||
@@ -24,21 +23,16 @@ export default class ExtensionManager {
|
|||||||
constructor(extensions: Extensions, editor: Editor) {
|
constructor(extensions: Extensions, editor: Editor) {
|
||||||
this.editor = editor
|
this.editor = editor
|
||||||
this.extensions = extensions
|
this.extensions = extensions
|
||||||
|
}
|
||||||
|
|
||||||
|
resolveConfigs() {
|
||||||
this.extensions.forEach(extension => {
|
this.extensions.forEach(extension => {
|
||||||
resolveExtensionConfig(extension, 'name')
|
const { editor } = this
|
||||||
resolveExtensionConfig(extension, 'defaults')
|
|
||||||
resolveExtensionConfig(extension, 'topNode')
|
|
||||||
|
|
||||||
const name = extension.config.name
|
const name = extension.config.name
|
||||||
const options = deepmerge(extension.config.defaults, extension.options)
|
const options = deepmerge(extension.config.defaults, extension.options)
|
||||||
|
|
||||||
resolveExtensionConfig(extension, 'schema', { name, options })
|
|
||||||
|
|
||||||
editor.on('schemaCreated', () => {
|
|
||||||
const type = extension.type === 'node'
|
const type = extension.type === 'node'
|
||||||
? editor.schema.nodes[extension.config.name]
|
? editor.schema.nodes[name]
|
||||||
: editor.schema.marks[extension.config.name]
|
: editor.schema.marks[name]
|
||||||
|
|
||||||
resolveExtensionConfig(extension, 'commands', { name, options, editor, type })
|
resolveExtensionConfig(extension, 'commands', { name, options, editor, type })
|
||||||
resolveExtensionConfig(extension, 'inputRules', { name, options, editor, type })
|
resolveExtensionConfig(extension, 'inputRules', { name, options, editor, type })
|
||||||
@@ -50,7 +44,10 @@ export default class ExtensionManager {
|
|||||||
editor.registerCommands(extension.config.commands)
|
editor.registerCommands(extension.config.commands)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
|
||||||
|
get schema(): Schema {
|
||||||
|
return getSchema(this.extensions)
|
||||||
}
|
}
|
||||||
|
|
||||||
get topNode(): any {
|
get topNode(): any {
|
||||||
|
|||||||
Reference in New Issue
Block a user