Spaces:
Build error
Build error
| function neighbourhoodHighlight(params) { | |
| // console.log("in nieghbourhoodhighlight"); | |
| allNodes = nodes.get({ returnType: "Object" }); | |
| // originalNodes = JSON.parse(JSON.stringify(allNodes)); | |
| // if something is selected: | |
| if (params.nodes.length > 0) { | |
| highlightActive = true; | |
| var i, j; | |
| var selectedNode = params.nodes[0]; | |
| var degrees = 2; | |
| // mark all nodes as hard to read. | |
| for (let nodeId in allNodes) { | |
| // nodeColors[nodeId] = allNodes[nodeId].color; | |
| allNodes[nodeId].color = "rgba(200,200,200,0.5)"; | |
| if (allNodes[nodeId].hiddenLabel === undefined) { | |
| allNodes[nodeId].hiddenLabel = allNodes[nodeId].label; | |
| allNodes[nodeId].label = undefined; | |
| } | |
| } | |
| var connectedNodes = network.getConnectedNodes(selectedNode); | |
| var allConnectedNodes = []; | |
| // get the second degree nodes | |
| for (i = 1; i < degrees; i++) { | |
| for (j = 0; j < connectedNodes.length; j++) { | |
| allConnectedNodes = allConnectedNodes.concat( | |
| network.getConnectedNodes(connectedNodes[j]) | |
| ); | |
| } | |
| } | |
| // all second degree nodes get a different color and their label back | |
| for (i = 0; i < allConnectedNodes.length; i++) { | |
| // allNodes[allConnectedNodes[i]].color = "pink"; | |
| allNodes[allConnectedNodes[i]].color = "rgba(150,150,150,0.75)"; | |
| if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) { | |
| allNodes[allConnectedNodes[i]].label = | |
| allNodes[allConnectedNodes[i]].hiddenLabel; | |
| allNodes[allConnectedNodes[i]].hiddenLabel = undefined; | |
| } | |
| } | |
| // all first degree nodes get their own color and their label back | |
| for (i = 0; i < connectedNodes.length; i++) { | |
| // allNodes[connectedNodes[i]].color = undefined; | |
| allNodes[connectedNodes[i]].color = nodeColors[connectedNodes[i]]; | |
| if (allNodes[connectedNodes[i]].hiddenLabel !== undefined) { | |
| allNodes[connectedNodes[i]].label = | |
| allNodes[connectedNodes[i]].hiddenLabel; | |
| allNodes[connectedNodes[i]].hiddenLabel = undefined; | |
| } | |
| } | |
| // the main node gets its own color and its label back. | |
| // allNodes[selectedNode].color = undefined; | |
| allNodes[selectedNode].color = nodeColors[selectedNode]; | |
| if (allNodes[selectedNode].hiddenLabel !== undefined) { | |
| allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel; | |
| allNodes[selectedNode].hiddenLabel = undefined; | |
| } | |
| } else if (highlightActive === true) { | |
| // console.log("highlightActive was true"); | |
| // reset all nodes | |
| for (let nodeId in allNodes) { | |
| // allNodes[nodeId].color = "purple"; | |
| allNodes[nodeId].color = nodeColors[nodeId]; | |
| // delete allNodes[nodeId].color; | |
| if (allNodes[nodeId].hiddenLabel !== undefined) { | |
| allNodes[nodeId].label = allNodes[nodeId].hiddenLabel; | |
| allNodes[nodeId].hiddenLabel = undefined; | |
| } | |
| } | |
| highlightActive = false; | |
| } | |
| // transform the object into an array | |
| var updateArray = []; | |
| if (params.nodes.length > 0) { | |
| for (let nodeId in allNodes) { | |
| if (allNodes.hasOwnProperty(nodeId)) { | |
| // console.log(allNodes[nodeId]); | |
| updateArray.push(allNodes[nodeId]); | |
| } | |
| } | |
| nodes.update(updateArray); | |
| } else { | |
| // console.log("Nothing was selected"); | |
| for (let nodeId in allNodes) { | |
| if (allNodes.hasOwnProperty(nodeId)) { | |
| // console.log(allNodes[nodeId]); | |
| // allNodes[nodeId].color = {}; | |
| updateArray.push(allNodes[nodeId]); | |
| } | |
| } | |
| nodes.update(updateArray); | |
| } | |
| } | |
| function filterHighlight(params) { | |
| allNodes = nodes.get({ returnType: "Object" }); | |
| // if something is selected: | |
| if (params.nodes.length > 0) { | |
| filterActive = true; | |
| let selectedNodes = params.nodes; | |
| // hiding all nodes and saving the label | |
| for (let nodeId in allNodes) { | |
| allNodes[nodeId].hidden = true; | |
| if (allNodes[nodeId].savedLabel === undefined) { | |
| allNodes[nodeId].savedLabel = allNodes[nodeId].label; | |
| allNodes[nodeId].label = undefined; | |
| } | |
| } | |
| for (let i=0; i < selectedNodes.length; i++) { | |
| allNodes[selectedNodes[i]].hidden = false; | |
| if (allNodes[selectedNodes[i]].savedLabel !== undefined) { | |
| allNodes[selectedNodes[i]].label = allNodes[selectedNodes[i]].savedLabel; | |
| allNodes[selectedNodes[i]].savedLabel = undefined; | |
| } | |
| } | |
| } else if (filterActive === true) { | |
| // reset all nodes | |
| for (let nodeId in allNodes) { | |
| allNodes[nodeId].hidden = false; | |
| if (allNodes[nodeId].savedLabel !== undefined) { | |
| allNodes[nodeId].label = allNodes[nodeId].savedLabel; | |
| allNodes[nodeId].savedLabel = undefined; | |
| } | |
| } | |
| filterActive = false; | |
| } | |
| // transform the object into an array | |
| var updateArray = []; | |
| if (params.nodes.length > 0) { | |
| for (let nodeId in allNodes) { | |
| if (allNodes.hasOwnProperty(nodeId)) { | |
| updateArray.push(allNodes[nodeId]); | |
| } | |
| } | |
| nodes.update(updateArray); | |
| } else { | |
| for (let nodeId in allNodes) { | |
| if (allNodes.hasOwnProperty(nodeId)) { | |
| updateArray.push(allNodes[nodeId]); | |
| } | |
| } | |
| nodes.update(updateArray); | |
| } | |
| } | |
| function selectNode(nodes) { | |
| network.selectNodes(nodes); | |
| neighbourhoodHighlight({ nodes: nodes }); | |
| return nodes; | |
| } | |
| function selectNodes(nodes) { | |
| network.selectNodes(nodes); | |
| filterHighlight({nodes: nodes}); | |
| return nodes; | |
| } | |
| function highlightFilter(filter) { | |
| let selectedNodes = [] | |
| let selectedProp = filter['property'] | |
| if (filter['item'] === 'node') { | |
| let allNodes = nodes.get({ returnType: "Object" }); | |
| for (let nodeId in allNodes) { | |
| if (allNodes[nodeId][selectedProp] && filter['value'].includes((allNodes[nodeId][selectedProp]).toString())) { | |
| selectedNodes.push(nodeId) | |
| } | |
| } | |
| } | |
| else if (filter['item'] === 'edge'){ | |
| let allEdges = edges.get({returnType: 'object'}); | |
| // check if the selected property exists for selected edge and select the nodes connected to the edge | |
| for (let edge in allEdges) { | |
| if (allEdges[edge][selectedProp] && filter['value'].includes((allEdges[edge][selectedProp]).toString())) { | |
| selectedNodes.push(allEdges[edge]['from']) | |
| selectedNodes.push(allEdges[edge]['to']) | |
| } | |
| } | |
| } | |
| selectNodes(selectedNodes) | |
| } |