| <!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>Dynamic Data - Importing from Gephi (JSON)</title> | |
|     <script type="text/javascript" src="../../dist/vis.js"></script> | |
|     <link type="text/css" rel="stylesheet" href="../../dist/vis.css"> | |
| 
 | |
|     <style type="text/css"> | |
|         #mynetwork { | |
|             width: 800px; | |
|             height: 800px; | |
|             border: 1px solid lightgray; | |
|         } | |
| 
 | |
|         div.nodeContent { | |
|             position: relative; | |
|             border: 1px solid lightgray; | |
|             width:480px; | |
|             height:780px; | |
|             margin-top: -802px; | |
|             margin-left: 810px; | |
|             padding:10px; | |
|         } | |
| 
 | |
|         pre {padding: 5px; margin: 5px; } | |
|         .string { color: green; } | |
|         .number { color: darkorange; } | |
|         .boolean { color: blue; } | |
|         .null { color: magenta; } | |
|         .key { color: red; } | |
|     </style> | |
| <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-61231638-1', 'auto');ga('send', 'pageview');</script></head> | |
| 
 | |
| <body> | |
| 
 | |
| <h2>Dynamic Data - Importing from Gephi (JSON)</h2> | |
| <div style="width:700px; font-size:14px; text-align: justify;"> | |
|     This example shows how to import a JSON file exported by Gephi. The two options available for the import are | |
|     available through the checkboxes. You can download the Gephi JSON exporter here: | |
|     <a href="https://marketplace.gephi.org/plugin/json-exporter/" target="_blank">https://marketplace.gephi.org/plugin/json-exporter/</a>. | |
|     All of Gephi's attributes are also contained within the node elements. This means you can access all of this data through the DataSet. | |
|     <br /> | |
| </div> | |
| 
 | |
| 
 | |
| <input type="checkbox" id="allowedToMove">: Allow to move after import. <br/> | |
| <input type="checkbox"  id="parseColor">: Parse the color instead of copy (adds borders, highlights etc.) | |
| <div id="mynetwork"></div> | |
| <div class="nodeContent"><h4>Node Content:</h4> <pre id="nodeContent"></pre></div> | |
| 
 | |
| <script type="text/javascript"> | |
| var network; | |
| 
 | |
| var nodes = new vis.DataSet(); | |
| var edges = new vis.DataSet(); | |
| var gephiImported; | |
| var allowedToMoveCheckbox = document.getElementById("allowedToMove"); | |
| allowedToMoveCheckbox.onchange = redrawAll; | |
| 
 | |
| var parseColorCheckbox = document.getElementById("parseColor"); | |
| parseColorCheckbox.onchange = redrawAll; | |
| 
 | |
| var nodeContent = document.getElementById("nodeContent"); | |
| 
 | |
| loadJSON("./data/WorldCup2014.json",redrawAll); | |
| 
 | |
| var container = document.getElementById('mynetwork'); | |
| var data = { | |
|     nodes: nodes, | |
|     edges: edges | |
| }; | |
| var options = { | |
|     nodes: { | |
|         shape: 'dot', | |
|         fontFace: "Tahoma" | |
|     }, | |
|     edges: { | |
|         width: 0.15, | |
|         inheritColor: "from" | |
|     }, | |
|     tooltip: { | |
|         delay: 200, | |
|         fontSize: 12, | |
|         color: { | |
|             background: "#fff" | |
|         } | |
|     }, | |
|     smoothCurves: {dynamic:false, type: "continuous"}, | |
|     stabilize: false, | |
|     physics: {barnesHut: {gravitationalConstant: -10000, springConstant: 0.002, springLength: 150}}, | |
|     hideEdgesOnDrag: true | |
| }; | |
| 
 | |
| network = new vis.Network(container, data, options); | |
| 
 | |
| /** | |
|  * This function fills the DataSets. These DataSets will update the network. | |
|  */ | |
| function redrawAll(gephiJSON) { | |
|     if (gephiJSON.nodes === undefined) { | |
|         gephiJSON = gephiImported; | |
|     } | |
|     else { | |
|         gephiImported = gephiJSON; | |
|     } | |
| 
 | |
|     nodes.clear(); | |
|     edges.clear(); | |
| 
 | |
|     var allowedToMove = allowedToMoveCheckbox.checked; | |
|     var parseColor = parseColorCheckbox.checked; | |
|     var parsed = vis.network.gephiParser.parseGephi(gephiJSON, {allowedToMove:allowedToMove, parseColor:parseColor}); | |
| 
 | |
|     // add the parsed data to the DataSets. | |
|     nodes.add(parsed.nodes); | |
|     edges.add(parsed.edges); | |
| 
 | |
|     var data = nodes.get(2); // get the data from node 2 | |
|     nodeContent.innerHTML = syntaxHighlight(data); // show the data in the div | |
|     network.zoomExtent(); // zoom to fit | |
| } | |
| 
 | |
| // from http://stackoverflow.com/questions/4810841/how-can-i-pretty-print-json-using-javascript | |
| function syntaxHighlight(json) { | |
|     if (typeof json != 'string') { | |
|         json = JSON.stringify(json, undefined, 2); | |
|     } | |
|     json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); | |
|     return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { | |
|         var cls = 'number'; | |
|         if (/^"/.test(match)) { | |
|             if (/:$/.test(match)) { | |
|                 cls = 'key'; | |
|             } else { | |
|                 cls = 'string'; | |
|             } | |
|         } else if (/true|false/.test(match)) { | |
|             cls = 'boolean'; | |
|         } else if (/null/.test(match)) { | |
|             cls = 'null'; | |
|         } | |
|         return '<span class="' + cls + '">' + match + '</span>'; | |
|     }); | |
| } | |
| 
 | |
| function loadJSON(path, success, error) { | |
|     var xhr = new XMLHttpRequest(); | |
|     xhr.onreadystatechange = function() { | |
|         if (xhr.readyState === 4) { | |
|             if (xhr.status === 200) { | |
|                 success(JSON.parse(xhr.responseText)); | |
|             } | |
|             else { | |
|                 error(xhr); | |
|             } | |
|         } | |
|     }; | |
|     xhr.open("GET", path, true); | |
|     xhr.send(); | |
| } | |
| 
 | |
| </script> | |
| 
 | |
| 
 | |
| 
 | |
| </body></html>
 |