X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=manifold%2Fstatic%2Fjs%2Fmanifold.js;h=b5085fbe8f971cb5250878cf086aed7814fe5a16;hb=546d5148434646dd3e5121c8b49cfa80b8890117;hp=791e4cfce35feff7dafe44a6ad0eb0e8b67f9107;hpb=a387c58445b7cde5ecf05a022c5a875645eeb463;p=myslice.git diff --git a/manifold/static/js/manifold.js b/manifold/static/js/manifold.js index 791e4cfc..b5085fbe 100644 --- a/manifold/static/js/manifold.js +++ b/manifold/static/js/manifold.js @@ -323,9 +323,9 @@ var manifold = { * \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); } }, @@ -341,23 +341,16 @@ var manifold = { // 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': , 'id': } - 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': } + // 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; @@ -373,8 +366,8 @@ var manifold = { // 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)); }) }, @@ -382,13 +375,11 @@ var manifold = { * \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)); }, /*! @@ -431,7 +422,7 @@ var manifold = { /* 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()); }, @@ -451,7 +442,7 @@ var manifold = { 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 */ }); @@ -693,27 +684,17 @@ var manifold = { } }, - // 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"); @@ -730,15 +711,18 @@ var manifold = { if (publish_uuid) $.publish("/results/" + publish_uuid + "/failed", [data.code, data.description] ); - $("#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"); @@ -766,7 +750,15 @@ var manifold = { 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) { @@ -807,11 +799,15 @@ var manifold = { 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: @@ -820,6 +816,8 @@ var manifold = { 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; @@ -904,8 +902,10 @@ var manifold = { manifold.run_query(query_ext.main_query_ext.update_query_ext.query); break; - case FILTER_ADDED: - manifold.raise_query_event(query_uuid, event_type, value); + case FILTER_ADDED: +// Thierry - this is probably wrong but intended as a hotfix +// http://trac.myslice.info/ticket/32 +// manifold.raise_query_event(query_uuid, event_type, value); break; case FILTER_REMOVED: manifold.raise_query_event(query_uuid, event_type, value);