Skip to content
Snippets Groups Projects
graph.js 2.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
    import ManagedData from "./structures/manageddata";
    
    import { PLUGIN_PATH, COLOR_PALETTE } from "../../config";
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
    const LINK_NAME_CONNECTOR = " → ";
    
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
    export const GRAPH_NODES = "nodes";
    export const GRAPH_LINKS = "links";
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
    export const IMAGE_SIZE = 12;
    export const IMAGE_SRC = PLUGIN_PATH + "datasets/images/";
    
    export const JSON_CONFIG = PLUGIN_PATH + "datasets/aud1v2.json";
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
    export const STOP_PHYSICS_DELAY = 5000; // ms
    
    
    export class PREVIOUSGraph extends ManagedData {
    
    Maximilian Giller's avatar
    Maximilian Giller committed
        constructor(data) {
            super(Graph.addIdentifiers(data));
    
            this.calculateNodeTypes();
    
    Maximilian Giller's avatar
    Maximilian Giller committed
            this.physicsDelay = STOP_PHYSICS_DELAY;
    
            this.physicsStopTimeoutId = undefined;
        }
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
        restartSimulation() {
            if (this.physicsStopTimeoutId !== undefined) {
                clearTimeout(this.physicsStopTimeoutId);
            }
    
    
            this.data = Graph.addIdentifiers(this.getCleanData(this.data, false));
            this.triggerOnChange();
    
    
            // Deactivate physics after a short delay
            this.physicsStopTimeoutId = setTimeout(() => {
                this.stopPhysics();
    
                this.storeCurrentData("Physics stopped", false);
    
                this.physicsStopTimeoutId = undefined;
            }, this.physicsDelay);
    
    Maximilian Giller's avatar
    Maximilian Giller committed
        stopPhysics() {
    
    Maximilian Giller's avatar
    Maximilian Giller committed
            this.data[GRAPH_NODES].forEach((n) => {
    
    Maximilian Giller's avatar
    Maximilian Giller committed
                n.fx = n.x;
                n.fy = n.y;
            });
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
        existsLink(sourceId, targetId) {
    
    Maximilian Giller's avatar
    Maximilian Giller committed
            const links = this.data[GRAPH_LINKS];
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
            for (var i = 0; i < links.length; i++) {
                var link = links[i];
                if (
    
                    linkdeleteLink[LINK_SOURCE][NODE_ID] === sourceId &&
    
    Maximilian Giller's avatar
    Maximilian Giller committed
                    link[LINK_TARGET][NODE_ID] === targetId
                ) {
                    return true;
                }
            }
    
            return false;
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
    
        getCleanLink(link, simulationParameters) {
    
    Maximilian Giller's avatar
    Maximilian Giller committed
            var cleanLink = {};
    
    
    Maximilian Giller's avatar
    Maximilian Giller committed
            // Assuming that all nodes are valid, there are two possible formats
            // 1. source and target are node objects
            if (link[LINK_SOURCE][NODE_ID] !== undefined) {
                // Source and target nodes
                // Node ids will be converted to complete node objects on running graphs, gotta convert back
                cleanLink[LINK_SOURCE] = link[LINK_SOURCE][NODE_ID];
                cleanLink[LINK_TARGET] = link[LINK_TARGET][NODE_ID];
            } else {
                // 2. source and target are just node ids
                cleanLink[LINK_SOURCE] = link[LINK_SOURCE];
                cleanLink[LINK_TARGET] = link[LINK_TARGET];
            }
    
    Maximilian Giller's avatar
    Maximilian Giller committed
    
            return cleanLink;
    
        static toStr(item) {
            if (item === undefined) {
                return "UNDEFINED";
            }
    
            if (item.node) {
    
                return item[NODE_LABEL];
    
            } else if (item.link) {
                return (
    
                    Graph.toStr(item[LINK_SOURCE]) +
    
                    LINK_NAME_CONNECTOR +
    
                    Graph.toStr(item[LINK_TARGET])
    
                );
            } else {
                return "UNDEFINED";
            }
        }