+manifold_async_debug=false;
+
// 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': <possibly null>}
+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('.need-spin').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));
-}
-
+/* not used
function manifold_async_error(str) {
var out = '<div class="error"><h2>Error</h2><dl id="system-message"><dt class="error">Notice</dt><dd class="error message"><ul><li>' + jQuery('<div />').text(str).html() + '</li></ul></dd></dl></div>';
jQuery('#manifold_message').html(out);
//onObjectAvailable('Spinners', function(){ Spinners.get('.loading').remove(); }, this, true);
- jQuery('.loading').spin();
+ jQuery('.need-spin').spin(false);
}
+*/
+/* what the hell is this doing here ?
function apply_format(key, value, type, method) {
// type = type, key =
var link = {
return key;
}
}
+*/
function manifold_html_a(key, value, type) {
if (type == 'network_hrn') {
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) {
}
}
-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'));
+ }
+ }
+});