Skip to content
Snippets Groups Projects
nodeinfo.js 5.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • import jQuery from "jquery";
    
    
    Harm Kube's avatar
    Harm Kube committed
    import { NodeNeighborOverlay } from "./neighbors";
    
    import * as Helpers from "../helpers";
    import * as Config from "../../config";
    
    export { NodeInfoOverlay };
    
    /**
     * An overlay displaying the information which is connected with each node.
     */
    class NodeInfoOverlay {
        /**
         * Constructs a new info overlay for the given graph object.
         * @param {Graph} graph
         */
        constructor(graph) {
            this.graph = graph;
    
    Harm Kube's avatar
    Harm Kube committed
            this.bottomMenu = null;
    
        }
    
        /**
         * Creates the visible elements of the overlay.
         * Must be called after the graph has been initialized.
         */
        create() {
            const overlayDiv = this.createOverlayMainDiv();
            this.createOverlayElements(overlayDiv);
    
    Harm Kube's avatar
    Harm Kube committed
            this.bottomMenu = new NodeNeighborOverlay(
                this.graph,
                overlayDiv,
                this,
                "node"
            );
            this.bottomMenu.create();
    
    
            jQuery("#infoOverlayCloseButton").click(function () {
                jQuery("#infoOverlay").slideUp("fast");
            });
    
            jQuery("#infoOverlay").hide();
    
        }
    
        createOverlayMainDiv() {
            const sceneNode = Helpers.getCanvasDivNode();
            const overlayNode = document.createElement("div");
            overlayNode.id = "infoOverlay";
            overlayNode.className = "detail-view";
            sceneNode.insertBefore(overlayNode, sceneNode.childNodes[2]);
            return overlayNode;
        }
    
        createOverlayElements(overlayNode) {
    
            Helpers.createDiv("close-button", overlayNode, {
                id: "infoOverlayCloseButton",
                innerHTML: "<p>&#10006;</p>",
            });
    
            const infoArea = Helpers.createDiv(
                "detail-view-info-area",
                overlayNode
            );
    
            infoArea.classList.add("fancy-scrollbar");
    
            const topArea = Helpers.createDiv("detail-view-top-area", infoArea);
    
            Helpers.createHTMLElement("img", topArea, {
                id: "infoOverlayImage",
                src: Config.PLUGIN_PATH + "datasets/images/default.jpg",
                className: "detail-view-image",
            });
    
            Helpers.createHTMLElement("h2", topArea, {
                id: "infoOverlayHeadline",
                innerText: "Default Text",
                className: "detail-view-headline",
            });
    
            const infoImageArea = Helpers.createDiv(
                "detail-view-media-area",
                infoArea
            );
            Helpers.createHTMLElement("img", infoImageArea, {
                id: "infoAreaInfoImage",
                src: Config.PLUGIN_PATH + "datasets/images/default.jpg",
            });
    
    
            const textArea = Helpers.createDiv("detail-view-text-area", infoArea);
            Helpers.createHTMLElement("p", textArea, {
                id: "infoOverlayDescription",
    
                innerHTML: "Default Text",
    
            const videoDiv = Helpers.createDiv("detail-view-media-area", infoArea);
    
    
            const video = document.createElement("video");
            video.id = "infoOverlayVideo";
            video.controls = true;
            video.className = "detail-view-video";
            videoDiv.appendChild(video);
    
            const linkArea = Helpers.createDiv("detail-view-link-area", infoArea, {
                id: "infoAreaLinkArea",
            });
            Helpers.createHTMLElement("h6", linkArea, {
                innerText: "Weiterführende Links",
            });
            Helpers.createHTMLElement("ul", linkArea, { id: "infoAreaLinkList" });
    
    
    Matthias Konitzny's avatar
    Matthias Konitzny committed
            Helpers.createDiv("detail-view-spacer", infoArea);
    
        /**
         * Updates the overlay (and its children) to display information on the given node.
         * @param node
         */
    
        updateInfoOverlay(node) {
    
            const headline = jQuery("#infoOverlayHeadline");
            headline.text(node.name);
    
            if ("image" in node) {
    
                headline.css("margin-top", "0px");
                //jQuery("#infoOverlayImage").removeClass("hidden-tab");
                const overlayImage = jQuery("#infoOverlayImage");
                overlayImage.show();
    
                overlayImage.attr("src", node.image);
    
                headline.css("margin-top", "25px");
                jQuery("#infoOverlayImage").hide();
                // jQuery("#infoOverlayImage").attr(
                //     "src",
                //     Config.PLUGIN_PATH + "datasets/images/default.jpg"
                // );
    
            const infoImage = jQuery("#infoAreaInfoImage");
            if ("infoImage" in node) {
                infoImage.show();
                infoImage.attr("src", node.infoImage);
            } else {
                infoImage.hide();
            }
    
    
            if ("description" in node) {
    
                jQuery("#infoOverlayDescription").html(node.description);
                //jQuery("#infoOverlayDescription").text(node.description);
    
                jQuery("#infoOverlayDescription").html("Default Text");
    
            if ("video" in node) {
                jQuery("#infoOverlayVideo").show();
                jQuery("#infoOverlayVideo").attr("src", node.video);
            } else {
                jQuery("#infoOverlayVideo").hide();
            }
    
    
            const linkList = jQuery("#infoAreaLinkList");
            const linkArea = jQuery("#infoAreaLinkArea");
            if ("infoLinks" in node) {
                linkArea.show();
                linkList.empty();
                for (const link of node["infoLinks"]) {
                    const listEntry = Helpers.createHTMLElement("li", linkList[0]);
                    Helpers.createHTMLElement("a", listEntry, {
                        rel: "noopener noreferrer",
                        target: "_blank",
                        href: link,
                        innerText: link,
                    });
                }
            } else {
                linkArea.hide();
            }
    
    
    Harm Kube's avatar
    Harm Kube committed
            this.bottomMenu.updateTabs(node);
    
            jQuery("#infoOverlay").slideDown("fast");
        }
    }