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
|
define(['rz_core'],
function(rz_core) {
function get_rz_core()
{
// circular dependency on rz_core, so require.js cannot solve it.
if (rz_core === undefined) {
rz_core = require('rz_core');
}
return rz_core;
}
var selection = false;
function byVisitors(node_selector, link_selector) {
selection = true;
var selected_nodes = get_rz_core().graph.findByVisitors(node_selector, link_selector);
clear();
connectedComponent(selected_nodes);
}
function connectedComponent(nodes) {
var nodes,
connected = get_rz_core().graph.getConnectedNodesAndLinks(nodes, 1),
i,
node,
link,
data;
selection = true;
nodes.forEach(function (n) { n.state = 'chosen'; });
for (i = 0 ; i < connected.nodes.length ; ++i) {
data = connected.nodes[i];
node = data.node;
switch (data.type) {
case 'exit':
node.state = 'exit';
break;
case 'enter':
node.state = 'enter';
break;
};
}
for (i = 0 ; i < connected.links.length ; ++i) {
data = connected.links[i];
link = data.link;
switch (data.type) {
case 'exit':
link.state = 'exit';
break;
case 'enter':
link.state = 'enter';
break;
};
}
}
var node_selected = function(node) {
return node.state == 'chosen' || node.state == 'enter' || node.state == 'exit' || node.state == 'selected'
|| node.state == 'temp';
}
var selected_class = function(node) {
return selection ? (node_selected(node) ? "selected" : "notselected") : "";
}
var clear = function() {
selection = false;
get_rz_core().graph.setRegularState();
}
return {
'byVisitors': byVisitors,
'connectedComponent': connectedComponent,
'clear': clear,
'selected_class': selected_class,
};
});
|