diff --git a/packages/core/src/Editor.ts b/packages/core/src/Editor.ts index 6d8805be..ec487eae 100644 --- a/packages/core/src/Editor.ts +++ b/packages/core/src/Editor.ts @@ -15,7 +15,6 @@ import CommandManager from './CommandManager' import ExtensionManager from './ExtensionManager' import EventEmitter from './EventEmitter' import { Extensions, UnionToIntersection, PickValue } from './types' -import defaultPlugins from './plugins' import * as extensions from './extensions' import style from './style' @@ -264,10 +263,7 @@ export class Editor extends EventEmitter { this.view = new EditorView(this.options.element, { state: EditorState.create({ doc: this.createDocument(this.options.content), - plugins: [ - ...this.extensionManager.plugins, - ...defaultPlugins.map(plugin => plugin(this.proxy)), - ], + plugins: this.extensionManager.plugins, }), dispatchTransaction: this.dispatchTransaction.bind(this), }) diff --git a/packages/core/src/extensions/editable.ts b/packages/core/src/extensions/editable.ts new file mode 100644 index 00000000..4cca4fa8 --- /dev/null +++ b/packages/core/src/extensions/editable.ts @@ -0,0 +1,15 @@ +import { Plugin, PluginKey } from 'prosemirror-state' +import { createExtension } from '../Extension' + +export const Editable = createExtension({ + addProseMirrorPlugins() { + return [ + new Plugin({ + key: new PluginKey('editable'), + props: { + editable: () => this.editor.options.editable, + }, + }), + ] + }, +}) diff --git a/packages/core/src/extensions/focusEvents.ts b/packages/core/src/extensions/focusEvents.ts new file mode 100644 index 00000000..46cf848f --- /dev/null +++ b/packages/core/src/extensions/focusEvents.ts @@ -0,0 +1,42 @@ +import { Plugin } from 'prosemirror-state' +import { createExtension } from '../Extension' + +export const FocusEvents = createExtension({ + addProseMirrorPlugins() { + const { editor } = this + + return [ + new Plugin({ + props: { + attributes: { + tabindex: '0', + }, + handleDOMEvents: { + focus: () => { + editor.isFocused = true + + const transaction = editor.state.tr.setMeta('focused', true) + editor.view.dispatch(transaction) + + return true + }, + blur: () => { + editor.isFocused = false + + const transaction = editor.state.tr.setMeta('focused', false) + editor.view.dispatch(transaction) + + return true + }, + }, + }, + }), + ] + }, +}) + +declare module '../Editor' { + interface AllExtensions { + FocusEvents: typeof FocusEvents, + } +} diff --git a/packages/core/src/extensions/index.ts b/packages/core/src/extensions/index.ts index 0d2de36f..c269e279 100644 --- a/packages/core/src/extensions/index.ts +++ b/packages/core/src/extensions/index.ts @@ -2,9 +2,12 @@ export { Blur } from './blur' export { ClearContent } from './clearContent' export { ClearNodes } from './clearNodes' export { DeleteSelection } from './deleteSelection' +export { Editable } from './editable' export { Focus } from './focus' +export { FocusEvents } from './focusEvents' export { InsertHTML } from './insertHTML' export { InsertText } from './insertText' +export { Keymap } from './keymap' export { LiftListItem } from './liftListItem' export { RemoveMark } from './removeMark' export { RemoveMarks } from './removeMarks' diff --git a/packages/core/src/extensions/keymap.ts b/packages/core/src/extensions/keymap.ts new file mode 100644 index 00000000..c3a5963e --- /dev/null +++ b/packages/core/src/extensions/keymap.ts @@ -0,0 +1,19 @@ +import { keymap } from 'prosemirror-keymap' +import { baseKeymap } from 'prosemirror-commands' +import { undoInputRule } from 'prosemirror-inputrules' +import { createExtension } from '../Extension' + +export const Keymap = createExtension({ + addProseMirrorPlugins() { + return [ + keymap({ Backspace: undoInputRule }), + keymap(baseKeymap), + ] + }, +}) + +declare module '../Editor' { + interface AllExtensions { + Keymap: typeof Keymap, + } +} diff --git a/packages/core/src/plugins/editable.ts b/packages/core/src/plugins/editable.ts deleted file mode 100644 index 1a2078f2..00000000 --- a/packages/core/src/plugins/editable.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Plugin, PluginKey } from 'prosemirror-state' -import Editor from '../..' - -export default (editor: Editor) => new Plugin({ - key: new PluginKey('editable'), - props: { - editable: () => editor.options.editable, - }, -}) diff --git a/packages/core/src/plugins/focus.ts b/packages/core/src/plugins/focus.ts deleted file mode 100644 index 794346e9..00000000 --- a/packages/core/src/plugins/focus.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Plugin } from 'prosemirror-state' -import Editor from '../..' - -export default (editor: Editor) => new Plugin({ - props: { - attributes: { - tabindex: '0', - }, - handleDOMEvents: { - focus: () => { - editor.isFocused = true - - const transaction = editor.state.tr.setMeta('focused', true) - editor.view.dispatch(transaction) - - return true - }, - blur: () => { - editor.isFocused = false - - const transaction = editor.state.tr.setMeta('focused', false) - editor.view.dispatch(transaction) - - return true - }, - }, - }, -}) diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts deleted file mode 100644 index 6c83f2f4..00000000 --- a/packages/core/src/plugins/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { keymap } from 'prosemirror-keymap' -import { baseKeymap } from 'prosemirror-commands' -import { undoInputRule } from 'prosemirror-inputrules' -import editable from './editable' -import focus from './focus' - -export default [ - () => keymap({ Backspace: undoInputRule }), - () => keymap(baseKeymap), - editable, - focus, -]