163 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!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>
 |