Newer
Older
import { loadGraphJson } from "../../datasets";
import ForceGraph from "force-graph";
import * as Interactions from "./interactions";
import { setSpace, SPACE } from "../../config";
import { Graph } from "./structures/graph/graph";
export let state: any = undefined;
export let graph: Graph = undefined;
export let renderer: any;
// Only execute, if corresponding dom is present
if (document.getElementById("ks-editor") === null) {
return;
}
document.onkeydown = (e) => state.onKeyDown(e);
document.onkeyup = (e) => state.onKeyUp(e);
export function loadSpace(spaceId: string) {
if (state !== undefined && spaceId === SPACE) {
return;
}
setSpace(spaceId);
return loadGraphJson(SPACE).then((graphConfig) => {
state = new State();
graph = Graph.parse(graphConfig);
// graph.restartSimulation();
function extractPositions(event: any) {
graph: renderer.screen2GraphCoords(event.layerX, event.layerY),
window: { x: event.clientX, y: event.clientY },
};
}
function load() {
const graphContainer = document.getElementById("2d-graph");
const width = graphContainer.offsetWidth;
renderer = ForceGraph()(graphContainer)
.linkColor((link) => state.linkColor(link))
.nodeColor((node) => state.nodeColor(node))
.onNodeDragEnd((node, translate) =>
state.onNodeDragEnd(node, translate)
)
.autoPauseRedraw(false) // keep redrawing after engine has stopped
.linkWidth((link) => state.linkWidth(link))
.linkDirectionalParticles(state.linkDirectionalParticles())
.linkDirectionalParticleWidth((link) =>
state.linkDirectionalParticleWidth(link)
)
.onBackgroundClick((event) =>
state.onBackgroundClick(event, extractPositions(event))
)
.nodeCanvasObjectMode((node) => state.nodeCanvasObjectMode(node))
.nodeCanvasObject((node, ctx, globalScale) =>
state.nodeCanvasObject(node, ctx, globalScale)
)
.linkCanvasObjectMode((link) => state.linkCanvasObjectMode(link))
.linkCanvasObject((link, ctx, globalScale) =>
state.linkCanvasObject(link, ctx, globalScale)
)
renderer.graphData(data);