fewer js source files : manifold.js holds the global manifold object (that maps uuids...
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Tue, 19 Mar 2013 14:36:58 +0000 (15:36 +0100)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Tue, 19 Mar 2013 14:36:58 +0000 (15:36 +0100)
manifold/js/manifold-async.js [deleted file]
manifold/js/manifold-pubsub.js [deleted file]
manifold/js/manifold-queries.js [deleted file]
manifold/js/manifold.js [new file with mode: 0644]
plugins/lists/simplelist.py
plugins/querycode/querycode.py
unfold/js/onavail.js [deleted file]
unfold/page.py

diff --git a/manifold/js/manifold-async.js b/manifold/js/manifold-async.js
deleted file mode 100644 (file)
index c33185d..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-manifold_async_debug=true;
-
-// Helper functions for asynchronous requests
-
-var api_url = '/manifold/api/json/'
-
-// Executes all async. queries
-// input queries are specified as a list of {'query_uuid': <query_uuid>, 'id': <possibly null>}
-function manifold_async_exec(queries) {
-    if (manifold_async_debug) console.log('manifold_async_exec length='+ queries.length);
-    // start spinners
-    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_closure = function(query, id) {
-       return function(data, textStatus) {manifold_async_success(data, query, id);}};
-
-    // Loop through query array and use ajax to send back queries (to frontend) with json
-    jQuery.each(queries, function(index, tuple) {
-       var query=manifold.find_query(tuple.query_uuid);
-       var hash=query.to_hash();
-       if (manifold_async_debug) console.log ("sending POST on " + api_url + " iterating on " + tuple.query_uuid + " -> " + hash);
-        jQuery.post(api_url, {'query': hash}, manifold_async_success_closure(query, tuple.id));
-    })
-}
-
-function manifold_async_success(data, query, id) {
-    if (data) {
-
-        if (!!id) {
-            /* Directly inform the requestor */
-            jQuery('#' + id).trigger('results', [data]);
-        } else {
-            /* Publish an update announce */
-            jQuery.publish("/results/" + query.query_uuid + "/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);
-        //}
-    }
-}
-
-/* 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('.need-spin').spin(false);
-}
-*/
-
-/* what the hell is this doing here ?
-function apply_format(key, value, type, method) {
-    // type = type, key = 
-    var link = {
-        'platform': {'_all': 'platforms'},
-        'src_hostname': {'traceroute': 'agents', '_other': 'hostname'},
-        'dst_hostname': {'traceroute': 'agents', '_other': 'hostname'},
-        'src_ip': {'traceroute': 'agents', '_other': 'ip'},
-        'dst_ip': {'traceroute': 'agents', '_other': 'ip'},
-        'as_name': {'_all': 'as'},
-        'asn': {'_all': 'as'},
-        'city': {'_all': 'cities'},
-        'continent': {'_all': 'continents'},
-        'continent_code': {'_all': 'continents'},
-        'country': {'_all': 'countries'},
-        'country_code': {'_all': 'countries'},
-        'hostname': {'agents': 'agents', 'nodes': 'node', '_other': 'hostname'},
-        'ip': {'agents': 'agents', '_other': 'ip'},
-        'network_hrn': {'_all': 'network'},
-        'region': {'_all': 'regions'},
-        'region_code': {'_all': 'regions'},
-        'slice_hrn': {'_all': 'slice'},
-    };
-    if (link[type]) {
-        // creates problems sorting ?
-        if (link[type]['_all']) {
-            var urlpart = link[type]['_all'];
-        } else {
-            if (link[type][method]) {
-                var urlpart = link[type][method];
-            } else {
-                if (link[type]['_other']) {
-                    var urlpart = link[type]['_other'];
-                } else {
-                    return key;
-                }
-            }
-        }
-        return '<a href="/view/' + urlpart + '/' + key +'">' + value + '</a>';
-    } else {
-        return key;
-    }
-}
-*/
-
-function manifold_html_a(key, value, type) {
-    if (type == 'network_hrn') {
-        return "<a href='/view/network/" + key + "'>" + value + '</a>';
-    } else if (type == 'slice_hrn') {
-        return "<a href='/view/slice/" + key + "'>" + value + '</a>';
-    } else {
-
-    }
-}
-
-function manifold_html_li(type, value, is_cached) {
-    var cached = '';
-    if (is_cached)
-        cached='<div class="cache"><span><b>Cached information from the database</b><br/>Timestamp: XX/XX/XX XX:XX:XX<br/><br/><i>Refresh in progress...</i></span></div>';
-    if (type == 'slice_hrn') {
-        return "<li class='icn icn-play'>" + value + cached + "</li>";
-    } else if (type == 'network_hrn') {
-        return "<li class='icn icn-play'>" + value + cached + "</li>";
-    } else {
-        return "<li>" + value + "</li>";
-    }
-}
-
-
-function manifold_html_ul(data, key, value, type, method, is_cached) {
-    var out = "<ul>";
-    for (var i = 0; i < data.length; i++) {
-        out += manifold_html_li(key, apply_format(data[i][key], data[i][value], key, method), is_cached);
-        //out += manifold_html_li(key, manifold_html_a(data[i][key], data[i][value], key), is_cached);
-    }
-    out += "</ul>";
-
-    return out;
-}
-
-function manifold_update_template(data) 
-{
-    jQuery.each(data, function(key, value) {
-        if ((typeof value == 'string') || (typeof value == 'number') || (typeof value == 'boolean')) {
-            // Simple field
-            jQuery('#manifold__' + key).html(value);
-        } else if (value == null) {
-            jQuery('#manifold__' + key).html("N/A");
-        } else { 
-            manifold_update_table('#manifold__' + key, value);
-        }
-    });
-}
-
-//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'));
-         }
-     } 
-});
diff --git a/manifold/js/manifold-pubsub.js b/manifold/js/manifold-pubsub.js
deleted file mode 100644 (file)
index 54dba52..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* getting random error messages with this... -- jordan
-   wait until query code is fixed
-jQuery(document).ready(function() {
-    // ajax default settings
-    jQuery.ajaxSetup({
-        timeout: 3000,
-        error:function(x,e){
-            if('parsererror'==e) {
-                alert('Sorry, we ran into a technical problem (parse error). Please try again...');
-            } else if('timeout'==e) {
-                alert('Request timed out. Please try again...');
-            }
-            else if ( "status" in x ) {
-                if(0 == x.status){
-                    alert('You are offline! Please check your network.');
-                }else if (404 == x.status){
-                    alert('Sorry, we ran into a technical problem (404). Please try again...');
-                }else if(500 == x.status){
-                    alert('Sorry, we ran into a technical problem (500). Please try again...');
-                }
-            }
-            else {
-                alert('Sorry, we ran into a technical problem (unknown error). Please try again...');
-            }
-        }
-    });
-});
-*/
-
-function get_value(value) {
-    //if(typeof(jQuery(value).attr('value'))!="undefined"){
-    if (/<span value=['"].*['"]>.*<\/span>/i.test(value)) {
-        return jQuery(value).attr('value');
-    } else {
-        return value;
-    }
-}
-
-/*
-From: http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object
-    I want to note that the .clone() method in jQuery only clones DOM elements. In order to clone JavaScript objects, you would do:
-
-    // Shallow copy
-    var newObject = jQuery.extend({}, oldObject);
-
-    // Deep copy
-    var newObject = jQuery.extend(true, {}, oldObject);
-
-    More information can be found in the jQuery documentation <http://docs.jquery.com/Utilities/jQuery.extend>
-*/
-function clone_object(obj) {
-    return jQuery.extend(true, {}, obj);
-}
-
-/* https://gist.github.com/661855 */
-(function($) {
-
-  var o = $({});
-
-  $.subscribe = function( types, selector, data, fn) {
-    /* borrowed from jQuery */
-    if ( data == null && fn == null ) {
-        // ( types, fn )
-        fn = selector;
-        data = selector = undefined;
-    } else if ( fn == null ) {
-        if ( typeof selector === "string" ) {
-            // ( types, selector, fn )
-            fn = data;
-            data = undefined;
-        } else {
-            // ( types, data, fn )
-            fn = data;
-            data = selector;
-            selector = undefined;
-        }
-    }
-    /* </ugly> */
-
-    /* We use an indirection function that will clone the object passed in
-     * parameter to the subscribe callback 
-     * 
-     * FIXME currently we only clone query objects which are the only ones
-     * supported and editable, we might have the same issue with results but
-     * the page load time will be severely affected...
-     */
-    o.on.apply(o, [types, selector, data, function() { 
-        for(i = 1; i < arguments.length; i++) {
-            if ( arguments[i].constructor.name == 'Query' )
-                arguments[i] = arguments[i].clone();
-        }
-        fn.apply(o, arguments);
-    }]);
-  };
-
-  $.unsubscribe = function() {
-    o.off.apply(o, arguments);
-  };
-
-  $.publish = function() {
-    o.trigger.apply(o, arguments);
-  };
-
-}(jQuery));
-
-
-//function executeFunctionByName(functionName, context /*, args */) {
-//  var args = Array.prototype.slice.call(arguments).splice(2);
-//  var namespaces = functionName.split(".");
-//  var func = namespaces.pop();
-//  for(var i = 0; i < namespaces.length; i++) {
-//    context = context[namespaces[i]];
-//  }
-//  return context[func].apply(this, args);
-//}
diff --git a/manifold/js/manifold-queries.js b/manifold/js/manifold-queries.js
deleted file mode 100644 (file)
index 1e2fc62..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-function debug_dict (msg, o) {
-    var keys=[];
-    for (var k in o) keys.push(k);
-    console.log ("debug_dict: " + msg + " Keys : " + keys);
-}
-function debug_value (msg, value) {
-    console.log ("debug_value: " + msg + " " + value);
-}
-
-/* manage a set of queries indexed by their id */
-/* next move will be to insert all the manifold functions in this namespace */
-/* xxx add error management */
-var manifold = {
-    all_queries: {},
-    insert_query : function (query) { 
-       manifold.all_queries[query.query_uuid]=query; 
-   },
-    find_query : function (query_uuid) { 
-       return manifold.all_queries[query_uuid];
-    },
-    debug_all_queries : function (msg) {
-       for (var query_uuid in manifold.all_queries) {
-           console.log("manifold.debug " + msg + " " + query_uuid + " -> " + manifold.all_queries[query_uuid]);
-       }
-    },
-}
-
diff --git a/manifold/js/manifold.js b/manifold/js/manifold.js
new file mode 100644 (file)
index 0000000..3589d7e
--- /dev/null
@@ -0,0 +1,150 @@
+// utilities 
+function debug_dict (msg, o) {
+    var keys=[];
+    for (var k in o) keys.push(k);
+    console.log ("debug_dict: " + msg + " Keys : " + keys);
+}
+function debug_value (msg, value) {
+    console.log ("debug_value: " + msg + " " + value);
+}
+
+/* ------------------------------------------------------------ */
+// this namespace holds functions for globally managing query objects
+var manifold = {
+
+    all_queries: {},
+
+    insert_query : function (query) { 
+       manifold.all_queries[query.query_uuid]=query; 
+   },
+    find_query : function (query_uuid) { 
+       return manifold.all_queries[query_uuid];
+    },
+    debug_all_queries : function (msg) {
+       for (var query_uuid in manifold.all_queries) {
+           console.log("manifold.debug " + msg + " " + query_uuid + " -> " + manifold.all_queries[query_uuid]);
+       }
+    },
+
+    // trigger a query asynchroneously
+    proxy_url : '/manifold/proxy/json/',
+
+    asynchroneous_debug : true,
+
+    // Executes all async. queries
+    // input queries are specified as a list of {'query_uuid': <query_uuid>, 'id': <possibly null>}
+    asynchroneous_exec : function (query_uuid_domids) {
+       // start spinners
+       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 success_closure = function(query, id) {
+           return function(data, textStatus) {manifold.asynchroneous_success(data, query, id);}};
+       
+       // Loop through query array and use ajax to send back query_uuid_domids (to frontend) with json
+       jQuery.each(query_uuid_domids, function(index, tuple) {
+           var query=manifold.find_query(tuple.query_uuid);
+           var hash=query.to_hash();
+           if (manifold.asynchroneous_debug) 
+               console.log ("sending POST on " + manifold.proxy_url + " iterating on " + tuple.query_uuid + " -> " + hash);
+            jQuery.post(manifold.proxy_url, {'query': hash}, success_closure(query, tuple.id));
+       })
+           },
+
+    asynchroneous_success : function (data, query, id) {
+       if (data) {
+            if (!!id) {
+               /* Directly inform the requestor */
+               jQuery('#' + id).trigger('results', [data]);
+            } else {
+               /* Publish an update announce */
+               jQuery.publish("/results/" + query.query_uuid + "/changed", [data, query]);
+            }
+
+       }
+    },
+
+}; // manifold object
+/* ------------------------------------------------------------ */
+
+// extend jQuery/$ with pubsub capabilities
+/* https://gist.github.com/661855 */
+(function($) {
+
+  var o = $({});
+
+  $.subscribe = function( types, selector, data, fn) {
+    /* borrowed from jQuery */
+    if ( data == null && fn == null ) {
+        // ( types, fn )
+        fn = selector;
+        data = selector = undefined;
+    } else if ( fn == null ) {
+        if ( typeof selector === "string" ) {
+            // ( types, selector, fn )
+            fn = data;
+            data = undefined;
+        } else {
+            // ( types, data, fn )
+            fn = data;
+            data = selector;
+            selector = undefined;
+        }
+    }
+    /* </ugly> */
+
+    /* We use an indirection function that will clone the object passed in
+     * parameter to the subscribe callback 
+     * 
+     * FIXME currently we only clone query objects which are the only ones
+     * supported and editable, we might have the same issue with results but
+     * the page load time will be severely affected...
+     */
+    o.on.apply(o, [types, selector, data, function() { 
+        for(i = 1; i < arguments.length; i++) {
+            if ( arguments[i].constructor.name == 'Query' )
+                arguments[i] = arguments[i].clone();
+        }
+        fn.apply(o, arguments);
+    }]);
+  };
+
+  $.unsubscribe = function() {
+    o.off.apply(o, arguments);
+  };
+
+  $.publish = function() {
+    o.trigger.apply(o, arguments);
+  };
+
+}(jQuery));
+
+/* ------------------------------------------------------------ */
+
+//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'));
+         }
+     } 
+});
+
index a5fc685..75c3596 100644 (file)
@@ -20,13 +20,14 @@ class SimpleList (Plugin) :
         return env
 
     def requirements (self):
-        reqs = { 'js_files' : [ "js/simplelist.js", "js/plugin.js", "js/manifold-query.js", "js/onavail.js",
-                                "js/manifold-pubsub.js", "js/manifold-async.js", "js/manifold-queries.js",
-                                "js/spin.presets.js", "js/spin.min.js", "js/jquery.spin.js", 
-                                "js/myslice.js",
-                                ] ,
-                 'css_files': [ "css/simplelist.css" ],
-                 }
+        reqs = {
+            'js_files' : [ "js/simplelist.js", "js/plugin.js",
+                           "js/manifold.js", "js/manifold-query.js", 
+                           "js/spin.presets.js", "js/spin.min.js", "js/jquery.spin.js", 
+                           "js/myslice.js",
+                           ] ,
+            'css_files': [ "css/simplelist.css" ],
+            }
         if self.with_datatables:
             reqs['js_files'].append ("js/dataTables.js")
             reqs['js_files'].append ("js/with-datatables.js")
index 87dc4c6..4a6e6b2 100644 (file)
@@ -13,8 +13,8 @@ class QueryCode (Plugin):
 
     def requirements (self):
         return { 
-            'js_files' : [ "js/querycode.js", "js/plugin.js", "js/manifold-query.js", "js/onavail.js",
-                           "js/manifold-pubsub.js", "js/manifold-async.js", 
+            'js_files' : [ "js/querycode.js", "js/plugin.js", 
+                           "js/manifold.js", "js/manifold-query.js",
                            "js/spin.presets.js", "js/spin.min.js", "js/jquery.spin.js", 
                            
 #        Plugins::add_js('/QueryCode/beautyofcode/scripts/shCore.js');
diff --git a/unfold/js/onavail.js b/unfold/js/onavail.js
deleted file mode 100644 (file)
index 6740503..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-onavail_debug=false;
-
-function onFunctionAvailable(sMethod, oCallback, oObject, bScope) {
-    if (eval('typeof ' + sMethod) == 'function') {
-       if (onavail_debug) console.log("onFunctionAvailable, running");
-        bScope ? oCallback.call(oObject) : oCallback(oObject);
-    } else { 
-       if (onavail_debug) console.log("onFunctionAvailable, delaying for 50 ms");
-        setTimeout(function () {onFunctionAvailable(sMethod, oCallback, oObject, bScope);}, 50);
-    }
-}       
-function onObjectAvailable(sMethod, oCallback, oObject, bScope) {
-    if (eval('typeof ' + sMethod) == 'object') {
-        bScope ? oCallback.call(oObject) : oCallback(oObject);
-    } else {
-        setTimeout(function () {onObjectAvailable(sMethod, oCallback, oObject, bScope);}, 50);
-    }
-}
index d0c9727..157e004 100644 (file)
@@ -47,7 +47,7 @@ class Page:
         self._queries = set()
         self._queue = []
 
-    # the js async methods (see manifold_async_success)
+    # the js async methods (see manifold.asynchroneous_success)
     # offer the option to deliver the result to a specific DOM elt
     # otherwise (i.e. if domid not provided) 
     # it goes through the pubsub using query's uuid