-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmake-graph.js
More file actions
149 lines (133 loc) · 4.69 KB
/
make-graph.js
File metadata and controls
149 lines (133 loc) · 4.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
make-graph.js: initialises graph for website
*/
import { parseClassData, parseClassPrereqData } from './parse-data.js';
import { parseCsvData } from './parseCsvData.js';
import { colorLuminance } from './lighten-color.js';
// initialiseNetwork: void function that initialises network
// based off of class data
function initialiseNetwork(classData) {
// create nodes
var nodeList = parseClassData(classData);
console.log(nodeList);
var nodes = new vis.DataSet(nodeList);
// create edges
var edgeList = parseClassPrereqData(classData);
console.log(edgeList);
var edges = new vis.DataSet(edgeList);
// create the network
var container = document.getElementById('mynetwork');
// provide the data in the vis format
var data = {
nodes: nodes,
edges: edges,
};
// provide options (characteristics) of canvas
var options = {
layout: {
hierarchical: {
enabled: true,
direction: 'LR',
nodeSpacing: 300,
levelSeparation: 400,
},
randomSeed: '0.5650852741192154:1612598600483',
},
nodes: {
font: {
multi: 'html',
},
}
}
// initialise network
var network = new vis.Network(container, data, options);
network.startSimulation();
console.log(nodes);
// when node is selected, change color of edges coming to and from
// the node
// change all arrows to black first
network.on("selectNode", function (params) {
// console.log(params.edges);
// console.log(params.nodes[0]);
let selectedNodeId = params.nodes[0];
let selectedNode = nodes.get(selectedNodeId);
let selectedNodeBackground = selectedNode.color.background;
// console.log(selectedNode.color);
// params.edges = edges connected to node
let edgeList = [];
var edge;
for (var edge in params.edges) {
// console.log(params.edges[edge]);
edgeList.push(edges.get(params.edges[edge]));
}
// edgeList now contains all the *edges* (NOT just edge ids)
// that is connected to the node
// console.log(edgeList);
// console.log("#" + selectedNode.color.background);
for (var edge in edgeList) {
// console.log(edgeList[edge].id.split(" => "));
let fromNodeId = edgeList[edge].id.split(" -> ")[0];
// console.log(fromNodeId)
// console.log(params.nodes[0]);
// console.log(fromNodeId === params.nodes[0]);
// console.log(lightenColor(selectedNode.color.background, 80));
if (fromNodeId === params.nodes[0]) {
// for "outgoing" arrows
edgeList[edge] = {
// color: '#4c4c4c',
color: colorLuminance(selectedNodeBackground, -0.4),
id: edgeList[edge].id,
};
}
else {
// for "incoming" arrows
edgeList[edge] = {
color: colorLuminance(selectedNodeBackground, 0),
id: edgeList[edge].id,
}
}
// console.log(edgeList[edge]);
edges.update(edgeList[edge]);
}
})
// when node is deselected, change color of edges back to grey, or
// #bdbdbd
network.on("deselectNode", function (params) {
// console.log(params.previousSelection.nodes[0].edges);
// edgeIdList contains all the edge ids of the edges
// that were connected to the deselected node
let edgeIdList = params.previousSelection.nodes[0].edges;
// console.log(edgeIdList);
// params.edges = edges connected to node
let edgeList = [];
var edge;
for (var i in edgeIdList) {
// console.log(edgeIdList[i]);
edgeList.push(edgeIdList[i]);
}
// edgeList now contains all the *edges* (NOT just edge ids)
// that is connected to the node
// console.log(edgeList);
for (var edge in edgeList) {
edgeList[edge] = {
color: '#bdbdbd',
id: edgeList[edge].id,
}
edges.update(edgeList[edge]);
}
// network.stopSimulation();
})
// get seed of layout when double click
network.on("doubleClick", function (params) {
console.log(network.getSeed());
})
}
Papa.parse("class-data.csv", {
comments: "//",
delimiter: ";; ",
download: true,
complete: function (results) {
// console.log(results.data);
initialiseNetwork(parseCsvData(results.data));
}
});