Newer
Older
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;
}
/**
* 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,
"node"
);
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) {
Helpers.createDiv("close-button", overlayNode, {
id: "infoOverlayCloseButton",
innerHTML: "<p>✖</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" });
/**
* Updates the overlay (and its children) to display information on the given node.
* @param node
*/
const headline = jQuery("#infoOverlayHeadline");
headline.text(node.name);
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();
}
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();
}
jQuery("#infoOverlay").slideDown("fast");
}
}