42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { DiagramEngine } from "./cmap.js";
|
|
|
|
/**
|
|
* Present a CMap through the bundled drawing engine.
|
|
*
|
|
* CmapView owns the canvas and concrete cmap.js instance. It creates and
|
|
* destroys drawing objects but contains no concept, placement or persistence
|
|
* rules; CmapEditor remains responsible for interpreting user interaction.
|
|
*/
|
|
export class CmapView {
|
|
constructor(canvas, onSelection, onActivation, createEngine = null) {
|
|
if (!(canvas instanceof Object)) throw new TypeError("A CMap canvas is required");
|
|
if (createEngine !== null && typeof createEngine !== "function") {
|
|
throw new TypeError("A diagram-engine factory must be a function");
|
|
}
|
|
this.canvas = canvas;
|
|
this.map = createEngine ? createEngine(canvas) : new DiagramEngine(canvas);
|
|
this.map.onSelection(onSelection);
|
|
this.map.onActivation(onActivation);
|
|
}
|
|
|
|
createNode(attributes) {
|
|
return this.map.node(attributes);
|
|
}
|
|
|
|
createConnector(attributes) {
|
|
return this.map.link(attributes);
|
|
}
|
|
|
|
setZoom(factor) {
|
|
this.map.zoom(factor);
|
|
}
|
|
|
|
surfaceElement() {
|
|
return this.canvas.querySelector(":scope > .rw-cmap-surface");
|
|
}
|
|
|
|
destroy() {
|
|
if (typeof this.map.destroy === "function") this.map.destroy();
|
|
}
|
|
}
|