-
Notifications
You must be signed in to change notification settings - Fork 121
/
graph.js
122 lines (95 loc) · 2.79 KB
/
graph.js
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
/**
@author David Piegza
Implements a graph structure.
Consists of Graph, Nodes and Edges.
Nodes:
Create a new Node with an id. A node has the properties
id, position and data.
Example:
node = new GRAPHVIS.Node(1);
node.position.x = 100;
node.position.y = 100;
node.data.title = "Title of the node";
The data property can be used to extend the node with custom
informations. Then, they can be used in a visualization.
Edges:
Connects to nodes together.
Example:
edge = new GRAPHVIS.Edge(node1, node2);
An edge can also be extended with the data attribute. E.g. set a
type like "friends", different types can then be draw in differnt ways.
Graph:
Parameters:
options = {
limit: <int>, maximum number of nodes
}
Methods:
addNode(node) - adds a new node and returns true if the node has been added,
otherwise false.
getNode(node_id) - returns the node with node_id or undefined, if it not exist
addEdge(node1, node2) - adds an edge for node1 and node2. Returns true if the
edge has been added, otherwise false (e.g.) when the
edge between these nodes already exist.
reached_limit() - returns true if the limit has been reached, otherwise false
*/
var GRAPHVIS = GRAPHVIS || {};
GRAPHVIS.Graph = function(options) {
this.options = options || {};
this.nodeSet = {};
this.nodes = [];
this.edges = [];
this.layout = undefined;
};
GRAPHVIS.Graph.prototype.addNode = function(node) {
if(this.nodeSet[node.id] === undefined && !this.reached_limit()) {
this.nodeSet[node.id] = node;
this.nodes.push(node);
return true;
}
return false;
};
GRAPHVIS.Graph.prototype.getNode = function(node_id) {
return this.nodeSet[node_id];
};
GRAPHVIS.Graph.prototype.addEdge = function(source, target) {
if(source.addConnectedTo(target) === true) {
var edge = new GRAPHVIS.Edge(source, target);
this.edges.push(edge);
return true;
}
return false;
};
GRAPHVIS.Graph.prototype.reached_limit = function() {
if(this.options.limit !== undefined)
return this.options.limit <= this.nodes.length;
else
return false;
};
GRAPHVIS.Node = function(node_id) {
this.id = node_id;
this.nodesTo = [];
this.nodesFrom = [];
this.position = {};
this.data = {};
};
GRAPHVIS.Node.prototype.addConnectedTo = function(node) {
if(this.connectedTo(node) === false) {
this.nodesTo.push(node);
return true;
}
return false;
};
GRAPHVIS.Node.prototype.connectedTo = function(node) {
for(var i=0; i < this.nodesTo.length; i++) {
var connectedNode = this.nodesTo[i];
if(connectedNode.id == node.id) {
return true;
}
}
return false;
};
GRAPHVIS.Edge = function(source, target) {
this.source = source;
this.target = target;
this.data = {};
};