<!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>
							 | 
						|
								
							 |