refactoring

This commit is contained in:
Philipp Kühn
2020-10-22 11:14:44 +02:00
parent 9697d585fe
commit 930eb63564
7 changed files with 28 additions and 26 deletions

View File

@@ -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>) {

View File

@@ -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() {

View File

@@ -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>) {

View File

@@ -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>) {

View File

@@ -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)

View File

@@ -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 => {