server/src/assets/js/mtdc-tracking-worker.js
changeset 112 2ec47574a371
parent 108 a7480ebe1f4d
--- a/server/src/assets/js/mtdc-tracking-worker.js	Mon Jul 25 18:24:58 2016 +0200
+++ b/server/src/assets/js/mtdc-tracking-worker.js	Wed Jul 27 15:26:23 2016 +0200
@@ -12,7 +12,17 @@
     var Mtdc = root.Mtdc;
 
 
-    Mtdc.TrackingWorker = function(renkan, trackingUrl, trackingCloseUrl, registration, debounceDelay = 1000) {
+    Mtdc.TrackingWorker = function(renkan, opts){
+
+        var options = _.defaults(opts, {
+            debounceDelay: 1000,
+            trackingUriTemplates: {
+                'renkan': 'urn:mtdc:renkan:renkan:${renkan_id}',
+                'node': 'urn:mtdc:renkan:node:${renkan_id}:${node_id}',
+                'edge': 'urn:mtdc:renkan:edge:${renkan_id}:${edge_id}',
+                'view': 'urn:mtdc:renkan:view:${renkan_id}:${view_id}'
+            }
+        });
 
         function _sendTrackingInfo() {
             var trackingMessages = this.trackingMessages;
@@ -37,8 +47,8 @@
             trackingMessages: [],
             currentUser: renkan.current_user,
             renkan: renkan,
-            trackingUrl: trackingUrl,
-            trackingCloseUrl: trackingCloseUrl,
+            trackingUrl: options.trackingUrl,
+            trackingCloseUrl: options.trackingCloseUrl,
             getUUID4 : function() {
                 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
                     var r = Math.random() * 16 | 0,
@@ -47,9 +57,10 @@
                 });
             },
             _init: function() {
-                this.sendTrackingInfo = _.debounce(_.bind(_sendTrackingInfo, this), debounceDelay);
+                this.sendTrackingInfo = _.debounce(_.bind(_sendTrackingInfo, this), options.debounceDelay);
                 this.csrftoken = Cookies.get('csrftoken');
-                this.registration = registration ? registration : this.getUUID4();
+                this.registration = options.registration ? options.registration : this.getUUID4();
+                this.trackingUriTemplates = _.mapValues(options.trackingUriTemplates, _.template);
                 return this;
             },
             _pushTrackingMessage: function(msg) {
@@ -81,7 +92,12 @@
                         close: {
                             id: 'http://activitystrea.ms/schema/1.0/close',
                             display: { 'fr-FR': 'a fermé'}
+                        },
+                        search: {
+                            id: 'http://activitystrea.ms/schema/1.0/search',
+                            display: { 'fr-FR': 'a cherché'}
                         }
+
                     }[verb];
                 return {
                     actor: {
@@ -105,8 +121,11 @@
                     timestamp: timestamp.toISOString()
                 };
             },
-            _getObjectUrn: function(objectType, objectId) {
-                return 'urn:mtdc:renkan:'+ objectType + ':' + objectId;
+            _getObjectUri: function(objectType, objectId) {
+                var template = this.trackingUriTemplates[objectType];
+                var templateParams = {'renkan_id': this.renkan.project.get('id')};
+                templateParams[objectType+'_id'] = objectId;
+                return template(templateParams);
             },
             _sendNodeMsg: function(verb, nodeData, changedData, previousData) {
                 this._sendObjectMsg('node', 'http://www.w3.org/ns/activitystreams#Node', verb, nodeData, changedData, previousData);
@@ -122,7 +141,7 @@
                 var msg = this._getBaseMsg(verb);
 
                 msg.object = _.merge(msg.object, {
-                    id: this._getObjectUrn(objectType, objData._id), //TODO full url ???
+                    id: this._getObjectUri(objectType, objData._id), //TODO full url ???
                     definition: {
                         name: {
                             'fr-FR': objData.title
@@ -182,6 +201,23 @@
             updateView: function(viewData, changedData, previousData) {
                 this._sendViewMsg('update', viewData, changedData, previousData);
             },
+            searchProject: function(searchData) {
+                var msg = this._getBaseMsg('search');
+
+                msg.object = _.merge(msg.object, {
+                    id: this._getObjectUri('renkan', this.renkan.project.get('id')),
+                    definition: {
+                        name: {
+                            'fr-FR': this.renkan.project.get('title')
+                        },
+                        type: 'http://www.w3.org/ns/activitystreams#Renkan',
+                        extensions: {
+                            'http://www.w3.org/ns/activitystreams#Data': searchData
+                        }
+                    }
+                });
+                this._pushTrackingMessage(msg);
+            },
             closeProject: function() {
                 this.flushTrackingInfo();
                 $.ajax({