|
1 /* Tracking module that listens to Renkan events */ |
|
2 /* globals Rkns */ |
|
3 /* eslint no-console: 0 */ |
|
4 |
|
5 Rkns.mtdcTracking = function(_renkan, _trackingWorker) { |
|
6 |
|
7 var _proj = _renkan.project; |
|
8 |
|
9 function prepareObjData(node) { |
|
10 var objData = node.toJSON(), |
|
11 p = node.get('project'); |
|
12 objData.project = { id: p.get('id'), title: p.get('title')}; |
|
13 objData.origin = node.get('origin', -1); |
|
14 return objData; |
|
15 } |
|
16 |
|
17 function registerNode(_node) { |
|
18 _node.on('remove', function(_n) { |
|
19 var nodeData = prepareObjData(_n); |
|
20 _trackingWorker.deleteNode(nodeData); |
|
21 }); |
|
22 _node.on('change', function(_n) { |
|
23 var nodeData = prepareObjData(_n); |
|
24 var dataChanged = _n.changed; |
|
25 var previousData = Rkns._.mapValues(_n.changed, function(v,k) { return _n.previous(k); }); |
|
26 _trackingWorker.updateNode(nodeData, dataChanged, previousData); |
|
27 }); |
|
28 } |
|
29 |
|
30 function registerEdge(_edge) { |
|
31 _edge.on('remove', function(_e) { |
|
32 var edgeData = prepareObjData(_e); |
|
33 _trackingWorker.deleteEdge(edgeData); |
|
34 }); |
|
35 _edge.on('change', function(_e) { |
|
36 var edgeData = prepareObjData(_e); |
|
37 var dataChanged = _e.changed; |
|
38 var previousData = Rkns._.mapValues(_e.changed, function(v,k) { return _e.previous(k); }); |
|
39 _trackingWorker.updateEdge(edgeData, dataChanged, previousData); |
|
40 }); |
|
41 } |
|
42 |
|
43 function registerView(_view) { |
|
44 _view.on('remove', function(_v) { |
|
45 var viewData = prepareObjData(_v); |
|
46 _trackingWorker.deleteView(viewData); |
|
47 }); |
|
48 _view.on('change', function(_v) { |
|
49 var viewData = prepareObjData(_v); |
|
50 var dataChanged = _v.changed; |
|
51 var previousData = Rkns._.mapValues(_v.changed, function(v,k) { return _v.previous(k); }); |
|
52 _trackingWorker.updateView(viewData, dataChanged, previousData); |
|
53 }); |
|
54 } |
|
55 |
|
56 |
|
57 _proj.on('change:loadingStatus', function(_p) { |
|
58 if(_p.get('loadingStatus')) { |
|
59 return; |
|
60 } |
|
61 // -> track open for editing |
|
62 |
|
63 _p.on('add:nodes', function(_node) { |
|
64 var nodeData = prepareObjData(_node); |
|
65 registerNode(_node); |
|
66 _trackingWorker.addNode(nodeData); |
|
67 }); |
|
68 |
|
69 _p.on('add:edges', function(_edge) { |
|
70 var edgeData = prepareObjData(_edge); |
|
71 registerEdge(_edge); |
|
72 _trackingWorker.addEdge(edgeData); |
|
73 }); |
|
74 |
|
75 _p.on('add:views', function(_view) { |
|
76 var viewData = prepareObjData(_view); |
|
77 registerView(_view); |
|
78 _trackingWorker.addView(viewData); |
|
79 }); |
|
80 |
|
81 _proj.get('nodes').each(function(_node) { |
|
82 registerNode(_node); |
|
83 }); |
|
84 |
|
85 _proj.get('edges').each(function(_edge) { |
|
86 registerEdge(_edge); |
|
87 }); |
|
88 |
|
89 _proj.get('views').each(function(_view) { |
|
90 registerView(_view); |
|
91 }); |
|
92 |
|
93 }); |
|
94 |
|
95 }; |