server/src/assets/js/mtdc-tracking.js
changeset 90 00c9bb0f6f37
child 112 2ec47574a371
equal deleted inserted replaced
89:4196849b15d3 90:00c9bb0f6f37
       
     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 };