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