server/src/assets/js/mtdc-tracking.js
changeset 90 00c9bb0f6f37
child 112 2ec47574a371
--- /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);
+        });
+
+    });
+
+};