-
Maximilian Giller authoredMaximilian Giller authored
display.js 4.82 KiB
import jQuery from "jquery";
import { PLUGIN_PATH } from "../../config";
import * as Graph from "./graph";
import { graph, state } from "./editor";
const ID_TOOLBAR = "#toolbar";
const ID_SELECTEDITEM = "#selected-item";
const ID_SELECTED_PARAMS = "#selected-params";
const ID_SELECTED_SOURCES = "#selected-sources";
const ID_SELECTED_TARGETS = "#selected-targets";
const ID_SELECTEDITEMS = "#selected-items";
const DOM_LIST_ITEM = "li";
const TOOL_ICON_SRC = PLUGIN_PATH + "editor/images/tools/";
const TOOL_ICON_FORMAT = ".png";
const TOOL_SELECTED_CLASS = "selected";
export default class Display {
constructor(tools) {
this.tools = Object.values(tools);
this.previousTool = undefined;
this.renderToolbar(this.tools);
}
setSelectedTool(tool) {
var selectedTool = jQuery(Display.getToolIdTag(tool));
selectedTool.addClass(TOOL_SELECTED_CLASS);
if (this.previousTool !== undefined) {
var previousTool = jQuery(Display.getToolIdTag(this.previousTool));
previousTool.removeClass(TOOL_SELECTED_CLASS);
}
this.previousTool = tool;
}
renderToolbar(tools) {
this.fillDomList(ID_TOOLBAR, tools, this.toolRenderer);
tools.forEach((tool) => {
this.toolClickEvent(tool);
});
}
static getToolIdTag(tool) {
return ID_TOOLBAR + "-" + tool.getKey();
}
static getToolId(tool) {
return Display.getToolIdTag(tool).substr(1);
}
toolRenderer(tool) {
return (
'<button id="' +
Display.getToolId(tool) +
'" title="' +
tool.getName() +
'"><img src="' +
TOOL_ICON_SRC +
tool.getIcon() +
TOOL_ICON_FORMAT +
'"></button>'
);
}
toolClickEvent(tool) {
jQuery("button" + Display.getToolIdTag(tool)).on(
"click",
"",
tool,
(e) => {
state.setTool(e.data);
}
);
}
setSelectedItem(item) {
jQuery(ID_SELECTEDITEM).html(Display.toStr(item));
var paramsDOM = jQuery(ID_SELECTED_PARAMS);
paramsDOM.empty();
var params = Graph.NODE_PARAMS;
if (item === undefined) {
params = [];
} else if (item.link) {
params = Graph.LINK_PARAMS;
}
params.forEach((param) => {
paramsDOM.append(
"<" +
DOM_LIST_ITEM +
">" +
param +
" <textarea>" +
(item[param] === undefined ? "" : item[param]) +
"</textarea></" +
DOM_LIST_ITEM +
">"
);
});
// Render Source and Target list
var sources = [];
var targets = [];
if (item !== undefined && item.node) {
var nodes = graph.data[Graph.GRAPH_NODES];
for (var i = 0; i < nodes.length; i++) {
if (
graph.existsLink(
nodes[i][Graph.NODE_ID],
item[Graph.NODE_ID]
)
) {
sources.push(nodes[i]);
} else if (
graph.existsLink(
item[Graph.NODE_ID],
nodes[i][Graph.NODE_ID]
)
) {
targets.push(nodes[i]);
}
}
} else if (item !== undefined && item.link) {
sources.push(item[Graph.LINK_SOURCE]);
targets.push(item[Graph.LINK_TARGET]);
}
this.fillDomList(ID_SELECTED_SOURCES, sources, this.graphItemRenderer);
this.fillDomList(ID_SELECTED_TARGETS, targets, this.graphItemRenderer);
}
setSelectedItems(items, itemsContext) {
this.fillDomList(ID_SELECTEDITEMS, items, this.graphItemRenderer);
}
graphItemRenderer(item) {
return (
"<" +
DOM_LIST_ITEM +
">" +
Display.toStr(item) +
"</" +
DOM_LIST_ITEM +
">"
);
}
fillDomList(listId, items, itemRenderer) {
var listCont = jQuery(listId);
listCont.empty();
items.forEach((i) => listCont.append(itemRenderer(i)));
}
static toStr(item) {
if (item === undefined) {
return "UNDEFINED";
}
if (item.node) {
return item[Graph.NODE_LABEL] + " [" + item[Graph.NODE_ID] + "]";
} else if (item.link) {
return (
Display.toStr(item[Graph.LINK_SOURCE]) +
" <-> " +
Display.toStr(item[Graph.LINK_TARGET])
);
} else {
return "UNDEFINED";
}
}
}