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
|
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 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();
}
function all(arr, pred)
{
return arr.length == arr.filter(pred).length;
}
var update = function(nodes) {
clear();
if (all(nodes, function(node) { return node.state != 'chosen'; })) {
connectedComponent(nodes);
}
}
return {
byVisitors: byVisitors,
connectedComponent: connectedComponent,
clear: clear,
update: update,
selected_class: selected_class,
};
});
|