|
|
- // some global vars
- var network;
- var connectedNodes = [];
- var largeNode = undefined;
- var NORMAL_SIZE = 60;
- var LARGE_SIZE = 60;
- var IMAGE_PATH = './images/exampleScreenshots/';
-
- function loadVis(SPACING) {
- // getting the sizes of the containers
- var linksContainer = document.getElementById('contentContainer');
- var networkContainer = document.getElementById('networkContainer');
- var linksContainerRect = linksContainer.getBoundingClientRect();
- var linksContainerHeight = linksContainerRect.bottom - linksContainerRect.top;
-
- networkContainer.style.height = (linksContainerHeight + LARGE_SIZE) + 'px';
- linksContainer.style.marginTop = '-' + (linksContainerHeight + LARGE_SIZE) + 'px';
-
- // constructing nodes and edges from links with class exampleLink
- var links = linksContainer.getElementsByTagName('a');
- var nodesArray = [];
- var edgesArray = [];
- var idCounter = 0;
- var firstLink = undefined;
- for (var i = 0; i < links.length; i++) {
- var link = links[i];
- if (link.className === 'exampleLink') {
- var exampleName = link.getAttribute('href').replace('.html','').replace('examples/','');
-
- var linkRect = link.getBoundingClientRect();
- var linkWidth = linkRect.right - linkRect.left;
-
- if (firstLink === undefined) {
- firstLink = link;
- }
- nodesArray.push({id:idCounter,
- x:link.offsetLeft + linkWidth,
- y:link.offsetTop,
- color:{
- background:'rgba(0,0,0,0.0)',
- border:'rgba(70,158,255,0)'
- },
- shape:'dot',
- size:2,
- fixed:true
- });
- nodesArray.push({id:idCounter + 'image',
- x:link.offsetLeft + 400 + 100 + (idCounter % 3) * SPACING,
- y:link.offsetTop,
- color:{
- border:'rgba(70,158,255,1)'
- },
- shadow:{
- size:2,
- x:0,
- y:0
- },
- shape:'image',
- image:IMAGE_PATH+(exampleName)+'.png',
- size:NORMAL_SIZE
- });
- edgesArray.push({from: idCounter, to: idCounter+'image', arrows:'from'});
- idCounter += 1;
- }
- }
-
- // making a dataset.
- var nodes = new vis.DataSet(nodesArray);
- var edges = new vis.DataSet(edgesArray);
-
- // creating a network
- var networkContainer = document.getElementById('networkContainer');
- var data = {
- nodes: nodes,
- edges: edges
- };
- var options = {
- edges:{
- color:{inherit:'both'},
- smooth:false
- },
- physics: false,
- interaction:{
- zoomView:false,
- dragView: false
- }
- };
- network = new vis.Network(networkContainer, data, options);
-
- // get the offset or the camera
- var firstLinkPos = {x:firstLink.offsetLeft, y:firstLink.offsetTop};
- var firstLinkRect = firstLink.getBoundingClientRect();
- var firstLinkWidth = firstLinkRect.right - firstLinkRect.left;
- var firstLinkHeight = firstLinkRect.bottom - firstLinkRect.top;
- var networkContainerRect = networkContainer.getBoundingClientRect();
- var networkContainerWidth = networkContainerRect.right - networkContainerRect.left;
- var networkContainerHeight = networkContainerRect.bottom - networkContainerRect.top;
- var ydiff = linksContainer.offsetTop - networkContainer.offsetTop;
-
- // move the camera
- network.moveTo({
- scale: 1,
- position: network.getPositions([0])[0],
- offset: {
- x: -0.5 * networkContainerWidth + firstLinkPos.x + firstLinkWidth,
- y: -0.5 * networkContainerHeight + firstLinkPos.y + ydiff + 0.5 * firstLinkHeight
- },
- animation: false
- });
-
- // onclick handler
- linksContainer.onclick = function (event) {
- var nodeUnderCursor = network.getNodeAt({x:event.layerX, y:event.layerY+ydiff});
- if (nodeUnderCursor !== undefined) {
- var url = nodes.get(nodeUnderCursor).image.replace(IMAGE_PATH, './examples/').replace(".png",".html");
- window.location.href = url;
- }
- }
-
- // throttled mouse move handler
- var t0 = new Date().valueOf();
- linksContainer.onmousemove = function (event) {
- if (new Date().valueOf() - t0 > 60) {
- handleMouse(event);
- t0 = new Date().valueOf();
- }
- }
-
-
- // get a node at a position, select the node, update the dataset
- function handleMouse(event) {
- var nodeUnderCursor = network.getNodeAt({x:event.layerX, y:event.layerY+ydiff});
- if (connectedNodes.length > 0) {
- nodes.update([{id: connectedNodes[0], color: {border: 'rgba(70,158,255,0)'}}])
- connectedNodes = []
- }
-
- if (largeNode !== undefined) {
- nodes.update([{id: largeNode, size: NORMAL_SIZE}]);
- largeNode = undefined;
- }
-
-
- if (nodeUnderCursor !== undefined) {
- connectedNodes = network.getConnectedNodes(nodeUnderCursor);
- largeNode = nodeUnderCursor;
- nodes.update([{id: largeNode, size: LARGE_SIZE}, {id: connectedNodes[0],color: {border: 'rgba(70,158,255,1)'}}]);
- network.selectNodes([nodeUnderCursor]);
- }
- else {
- network.unselectAll();
- }
- }
- }
|