X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fhazelnut%2Fstatic%2Fjs%2Fhazelnut.js;h=7c042b188de2492cd3e6447fa90eb3bec1d5e686;hb=2baef1cc1dd5bd77c4a949cd60721122d1b55a46;hp=f38d5184e8cce584cd98a628433e2fa8ceeeb7b1;hpb=71bd1a3f0a1b0b41510000e3828cff65947044f7;p=unfold.git diff --git a/plugins/hazelnut/static/js/hazelnut.js b/plugins/hazelnut/static/js/hazelnut.js index f38d5184..7c042b18 100644 --- a/plugins/hazelnut/static/js/hazelnut.js +++ b/plugins/hazelnut/static/js/hazelnut.js @@ -23,6 +23,9 @@ this.received_all_query = false; this.received_query = false; + // We need to remember the active filter for datatables filtering + this.filters = Array(); + // an internal buffer for records that are 'in' and thus need to be checked this.buffered_records_to_check = []; // an internal buffer for keeping lines and display them in one call to fnAddData @@ -112,7 +115,7 @@ /* Setup the SelectAll button in the dataTable header */ /* xxx not sure this is still working */ var oSelectAll = $('#datatableSelectAll-'+ this.options.plugin_uuid); - oSelectAll.html("Select All"); + oSelectAll.html("Select All"); oSelectAll.button(); oSelectAll.css('font-size','11px'); oSelectAll.css('float','right'); @@ -126,13 +129,14 @@ */ $.fn.dataTableExt.afnFiltering.push(function( oSettings, aData, iDataIndex ) { /* No filtering if the table does not match */ - if (oSettings.nTable.id != "hazelnut-" + self.options.plugin_uuid) + if (oSettings.nTable.id != self.options.plugin_uuid + '__table') return true; - return this._hazelnut_filter.call(self, oSettings, aData, iDataIndex); + return self._hazelnut_filter.call(self, oSettings, aData, iDataIndex); }); /* Processing hidden_columns */ $.each(this.options.hidden_columns, function(i, field) { + //manifold.raise_event(self.options.query_all_uuid, FIELD_REMOVED, field); self.hide_column(field); }); }, // initialize_table @@ -186,6 +190,9 @@ line.push(''); else line.push(record['hostname']); + + } else if (colnames[j] == 'hrn' && typeof(record) != 'undefined') { + line.push(' '+record['hrn']); } else { if (record[colnames[j]]) line.push(record[colnames[j]]); @@ -198,12 +205,11 @@ if (this.options.checkboxes) { // Use a key instead of hostname (hard coded...) line.push(this.checkbox_html(this.key, record[this.key])); - } + } - // adding an array in one call is *much* more efficient - // this.table.fnAddData(line); - this.buffered_lines.push(line); - + // adding an array in one call is *much* more efficient + // this.table.fnAddData(line); + this.buffered_lines.push(line); }, clear_table: function() @@ -256,10 +262,11 @@ var checkbox_id = this.flat_id(this.id('checkbox', key_value)); - checkbox_id = '#' + checkbox_id; - // using dataTables's $ to search also in nodes that are not currently displayed + // function escape_id(myid) is defined in portal/static/js/common.functions.js + checkbox_id = escape_id(checkbox_id); + // using dataTables's $ to search also in nodes that are not currently displayed var element = this.table.$(checkbox_id); - if (debug) messages.debug("set_checkbox checked=" + checked + " id=" + checkbox_id + " matches=" + element.length); + if (debug) messages.debug("set_checkbox checked=" + checked + " id=" + checkbox_id + " matches=" + element.length); element.attr('checked', checked); }, @@ -267,13 +274,16 @@ on_filter_added: function(filter) { - // XXX + this.filters.push(filter); this.redraw_table(); }, on_filter_removed: function(filter) { - // XXX + // Remove corresponding filters + this.filters = $.grep(this.filters, function(x) { + return x != filter; + }); this.redraw_table(); }, @@ -298,19 +308,56 @@ alert('Hazelnut::clear_fields() not implemented'); }, + /* XXX TODO: make this generic a plugin has to subscribe to a set of Queries to avoid duplicated code ! */ + /*************************** ALL QUERY HANDLER ****************************/ + + on_all_filter_added: function(filter) + { + // XXX + this.redraw_table(); + }, + + on_all_filter_removed: function(filter) + { + // XXX + this.redraw_table(); + }, + + on_all_filter_clear: function() + { + // XXX + this.redraw_table(); + }, + + on_all_field_added: function(field) + { + this.show_column(field); + }, + + on_all_field_removed: function(field) + { + this.hide_column(field); + }, + + on_all_field_clear: function() + { + alert('Hazelnut::clear_fields() not implemented'); + }, + + /*************************** RECORD HANDLER ***************************/ on_new_record: function(record) { if (this.received_all_query) { - // if the 'all' query has been dealt with already we may turn on the checkbox - if (debug) messages.debug("turning on checkbox for record "+record[this.key]); + // if the 'all' query has been dealt with already we may turn on the checkbox + if (debug) messages.debug("turning on checkbox for record "+record[this.key]); this.set_checkbox(record, true); - } else { - // otherwise we need to remember that and do it later on - if (debug) messages.debug ("Remembering record to check " + record[this.key]); + } else { + // otherwise we need to remember that and do it later on + if (debug) messages.debug("Remembering record to check " + record[this.key]); this.buffered_records_to_check.push(record); - } + } }, on_clear_records: function() @@ -326,7 +373,7 @@ on_query_done: function() { this.received_query = true; - // unspin once we have received both + // unspin once we have received both if (this.received_all_query && this.received_query) this.unspin(); }, @@ -346,7 +393,23 @@ } }, + /* XXX TODO: make this generic a plugin has to subscribe to a set of Queries to avoid duplicated code ! */ // all + on_all_field_state_changed: function(data) + { + switch(data.request) { + case FIELD_REQUEST_ADD: + case FIELD_REQUEST_ADD_RESET: + this.set_checkbox(data.value, true); + break; + case FIELD_REQUEST_REMOVE: + case FIELD_REQUEST_REMOVE_RESET: + this.set_checkbox(data.value, false); + break; + default: + break; + } + }, on_all_new_record: function(record) { @@ -393,19 +456,8 @@ */ _hazelnut_filter: function(oSettings, aData, iDataIndex) { - var cur_query = this.current_query; - if (!cur_query) return true; var ret = true; - - /* We have an array of filters : a filter is an array (key op val) - * field names (unless shortcut) : oSettings.aoColumns = [ sTitle ] - * can we exploit the data property somewhere ? - * field values (unless formatting) : aData - * formatting should leave original data available in a hidden field - * - * The current line should validate all filters - */ - $.each (cur_query.filters, function(index, filter) { + $.each (this.filters, function(index, filter) { /* XXX How to manage checkbox ? */ var key = filter[0]; var op = filter[1];