+++ /dev/null
-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'));
- }
- }
-});
+++ /dev/null
-/* 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);
-//}
+++ /dev/null
-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]);
- }
- },
-}
-
--- /dev/null
+// 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'));
+ }
+ }
+});
+
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")
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');
+++ /dev/null
-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);
- }
-}
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