xref: /plugin/diagrams/script/DiagramsView.js (revision 3d6886fdda1da3668e853a389b1500cbdfc63619)
1class DiagramsView extends AbstractNodeView {
2    constructor(node, view, getPos) {
3        super(node, view, getPos);
4        this.dForm = new DiagramsForm('diagrams-form-view');
5    }
6
7    renderNode(attrs) {
8        const dgrSchemaSpecs = this.node.type.spec.toDOM(this.node);
9        const elem = document.createElement(dgrSchemaSpecs[0]);
10
11        Object.entries(dgrSchemaSpecs[1]).forEach(([key, value]) => {
12            elem.setAttribute(key, value);
13        });
14
15        this.dom = elem;
16    }
17
18    selectNode() {
19        this.dom.classList.add('ProseMirror-selectednode');
20
21        this.dForm.updateFormFromView(this);
22        this.dForm.show();
23    }
24
25    deselectNode() {
26        this.dom.classList.remove('ProseMirror-selectednode');
27        this.dForm.hide();
28        this.dForm.off('submit');
29        this.dForm.resetForm();
30    }
31
32    /**
33     * Dispatches a node update to the editor
34     *
35     * @param {object} newAttrs
36     */
37    dispatchNodeUpdate(newAttrs) {
38        this.renderNode(newAttrs); // FIXME is this necessary?
39        const nodeStartPos = this.getPos();
40
41        this.outerView.dispatch(this.outerView.state.tr.setNodeMarkup(
42            nodeStartPos,
43            null,
44            newAttrs,
45            this.node.marks,
46        ));
47    }
48}
49