| <!DOCTYPE html> | |
| <!-- saved from url=(0044)http://kenedict.com/networks/worldcup14/vis/ , thanks Andre!--> | |
| <html><head><meta http-equiv="content-type" content="text/html; charset=UTF8"> | |
|   <title>Network |  Static smooth curves - World Cup Network</title> | |
| 
 | |
|   <script type="text/javascript" src="../../../dist/vis.js"></script> | |
|   <link type="text/css" rel="stylesheet" href="../../../dist/vis.css"> | |
| 
 | |
|   <script src="../datasources/WorldCup2014.js"></script> | |
| 
 | |
|   <style type="text/css"> | |
|     #mynetwork { | |
|       width: 800px; | |
|       height: 800px; | |
|       border: 1px solid lightgray; | |
|     } | |
|   </style> | |
|   <script src="../../googleAnalytics.js"></script> | |
| </head> | |
| 
 | |
| <body> | |
| 
 | |
| <h2>Dynamic Data - Neighbourhood Highlight</h2> | |
| <div style="width:800px; font-size:14px;"> | |
|   This example shows the power of the DataSet. Once a node is clicked, all nodes are greyed out except for the first and second order connected nodes. | |
|   In this example we show how you can determine the order of connection per node as well as applying individual styling to the nodes based on whether or not | |
|   they are connected to the selected node. The code doing the highlighting only takes about 1ms, the rest of the time is the redrawing of the network (9200 edges..). | |
|   <br /><br /> | |
| </div> | |
| 
 | |
| <div id="mynetwork"></div> | |
| 
 | |
| <script type="text/javascript"> | |
|   var network; | |
|   var allNodes; | |
|   var highlightActive = false; | |
| 
 | |
|   var nodesDataset = new vis.DataSet(nodes); // these come from WorldCup2014.js | |
|   var edgesDataset = new vis.DataSet(edges); // these come from WorldCup2014.js | |
|  | |
|   function redrawAll() { | |
|     var container = document.getElementById('mynetwork'); | |
|     var options = { | |
|       nodes: { | |
|         shape: 'dot', | |
|         scaling: { | |
|           min: 10, | |
|           max: 30, | |
|           label: { | |
|             min: 8, | |
|             max: 30, | |
|             drawThreshold: 12, | |
|             maxVisible: 20 | |
|           } | |
|         }, | |
|         font: { | |
|           size: 12, | |
|           face: 'Tahoma' | |
|         } | |
|       }, | |
|       edges: { | |
|         width: 0.15, | |
|         color: {inherit: 'from'}, | |
|         smooth: { | |
|           type: 'continuous' | |
|         } | |
|       }, | |
|       physics: false, | |
|       interaction: { | |
|         tooltipDelay: 200, | |
|         hideEdgesOnDrag: true | |
|       } | |
|     }; | |
|     var data = {nodes:nodesDataset, edges:edgesDataset} // Note: data is coming from ./datasources/WorldCup2014.js | |
|  | |
| 
 | |
|     network = new vis.Network(container, data, options); | |
| 
 | |
|     // get a JSON object | |
|     allNodes = nodesDataset.get({returnType:"Object"}); | |
| 
 | |
|     network.on("click",neighbourhoodHighlight); | |
|   } | |
| 
 | |
|   function neighbourhoodHighlight(params) { | |
|     // 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 (var nodeId in allNodes) { | |
|         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 = '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; | |
|         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; | |
|       if (allNodes[selectedNode].hiddenLabel !== undefined) { | |
|         allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel; | |
|         allNodes[selectedNode].hiddenLabel = undefined; | |
|       } | |
|     } | |
|     else if (highlightActive === true) { | |
|       // reset all nodes | |
|       for (var nodeId in allNodes) { | |
|         allNodes[nodeId].color = undefined; | |
|         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 = []; | |
|     for (nodeId in allNodes) { | |
|       if (allNodes.hasOwnProperty(nodeId)) { | |
|         updateArray.push(allNodes[nodeId]); | |
|       } | |
|     } | |
|     nodesDataset.update(updateArray); | |
|   } | |
| 
 | |
|   redrawAll() | |
| 
 | |
| </script> | |
| 
 | |
| </body></html>
 |