X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fhazelnut%2Fhazelnut.js;h=e63baccdf59932af698199aeaa33652c66127058;hb=4b9ed7eeaae673d0bf30a4d494fa052bcbc41fdb;hp=5f1c27a0068c26ef2a208f9bfbf07271247b4699;hpb=4f9ae42164062b361bee7650af3c37b83fa8ea0a;p=unfold.git diff --git a/plugins/hazelnut/hazelnut.js b/plugins/hazelnut/hazelnut.js index 5f1c27a0..e63baccd 100644 --- a/plugins/hazelnut/hazelnut.js +++ b/plugins/hazelnut/hazelnut.js @@ -48,24 +48,30 @@ var $this = $(this); - /* Events */ - $this.on('show.Datatables', methods.show); - /* An object that will hold private variables and methods */ var hazelnut = new Hazelnut (options); $this.data('Hazelnut', hazelnut); - var query_channel = '/query/' + options.query_uuid + '/changed'; - var update_channel = '/update-set/' + options.query_uuid; - var results_channel = '/results/' + options.query_uuid + '/changed'; - - // xxx not tested yet - $.subscribe(query_channel, function(e, query) { hazelnut.set_query(query); }); - // xxx not tested yet - $.subscribe(update_channel, function(e, resources, instance) { hazelnut.set_resources(resources, instance); }); - // expected to work - $.subscribe(results_channel, $this, function(e, rows) { hazelnut.update_plugin(e,rows); }); - if (debug) - messages.debug("hazelnut '" + this.id + "' subscribed to e.g." + results_channel); + + /* Events */ + $this.on('show.Datatables', methods.show); + + // This is the new plugin API meant to replace the weird publish_subscribe mechanism + $this.set_query_handler(options.query_uuid, hazelnut.query_handler); + $this.set_record_handler(options.query_uuid, hazelnut.record_handler); + +// /* Subscriptions */ +// var query_channel = '/query/' + options.query_uuid + '/changed'; +// var update_channel = '/update-set/' + options.query_uuid; +// var results_channel = '/results/' + options.query_uuid + '/changed'; +// +// // xxx not tested yet +// $.subscribe(query_channel, function(e, query) { hazelnut.set_query(query); }); +// // xxx not tested yet +// $.subscribe(update_channel, function(e, resources, instance) { hazelnut.set_resources(resources, instance); }); +// // expected to work +// $.subscribe(results_channel, $this, function(e, rows) { hazelnut.update_plugin(e,rows); }); +// if (debug) +// messages.debug("hazelnut '" + this.id + "' subscribed to e.g." + results_channel); }); // this.each }, // init @@ -281,53 +287,58 @@ } this.update_plugin = function(e, rows) { - // e.data is what we passed in second argument to subscribe - // so here it is the jquery object attached to the plugin
- var $plugindiv=e.data; - if (debug) messages.debug("entering hazelnut.update_plugin on id '" + $plugindiv.attr('id') + "'"); - // clear the spinning wheel: look up an ancestor that has the need-spin class - // do this before we might return - $plugindiv.closest('.need-spin').spin(false); + // e.data is what we passed in second argument to subscribe + // so here it is the jquery object attached to the plugin
+ var $plugindiv=e.data; + if (debug) + messages.debug("entering hazelnut.update_plugin on id '" + $plugindiv.attr('id') + "'"); + // clear the spinning wheel: look up an ancestor that has the need-spin class + // do this before we might return + $plugindiv.closest('.need-spin').spin(false); var options = this.options; var hazelnut = this; - /* if we get no result, or an error, try to make that clear, and exit */ + /* if we get no result, or an error, try to make that clear, and exit */ if (rows.length==0) { - if (debug) messages.debug("Empty result on hazelnut " + this.options.domid); - var placeholder=$(this.table).find("td.dataTables_empty"); - console.log("placeholder "+placeholder); - if (placeholder.length==1) placeholder.html(unfold.warning("Empty result")); - else this.table.html(unfold.warning("Empty result")); - return; + if (debug) + messages.debug("Empty result on hazelnut " + this.options.domid); + var placeholder=$(this.table).find("td.dataTables_empty"); + console.log("placeholder "+placeholder); + if (placeholder.length==1) + placeholder.html(unfold.warning("Empty result")); + else + this.table.html(unfold.warning("Empty result")); + return; } else if (typeof(rows[0].error) != 'undefined') { - // we now should have another means to report errors that this inline/embedded hack - if (debug) messages.error ("undefined result on " + this.options.domid + " - should not happen anymore"); + // we now should have another means to report errors that this inline/embedded hack + if (debug) + messages.error ("undefined result on " + this.options.domid + " - should not happen anymore"); this.table.html(unfold.error(rows[0].error)); return; } - /* - * fill the dataTables object - * we cannot set html content directly here, need to use fnAddData - */ + /* + * fill the dataTables object + * we cannot set html content directly here, need to use fnAddData + */ var lines = new Array(); this.current_resources = Array(); $.each(rows, function(index, row) { - // this models a line in dataTables, each element in the line describes a cell + // this models a line in dataTables, each element in the line describes a cell line = new Array(); // go through table headers to get column names we want // in order (we have temporarily hack some adjustments in names) - var cols = hazelnut.table.fnSettings().aoColumns; + var cols = object.table.fnSettings().aoColumns; var colnames = cols.map(function(x) {return x.sTitle}) var nb_col = cols.length; - /* if we've requested checkboxes, then forget about the checkbox column for now */ + /* if we've requested checkboxes, then forget about the checkbox column for now */ if (options.checkboxes) nb_col -= 1; - /* fill in stuff depending on the column name */ + /* fill in stuff depending on the column name */ for (var j = 0; j < nb_col; j++) { if (typeof colnames[j] == 'undefined') { line.push('...'); @@ -345,10 +356,10 @@ } } - /* catch up with the last column if checkboxes were requested */ + /* catch up with the last column if checkboxes were requested */ if (options.checkboxes) { var checked = ''; - // xxx problem is, we don't get this 'sliver' thing set apparently + // xxx problem is, we don't get this 'sliver' thing set apparently if (typeof(row['sliver']) != 'undefined') { /* It is equal to null when is present */ checked = 'checked '; hazelnut.current_resources.push(row['urn']); @@ -361,27 +372,140 @@ }); - this.table.fnClearTable(); - if (debug) messages.debug("hazelnut.update_plugin: total of " + lines.length + " rows"); + this.table.fnClearTable(); + if (debug) + messages.debug("hazelnut.update_plugin: total of " + lines.length + " rows"); this.table.fnAddData(lines); + + }; + + this.checkbox = function (plugin_uuid, header, field, selected_str, disabled_str) + { + var result=""; + // Prefix id with plugin_uuid + result += " is present */ + checked = 'checked '; + hazelnut.current_resources.push(record['urn']); + } + // Use a key instead of hostname (hard coded...) + line.push(object.checkbox(options.plugin_uuid, record['urn'], record['type'], checked, false)); + } + // XXX Is adding an array of lines more efficient ? + this.table.fnAddData(line); + }; - this.checkbox = function (plugin_uuid, header, field, selected_str, disabled_str) { - var result=""; - // Preafix id with plugin_uuid - result += "