X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Flists%2Fstatic%2Fjs%2Fsimplelist.js;h=f3476c07ac81c995b80af29233fdd46ebc01ab82;hb=31cc945eda5880557485ca4c78f2c23ad991faf4;hp=aed621777c45f14878510d14c3cbcf9ae1288774;hpb=878862c35e389f01cc7441cc467071642153df37;p=unfold.git diff --git a/plugins/lists/static/js/simplelist.js b/plugins/lists/static/js/simplelist.js index aed62177..f3476c07 100644 --- a/plugins/lists/static/js/simplelist.js +++ b/plugins/lists/static/js/simplelist.js @@ -7,145 +7,142 @@ (function($){ var debug=false; - // debug=true + debug=true - $.fn.SimpleList = function( method ) { - /* Method calling logic */ - if ( methods[method] ) { - return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof method === 'object' || ! method ) { - return methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + method + ' does not exist on jQuery.SimpleList' ); - } - }; + var SimpleList = Plugin.extend ({ - var methods = { - init : function( options ) { - return this.each(function(){ - var $this = $(this), data = $this.data('SimpleList'); - /* Subscribe to query updates */ - var channel='/results/' + options.query_uuid + '/changed'; - /* passing $this as 2nd arg: callbacks will retrieve $this as e.data */ - $.subscribe(channel, $this, update_plugin); - if (debug) window.messages.debug('subscribing to ' + channel); - $this.data('SimpleList', options); - }); - }, - destroy : function( ) { - if (debug) messages.debug("SimpleList.destroy..."); - return this.each(function(){ - var $this = $(this), data = $this.data('SimpleList'); - // xxx not too sure what this is about - $(window).unbind('SimpleList'); - $this.removeData('SimpleList'); - }); - }, - update : function( content ) { - if (debug) messages.debug("SimpleList.update..."); - }, - }; // methods + init: function (options, element) { + this.classname=options.classname; + this._super (options, element); + this.buffered_records=[]; + this.listen_query(options.query_uuid); + }, + + on_query_in_progress: function() { + messages.debug("on_query_in_progress"); + this.spin(true); + }, + + on_query_done: function() { + this._display_table(); + this.unspin(); + console.log("query simple list done"); + console.log(this); + console.log(this.buffered_records); + }, + + on_new_record: function(record) { + this.buffered_records.push(record); + }, /* Private methods */ - // complexity here is mostly because a datatables-enabled table cannot - // be updated in a "normal" way using .html() - function update_plugin(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; + + _display_table: function() { + var self=this; + var $plugindiv = this.elmt(); + var options = this.options; // locate the element; with datatables in the way, // this might not be a direct son of the div-plugin - var $table = $plugindiv.find("table.simplelist").first(); + var $table = $plugindiv.find("table."+this.classname).first(); // also we may or may not have a header - var $tbody = $table.find("tbody.simplelist").first(); + var $tbody = $table.find("tbody."+this.classname).first(); var use_datatables = $table.hasClass("with-datatables"); - if (debug) - messages.debug($plugindiv.attr('id') + " udt= " + use_datatables); - - // 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); - - if (rows.length == 0) { - if (use_datatables) - datatables_set_message ($table, $tbody, unfold.warning("No result")); - else - regular_set_message ($table, $tbody, unfold.warning("No result")); - return; + var rows=self.buffered_records; + self.buffered_records=[]; + if (debug){ + messages.debug($plugindiv.attr('id') + " udt= " + use_datatables + " rows="+rows.length); + } + // check if rows contains results related to the object key + object_key = this.options.key.split('.'); + if (rows.length == 0 || rows[0][object_key[0]].length == 0) { + if (use_datatables){ + this._datatables_set_message ($table, $tbody, unfold.warning("No result")); + }else{ + this._regular_set_message ($table, $tbody, unfold.warning("No result")); + } + return; } if (typeof rows[0].error != 'undefined') { - var error="ERROR: " + rows[0].error; - if (use_datatables) - datatables_set_message ($table, $tbody, unfold.error(error)); - else - regular_set_message ($table, $tbody, unfold.error(error)); - return; - } - - var options = $plugindiv.data().SimpleList; - if (use_datatables) - datatables_update_table($table, $tbody, rows, options.key); - else - regular_update_table($table, $tbody, rows, options.key); - + var error="ERROR: " + rows[0].error; + if (use_datatables){ + this._datatables_set_message ($table, $tbody, unfold.error(error)); + }else{ + this._regular_set_message ($table, $tbody, unfold.error(error)); + } + return; } - // hard-wire a separate presentation depending on the key being used.... - function cell(key, value) { - if (key == 'slice.slice_hrn') { - return "" + value + ""; - } else if (key == 'network_hrn') { - return "" + value + ""; - } else { - return value; + if (use_datatables){ + this._datatables_update_table($table, $tbody, rows, options.key); + }else{ + this._regular_update_table($table, $tbody, rows, options.key, this.classname); } - } + }, - function regular_set_message ($table, $tbody, message) { - $tbody.html(""); - } + _regular_set_message: function ($table, $tbody, message) { + $tbody.html(""); + }, - function regular_update_table ($table, $tbody, rows, key) { - if (debug) - messages.debug('regular_update_table ' + rows.length + " rows"); + _regular_update_table: function ($table, $tbody, rows, key, classname) { + if (debug) + messages.debug('regular_update_table ' + rows.length + " rows" + + " key=" + key + " classname=" + this.classname); + var self=this; var html=$.map(rows, function (row) { - value = row; - $.each(key.split('.'), function(i, k) { - if ($.isArray(value)) { - value = $.map(value, function(val, i) { return val[k]}); - } else { - value = value[k]; - } - }); - if ($.isArray(value)) { - x = $.map(value, function(val, i) { return html_row ( cell (key, val)); }); - return x; - } else { - return html_row ( cell (key, value)); - } - }).join(); - $tbody.html(html); - } + var value = row; + $.each(key.split('.'), function(i, k) { + if ($.isArray(value)) { + value = $.map(value, function(val, i) { return val[k]}); + } else { + value = value[k]; + } + }); + if ($.isArray(value)) { + return $.map(value, function(val, i) { + return self._html_row ( self._cell (key, val), this.classname); + }); + } else { + return self._html_row ( self._cell (key, value), this.classname); + } + }).join(); + $tbody.html(html); + }, - function datatables_set_message ($table, $tbody, message) { - $table.dataTable().fnClearTable(); - $table.dataTable().fnAddData( [ message ] ); - $table.dataTable().fnDraw(); - } + _datatables_set_message: function ($table, $tbody, message) { + $table.dataTable().fnClearTable(); + $table.dataTable().fnAddData( [ message ] ); + $table.dataTable().fnDraw(); + }, - function datatables_update_table ($table, $tbody, rows, key) { - if (debug) messages.debug('datatables_update_table ' + rows.length + " rows"); - $table.dataTable().fnClearTable(); - // the lambda here returns a [[]] because $.map is kind of broken; as per the doc: - // The function can return any value to add to the array. A returned array will be flattened into the resulting array. - // this is wrong indeed so let's work around that - $table.dataTable().fnAddData( $.map(rows, function (row) { return [[ cell (key,row[key]) ]] }) ); - $table.dataTable().fnDraw(); - } + _datatables_update_table: function ($table, $tbody, rows, key) { + if (debug) messages.debug('datatables_update_table ' + rows.length + " rows"); + $table.dataTable().fnClearTable(); + // the lambda here returns a [[]] because $.map is kind of broken; as per the doc: + // The function can return any value to add to the array. + // A returned array will be flattened into the resulting array. + // this is wrong indeed so let's work around that + var self=this; + $table.dataTable().fnAddData( $.map(rows, function (row) { return [[ self._cell (key,row[key]) ]] }) ); + $table.dataTable().fnDraw(); + }, - function html_row (cell) { - return ""; - } + _html_row: function (cell, classname) { + return ""; + }, + // hard-wire a separate presentation depending on the key being used.... + _cell: function (key, value) { + if (key == 'slice.slice_hrn') { + return "" + value + ""; + } else if (key == 'platform') { + return "" + value + ""; + } else { + return value; + } + }, + }); + + $.plugin('SimpleList', SimpleList); + })( jQuery );
"+message+"
"+message+"
"+cell+"
"+cell+"