| <!doctype html> | |
| <html> | |
| <head> | |
|     <title>Graph | Navigation</title> | |
| 
 | |
|     <style type="text/css"> | |
|         body { | |
|             font: 10pt sans; | |
|         } | |
|         #mygraph { | |
|             position:relative; | |
|             width: 600px; | |
|             height: 600px; | |
|             border: 1px solid lightgray; | |
|         } | |
|         table.legend_table { | |
|             font-size: 11px; | |
|             border-width:1px; | |
|             border-color:#d3d3d3; | |
|             border-style:solid; | |
|         } | |
|         table.legend_table,td { | |
|             border-width:1px; | |
|             border-color:#d3d3d3; | |
|             border-style:solid; | |
|             padding: 2px; | |
|         } | |
|         div.table_content { | |
|             width:80px; | |
|             text-align:center; | |
|         } | |
|         div.table_description { | |
|             width:100px; | |
|         } | |
| 
 | |
|         #operation { | |
|             font-size:28px; | |
|         } | |
|         #graph-popUp { | |
|             display:none; | |
|             position:absolute; | |
|             top:350px; | |
|             left:170px; | |
|             z-index:299; | |
|             width:250px; | |
|             height:120px; | |
|             background-color: #f9f9f9; | |
|             border-style:solid; | |
|             border-width:3px; | |
|             border-color: #5394ed; | |
|             padding:10px; | |
|             text-align: center; | |
|         } | |
|     </style> | |
|     <link type="text/css" rel="stylesheet" charset="UTF-8" href="../../dist/css/graph-manipulation.css"> | |
|     <link type="text/css" rel="stylesheet" charset="UTF-8" href="../../dist/css/graph-navigation.css"> | |
|     <script type="text/javascript" src="../../dist/vis.js"></script> | |
| 
 | |
|     <script type="text/javascript"> | |
|         var nodes = null; | |
|         var edges = null; | |
|         var graph = null; | |
| 
 | |
|         function draw() { | |
|             nodes = []; | |
|             edges = []; | |
|             var connectionCount = []; | |
| 
 | |
|             // randomly create some nodes and edges | |
|             var nodeCount = 25; | |
|             for (var i = 0; i < nodeCount; i++) { | |
|                 nodes.push({ | |
|                     id: i, | |
|                     label: String(i) | |
|                 }); | |
| 
 | |
|                 connectionCount[i] = 0; | |
| 
 | |
|                 // create edges in a scale-free-graph way | |
|                 if (i == 1) { | |
|                     var from = i; | |
|                     var to = 0; | |
|                     edges.push({ | |
|                         from: from, | |
|                         to: to | |
|                     }); | |
|                     connectionCount[from]++; | |
|                     connectionCount[to]++; | |
|                 } | |
|                 else if (i > 1) { | |
|                     var conn = edges.length * 2; | |
|                     var rand = Math.floor(Math.random() * conn); | |
|                     var cum = 0; | |
|                     var j = 0; | |
|                     while (j < connectionCount.length && cum < rand) { | |
|                         cum += connectionCount[j]; | |
|                         j++; | |
|                     } | |
| 
 | |
|                     var from = i; | |
|                     var to = j; | |
|                     edges.push({ | |
|                         from: from, | |
|                         to: to | |
|                     }); | |
|                     connectionCount[from]++; | |
|                     connectionCount[to]++; | |
|                 } | |
|             } | |
| 
 | |
|             // create a graph | |
|             var container = document.getElementById('mygraph'); | |
|             var data = { | |
|                 nodes: nodes, | |
|                 edges: edges | |
|             }; | |
|             var options = { | |
|                 edges: { | |
|                     length: 50 | |
|                 }, | |
|                 stabilize: false, | |
|                 dataManipulation: true, | |
|                 onAdd: function(data,callback) { | |
|                     var span = document.getElementById('operation'); | |
|                     var idInput = document.getElementById('node-id'); | |
|                     var labelInput = document.getElementById('node-label'); | |
|                     var saveButton = document.getElementById('saveButton'); | |
|                     var cancelButton = document.getElementById('cancelButton'); | |
|                     var div = document.getElementById('graph-popUp'); | |
|                     span.innerHTML = "Add Node"; | |
|                     idInput.value = data.id; | |
|                     labelInput.value = data.label; | |
|                     saveButton.onclick = saveData.bind(this,data,callback); | |
|                     cancelButton.onclick = clearPopUp.bind(); | |
|                     div.style.display = 'block'; | |
|                 }, | |
|                 onEdit: function(data,callback) { | |
|                     var span = document.getElementById('operation'); | |
|                     var idInput = document.getElementById('node-id'); | |
|                     var labelInput = document.getElementById('node-label'); | |
|                     var saveButton = document.getElementById('saveButton'); | |
|                     var cancelButton = document.getElementById('cancelButton'); | |
|                     var div = document.getElementById('graph-popUp'); | |
|                     span.innerHTML = "Edit Node"; | |
|                     idInput.value = data.id; | |
|                     labelInput.value = data.label; | |
|                     saveButton.onclick = saveData.bind(this,data,callback); | |
|                     cancelButton.onclick = clearPopUp.bind(); | |
|                     div.style.display = 'block'; | |
|                 } | |
|             }; | |
|             graph = new vis.Graph(container, data, options); | |
| 
 | |
|             // add event listeners | |
|             graph.on('select', function(params) { | |
|                 document.getElementById('selection').innerHTML = 'Selection: ' + params.nodes; | |
|             }); | |
| 
 | |
|             graph.on("frameResize", function(params) {console.log(params.width,params.height)}); | |
| 
 | |
|             function clearPopUp() { | |
|                 var saveButton = document.getElementById('saveButton'); | |
|                 var cancelButton = document.getElementById('cancelButton'); | |
|                 saveButton.onclick = null; | |
|                 cancelButton.onclick = null; | |
|                 var div = document.getElementById('graph-popUp'); | |
|                 div.style.display = 'none'; | |
| 
 | |
|             } | |
| 
 | |
|             function saveData(data,callback) { | |
|                 var idInput = document.getElementById('node-id'); | |
|                 var labelInput = document.getElementById('node-label'); | |
|                 var div = document.getElementById('graph-popUp'); | |
|                 data.id = idInput.value; | |
|                 data.label = labelInput.value; | |
|                 clearPopUp(); | |
|                 callback(data); | |
| 
 | |
|             } | |
|         } | |
|     </script> | |
| </head> | |
| 
 | |
| <body onload="draw();"> | |
| <h2>Editing the dataset</h2> | |
| <div style="width: 700px; font-size:14px;"> | |
|     In this example we have enabled the data manipulation setting. If the dataManipulation option is set to true, the edit button will appear. | |
|     If you prefer to have the toolbar visible initially, you can set the initiallyVisible option to true. The exact method is described in the docs. | |
|     <br /><br /> | |
|     The data manipulation allows the user to add nodes, connect them, edit them and delete any selected items. In this example we have created trigger functions | |
|     for the add and edit operations. By settings these trigger functions the user can direct the way the data is manipulated. In this example we have created a simple | |
|     pop-up that allows us to edit some of the properties. | |
| </div> | |
| <br /> | |
| 
 | |
| <div id="graph-popUp"> | |
|     <span id="operation">node</span> <br> | |
|     <table style="margin:auto;"><tr> | |
|         <td>id</td><td><input id="node-id" value="new value"></td> | |
|     </tr> | |
|         <tr> | |
|             <td>label</td><td><input id="node-label" value="new value"> </td> | |
|         </tr></table> | |
|     <input type="button" value="save" id="saveButton"></button> | |
|     <input type="button" value="cancel" id="cancelButton"></button> | |
| </div> | |
| <br /> | |
| <div id="mygraph"></div> | |
| 
 | |
| <p id="selection"></p> | |
| </body> | |
| </html> | |
| 
 |