--- /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);
+ });
+
+ });
+
+};