refactoring
This commit is contained in:
@@ -119,16 +119,16 @@ import { GlobalAttributes } from './types'
|
||||
export interface ExtensionSpec<Options = {}, Commands = {}> {
|
||||
name: string,
|
||||
defaultOptions?: Options,
|
||||
createGlobalAttributes?: (
|
||||
addGlobalAttributes?: (
|
||||
this: {
|
||||
options: Options,
|
||||
},
|
||||
) => GlobalAttributes,
|
||||
createCommands?: (this: {
|
||||
addCommands?: (this: {
|
||||
options: Options,
|
||||
editor: Editor,
|
||||
}) => Commands,
|
||||
createShortcuts?: (this: {
|
||||
addKeyboardShortcuts?: (this: {
|
||||
options: Options,
|
||||
editor: Editor,
|
||||
}) => {
|
||||
@@ -147,8 +147,9 @@ export const defaultExtension: Extension = {
|
||||
type: 'extension',
|
||||
name: 'extension',
|
||||
options: {},
|
||||
createGlobalAttributes: () => [],
|
||||
createCommands: () => ({}),
|
||||
addGlobalAttributes: () => [],
|
||||
addCommands: () => ({}),
|
||||
addKeyboardShortcuts: () => ({}),
|
||||
}
|
||||
|
||||
export function createExtension<Options extends {}, Commands extends {}>(config: ExtensionSpec<Options, Commands>) {
|
||||
|
||||
@@ -89,12 +89,14 @@ export default class ExtensionManager {
|
||||
}
|
||||
|
||||
get keymaps() {
|
||||
return []
|
||||
// return collect(this.extensions)
|
||||
// .map(extension => extension.config.keys)
|
||||
// .filter(keys => keys)
|
||||
// .map(keys => keymap(keys))
|
||||
// .toArray()
|
||||
return this.extensions.map(extension => {
|
||||
const context = {
|
||||
options: extension.options,
|
||||
editor: this.editor,
|
||||
}
|
||||
|
||||
return keymap(extension.addKeyboardShortcuts.bind(context)())
|
||||
})
|
||||
}
|
||||
|
||||
get nodeViews() {
|
||||
|
||||
@@ -21,7 +21,7 @@ export interface MarkExtensionSpec<Options = {}, Commands = {}> extends Extensio
|
||||
attributes: { [key: string]: any },
|
||||
}
|
||||
) => DOMOutputSpec,
|
||||
createAttributes?: (
|
||||
addAttributes?: (
|
||||
this: {
|
||||
options: Options,
|
||||
},
|
||||
@@ -45,7 +45,7 @@ const defaultMark: MarkExtension = {
|
||||
spanning: null,
|
||||
parseHTML: () => null,
|
||||
renderHTML: () => null,
|
||||
createAttributes: () => ({}),
|
||||
addAttributes: () => ({}),
|
||||
}
|
||||
|
||||
export function createMark<Options extends {}, Commands extends {}>(config: MarkExtensionSpec<Options, Commands>) {
|
||||
|
||||
@@ -4,6 +4,10 @@ import { Attributes } from './types'
|
||||
|
||||
export interface NodeExtensionSpec<Options = {}, Commands = {}> extends ExtensionSpec<Options, Commands> {
|
||||
topNode?: boolean,
|
||||
|
||||
/**
|
||||
* content
|
||||
*/
|
||||
content?: NodeSpec['content'],
|
||||
marks?: NodeSpec['marks'],
|
||||
group?: NodeSpec['group'],
|
||||
@@ -28,7 +32,7 @@ export interface NodeExtensionSpec<Options = {}, Commands = {}> extends Extensio
|
||||
attributes: { [key: string]: any },
|
||||
}
|
||||
) => DOMOutputSpec,
|
||||
createAttributes?: (
|
||||
addAttributes?: (
|
||||
this: {
|
||||
options: Options,
|
||||
},
|
||||
@@ -59,7 +63,7 @@ const defaultNode: NodeExtension = {
|
||||
isolating: null,
|
||||
parseHTML: () => null,
|
||||
renderHTML: () => null,
|
||||
createAttributes: () => ({}),
|
||||
addAttributes: () => ({}),
|
||||
}
|
||||
|
||||
export function createNode<Options extends {}, Commands extends {}>(config: NodeExtensionSpec<Options, Commands>) {
|
||||
|
||||
@@ -23,7 +23,7 @@ export default function getAttributesFromExtensions(extensions: Extensions) {
|
||||
options: extension.options,
|
||||
}
|
||||
|
||||
const globalAttributes = extension.createGlobalAttributes.bind(context)() as GlobalAttributes
|
||||
const globalAttributes = extension.addGlobalAttributes.bind(context)() as GlobalAttributes
|
||||
|
||||
globalAttributes.forEach(globalAttribute => {
|
||||
globalAttribute.types.forEach(type => {
|
||||
@@ -48,7 +48,7 @@ export default function getAttributesFromExtensions(extensions: Extensions) {
|
||||
options: extension.options,
|
||||
}
|
||||
|
||||
const attributes = extension.createAttributes.bind(context)() as Attributes
|
||||
const attributes = extension.addAttributes.bind(context)() as Attributes
|
||||
|
||||
Object
|
||||
.entries(attributes)
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
import { NodeSpec, MarkSpec, Schema } from 'prosemirror-model'
|
||||
import { Extensions } from '../types'
|
||||
// import getTopNodeFromExtensions from './getTopNodeFromExtensions'
|
||||
// import getNodesFromExtensions from './getNodesFromExtensions'
|
||||
// import getMarksFromExtensions from './getMarksFromExtensions'
|
||||
import splitExtensions from './splitExtensions'
|
||||
import getAttributesFromExtensions from './getAttributesFromExtensions'
|
||||
import getRenderedAttributes from './getRenderedAttributes'
|
||||
|
||||
export default function getSchema(extensions: Extensions): Schema {
|
||||
const allAttributes = getAttributesFromExtensions(extensions)
|
||||
|
||||
const { nodeExtensions, markExtensions } = splitExtensions(extensions)
|
||||
|
||||
const topNode = nodeExtensions.find(extension => extension.topNode)?.name
|
||||
|
||||
const nodes = Object.fromEntries(nodeExtensions.map(extension => {
|
||||
|
||||
Reference in New Issue
Block a user