-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
104 lines (89 loc) · 3.17 KB
/
Copy pathscript.js
File metadata and controls
104 lines (89 loc) · 3.17 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
let includeCompleted = false;
document.addEventListener("DOMContentLoaded", () => {
const filterInput = document.getElementById("filter");
backupLabels();
updateColors();
filterInput.addEventListener("input", (event) => {
selectNodesNeighbourhood(event.target.value);
});
document.getElementById("checkbox")
.addEventListener("change", (event) => {
includeCompleted = event.target.checked;
toggleCompletedCourses();
if (includeCompleted) {
selectNodesNeighbourhood(filterInput.value);
}
});
toggleCompletedCourses();
});
function backupLabels() {
for (let nodeId in allNodes) {
if (allNodes[nodeId].label !== undefined) {
allNodes[nodeId].savedLabel = allNodes[nodeId].label;
}
}
}
function updateColors() {
let nodesToUpdate = [];
let redNodes = new Set();
let greenNodes = new Set(Object.keys(allNodes)
.filter((node) =>
!node.includes('OR') &&
allNodes[node].color == "#00b200"))
let nodeReqs = {};
for (let edgeId in allEdges) {
const { from: edgeFrom, to: edgeTo } = allEdges[edgeId];
if (!redNodes.has(edgeFrom) && greenNodes.has(edgeFrom)) {
if (greenNodes.has(edgeTo) || edgeTo.includes('OR')) {
allNodes[edgeFrom].color = "#b20000"
nodeColors[edgeFrom] = "#b20000"
nodesToUpdate.push(allNodes[edgeFrom]);
} else {
if (nodeReqs[edgeFrom] === undefined) {
nodeReqs[edgeFrom] = []
}
nodeReqs[edgeFrom].push(edgeTo)
}
}
}
nodes.update(nodesToUpdate);
}
function toggleCompletedCourses() {
let updateArray = [];
for (let nodeId in allNodes) {
if (allNodes[nodeId].color === "#808080") {
allNodes[nodeId].hidden = !includeCompleted;
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
}
function selectNodesNeighbourhood(value) {
let mainNodes = new Set(Object.keys(allNodes)
.filter((node) => node.includes(value)));
for (let nodeId in allNodes) {
allNodes[nodeId].hidden = true;
allNodes[nodeId].color = nodeColors[nodeId];
}
let neighbour1 = new Set();
for (let nodeId of mainNodes) {
allNodes[nodeId].hidden = false;
allNodes[nodeId].color = nodeColors[nodeId];
network.getConnectedNodes(nodeId).forEach((n) => neighbour1.add(n));
}
for (let nodeId of neighbour1) {
if (allNodes[nodeId].hidden === false) {
continue;
}
allNodes[nodeId].hidden = false;
allNodes[nodeId].color = `rgba(
${parseInt(nodeColors[nodeId].substring(1, 3), 16)},
${parseInt(nodeColors[nodeId].substring(3, 5), 16)},
${parseInt(nodeColors[nodeId].substring(5, 7), 16)}, 0.5)`;
}
var updateArray = [];
for (let nodeId in allNodes) {
updateArray.push(allNodes[nodeId]);
}
nodes.update(updateArray);
}