add basic support for components

This commit is contained in:
Philipp Kühn
2020-04-24 09:32:37 +02:00
parent c2bd2b21fa
commit 3470a7be1c
7 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
import Vue from 'vue'
export default class ComponentView {
// @ts-ignore
constructor(component, options) {
// @ts-ignore
this.component = component
// @ts-ignore
this.dom = this.createDOM()
// @ts-ignore
this.contentDOM = this.vm.$refs.content
}
createDOM() {
// @ts-ignore
const Component = Vue.extend(this.component)
// @ts-ignore
this.vm = new Component({
// parent: this.parent,
// propsData: props,
}).$mount()
// @ts-ignore
return this.vm.$el
}
}

View File

@@ -170,6 +170,8 @@ export class Editor extends EventEmitter {
plugins: this.plugins,
}),
dispatchTransaction: this.dispatchTransaction.bind(this),
// @ts-ignore
nodeViews: this.extensionManager.nodeViews,
})
}

View File

@@ -1,9 +1,11 @@
import collect from 'collect.js'
import { keymap } from 'prosemirror-keymap'
import { inputRules } from 'prosemirror-inputrules'
import { NodeSpec } from 'prosemirror-model'
import { Editor, CommandSpec } from './Editor'
import Extension from './Extension'
import Node from './Node'
import ComponentView from './ComponentView'
export default class ExtensionManager {
@@ -85,4 +87,21 @@ export default class ExtensionManager {
.toArray()
}
get nodeViews() {
return collect(this.nodes)
.filter((schema: any) => schema.toVue)
.map((schema: any) => {
// @ts-ignore
return (node, view, getPos, decorations) => {
return new ComponentView(schema.toVue, {
node,
view,
getPos,
decorations,
})
}
})
.all()
}
}