|
@ -1,148 +1,116 @@ |
|
|
<!doctype html> |
|
|
<!doctype html> |
|
|
<html> |
|
|
<html> |
|
|
<head> |
|
|
<head> |
|
|
<title>Network | Hierarchical layout</title> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<title>Network | Clustering</title> |
|
|
|
|
|
<script type="text/javascript" src="../dist/vis.js"></script> |
|
|
<style type="text/css"> |
|
|
<style type="text/css"> |
|
|
body { |
|
|
|
|
|
font: 10pt sans; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#mynetwork { |
|
|
#mynetwork { |
|
|
width: 600px; |
|
|
width: 600px; |
|
|
height: 600px; |
|
|
height: 600px; |
|
|
border: 1px solid lightgray; |
|
|
border: 1px solid lightgray; |
|
|
} |
|
|
} |
|
|
|
|
|
p { |
|
|
|
|
|
max-width: 600px; |
|
|
|
|
|
} |
|
|
|
|
|
h4 { |
|
|
|
|
|
margin-bottom: 3px; |
|
|
|
|
|
} |
|
|
</style> |
|
|
</style> |
|
|
|
|
|
</head> |
|
|
|
|
|
|
|
|
<script type="text/javascript" src="../dist/vis.js"></script> |
|
|
|
|
|
|
|
|
<body> |
|
|
|
|
|
|
|
|
|
|
|
<div id="mynetwork"></div> |
|
|
|
|
|
|
|
|
<script type="text/javascript"> |
|
|
|
|
|
var nodes = null; |
|
|
|
|
|
var edges = null; |
|
|
|
|
|
var network = null; |
|
|
|
|
|
|
|
|
<script type="text/javascript"> |
|
|
|
|
|
// create an array with nodes |
|
|
|
|
|
var nodes = [ |
|
|
|
|
|
{id: 1, label: '1'}, |
|
|
|
|
|
{id: 2, label: '2'}, |
|
|
|
|
|
{id: 3, label: '3'}, |
|
|
|
|
|
{id: 4, label: '4'}, |
|
|
|
|
|
{id: 'a', label: 'a'}, |
|
|
|
|
|
{id: 'b', label: 'b'}, |
|
|
|
|
|
{id: 'c', label: 'c'}, |
|
|
|
|
|
{id: 'd', label: 'd'} |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// create an array with edges |
|
|
|
|
|
var edges = [ |
|
|
|
|
|
{from: '1', to: '2', arrows:'to'}, |
|
|
|
|
|
{from: '2', to: '3', arrows:'to'}, |
|
|
|
|
|
{from: '3', to: '4', arrows:'to'}, |
|
|
|
|
|
{from: 'a', to: 'b', arrows:'to'}, |
|
|
|
|
|
{from: 'b', to: 'c', arrows:'to'}, |
|
|
|
|
|
{from: 'c', to: 'd', arrows:'to'} |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// create a network |
|
|
|
|
|
var container = document.getElementById('mynetwork'); |
|
|
|
|
|
var data = { |
|
|
|
|
|
nodes: nodes, |
|
|
|
|
|
edges: edges |
|
|
|
|
|
}; |
|
|
|
|
|
var options = { |
|
|
|
|
|
interaction: { |
|
|
|
|
|
navigationButtons: true |
|
|
|
|
|
}, |
|
|
|
|
|
layout: {randomSeed: 8} |
|
|
|
|
|
}; |
|
|
|
|
|
var network = new vis.Network(container, data, options); |
|
|
|
|
|
|
|
|
function destroy() { |
|
|
|
|
|
if (network !== null) { |
|
|
|
|
|
network.destroy(); |
|
|
|
|
|
network = null; |
|
|
|
|
|
|
|
|
// if we click on a node, we want to open it up! |
|
|
|
|
|
network.on("selectNode", function (params) { |
|
|
|
|
|
if (params.nodes.length == 1) { |
|
|
|
|
|
if (network.isCluster(params.nodes[0]) == true) { |
|
|
|
|
|
network.openCluster(params.nodes[0]) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function draw() { |
|
|
|
|
|
destroy(); |
|
|
|
|
|
// randomly create some nodes and edges |
|
|
|
|
|
var nodeCount = document.getElementById('nodeCount').value; |
|
|
|
|
|
//var data = getScaleFreeNetwork(nodeCount) |
|
|
|
|
|
var nodes = [ |
|
|
|
|
|
{id: 4, label: '4'}, |
|
|
|
|
|
{id: 5, label: '5'}, |
|
|
|
|
|
{id: 7, label: '7'}, |
|
|
|
|
|
{id: 9, label: '9'}, |
|
|
|
|
|
{id: 10, label: '10'}, |
|
|
|
|
|
{id: 101, label: '101'}, |
|
|
|
|
|
{id: 102, label: '102'}, |
|
|
|
|
|
{id: 103, label: '103'} |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
// create an array with edges |
|
|
|
|
|
var edges = [ |
|
|
|
|
|
{from: 10, to: 4}, |
|
|
|
|
|
{from: 7, to: 5}, |
|
|
|
|
|
{from: 9, to: 7}, |
|
|
|
|
|
{from: 10, to: 9}, |
|
|
|
|
|
{from: 101, to: 102}, |
|
|
|
|
|
{from: 102, to: 103} |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
var data = { |
|
|
|
|
|
nodes: nodes, |
|
|
|
|
|
edges: edges |
|
|
|
|
|
}; |
|
|
|
|
|
// create a network |
|
|
|
|
|
var container = document.getElementById('mynetwork'); |
|
|
|
|
|
var directionInput = document.getElementById("direction").value; |
|
|
|
|
|
var options = { |
|
|
|
|
|
interaction: { |
|
|
|
|
|
navigationButtons: true |
|
|
|
|
|
}, |
|
|
|
|
|
layout: { |
|
|
|
|
|
hierarchical: { |
|
|
|
|
|
direction: directionInput |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
network = new vis.Network(container, data, options); |
|
|
|
|
|
|
|
|
|
|
|
// add event listeners |
|
|
|
|
|
network.on('select', function (params) { |
|
|
|
|
|
document.getElementById('selection').innerHTML = 'Selection: ' + params.nodes; |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
setTimeout(function() { |
|
|
|
|
|
// alert("Clustering 2 and 'b'"); |
|
|
|
|
|
var clusterOptionsByData = { |
|
|
|
|
|
joinCondition: function(node) { |
|
|
|
|
|
if (node.id == '2' || node.id == 'b') |
|
|
|
|
|
return true; |
|
|
|
|
|
return false; |
|
|
|
|
|
}, |
|
|
|
|
|
clusterNodeProperties: {id:"c1", label:'c1'} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function changeOptions(directionInputValue) { |
|
|
|
|
|
network.setOptions({ |
|
|
|
|
|
layout: { |
|
|
|
|
|
hierarchical: { |
|
|
|
|
|
direction: directionInputValue |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
network.cluster(clusterOptionsByData); |
|
|
|
|
|
}, 1) |
|
|
|
|
|
|
|
|
|
|
|
setTimeout(function() { |
|
|
|
|
|
// alert("Clustering 4 and 'd'"); |
|
|
|
|
|
var clusterOptionsByData = { |
|
|
|
|
|
joinCondition: function(node) { |
|
|
|
|
|
if (node.id == '4' || node.id == 'd') |
|
|
|
|
|
return true; |
|
|
|
|
|
return false; |
|
|
|
|
|
}, |
|
|
|
|
|
clusterNodeProperties: {id:"c2", label:'c2'} |
|
|
} |
|
|
} |
|
|
|
|
|
network.cluster(clusterOptionsByData); |
|
|
|
|
|
}, 100) |
|
|
|
|
|
|
|
|
|
|
|
setTimeout(function() { |
|
|
|
|
|
// alert('Changing to UD layout'); |
|
|
|
|
|
customLayout = { hierarchical: { direction: "UD" } }; |
|
|
|
|
|
network.setOptions({layout: customLayout}); |
|
|
|
|
|
}, 300) |
|
|
|
|
|
|
|
|
|
|
|
// setTimeout(function() { |
|
|
|
|
|
// alert('Changing to DEFAULT layout, but does not work'); |
|
|
|
|
|
// customLayout = {}; |
|
|
|
|
|
// network.setOptions({"layout": { |
|
|
|
|
|
// "hierarchical": { |
|
|
|
|
|
// "enabled": false |
|
|
|
|
|
// } |
|
|
|
|
|
// }}); |
|
|
|
|
|
// }, 15000) |
|
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
</head> |
|
|
|
|
|
|
|
|
|
|
|
<body onload="draw();"> |
|
|
|
|
|
<h2>Hierarchical Layout - Scale-Free-Network</h2> |
|
|
|
|
|
|
|
|
|
|
|
<div style="width:700px; font-size:14px; text-align: justify;"> |
|
|
|
|
|
This example shows the randomly generated <b>scale-free-network</b> set of nodes and connected edges from example 2. |
|
|
|
|
|
In this example, hierarchical layout has been enabled and the vertical levels are determined automatically. |
|
|
|
|
|
</div> |
|
|
|
|
|
<br/> |
|
|
|
|
|
|
|
|
|
|
|
<form onsubmit="draw(); return false;"> |
|
|
|
|
|
<label for="nodeCount">Number of nodes:</label> |
|
|
|
|
|
<input id="nodeCount" type="text" value="25" style="width: 50px;"> |
|
|
|
|
|
<input type="submit" value="Go"> |
|
|
|
|
|
</form> |
|
|
|
|
|
<p> |
|
|
|
|
|
<input type="button" id="btn-UD" value="Up-Down"> |
|
|
|
|
|
<input type="button" id="btn-DU" value="Down-Up"> |
|
|
|
|
|
<input type="button" id="btn-LR" value="Left-Right"> |
|
|
|
|
|
<input type="button" id="btn-RL" value="Right-Left"> |
|
|
|
|
|
<input type="hidden" id='direction' value="UD"> |
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
<script language="javascript"> |
|
|
|
|
|
var directionInput = document.getElementById("direction"); |
|
|
|
|
|
var btnUD = document.getElementById("btn-UD"); |
|
|
|
|
|
btnUD.onclick = function () { |
|
|
|
|
|
directionInput.value = "UD"; |
|
|
|
|
|
changeOptions(directionInput.value); |
|
|
|
|
|
} |
|
|
|
|
|
var btnDU = document.getElementById("btn-DU"); |
|
|
|
|
|
btnDU.onclick = function () { |
|
|
|
|
|
directionInput.value = "DU"; |
|
|
|
|
|
changeOptions(directionInput.value); |
|
|
|
|
|
}; |
|
|
|
|
|
var btnLR = document.getElementById("btn-LR"); |
|
|
|
|
|
btnLR.onclick = function () { |
|
|
|
|
|
directionInput.value = "LR"; |
|
|
|
|
|
changeOptions(directionInput.value); |
|
|
|
|
|
}; |
|
|
|
|
|
var btnRL = document.getElementById("btn-RL"); |
|
|
|
|
|
btnRL.onclick = function () { |
|
|
|
|
|
directionInput.value = "RL"; |
|
|
|
|
|
changeOptions(directionInput.value); |
|
|
|
|
|
}; |
|
|
|
|
|
</script> |
|
|
</script> |
|
|
<br> |
|
|
|
|
|
|
|
|
|
|
|
<div id="mynetwork"></div> |
|
|
|
|
|
|
|
|
|
|
|
<p id="selection"></p> |
|
|
|
|
|
</body> |
|
|
</body> |
|
|
</html> |
|
|
|
|
|
|
|
|
</html> |