plugins: RESET state now distirnguished ADD and REMOVE events, hazelnut and googlemap...
[myslice.git] / manifold / js / manifold.js
index b99b648..826ea32 100644 (file)
@@ -51,7 +51,8 @@ var SET_REMOVED    = 202;
 var FIELD_REQUEST_CHANGE  = 301;
 var FIELD_REQUEST_ADD     = 302;
 var FIELD_REQUEST_REMOVE  = 303;
-var FIELD_REQUEST_RESET   = 304;
+var FIELD_REQUEST_ADD_RESET = 304;
+var FIELD_REQUEST_REMOVE_RESET = 305;
 // status
 var FIELD_REQUEST_PENDING = 401;
 var FIELD_REQUEST_SUCCESS = 402;
@@ -465,7 +466,7 @@ var manifold = {
     {
         // We don't prepare an update query if the result has more than 1 entry
         if (records.length != 1)
-            continue;
+            return;
         var query_ext = manifold.query_store.find_query_ext(query.query_uuid);
 
         var record = records[0];
@@ -795,19 +796,20 @@ var manifold = {
                         break;
                     case FIELD_REQUEST_ADD:
                         if ($.inArray(value.value, update_query_orig.params[value.key]) != -1)
-                            value.request = FIELD_REQUEST_RESET;
+                            value.request = FIELD_REQUEST_ADD_RESET;
                         update_query.params[value.key].push(value.value);
                         break;
                     case FIELD_REQUEST_REMOVE:
                         if ($.inArray(value.value, update_query_orig.params[value.key]) == -1)
-                            value.request = FIELD_REQUEST_RESET;
+                            value.request = FIELD_REQUEST_REMOVE_RESET;
 
                         var arr = update_query.params[value.key];
                         arr = $.grep(arr, function(x) { return x != value.value; });
                         update_query.params[value.key] = arr;
 
                         break;
-                    case FIELD_REQUEST_RESET:
+                    case FIELD_REQUEST_ADD_RESET:
+                    case FIELD_REQUEST_REMOVE_RESET:
                         // XXX We would need to keep track of the original query
                         throw "Not implemented";
                         break;
@@ -818,6 +820,21 @@ var manifold = {
                 manifold.raise_record_event(query_uuid, event_type, value);
 
                 // b) subqueries eventually (dot in the key)
+                // Let's unfold 
+                var path_array = value.key.split('.');
+                var value_key = value.key.split('.');
+
+                var cur_query = query;
+                if (cur_query.analyzed_query)
+                    cur_query = cur_query.analyzed_query;
+                $.each(path_array, function(i, method) {
+                    cur_query = cur_query.subqueries[method];
+                    value_key.shift(); // XXX check that method is indeed shifted
+                });
+                value.key = value_key;
+
+                manifold.raise_record_event(cur_query.query_uuid, event_type, value);
+
                 // XXX make this DOT a global variable... could be '/'
                 break;