diff -r 4196849b15d3 -r 00c9bb0f6f37 server/src/assets/js/mtdc-tracking.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/assets/js/mtdc-tracking.js Mon Jul 25 12:13:09 2016 +0200 @@ -0,0 +1,95 @@ +/* Tracking module that listens to Renkan events */ +/* globals Rkns */ +/* eslint no-console: 0 */ + +Rkns.mtdcTracking = function(_renkan, _trackingWorker) { + + var _proj = _renkan.project; + + function prepareObjData(node) { + var objData = node.toJSON(), + p = node.get('project'); + objData.project = { id: p.get('id'), title: p.get('title')}; + objData.origin = node.get('origin', -1); + return objData; + } + + function registerNode(_node) { + _node.on('remove', function(_n) { + var nodeData = prepareObjData(_n); + _trackingWorker.deleteNode(nodeData); + }); + _node.on('change', function(_n) { + var nodeData = prepareObjData(_n); + var dataChanged = _n.changed; + var previousData = Rkns._.mapValues(_n.changed, function(v,k) { return _n.previous(k); }); + _trackingWorker.updateNode(nodeData, dataChanged, previousData); + }); + } + + function registerEdge(_edge) { + _edge.on('remove', function(_e) { + var edgeData = prepareObjData(_e); + _trackingWorker.deleteEdge(edgeData); + }); + _edge.on('change', function(_e) { + var edgeData = prepareObjData(_e); + var dataChanged = _e.changed; + var previousData = Rkns._.mapValues(_e.changed, function(v,k) { return _e.previous(k); }); + _trackingWorker.updateEdge(edgeData, dataChanged, previousData); + }); + } + + function registerView(_view) { + _view.on('remove', function(_v) { + var viewData = prepareObjData(_v); + _trackingWorker.deleteView(viewData); + }); + _view.on('change', function(_v) { + var viewData = prepareObjData(_v); + var dataChanged = _v.changed; + var previousData = Rkns._.mapValues(_v.changed, function(v,k) { return _v.previous(k); }); + _trackingWorker.updateView(viewData, dataChanged, previousData); + }); + } + + + _proj.on('change:loadingStatus', function(_p) { + if(_p.get('loadingStatus')) { + return; + } + // -> track open for editing + + _p.on('add:nodes', function(_node) { + var nodeData = prepareObjData(_node); + registerNode(_node); + _trackingWorker.addNode(nodeData); + }); + + _p.on('add:edges', function(_edge) { + var edgeData = prepareObjData(_edge); + registerEdge(_edge); + _trackingWorker.addEdge(edgeData); + }); + + _p.on('add:views', function(_view) { + var viewData = prepareObjData(_view); + registerView(_view); + _trackingWorker.addView(viewData); + }); + + _proj.get('nodes').each(function(_node) { + registerNode(_node); + }); + + _proj.get('edges').each(function(_edge) { + registerEdge(_edge); + }); + + _proj.get('views').each(function(_view) { + registerView(_view); + }); + + }); + +};