* \brief We use js function closure to be able to pass the query (array)
* to the callback function used when data is received
*/
- success_closure: function(query, publish_uuid, callback /*domid*/) {
+ success_closure: function(query, publish_uuid, callback) {
return function(data, textStatus) {
- manifold.asynchroneous_success(data, query, publish_uuid, callback /*domid*/);
+ manifold.asynchroneous_success(data, query, publish_uuid, callback);
}
},
// manifold.raise_record_event(sq.query_uuid, IN_PROGRESS);
//});
- $.post(manifold.proxy_url, {'json': query_json} , manifold.success_closure(query, null, callback /*domid*/));
+ $.post(manifold.proxy_url, {'json': query_json} , manifold.success_closure(query, null, callback));
},
- // Executes all async. queries
- // input queries are specified as a list of {'query_uuid': <query_uuid>, 'id': <possibly null>}
- asynchroneous_exec : function (query_publish_dom_tuples) {
- // start spinners
-
- // in case the spin stuff was not loaded, let's make sure we proceed to the exit
- //try {
- // if (manifold.asynchroneous_debug)
- // messages.debug("Turning on spin with " + jQuery(".need-spin").length + " matches for .need-spin");
- // jQuery('.need-spin').spin(manifold.spin_presets);
- //} catch (err) { messages.debug("Cannot turn on spins " + err); }
+ // Executes all async. queries - intended for the javascript header to initialize queries
+ // input queries are specified as a list of {'query_uuid': <query_uuid> }
+ // each plugin is responsible for managing its spinner through on_query_in_progress
+ asynchroneous_exec : function (query_exec_tuples) {
// Loop through input array, and use publish_uuid to publish back results
- jQuery.each(query_publish_dom_tuples, function(index, tuple) {
+ $.each(query_exec_tuples, function(index, tuple) {
var query=manifold.find_query(tuple.query_uuid);
var query_json=JSON.stringify (query);
var publish_uuid=tuple.publish_uuid;
// not quite sure what happens if we send a string directly, as POST data is named..
// this gets reconstructed on the proxy side with ManifoldQuery.fill_from_POST
- jQuery.post(manifold.proxy_url, {'json':query_json},
- manifold.success_closure(query, publish_uuid, tuple.callback /*domid*/));
+ $.post(manifold.proxy_url, {'json':query_json},
+ manifold.success_closure(query, publish_uuid, tuple.callback));
})
},
* \brief Forward a query to the manifold backend
* \param query (dict) the query to be executed asynchronously
* \param callback (function) the function to be called when the query terminates
- * Deprecated:
- * \param domid (string) the domid to be notified about the results (null for using the pub/sub system
*/
- forward: function(query, callback /*domid*/) {
+ forward: function(query, callback) {
var query_json = JSON.stringify(query);
$.post(manifold.proxy_url, {'json': query_json} ,
- manifold.success_closure(query, query.query_uuid, callback/*domid*/));
+ manifold.success_closure(query, query.query_uuid, callback));
},
/*!
/* Publish an update announce */
var channel="/results/" + query.query_uuid + "/changed";
if (manifold.publish_result_debug) messages.debug(".. publish_result OLD API (3) " + channel);
- jQuery.publish(channel, [result, query]);
+ $.publish(channel, [result, query]);
if (manifold.publish_result_debug) messages.debug(".. publish_result - END (4) q=" + query.__repr());
},
if (manifold.publish_result_debug) messages.debug (">>>>> publish_result_rec " + query.object);
if (manifold.query_expects_unique_result(query)) {
/* Also publish subqueries */
- jQuery.each(query.subqueries, function(object, subquery) {
+ $.each(query.subqueries, function(object, subquery) {
manifold.publish_result_rec(subquery, result[0][object]);
/* TODO remove object from result */
});
}
},
- // if set domid allows the result to be directed to just one plugin
+ // if set callback is provided it is called
// most of the time publish_uuid will be query.query_uuid
// however in some cases we wish to publish the result under a different uuid
// e.g. an updater wants to publish its result as if from the original (get) query
- asynchroneous_success : function (data, query, publish_uuid, callback /*domid*/) {
+ asynchroneous_success : function (data, query, publish_uuid, callback) {
// xxx should have a nicer declaration of that enum in sync with the python code somehow
var start = new Date();
if (manifold.asynchroneous_debug)
messages.debug(">>>>>>>>>> asynchroneous_success query.object=" + query.object);
- /* If a callback has been specified, we redirect results to it */
- if (!!callback) {
- callback(data);
- if (manifold.asynchroneous_debug) {
- duration=new Date()-start;
- messages.debug ("<<<<<<<<<< asynchroneous_success " + query.object + " -- callback ended " + duration + " ms");
- }
- return;
- }
-
if (data.code == 2) { // ERROR
// We need to make sense of error codes here
alert("Your session has expired, please log in again");
if (publish_uuid)
$.publish("/results/" + publish_uuid + "/failed", [data.code, data.description] );
-/* DEMO - Debug Messages desactivated
- $("#notifications").notify("create", "sticky", {
- title: 'Warning',
- text: data.description
- },{
- expires: false,
- speed: 1000
- });
-*/
}
+
+ // If a callback has been specified, we redirect results to it
+ if (!!callback) {
+ callback(data);
+ if (manifold.asynchroneous_debug) {
+ duration=new Date()-start;
+ messages.debug ("<<<<<<<<<< asynchroneous_success " + query.object + " -- callback ended " + duration + " ms");
+ }
+ return;
+ }
+
if (manifold.asynchroneous_debug)
messages.debug ("========== asynchroneous_success " + query.object + " -- before process_query_records");
raise_event_handler: function(type, query_uuid, event_type, value) {
if ((type != 'query') && (type != 'record'))
throw 'Incorrect type for manifold.raise_event()';
+ // xxx we observe quite a lot of incoming calls with an undefined query_uuid
+ // this should be fixed upstream
+ if (query_uuid === undefined) {
+ messages.warning("undefined query in raise_event_handler");
+ return;
+ }
+ // notify the change to objects that either listen to this channel specifically,
+ // or to the wildcard channel
var channels = [ manifold.get_channel(type, query_uuid), manifold.get_channel(type, '*') ];
$.each(channels, function(i, channel) {
switch(value.request) {
case FIELD_REQUEST_CHANGE:
+ if (update_query.params[value.key] === undefined)
+ update_query.params[value.key] = Array();
update_query.params[value.key] = value.value;
break;
case FIELD_REQUEST_ADD:
if ($.inArray(value.value, update_query_orig.params[value.key]) != -1)
value.request = FIELD_REQUEST_ADD_RESET;
+ if (update_query.params[value.key] === undefined)
+ update_query.params[value.key] = Array();
update_query.params[value.key].push(value.value);
break;
case FIELD_REQUEST_REMOVE:
var arr = update_query.params[value.key];
arr = $.grep(arr, function(x) { return x != value.value; });
+ if (update_query.params[value.key] === undefined)
+ update_query.params[value.key] = Array();
update_query.params[value.key] = arr;
break;