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) }