import jQuery from "jquery"; 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; 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); this.bottomMenu = new NodeNeighborOverlay(this.graph, overlayDiv, this); this.bottomMenu.create(); jQuery("#infoOverlayCloseButton").click(function () { jQuery("#infoOverlay").slideUp("fast"); }); } 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) { const close = document.createElement("div"); close.innerHTML = "<p>✖</p>"; close.id = "infoOverlayCloseButton"; close.className = "close-button"; overlayNode.appendChild(close); const infoArea = document.createElement("div"); infoArea.className = "detail-view-info-area"; overlayNode.appendChild(infoArea); const topArea = document.createElement("div"); topArea.className = "detail-view-top-area"; infoArea.appendChild(topArea); const nodeImage = document.createElement("img"); nodeImage.id = "infoOverlayImage"; nodeImage.src = Config.PLUGIN_PATH + "datasets/images/default.jpg"; nodeImage.className = "detail-view-image"; topArea.appendChild(nodeImage); const headline = document.createElement("h2"); headline.id = "infoOverlayHeadline"; headline.innerText = "Default Text"; headline.className = "detail-view-headline"; topArea.appendChild(headline); const textArea = document.createElement("div"); textArea.className = "detail-view-text-area"; infoArea.appendChild(textArea); const description = document.createElement("p"); description.id = "infoOverlayDescription"; description.innerText = "Default Text"; description.setAttribute("overflow-y", "scroll"); textArea.appendChild(description); } updateInfoOverlay(node) { jQuery("#infoOverlayHeadline").text(node.name); if ("image" in node) { jQuery("#infoOverlayImage").attr( "src", Config.PLUGIN_PATH + "datasets/images/" + node.image ); } else { jQuery("#infoOverlayImage").attr( "src", Config.PLUGIN_PATH + "datasets/images/default.jpg" ); } if ("description" in node) { jQuery("#infoOverlayDescription").text(node.description); } else { jQuery("#infoOverlayDescription").text("Default Text"); } this.bottomMenu.updateTabs(node); jQuery("#infoOverlay").slideDown("fast"); } }