From 531a4267ced16593a3d128206d9d6b7a41e269a1 Mon Sep 17 00:00:00 2001
From: baigner <benedikt.aigner@rwth-aachen.de>
Date: Wed, 23 May 2018 12:59:30 +0200
Subject: [PATCH] VISTOMS bug fix: Right click works now properly for function
 list

Former-commit-id: 2f778f11370dee9fe8adeb61d7cbc17ca0a1cf6f
---
 kadmos/vistoms/templates/VISTOMS.html | 859 +++++++++++++-------------
 1 file changed, 441 insertions(+), 418 deletions(-)

diff --git a/kadmos/vistoms/templates/VISTOMS.html b/kadmos/vistoms/templates/VISTOMS.html
index ebcd8b900..01e2f81ac 100644
--- a/kadmos/vistoms/templates/VISTOMS.html
+++ b/kadmos/vistoms/templates/VISTOMS.html
@@ -19114,6 +19114,9 @@
 					childrenItems: []
 				}
 				]		
+                
+                
+                
 			   
 				var graphs, currentGraph, varCategories, entireData;
 				
@@ -19152,6 +19155,420 @@
 					.style("font-size","16pt")
 					.text("Graph description: " + currentGraph.description)
 				//################################################################################################//	
+                
+                
+                
+                
+                //aigner: Functions for toolMenu
+                //################################################################################################//
+                //aigner: Creation of input/output tree
+                //############################################################
+                function showIOTree(aCategory, categoryDescr, aNode, io)
+                {                        
+                    var edges = d3.selectAll(".edge");
+                    var array="";
+                    var name;
+                    edges.each(function(edge)
+                    {			
+                        if (io=="in")
+                        {
+                            name = "Input tree view: " + aNode.id + "; Categorization: " + categoryDescr;
+                            if (edge.to == aNode.id)
+                            {
+                                array = array + "," + edge.name;
+                            }
+                        }
+                        else if (io=="out")
+                        {
+                            name = "Output tree view:" + aNode.id + "; Categorization: " + categoryDescr;
+                            if (edge.from == aNode.id)
+                            {
+                                array = array + "," + edge.name;
+                            }
+                        }
+                    })
+                    
+                    
+                    var headLine = name;
+                    var d3_body = d3.select("body");
+                    var lobiID = String(getRandomInt(0,1000))
+                    var divClassName = "treeDiv" + lobiID;
+                    var treeLayoutdiv = d3_body.append("div").attr("class",divClassName + " panel-default")
+                                                    .style("left",(d3.event.pageX) + "px")
+                                                    .style("top",(d3.event.pageY - 28) + "px")
+                                                    .style("position", "absolute")
+                    treeLayoutdiv.append("div").attr("class","panel-heading")
+                        .append("div").attr("class","panel_title").append("h4").text(headLine)
+                    $('.'+divClassName).lobiPanel({
+                        reload: false,
+                        editTitle: false,
+                        unpin: false,
+                        minWidth: 1000,
+                        maxWidth: 100000,
+                        minHeight: 500,
+                        maxHeight: 100000,
+                    });
+                    $('.'+divClassName).lobiPanel('unpin');
+                    var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+                    var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+                    maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, divClassName, headLine, aCategory);
+                }
+                //############################################################
+                
+                //aigner: Creation of input/output list
+                //############################################################
+                function showIOList(aCategory, categoryDescr, aNode, io)
+                {                        
+                    var edges = d3.selectAll(".edge");
+                    var array="";
+                    var title;
+                    edges.each(function(edge)
+                    {			
+                        if (io=="in")
+                        {
+                            title = "List view of all inputs for " + aNode.id + "; Categorization: " + categoryDescr;
+                            if (edge.to == aNode.id)
+                            {
+                                array = array + "," + edge.name;
+                            }
+                        }
+                        else if (io=="out")
+                        {
+                            title = "List view of all outputs for " + aNode.id + "; Categorization: " + categoryDescr;
+                            if (edge.from == aNode.id)
+                            {
+                                array = array + "," + edge.name;
+                            }
+                        }
+                    })
+                    
+                    var variables = [];
+                    var pipeData = array;
+                    variables = JSON.parse(JSON.stringify(currentGraph.variableSchemes[aCategory]))
+                    prune_tree(pipeData,variables)
+                    variables.forEach(function(variable)
+                    {
+                        variable.name = variable.xPath
+                        //work around because nodeMenu expexts the data, to have a "data" object inside
+                        variable.data = variable
+                        variable.data.name = variable.xPath.split("/")[variable.xPath.split("/").length-1]
+                    })
+
+                    showList(title,variables,nodeMenu);
+                    
+                }
+                //############################################################                
+                
+              
+                function showToolTable(aTool)
+                {
+                    var aToolNameSplit = aTool.name.split(': ')			
+                    var headLine;
+                    if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+                    else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+                    
+                    
+                    var data = [];
+                    // render the table(s)
+                    if (aTool.metadata.length==0)
+                    {
+                        data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+                    }
+                    function findSubMetaData(aMetaData)
+                    {
+                        for(var key in aMetaData)
+                        {
+                            if (typeof aMetaData[key] === 'object')
+                            {
+                                data.push({ "name" : key, "value" : ''}) ;
+                                findSubMetaData(aMetaData[key]);
+                            }
+                            else
+                            {
+                                data.push({ "name" : key, "value" : aMetaData[key] })
+                            }
+                        }
+                    }
+                    for (var j=0; j < aTool.metadata.length;j++)
+                    {
+                        var metaData = aTool.metadata[j];
+                        findSubMetaData(metaData);						
+                    }
+                
+                    
+                    var d3_body = d3.select("body");
+                    
+                    var panel_div = d3_body.append("div").attr("class", "myPanel panel-default")
+                    panel_div.append("div").attr("class","panel-heading")
+                        .append("div").attr("class","panel_title").append("h4").text(headLine)
+                    var listGroup = panel_div.append("div").attr("class","panel-body")
+                        .append("table").attr("id","myTable")
+                        .append("tbody")
+                        
+                    data.forEach(function(listElement)
+                    {
+                        var row = listGroup.append("tr")
+                        row.append("td").text(listElement.name)
+                        row.append("td").text(listElement.value)
+                        
+                    })
+                    $('.myPanel').lobiPanel({
+                        reload: false,
+                        editTitle: false,
+                        expand: false,
+                        unpin: false,
+                        resize: "none",
+                        minWidth: 200,
+                        minHeight: 200,
+                        maxWidth: 1100,
+                        maxHeight: 1200,
+                    });
+                    $('.myPanel').lobiPanel('unpin');
+                }
+                
+                
+                function changeNodePosition(aNode)
+                {               
+                    var theOptions = [{text: 'Choose new position...', value: '',}];
+                    for (var j=1; j<currentGraph.xdsm.nodes.length;j++)
+                    {
+                        //aigner: value: j-1 because in KADMOS the coordinator is not in the node list, therefore all other competences' indices are decreased by 1!
+                        theOptions.push({text: String(j) + " ("+currentGraph.xdsm.nodes[j].name+")", value: j-1});
+                    }
+                    bootbox.hideAll();
+                    bootbox.prompt(
+                    {
+                        title: "Please specify a new position for the competence \""+aNode.name+"\"",
+                        inputType: 'select',
+                        inputOptions: theOptions,
+                        callback: function (newPos) {
+                            if (newPos!=null && newPos !='')
+                            {
+                                bootbox.hideAll();
+                                bootbox.confirm("Are you sure you want to do this?", function(sure){
+                                    if (sure)
+                                    {
+                                        var bootboxContent = {title: "Change competence position", message: '<p>Please be patient...</p>'};
+                                        var xhr = $.ajax({
+                                            type: 'POST',
+                                            url: '/kadmosChangeNodePos',
+                                            data: {'graphID':graphID, 'nodeName':aNode.uID, 'newPos':newPos, 'currentOrder':nodeOrder},
+                                            success: function(result)
+                                            {
+                                                if (result.includes("ERROR:"))
+                                                {
+                                                    bootboxContent.message = result
+                                                    kadmosErrorMessage(bootboxContent);
+                                                }
+                                                else
+                                                {
+                                                    var updatedData = {};
+                                                    updatedData = data;
+                                                    var graphData = JSON.parse(result);             
+                                                    for (var i = 0; i < updatedData.graphs.length; i++)
+                                                    {
+                                                        if (graphID == updatedData.graphs[i].id)
+                                                        {
+                                                            updatedData.graphs[i] = graphData.graphs[0];   
+                                                        }
+                                                    }
+                                                    
+                                                    clearView();
+                                                    makeKadmosMenu(updatedData);
+                                                    xdsm_script(updatedData,graphID);
+                                                    
+                                                    bootboxContent.message = "Success!"
+                                                    kadmosSuccessMessage(bootboxContent)
+                                                }
+                                            },
+                                            error: function(result)
+                                            {
+                                                bootboxContent.message = result
+                                                kadmosErrorMessage(bootboxContent);
+                                            }
+                                        });
+                                        kadmosHavePatience(xhr, bootboxContent)
+                                    }
+                                })
+                            }
+                        }
+                    });
+                }
+                function deleteNode(aNode)
+                {               
+                    bootbox.hideAll();
+                    bootbox.confirm("Are you sure you want to do this?", function(sure)
+                    {
+                        if (sure)
+                        {                                
+                            var bootboxContent = {title: "Delete competence", message: '<p>Please be patient...</p>'};
+                            var xhr = $.ajax({
+                                type: 'POST',
+                                url: '/kadmosDeleteNode',
+                                data: {'graphID':graphID, 'nodeName':aNode.uID, 'currentOrder':nodeOrder},
+                                success: function(result)
+                                {
+                                    if (result.includes("ERROR:"))
+                                    {
+                                        bootboxContent.message = result
+                                        kadmosErrorMessage(bootboxContent);
+                                    }
+                                    else
+                                    {
+                                        var updatedData = {};
+                                        updatedData = data;
+                                        var graphData = JSON.parse(result);             
+                                        for (var i = 0; i < updatedData.graphs.length; i++)
+                                        {
+                                            if (graphID == updatedData.graphs[i].id)
+                                            {
+                                                updatedData.graphs[i] = graphData.graphs[0];   
+                                            }
+                                        }
+                                        
+                                        clearView();
+                                        makeKadmosMenu(updatedData);
+                                        xdsm_script(updatedData,graphID);
+                                        
+                                        bootboxContent.message = "Success!"
+                                        kadmosSuccessMessage(bootboxContent)
+                                    }
+                                },
+                                error: function(result)
+                                {
+                                    bootboxContent.message = result
+                                    kadmosErrorMessage(bootboxContent);
+                                }
+                            });
+                            kadmosHavePatience(xhr, bootboxContent)
+                        }
+                    })
+                }
+                
+                
+                 //aigner: children items for toolMenu
+                //############################################################
+                var inputChildrenitemsTree = [];
+                var outputChildrenitemsTree = [];
+                for (var j=0; j< varCategories.length; j++)
+                {
+                    inputChildrenitemsTree.push({title: 'according to ' + varCategories[j].description,
+                                             varCategory: varCategories[j].name,
+                                             description: varCategories[j].description,
+                                             onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,elm.__data__,"in")},
+                                             onMouseOver: function(elm,data,i){}});
+                    outputChildrenitemsTree.push({title: 'according to ' + varCategories[j].description,
+                                             varCategory: varCategories[j].name,
+                                             description: varCategories[j].description,
+                                             onMouseClick: function(elm, data, i) {
+                                                console.log(elm)
+                                                showIOTree(data.varCategory,data.description,elm.__data__,"out")},
+                                             onMouseOver: function(elm,data,i){}});
+                }
+                
+                var inputChildrenitemsList = [];
+                var outputChildrenitemsList = [];
+                for (var j=0; j< varCategories.length; j++)
+                {
+                    inputChildrenitemsList.push({title: 'according to ' + varCategories[j].description,
+                                             varCategory: varCategories[j].name,
+                                             description: varCategories[j].description,
+                                             onMouseClick: function(elm, data, i) {showIOList(data.varCategory,data.description,elm.__data__,"out")},
+                                             onMouseOver: function(elm,data,i){}});
+                    outputChildrenitemsList.push({title: 'according to ' + varCategories[j].description,
+                                             varCategory: varCategories[j].name,
+                                             description: varCategories[j].description,
+                                             onMouseClick: function(elm, data, i) {showIOList(data.varCategory,data.description,elm.__data__,"out")},
+                                             onMouseOver: function(elm,data,i){}});
+                }
+                //############################################################
+                
+                
+                //menu --> functions for right click options (coordinator)
+                var toolMenuCoor = [
+                {
+                    title: 'Show competence info',
+                    onMouseDown: function(elm, k, i) {
+                        showToolTable(k);
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: []
+                },
+                {
+                    title: 'Show input variable tree...',
+                    onMouseDown: function(elm, k, i) {
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: inputChildrenitemsTree
+                },
+                {
+                    title: 'Show output variable tree...',
+                    onMouseDown: function(elm, k, i) {
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: outputChildrenitemsTree
+                },
+                {
+                    title: 'Show input variable list...',
+                    onMouseDown: function(elm, k, i) {
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: inputChildrenitemsList
+                },
+                {
+                    title: 'Show output variable list...',
+                    onMouseDown: function(elm, k, i) {
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: outputChildrenitemsList
+                }
+                ]
+                
+                //menu --> functions for right click options for other tools
+                var toolMenuSpecial = [
+                {
+                    title: 'Change competence position in the graph',
+                    onMouseDown: function(elm, k, i) {
+                        changeNodePosition(k);
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: []
+                },
+                {
+                    title: 'Delete competence',
+                    onMouseDown: function(elm, k, i) {
+                        deleteNode(k);
+                    },
+                    onMouseUp: function(elm, k, i) {
+                    },
+                    onMouseOver: function(elm, d, i) {
+                    },
+                    childrenItems: []
+                }
+                
+                ]
+                var toolMenu = toolMenuCoor.concat(toolMenuSpecial)
+                //################################################################################################//
+                
+                
 				
                 
                 //################################################################################################//
@@ -19785,22 +20202,33 @@
 											var variables = [];
 											var functions = [];
 											
-                                            
+                                            //get all potential functions first. these will be 
+                                            var functions_all = [];
+                                            var alld3Nodes = d3.selectAll(".node")
+                                            alld3Nodes.each(
+                                                function(){
+                                                   functions_all.push(this.__data__)
+                                                }
+                                            )
                                             
 											if (result.includes("/"+firstEl))
                                             {
-												var pipeData = [];
-												//There are variables in the result
+                                                //There are variables in the result
+												
+												
+                                                //push back functions in list
+                                                functions_all.forEach(function(aFunction){
+                                                    if (graphElements.includes(aFunction.name)){functions.push(aFunction);}
+                                                })
+                                                
+                                                //push back variables in list
+                                                var pipeData = [];
 												graphElements.forEach(function(graphElement)
 												{
 													if (graphElement.includes("/"+firstEl))
 													{ 
 														pipeData += ","+graphElement;
 													}
-													else
-													{
-														functions.push({name:graphElement,type:"function"})
-													}
 												})
 												variables = JSON.parse(JSON.stringify(treeData))
 												prune_tree(pipeData,variables)
@@ -19812,6 +20240,7 @@
                                                     variable.data.name = variable.xPath.split("/")[variable.xPath.split("/").length-1]
 												})
 												
+                                                //message with option: How does the user want to show the variables, as a list or as a tree view?
 												bootbox.prompt(
                                                 {
                                                     title: "The graph elements you requested contain variables. How do you want them displayed?",
@@ -19849,26 +20278,24 @@
                                                                 var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
                                                                 var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
                                                                 maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, divClassName, headLine, varCategories[0].description);
-                                                                showList(title,functions,[]);
                                                             }
 															if (result.includes("List"))
 															{
 																showList(title,variables,nodeMenu);
-																showList(title,functions,[]);
 															}
+                                                            
                                                         }
                                                     }
                                                 })
 											}
                                             else
                                             {
-                                                var functions = [];
-                                                graphElements.forEach(function(graphElement)
-                                                {
-                                                   functions.push({name:graphElement,type:"function"})
+                                                //push back functions in list
+                                                functions_all.forEach(function(aFunction){
+                                                    if (graphElements.includes(aFunction.name)){functions.push(aFunction);}
                                                 })
-                                                showList(title,functions,[])
                                             }
+                                            showList(title,functions,toolMenu);
                                         }
                                     },
                                     error: function(result)
@@ -21152,7 +21579,6 @@
                             maxHeight: 1200,
                         });
                         $('.myPanel').lobiPanel('unpin');
-                        $('.myPanel').lobiPanel('height','5000');
                     }
                 }
                 
@@ -21301,408 +21727,7 @@
 				{		
 					var gNode = this;
 					var d3gNode = d3.select(gNode);
-					
-					//aigner: Creation of input/output tree
-					//############################################################
-					function showIOTree(aCategory, categoryDescr, aNode, io)
-					{                        
-						var edges = d3.selectAll(".edge");
-						var array="";
-						var name;
-						edges.each(function(edge)
-						{			
-							if (io=="in")
-							{
-								name = "Input tree view: " + aNode.id + "; Categorization: " + categoryDescr;
-								if (edge.to == aNode.id)
-								{
-									array = array + "," + edge.name;
-								}
-							}
-							else if (io=="out")
-							{
-								name = "Output tree view:" + aNode.id + "; Categorization: " + categoryDescr;
-								if (edge.from == aNode.id)
-								{
-									array = array + "," + edge.name;
-								}
-							}
-						})
-                        
-                        
-                        var headLine = name;
-                        var d3_body = d3.select("body");
-                        var lobiID = String(getRandomInt(0,1000))
-                        var divClassName = "treeDiv" + lobiID;
-                        var treeLayoutdiv = d3_body.append("div").attr("class",divClassName + " panel-default")
-                                                        .style("left",(d3.event.pageX) + "px")
-                                                        .style("top",(d3.event.pageY - 28) + "px")
-                                                        .style("position", "absolute")
-                        treeLayoutdiv.append("div").attr("class","panel-heading")
-                            .append("div").attr("class","panel_title").append("h4").text(headLine)
-                        $('.'+divClassName).lobiPanel({
-                            reload: false,
-                            editTitle: false,
-                            unpin: false,
-                            minWidth: 1000,
-                            maxWidth: 100000,
-                            minHeight: 500,
-                            maxHeight: 100000,
-                        });
-                        $('.'+divClassName).lobiPanel('unpin');
-                        var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
-                        var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
-                        maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, divClassName, headLine, aCategory);
-					}
-					//############################################################
-                    
-                    //aigner: Creation of input/output list
-					//############################################################
-					function showIOList(aCategory, categoryDescr, aNode, io)
-					{                        
-						var edges = d3.selectAll(".edge");
-						var array="";
-						var title;
-						edges.each(function(edge)
-						{			
-							if (io=="in")
-							{
-								title = "List view of all inputs for " + aNode.id + "; Categorization: " + categoryDescr;
-								if (edge.to == aNode.id)
-								{
-									array = array + "," + edge.name;
-								}
-							}
-							else if (io=="out")
-							{
-								title = "List view of all outputs for " + aNode.id + "; Categorization: " + categoryDescr;
-								if (edge.from == aNode.id)
-								{
-									array = array + "," + edge.name;
-								}
-							}
-						})
-                        
-                        var variables = [];
-                        var pipeData = array;
-                        variables = JSON.parse(JSON.stringify(currentGraph.variableSchemes[aCategory]))
-                        prune_tree(pipeData,variables)
-                        variables.forEach(function(variable)
-                        {
-                            variable.name = variable.xPath
-                            //work around because nodeMenu expexts the data, to have a "data" object inside
-                            variable.data = variable
-                            variable.data.name = variable.xPath.split("/")[variable.xPath.split("/").length-1]
-                        })
-
-                        showList(title,variables,nodeMenu);
-                        
-					}
-					//############################################################
-					
-					var inputChildrenitemsTree = [];
-					var outputChildrenitemsTree = [];
-					for (var j=0; j< varCategories.length; j++)
-					{
-						inputChildrenitemsTree.push({title: 'according to ' + varCategories[j].description,
-												 varCategory: varCategories[j].name,
-												 description: varCategories[j].description,
-												 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,node,"in")},
-												 onMouseOver: function(elm,data,i){}});
-						outputChildrenitemsTree.push({title: 'according to ' + varCategories[j].description,
-												 varCategory: varCategories[j].name,
-												 description: varCategories[j].description,
-												 onMouseClick: function(elm, data, i) {showIOTree(data.varCategory,data.description,node,"out")},
-												 onMouseOver: function(elm,data,i){}});
-					}
-                    
-                    var inputChildrenitemsList = [];
-					var outputChildrenitemsList = [];
-					for (var j=0; j< varCategories.length; j++)
-					{
-						inputChildrenitemsList.push({title: 'according to ' + varCategories[j].description,
-												 varCategory: varCategories[j].name,
-												 description: varCategories[j].description,
-												 onMouseClick: function(elm, data, i) {showIOList(data.varCategory,data.description,node,"out")},
-												 onMouseOver: function(elm,data,i){}});
-						outputChildrenitemsList.push({title: 'according to ' + varCategories[j].description,
-												 varCategory: varCategories[j].name,
-												 description: varCategories[j].description,
-												 onMouseClick: function(elm, data, i) {showIOList(data.varCategory,data.description,node,"out")},
-												 onMouseOver: function(elm,data,i){}});
-					}
-					
-				
-                    
-                    function showToolTable(aTool)
-                    {
-                        var aToolNameSplit = aTool.name.split(': ')			
-						var headLine;
-						if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
-						else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
-                        
-                        
-                        var data = [];
-						// render the table(s)
-						if (aTool.metadata.length==0)
-						{
-							data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
-						}
-						function findSubMetaData(aMetaData)
-						{
-							for(var key in aMetaData)
-							{
-								if (typeof aMetaData[key] === 'object')
-								{
-									data.push({ "name" : key, "value" : ''}) ;
-									findSubMetaData(aMetaData[key]);
-								}
-								else
-								{
-									data.push({ "name" : key, "value" : aMetaData[key] })
-								}
-							}
-						}
-						for (var j=0; j < aTool.metadata.length;j++)
-						{
-							var metaData = aTool.metadata[j];
-							findSubMetaData(metaData);						
-						}
-                    
-                        
-                        var d3_body = d3.select("body");
-                        
-                        var panel_div = d3_body.append("div").attr("class", "myPanel panel-default")
-                        panel_div.append("div").attr("class","panel-heading")
-                            .append("div").attr("class","panel_title").append("h4").text(headLine)
-                        var listGroup = panel_div.append("div").attr("class","panel-body")
-                            .append("table").attr("id","myTable")
-                            .append("tbody")
-                            
-                        data.forEach(function(listElement)
-                        {
-                            var row = listGroup.append("tr")
-                            row.append("td").text(listElement.name)
-                            row.append("td").text(listElement.value)
-                            
-                        })
-                        $('.myPanel').lobiPanel({
-                            reload: false,
-                            editTitle: false,
-                            expand: false,
-                            unpin: false,
-                            resize: "none",
-                            minWidth: 200,
-                            minHeight: 200,
-                            maxWidth: 1100,
-                            maxHeight: 1200,
-                        });
-                        $('.myPanel').lobiPanel('unpin');
-                    }
-					
-                    
-                    function changeNodePosition(aNode)
-                    {               
-                        var theOptions = [{text: 'Choose new position...', value: '',}];
-                        for (var j=1; j<currentGraph.xdsm.nodes.length;j++)
-                        {
-                            //aigner: value: j-1 because in KADMOS the coordinator is not in the node list, therefore all other competences' indices are decreased by 1!
-                            theOptions.push({text: String(j) + " ("+currentGraph.xdsm.nodes[j].name+")", value: j-1});
-                        }
-                        bootbox.hideAll();
-                        bootbox.prompt(
-                        {
-                            title: "Please specify a new position for the competence \""+aNode.name+"\"",
-                            inputType: 'select',
-                            inputOptions: theOptions,
-                            callback: function (newPos) {
-                                if (newPos!=null && newPos !='')
-                                {
-                                    bootbox.hideAll();
-                                    bootbox.confirm("Are you sure you want to do this?", function(sure){
-                                        if (sure)
-                                        {
-                                            var bootboxContent = {title: "Change competence position", message: '<p>Please be patient...</p>'};
-                                            var xhr = $.ajax({
-                                                type: 'POST',
-                                                url: '/kadmosChangeNodePos',
-                                                data: {'graphID':graphID, 'nodeName':aNode.uID, 'newPos':newPos, 'currentOrder':nodeOrder},
-                                                success: function(result)
-                                                {
-                                                    if (result.includes("ERROR:"))
-                                                    {
-                                                        bootboxContent.message = result
-                                                        kadmosErrorMessage(bootboxContent);
-                                                    }
-                                                    else
-                                                    {
-                                                        var updatedData = {};
-                                                        updatedData = data;
-                                                        var graphData = JSON.parse(result);             
-                                                        for (var i = 0; i < updatedData.graphs.length; i++)
-                                                        {
-                                                            if (graphID == updatedData.graphs[i].id)
-                                                            {
-                                                                updatedData.graphs[i] = graphData.graphs[0];   
-                                                            }
-                                                        }
-                                                        
-                                                        clearView();
-                                                        makeKadmosMenu(updatedData);
-                                                        xdsm_script(updatedData,graphID);
-                                                        
-                                                        bootboxContent.message = "Success!"
-                                                        kadmosSuccessMessage(bootboxContent)
-                                                    }
-                                                },
-                                                error: function(result)
-                                                {
-                                                    bootboxContent.message = result
-                                                    kadmosErrorMessage(bootboxContent);
-                                                }
-                                            });
-                                            kadmosHavePatience(xhr, bootboxContent)
-                                        }
-                                    })
-                                }
-                            }
-                        });
-                    }
-                    function deleteNode(aNode)
-                    {               
-                        bootbox.hideAll();
-                        bootbox.confirm("Are you sure you want to do this?", function(sure)
-                        {
-                            if (sure)
-                            {                                
-                                var bootboxContent = {title: "Delete competence", message: '<p>Please be patient...</p>'};
-                                var xhr = $.ajax({
-                                    type: 'POST',
-                                    url: '/kadmosDeleteNode',
-                                    data: {'graphID':graphID, 'nodeName':aNode.uID, 'currentOrder':nodeOrder},
-                                    success: function(result)
-                                    {
-                                        if (result.includes("ERROR:"))
-                                        {
-                                            bootboxContent.message = result
-                                            kadmosErrorMessage(bootboxContent);
-                                        }
-                                        else
-                                        {
-                                            var updatedData = {};
-                                            updatedData = data;
-                                            var graphData = JSON.parse(result);             
-                                            for (var i = 0; i < updatedData.graphs.length; i++)
-                                            {
-                                                if (graphID == updatedData.graphs[i].id)
-                                                {
-                                                    updatedData.graphs[i] = graphData.graphs[0];   
-                                                }
-                                            }
-                                            
-                                            clearView();
-                                            makeKadmosMenu(updatedData);
-                                            xdsm_script(updatedData,graphID);
-                                            
-                                            bootboxContent.message = "Success!"
-                                            kadmosSuccessMessage(bootboxContent)
-                                        }
-                                    },
-                                    error: function(result)
-                                    {
-                                        bootboxContent.message = result
-                                        kadmosErrorMessage(bootboxContent);
-                                    }
-                                });
-                                kadmosHavePatience(xhr, bootboxContent)
-                            }
-                        })
-                    }
-                    
-                    
-                    //menu --> functions for right click options (coordinator)
-                    var toolMenuCoor = [
-					{
-						title: 'Show competence info',
-						onMouseDown: function(elm, k, i) {
-							showToolTable(k);
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-					},
-					{
-						title: 'Show input variable tree...',
-						onMouseDown: function(elm, k, i) {
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: inputChildrenitemsTree
-					},
-					{
-						title: 'Show output variable tree...',
-						onMouseDown: function(elm, k, i) {
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: outputChildrenitemsTree
-					},
-                    {
-						title: 'Show input variable list...',
-						onMouseDown: function(elm, k, i) {
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: inputChildrenitemsList
-					},
-					{
-						title: 'Show output variable list...',
-						onMouseDown: function(elm, k, i) {
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: outputChildrenitemsList
-					}
-					]
-                    
-                    //menu --> functions for right click options for other tools
-                    var toolMenuSpecial = [
-                    {
-                        title: 'Change competence position in the graph',
-						onMouseDown: function(elm, k, i) {
-                            changeNodePosition(k);
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-                    },
-                    {
-                        title: 'Delete competence',
-						onMouseDown: function(elm, k, i) {
-                            deleteNode(k);
-						},
-						onMouseUp: function(elm, k, i) {
-						},
-						onMouseOver: function(elm, d, i) {
-						},
-						childrenItems: []
-                    }
                     
-					]
-                    var toolMenu = toolMenuCoor.concat(toolMenuSpecial)
-					
 					scenarioKeys.forEach(function(k)
 					{
 						if (k == node.xdsm)
@@ -21728,8 +21753,6 @@
 							.on("mouseover", function(){circle.style("fill-opacity", .8);})
 							.on("mouseout", function(){circle.style("fill-opacity", .6)})
 							
-							//TODO - aigner: on mouseover there should be a text box telling the options
-							d3gNode = d3gNode
 							.on("click", function()
 							{
 								//On mousedown, additional sub-workflows will be visualized
-- 
GitLab