From 930eb63564142476b94fa548d42158c011130476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Thu, 22 Oct 2020 11:14:44 +0200 Subject: [PATCH] refactoring --- packages/core/src/Extension.ts | 11 ++++++----- packages/core/src/ExtensionManager.ts | 14 ++++++++------ packages/core/src/Mark.ts | 4 ++-- packages/core/src/Node.ts | 8 ++++++-- .../core/src/utils/getAttributesFromExtensions.ts | 4 ++-- packages/core/src/utils/getSchema.ts | 5 ----- packages/extension-paragraph/index.ts | 8 ++++---- 7 files changed, 28 insertions(+), 26 deletions(-) diff --git a/packages/core/src/Extension.ts b/packages/core/src/Extension.ts index 499eaede..b05fba08 100644 --- a/packages/core/src/Extension.ts +++ b/packages/core/src/Extension.ts @@ -119,16 +119,16 @@ import { GlobalAttributes } from './types' export interface ExtensionSpec { 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(config: ExtensionSpec) { diff --git a/packages/core/src/ExtensionManager.ts b/packages/core/src/ExtensionManager.ts index 292b06ef..7f08808c 100644 --- a/packages/core/src/ExtensionManager.ts +++ b/packages/core/src/ExtensionManager.ts @@ -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() { diff --git a/packages/core/src/Mark.ts b/packages/core/src/Mark.ts index 6df8b351..a75aa057 100644 --- a/packages/core/src/Mark.ts +++ b/packages/core/src/Mark.ts @@ -21,7 +21,7 @@ export interface MarkExtensionSpec 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(config: MarkExtensionSpec) { diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 3a3d3019..b3a839fc 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -4,6 +4,10 @@ import { Attributes } from './types' export interface NodeExtensionSpec extends ExtensionSpec { topNode?: boolean, + + /** + * content + */ content?: NodeSpec['content'], marks?: NodeSpec['marks'], group?: NodeSpec['group'], @@ -28,7 +32,7 @@ export interface NodeExtensionSpec 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(config: NodeExtensionSpec) { diff --git a/packages/core/src/utils/getAttributesFromExtensions.ts b/packages/core/src/utils/getAttributesFromExtensions.ts index 5e82ff19..4735a502 100644 --- a/packages/core/src/utils/getAttributesFromExtensions.ts +++ b/packages/core/src/utils/getAttributesFromExtensions.ts @@ -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) diff --git a/packages/core/src/utils/getSchema.ts b/packages/core/src/utils/getSchema.ts index f1321282..47fbf6aa 100644 --- a/packages/core/src/utils/getSchema.ts +++ b/packages/core/src/utils/getSchema.ts @@ -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 => { diff --git a/packages/extension-paragraph/index.ts b/packages/extension-paragraph/index.ts index 03af6596..416b074a 100644 --- a/packages/extension-paragraph/index.ts +++ b/packages/extension-paragraph/index.ts @@ -16,7 +16,7 @@ export default createNode({ content: 'inline*', - createGlobalAttributes() { + addGlobalAttributes() { return [ { types: ['paragraph'], @@ -33,7 +33,7 @@ export default createNode({ ] }, - createAttributes() { + addAttributes() { return { id: { default: '123', @@ -56,7 +56,7 @@ export default createNode({ return ['p', attributes, 0] }, - createCommands() { + addCommands() { return { paragraph: () => ({ commands }) => { return commands.toggleBlockType('paragraph', 'paragraph') @@ -64,7 +64,7 @@ export default createNode({ } }, - createShortcuts() { + addKeyboardShortcuts() { return { 'Mod-Alt-0': () => this.editor.paragraph(), }