From 5c81cddff9e0712e1271728aa1eb8b9ec8305259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Tue, 21 May 2019 21:22:15 +0200 Subject: [PATCH] remove editable prop, fix #223 --- README.md | 6 +-- .../tiptap-extensions/src/nodes/TodoItem.js | 4 +- packages/tiptap/src/Editor.js | 6 +-- packages/tiptap/src/Utils/ComponentView.js | 38 +++++++++---------- packages/tiptap/src/Utils/ExtensionManager.js | 5 ++- 5 files changed, 28 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 14a37c7f..caf161ff 100644 --- a/README.md +++ b/README.md @@ -417,10 +417,10 @@ export default class IframeNode extends Node { // there are some props available // `node` is a Prosemirror Node Object // `updateAttrs` is a function to update attributes defined in `schema` - // `editable` is the global editor prop whether the content can be edited + // `view` is the ProseMirror view instance // `options` is an array of your extension options // `selected` - props: ['node', 'updateAttrs', 'editable'], + props: ['node', 'updateAttrs', 'view'], computed: { src: { get() { @@ -437,7 +437,7 @@ export default class IframeNode extends Node { template: `
- +
`, } diff --git a/packages/tiptap-extensions/src/nodes/TodoItem.js b/packages/tiptap-extensions/src/nodes/TodoItem.js index cde44116..a4dff5a7 100644 --- a/packages/tiptap-extensions/src/nodes/TodoItem.js +++ b/packages/tiptap-extensions/src/nodes/TodoItem.js @@ -15,7 +15,7 @@ export default class TodoItem extends Node { get view() { return { - props: ['node', 'updateAttrs', 'editable'], + props: ['node', 'updateAttrs', 'view'], methods: { onChange() { this.updateAttrs({ @@ -26,7 +26,7 @@ export default class TodoItem extends Node { template: `
  • -
    +
  • `, } diff --git a/packages/tiptap/src/Editor.js b/packages/tiptap/src/Editor.js index ccdadf6c..0405cd6a 100644 --- a/packages/tiptap/src/Editor.js +++ b/packages/tiptap/src/Editor.js @@ -156,7 +156,6 @@ export default class Editor extends Emitter { return this.extensions.commands({ schema: this.schema, view: this.view, - editable: this.options.editable, }) } @@ -277,12 +276,11 @@ export default class Editor extends Emitter { ...this.builtInExtensions, ...this.options.extensions, ], - editable: this.options.editable, }), }) } - initNodeViews({ parent, extensions, editable }) { + initNodeViews({ parent, extensions }) { return extensions .filter(extension => ['node', 'mark'].includes(extension.type)) .filter(extension => extension.view) @@ -291,13 +289,13 @@ export default class Editor extends Emitter { const component = extension.view return new ComponentView(component, { + editor: this, extension, parent, node, view, getPos, decorations, - editable, }) } diff --git a/packages/tiptap/src/Utils/ComponentView.js b/packages/tiptap/src/Utils/ComponentView.js index d507ca3f..e50ebc34 100644 --- a/packages/tiptap/src/Utils/ComponentView.js +++ b/packages/tiptap/src/Utils/ComponentView.js @@ -5,48 +5,46 @@ import { getMarkRange } from 'tiptap-utils' export default class ComponentView { constructor(component, { + editor, extension, parent, node, view, - getPos, decorations, - editable, + getPos, }) { this.component = component + this.editor = editor this.extension = extension this.parent = parent this.node = node this.view = view - this.getPos = getPos this.decorations = decorations - this.editable = editable - this.selected = false this.isNode = !!this.node.marks this.isMark = !this.isNode + this.getPos = this.isMark ? this.getMarkPos : getPos this.dom = this.createDOM() this.contentDOM = this.vm.$refs.content - - if (this.isMark) { - this.getPos = this.getMarkPos - } } createDOM() { const Component = Vue.extend(this.component) + const props = { + editor: this.editor, + node: this.node, + view: this.view, + getPos: () => this.getPos(), + decorations: this.decorations, + selected: false, + options: this.extension.options, + updateAttrs: attrs => this.updateAttrs(attrs), + } + this.vm = new Component({ parent: this.parent, - propsData: { - node: this.node, - view: this.view, - getPos: () => this.getPos(), - decorations: this.decorations, - editable: this.editable, - selected: false, - options: this.extension.options, - updateAttrs: attrs => this.updateAttrs(attrs), - }, + propsData: props, }).$mount() + return this.vm.$el } @@ -90,7 +88,7 @@ export default class ComponentView { } updateAttrs(attrs) { - if (!this.editable) { + if (!this.view.editable) { return } diff --git a/packages/tiptap/src/Utils/ExtensionManager.js b/packages/tiptap/src/Utils/ExtensionManager.js index 0f348189..3d37f23f 100644 --- a/packages/tiptap/src/Utils/ExtensionManager.js +++ b/packages/tiptap/src/Utils/ExtensionManager.js @@ -134,7 +134,8 @@ export default class ExtensionManager { ]), []) } - commands({ schema, view, editable }) { + commands({ schema, view }) { + return this.extensions .filter(extension => extension.commands) .reduce((allCommands, extension) => { @@ -148,7 +149,7 @@ export default class ExtensionManager { }) const apply = (cb, attrs) => { - if (!editable) { + if (!view.editable) { return false } view.focus()