Browse Source

Updated some more examples

flowchartTest
jos 9 years ago
parent
commit
f676845247
6 changed files with 239 additions and 221 deletions
  1. +12
    -9
      examples/network/27_world_cup_network.html
  2. +19
    -14
      examples/network/28_world_cup_network_performance.html
  3. +150
    -145
      examples/network/29_neighbourhood_highlight.html
  4. +8
    -8
      examples/network/30_importing_from_gephi.html
  5. +48
    -44
      examples/network/31_localization.html
  6. +2
    -1
      examples/network/39_newClustering.html

+ 12
- 9
examples/network/27_world_cup_network.html View File

@ -63,8 +63,8 @@ Roundness (0..1):
for the others) for the others)
<br/> <br/>
Hide edges on drag: <input type="checkbox" checked="checked" Hide edges on drag: <input type="checkbox" checked="checked"
id="hideEdgesOnDrag"><br/>
Hide nodes on drag: <input type="checkbox" id="hideNodesOnDrag">
id="hideEdgesOnDrag" /><br/>
Hide nodes on drag: <input type="checkbox" id="hideNodesOnDrag" />
<div id="mynetwork"></div> <div id="mynetwork"></div>
@ -101,17 +101,17 @@ Hide nodes on drag:
}, },
font: { font: {
size: 12, size: 12,
face: "Tahoma"
face: 'Tahoma'
} }
}, },
edges: { edges: {
width: 0.15, width: 0.15,
color: { color: {
inherit: (inheritColorVal == "false") ? false : inheritColorVal
inherit: (inheritColorVal == 'false') ? false : inheritColorVal
}, },
smooth: { smooth: {
dynamic: false, dynamic: false,
type: "continuous"
type: 'continuous'
} }
}, },
interaction: { interaction: {
@ -125,23 +125,26 @@ Hide nodes on drag:
// Note: data is coming from ./data/WorldCup2014.js // Note: data is coming from ./data/WorldCup2014.js
network = new vis.Network(container, data, options); network = new vis.Network(container, data, options);
network.fit({animation: false});
network.fit({duration: 0});
} }
function update() { function update() {
var type = dropdown.value; var type = dropdown.value;
var roundness = roundnessSlider.value;
var roundness = parseFloat(roundnessSlider.value);
roundnessScreen.value = roundness; roundnessScreen.value = roundness;
var options = { var options = {
edges: { edges: {
smooth: { smooth: {
type: type, type: type,
roundness: roundness roundness: roundness
} }
},
rendering: {
hideEdgesOnDrag: hideEdgesOnDrag.checked,
hideNodesOnDrag: hideNodesOnDrag.checked
} }
}; };
options.rendering.hideEdgesOnDrag = hideEdgesOnDrag.checked;
options.rendering.hideNodesOnDrag = hideNodesOnDrag.checked;
network.setOptions(options); network.setOptions(options);
} }

+ 19
- 14
examples/network/28_world_cup_network_performance.html View File

@ -54,32 +54,37 @@
var options = { var options = {
nodes: { nodes: {
shape: 'dot', shape: 'dot',
radiusMin: 10,
radiusMax: 30,
fontSize: 12,
fontFace: "Tahoma"
scaling: {
min: 10,
max: 30
},
font: {
size: 12,
face: 'Tahoma'
}
}, },
edges: { edges: {
width: 0.15, width: 0.15,
inheritColor: "from"
},
tooltip: {
delay: 200,
fontSize: 12,
color: {
background: "#fff"
color: {inherit: 'from'},
smooth: {
dynamic: false,
type: 'continuous'
} }
}, },
stabilize: false,
smoothCurves: {dynamic: false, type: "continuous"},
physics: { physics: {
stabilization: false,
barnesHut: { barnesHut: {
gravitationalConstant: -80000, gravitationalConstant: -80000,
springConstant: 0.001, springConstant: 0.001,
springLength: 200 springLength: 200
} }
}, },
hideEdgesOnDrag: true
interaction: {
tooltipDelay: 200
},
rendering: {
hideEdgesOnDrag: true
}
}; };
// Note: data is coming from ./data/WorldCup2014.js // Note: data is coming from ./data/WorldCup2014.js

+ 150
- 145
examples/network/29_neighbourhood_highlight.html View File

@ -1,42 +1,42 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- saved from url=(0044)http://kenedict.com/networks/worldcup14/vis/ , thanks Andre!--> <!-- saved from url=(0044)http://kenedict.com/networks/worldcup14/vis/ , thanks Andre!-->
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF8"> <html><head><meta http-equiv="content-type" content="text/html; charset=UTF8">
<title>Network | Static smooth curves - World Cup Network</title>
<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 type="text/javascript" src="../../dist/vis.js"></script>
<link type="text/css" rel="stylesheet" href="../../dist/vis.css">
<script src="./data/WorldCup2014.js"></script>
<script src="./data/WorldCup2014.js"></script>
<style type="text/css">
#mynetwork {
width: 800px;
height: 800px;
border: 1px solid lightgray;
}
</style>
<script src="../googleAnalytics.js"></script>
<style type="text/css">
#mynetwork {
width: 800px;
height: 800px;
border: 1px solid lightgray;
}
</style>
<script src="../googleAnalytics.js"></script>
</head> </head>
<body> <body>
<h2>Dynamic Data - Neighbourhood Highlight</h2> <h2>Dynamic Data - Neighbourhood Highlight</h2>
<div style="width:800px; font-size:14px;"> <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 20ms, the rest of the time is the redrawing of the network (9200 edges..).
<br /><br />
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 20ms, the rest of the time is the redrawing of the network (9200 edges..).
<br /><br />
</div> </div>
<div id="mynetwork"></div> <div id="mynetwork"></div>
<script type="text/javascript"> <script type="text/javascript">
var network;
var network;
var nodes = new vis.DataSet();
var edges = new vis.DataSet();
var nodes = new vis.DataSet();
var edges = new vis.DataSet();
function redrawAll() {
function redrawAll() {
nodes.clear(); nodes.clear();
edges.clear(); edges.clear();
@ -44,173 +44,178 @@ function redrawAll() {
var container = document.getElementById('mynetwork'); var container = document.getElementById('mynetwork');
var options = { var options = {
nodes: {
shape: 'dot',
radiusMin: 10,
radiusMax: 30,
fontSize: 12,
fontFace: "Tahoma",
scaleFontWithValue:true,
fontSizeMin:8,
fontSizeMax:20,
fontThreshold:12,
fontSizeMaxVisible:20
},
edges: {
width: 0.15,
inheritColor: "from"
nodes: {
shape: 'dot',
scaling: {
min: 10,
max: 30,
label: {
min: 8,
max: 20,
drawThreshold: 12,
maxVisible: 20
}
}, },
tooltip: {
delay: 200,
fontSize: 12,
color: {
background: "#fff"
}
},
smoothCurves: {dynamic:false, type: "continuous"},
stabilize: false,
physics: {barnesHut: {gravitationalConstant: 0, centralGravity: 0, springConstant: 0}},
font: {
size: 12,
face: 'Tahoma'
}
},
edges: {
width: 0.15,
color: {inherit: 'from'},
smooth: {
dynamic: false,
type: 'continuous'
}
},
physics: false,
interaction: {
tooltipDelay: 200
},
rendering: {
hideEdgesOnDrag: true hideEdgesOnDrag: true
}
}; };
// Note: data is coming from ./data/WorldCup2014.js // Note: data is coming from ./data/WorldCup2014.js
network = new vis.Network(container, data, options); network = new vis.Network(container, data, options);
network.on("click",onClick); network.on("click",onClick);
}
}
function onClick(selectedItems) {
function onClick(selectedItems) {
var nodeId; var nodeId;
var degrees = 2; var degrees = 2;
// we get all data from the dataset once to avoid updating multiple times. // we get all data from the dataset once to avoid updating multiple times.
var allNodes = nodes.get({returnType:"Object"}); var allNodes = nodes.get({returnType:"Object"});
if (selectedItems.nodes.length == 0) { if (selectedItems.nodes.length == 0) {
// restore on unselect
for (nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
allNodes[nodeId].color = undefined;
if (allNodes[nodeId].oldLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].oldLabel;
allNodes[nodeId].oldLabel = undefined;
}
allNodes[nodeId]['levelOfSeperation'] = undefined;
allNodes[nodeId]['inConnectionList'] = undefined;
}
// restore on unselect
for (nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
allNodes[nodeId].color = undefined;
if (allNodes[nodeId].oldLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].oldLabel;
allNodes[nodeId].oldLabel = undefined;
}
allNodes[nodeId]['levelOfSeperation'] = undefined;
allNodes[nodeId]['inConnectionList'] = undefined;
} }
}
} }
else { else {
// we clear the level of separation in all nodes.
clearLevelOfSeperation(allNodes);
// we will now start to collect all the connected nodes we want to highlight.
var connectedNodes = selectedItems.nodes;
// we can store them into levels of separation and we could then later use this to define a color per level
// any data can be added to a node, this is just stored in the nodeObject.
storeLevelOfSeperation(connectedNodes,0, allNodes);
for (var i = 1; i < degrees + 1; i++) {
appendConnectedNodes(connectedNodes);
storeLevelOfSeperation(connectedNodes, i, allNodes);
}
for (nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
if (allNodes[nodeId]['inConnectionList'] == true) {
if (allNodes[nodeId]['levelOfSeperation'] !== undefined) {
if (allNodes[nodeId]['levelOfSeperation'] >= 2) {
allNodes[nodeId].color = 'rgba(150,150,150,0.75)';
}
else {
allNodes[nodeId].color = undefined;
}
}
else {
allNodes[nodeId].color = undefined;
}
if (allNodes[nodeId].oldLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].oldLabel;
allNodes[nodeId].oldLabel = undefined;
}
}
else {
allNodes[nodeId].color = 'rgba(200,200,200,0.5)';
if (allNodes[nodeId].oldLabel === undefined) {
allNodes[nodeId].oldLabel = allNodes[nodeId].label;
allNodes[nodeId].label = "";
}
}
// we clear the level of separation in all nodes.
clearLevelOfSeperation(allNodes);
// we will now start to collect all the connected nodes we want to highlight.
var connectedNodes = selectedItems.nodes;
// we can store them into levels of separation and we could then later use this to define a color per level
// any data can be added to a node, this is just stored in the nodeObject.
storeLevelOfSeperation(connectedNodes,0, allNodes);
for (var i = 1; i < degrees + 1; i++) {
appendConnectedNodes(connectedNodes);
storeLevelOfSeperation(connectedNodes, i, allNodes);
}
for (nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
if (allNodes[nodeId]['inConnectionList'] == true) {
if (allNodes[nodeId]['levelOfSeperation'] !== undefined) {
if (allNodes[nodeId]['levelOfSeperation'] >= 2) {
allNodes[nodeId].color = 'rgba(150,150,150,0.75)';
}
else {
allNodes[nodeId].color = undefined;
}
}
else {
allNodes[nodeId].color = undefined;
}
if (allNodes[nodeId].oldLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].oldLabel;
allNodes[nodeId].oldLabel = undefined;
} }
}
else {
allNodes[nodeId].color = 'rgba(200,200,200,0.5)';
if (allNodes[nodeId].oldLabel === undefined) {
allNodes[nodeId].oldLabel = allNodes[nodeId].label;
allNodes[nodeId].label = '';
}
}
} }
}
} }
var updateArray = []; var updateArray = [];
for (nodeId in allNodes) { for (nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
updateArray.push(allNodes[nodeId]);
}
if (allNodes.hasOwnProperty(nodeId)) {
updateArray.push(allNodes[nodeId]);
}
} }
nodes.update(updateArray); nodes.update(updateArray);
}
}
/**
* update the allNodes object with the level of separation.
* Arrays are passed by reference, we do not need to return them because we are working in the same object.
*/
function storeLevelOfSeperation(connectedNodes, level, allNodes) {
/**
* update the allNodes object with the level of separation.
* Arrays are passed by reference, we do not need to return them because we are working in the same object.
*/
function storeLevelOfSeperation(connectedNodes, level, allNodes) {
for (var i = 0; i < connectedNodes.length; i++) { for (var i = 0; i < connectedNodes.length; i++) {
var nodeId = connectedNodes[i];
if (allNodes[nodeId]['levelOfSeperation'] === undefined) {
allNodes[nodeId]['levelOfSeperation'] = level;
}
allNodes[nodeId]['inConnectionList'] = true;
var nodeId = connectedNodes[i];
if (allNodes[nodeId]['levelOfSeperation'] === undefined) {
allNodes[nodeId]['levelOfSeperation'] = level;
}
allNodes[nodeId]['inConnectionList'] = true;
} }
}
}
function clearLevelOfSeperation(allNodes) {
function clearLevelOfSeperation(allNodes) {
for (var nodeId in allNodes) { for (var nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
allNodes[nodeId]['levelOfSeperation'] = undefined;
allNodes[nodeId]['inConnectionList'] = undefined;
}
if (allNodes.hasOwnProperty(nodeId)) {
allNodes[nodeId]['levelOfSeperation'] = undefined;
allNodes[nodeId]['inConnectionList'] = undefined;
}
} }
}
/**
* Add the connected nodes to the list of nodes we already have
*
*
*/
function appendConnectedNodes(sourceNodes) {
}
/**
* Add the connected nodes to the list of nodes we already have
*
*
*/
function appendConnectedNodes(sourceNodes) {
var tempSourceNodes = []; var tempSourceNodes = [];
// first we make a copy of the nodes so we do not extend the array we loop over. // first we make a copy of the nodes so we do not extend the array we loop over.
for (var i = 0; i < sourceNodes.length; i++) { for (var i = 0; i < sourceNodes.length; i++) {
tempSourceNodes.push(sourceNodes[i])
tempSourceNodes.push(sourceNodes[i])
} }
for (var i = 0; i < tempSourceNodes.length; i++) { for (var i = 0; i < tempSourceNodes.length; i++) {
var nodeId = tempSourceNodes[i];
if (sourceNodes.indexOf(nodeId) == -1) {
sourceNodes.push(nodeId);
}
var connectedNodes = network.getConnectedNodes(nodeId);
addUnique(connectedNodes,sourceNodes);
var nodeId = tempSourceNodes[i];
if (sourceNodes.indexOf(nodeId) == -1) {
sourceNodes.push(nodeId);
}
var connectedNodes = network.getConnectedNodes(nodeId);
addUnique(connectedNodes,sourceNodes);
} }
tempSourceNodes = null; tempSourceNodes = null;
}
/**
* Join two arrays without duplicates
* @param fromArray
* @param toArray
*/
function addUnique(fromArray, toArray) {
}
/**
* Join two arrays without duplicates
* @param fromArray
* @param toArray
*/
function addUnique(fromArray, toArray) {
for (var i = 0; i < fromArray.length; i++) { for (var i = 0; i < fromArray.length; i++) {
if (toArray.indexOf(fromArray[i]) == -1) {
toArray.push(fromArray[i]);
}
if (toArray.indexOf(fromArray[i]) == -1) {
toArray.push(fromArray[i]);
}
} }
}
}
redrawAll()
redrawAll()
</script> </script>

+ 8
- 8
examples/network/30_importing_from_gephi.html View File

@ -84,15 +84,15 @@
var nodes = new vis.DataSet(); var nodes = new vis.DataSet();
var edges = new vis.DataSet(); var edges = new vis.DataSet();
var gephiImported; var gephiImported;
var allowedToMoveCheckbox = document.getElementById("allowedToMove");
var allowedToMoveCheckbox = document.getElementById('allowedToMove');
allowedToMoveCheckbox.onchange = redrawAll; allowedToMoveCheckbox.onchange = redrawAll;
var parseColorCheckbox = document.getElementById("parseColor");
var parseColorCheckbox = document.getElementById('parseColor');
parseColorCheckbox.onchange = redrawAll; parseColorCheckbox.onchange = redrawAll;
var nodeContent = document.getElementById("nodeContent");
var nodeContent = document.getElementById('nodeContent');
loadJSON("./data/WorldCup2014.json", redrawAll);
loadJSON('./data/WorldCup2014.json', redrawAll);
var container = document.getElementById('mynetwork'); var container = document.getElementById('mynetwork');
var data = { var data = {
@ -103,17 +103,17 @@
nodes: { nodes: {
shape: 'dot', shape: 'dot',
font: { font: {
face: "Tahoma"
face: 'Tahoma'
} }
}, },
edges: { edges: {
width: 0.15, width: 0.15,
color: { color: {
inherit: "from"
inherit: 'from'
}, },
smooth: { smooth: {
dynamic: false, dynamic: false,
type: "continuous"
type: 'continuous'
} }
}, },
interaction: { interaction: {
@ -199,7 +199,7 @@
} }
} }
}; };
xhr.open("GET", path, true);
xhr.open('GET', path, true);
xhr.send(); xhr.send();
} }

+ 48
- 44
examples/network/31_localization.html View File

@ -125,45 +125,48 @@
physics: { physics: {
stabilization: false stabilization: false
}, },
manipulation: 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('network-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('network-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';
},
onConnect: function(data,callback) {
if (data.from == data.to) {
var r=confirm("Do you want to connect the node to itself?");
if (r==true) {
callback(data);
manipulation: {
//handlerFunctions: {
addNode: 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('network-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';
},
editNode: 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('network-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';
},
addEdge: function(data,callback) {
if (data.from == data.to) {
var r=confirm("Do you want to connect the node to itself?");
if (r==true) {
callback(data);
}
}
else {
callback(data);
}
} }
}
else {
callback(data);
}
//}
} }
}; };
network = new vis.Network(container, data, options); network = new vis.Network(container, data, options);
@ -187,7 +190,6 @@
function saveData(data,callback) { function saveData(data,callback) {
var idInput = document.getElementById('node-id'); var idInput = document.getElementById('node-id');
var labelInput = document.getElementById('node-label'); var labelInput = document.getElementById('node-label');
var div = document.getElementById('network-popUp');
data.id = idInput.value; data.id = idInput.value;
data.label = labelInput.value; data.label = labelInput.value;
clearPopUp(); clearPopUp();
@ -199,7 +201,9 @@
var select = document.getElementById('locale'); var select = document.getElementById('locale');
select.onchange = function () { select.onchange = function () {
network.setOptions({ network.setOptions({
locale: this.value
manipulation: {
locale: this.value
}
}); });
}; };
select.onchange(); select.onchange();
@ -225,13 +229,13 @@
<div id="network-popUp"> <div id="network-popUp">
<span id="operation">node</span> <br> <span id="operation">node</span> <br>
<table style="margin:auto;"><tr> <table style="margin:auto;"><tr>
<td>id</td><td><input id="node-id" value="new value"></td>
<td>id</td><td><input id="node-id" value="new value" /></td>
</tr> </tr>
<tr> <tr>
<td>label</td><td><input id="node-label" value="new value"> </td>
<td>label</td><td><input id="node-label" value="new value" /></td>
</tr></table> </tr></table>
<input type="button" value="save" id="saveButton"></button>
<input type="button" value="cancel" id="cancelButton"></button>
<input type="button" value="save" id="saveButton" />
<input type="button" value="cancel" id="cancelButton" />
</div> </div>
<br /> <br />
<div id="mynetwork"></div> <div id="mynetwork"></div>

+ 2
- 1
examples/network/39_newClustering.html View File

@ -13,7 +13,8 @@
border: 1px solid lightgray; border: 1px solid lightgray;
} }
</style> </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>
<script src="../googleAnalytics.js"></script>
</head>
<body> <body>

Loading…
Cancel
Save