X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=engine%2Fstatic%2Fjs%2Fmanifold-async.js;h=75287b276d691ac71e15e8e3e7bbb1a25bd83eb2;hb=6ee5cf51bf467560e4566b2b7bfa8e22dfff0784;hp=83a97a728e487b4155b092574c8c130e520112e4;hpb=b6440c94e0213514fee41d0906645f7657ba881f;p=unfold.git diff --git a/engine/static/js/manifold-async.js b/engine/static/js/manifold-async.js index 83a97a72..75287b27 100644 --- a/engine/static/js/manifold-async.js +++ b/engine/static/js/manifold-async.js @@ -1,83 +1,40 @@ +manifold_async_debug=true; + // Helper functions for asynchronous requests var api_url = '/manifold/api/json/' -var api_render_url = '/manifold/render/json' - -function manifold_array_size(obj) { - var size = 0, key; - for (key in obj) { - if (obj.hasOwnProperty(key)) size++; - } - return size; -}; - -// Executes all async. queries contained in manifold_async_query_array, which is -// an array of hash (action, method, ts, filter, fields) -// -function manifold_async_exec(arr) -{ +// Executes all async. queries +// input queries are specified as a list of {'query': new Query(..), 'id': } +function manifold_async_exec(queries) { + if (manifold_async_debug) console.log('manifold_async_exec length='+ queries.length); // start spinners - //onObjectAvailable('Spinners', function(){ Spinners.create('.loading').play(); }, this, true); - jQuery('.loading').spin(); + jQuery('.plugin-toggle').spin(); // We use js function closure to be able to pass the query (array) to the // callback function used when data is received - var manifold_async_success_wrapper = function(query, id) { - return function(data, textStatus) { - manifold_async_success(data, query, id); - }; + var manifold_async_success_closure = function(query, id) { + return function(data, textStatus) {manifold_async_success(data, query, id);} }; - // Loop through query array and issue XML/RPC queries - jQuery.each(arr, function(index, elt) { - // we do rendering by default - jQuery.post(api_url, {'query': elt.query.to_hash()}, manifold_async_success_wrapper(elt.query, elt.id)); + // Loop through query array and use ajax to send back queries (to frontend) with json + jQuery.each(queries, function(index, tuple) { + hash=tuple.query.to_hash(); + if (manifold_async_debug) console.log ("sending POST on " + api_url + " iterating on " + tuple + " -> " + hash); + jQuery.post(api_url, {'query': hash}, manifold_async_success_closure(tuple.query, tuple.id)); }) } -function manifold_async_exec_render(arr) -{ - - // start spinners - //onObjectAvailable('Spinners', function(){ Spinners.create('.loading').play(); }, this, true); - jQuery('.loading').spin(); - - // We use js function closure to be able to pass the query (array) to the - // callback function used when data is received - var manifold_async_success_wrapper = function(query, id) { - return function(data, textStatus) { - manifold_async_success(data, query, id); - }; - }; - - // Loop through query array and issue XML/RPC queries - jQuery.each(arr, function(index, elt) { - // we do rendering by default - jQuery.post(api_render_url, {'query': elt.query.to_hash()}, manifold_async_success_wrapper(elt.query, elt.id)); - }) -} - -function manifold_async_render(data, query) -{ - // We use js function closure to be able to pass the query (array) to the - // callback function used when data is received - var manifold_async_render_success_wrapper = function(query) { - return function(data, textStatus) { - manifold_async_render_success(data, query); - }; - }; - - jQuery.post(api_render_url, {'data': data, 'query': query.to_hash()}, manifold_async_render_success_wrapper(data, query)); -} - +/* function manifold_async_error(str) { var out = '

Error

Notice
  • ' + jQuery('
    ').text(str).html() + '
'; jQuery('#manifold_message').html(out); //onObjectAvailable('Spinners', function(){ Spinners.get('.loading').remove(); }, this, true); - jQuery('.loading').spin(); + jQuery('.plugin-toggle').spin(false); } +*/ +/* what the hell is this doing here ? function apply_format(key, value, type, method) { // type = type, key = var link = { @@ -120,6 +77,7 @@ function apply_format(key, value, type, method) { return key; } } +*/ function manifold_html_a(key, value, type) { if (type == 'network_hrn') { @@ -156,33 +114,6 @@ function manifold_html_ul(data, key, value, type, method, is_cached) { return out; } -function manifold_async_render_list(data, method, is_cached) { - // we suppose we only have one column, or we need more precisions - var col = []; - if (manifold_array_size(data[0]) == 1) { - for (var k in data[0]) { - key = k; - value = k; - } - } else { - for (var k in data[0]) { - if (k.substr(-4) == '_hrn') { - key = k; - } else { - value = k; - } - } - } - var out = manifold_html_ul(data, key, value, key, method, is_cached); - var element = '#manifold__list__' + key + '__' + value; - jQuery(element).html(out); - // FIXME spinners - //onObjectAvailable('Spinners', function(){ Spinners.get(element).remove(); }, this, true); - jQuery('.loading').spin(); -} - - - function manifold_update_template(data) { jQuery.each(data, function(key, value) { @@ -216,22 +147,28 @@ function manifold_async_success(data, query, id) { } } -function __old__manifold_async_render_success(data, query) { - if (data) { - - // We loop through all the fields to update the corresponding - // locations in the page - if (typeof(data[0].error) != 'undefined') { - manifold_async_error(data[0].error); - } - - /* Publish an update announce */ - jQuery.publish("/rendering/changed", [data, query]); - - // Is there a linked query ? - if ((query.done == 'now') && (query.ts == 'latest')) { - var new_query = [query_json.replace("latest", "now")]; - manifold_async_exec(new_query); - } - } -} +//http://stackoverflow.com/questions/5100539/django-csrf-check-failing-with-an-ajax-post-request +//make sure to expose csrf in our outcoming ajax/post requests +$.ajaxSetup({ + beforeSend: function(xhr, settings) { + function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { + // Only send the token to relative URLs i.e. locally. + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); + } + } +});