summaryrefslogtreecommitdiff
path: root/src/view/selection.js
blob: 57f2443dbbfdee19a78234b78805a575e314b2ed (plain)
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
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';
}

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,
};

});