X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fhazelnut%2Fstatic%2Fjs%2Fhazelnut.js;h=13bc5d8cc353e27626a768449ecdeb75413839ca;hb=22dba9d34674e0cc1b285e678bbb7bc6482c58ca;hp=48a392d73935a7e47753c8cabf2f8afbbb7c7a6a;hpb=ca6870f59241a93d85a159d48890ac7ec408a1ea;p=myslice.git diff --git a/plugins/hazelnut/static/js/hazelnut.js b/plugins/hazelnut/static/js/hazelnut.js index 48a392d7..13bc5d8c 100644 --- a/plugins/hazelnut/static/js/hazelnut.js +++ b/plugins/hazelnut/static/js/hazelnut.js @@ -7,7 +7,6 @@ (function($){ // TEMP - var ELEMENT_KEY = 'resource_hrn'; var debug=false; debug=true @@ -24,11 +23,18 @@ this.in_set_buffer = Array(); /* XXX Events XXX */ - this.$element.on('show.Datatables', this.on_show); + // this.$element.on('show.Datatables', this.on_show); + this.el().on('show', this, this.on_show); // Unbind all events using namespacing // TODO in destructor // $(window).unbind('Hazelnut'); + var query = manifold.query_store.find_analyzed_query(this.options.query_uuid); + this.method = query.object; + + var keys = manifold.metadata.get_key(this.method); + this.key = (keys && keys.length == 1) ? keys[0] : null; + /* Setup query and record handlers */ this.listen_query(options.query_uuid); this.listen_query(options.query_all_uuid, 'all'); @@ -43,17 +49,14 @@ /* PLUGIN EVENTS */ - on_show: function() + on_show: function(e) { - // XXX - var $this=$(this); - // xxx wtf. why [1] ? would expect 0... - if (debug) - messages.debug("Hitting suspicious line in hazelnut.show"); - var oTable = $($('.dataTable', $this)[1]).dataTable(); - oTable.fnAdjustColumnSizing() + var self = e.data; + + self.table.fnAdjustColumnSizing() /* Refresh dataTabeles if click on the menu to display it : fix dataTables 1.9.x Bug */ + /* temp disabled... useful ? -- jordan $(this).each(function(i,elt) { if (jQuery(elt).hasClass('dataTables')) { var myDiv=jQuery('#hazelnut-' + this.id).parent(); @@ -63,6 +66,7 @@ } } }); + */ }, // on_show /* GUI EVENTS */ @@ -222,21 +226,17 @@ // UNUSED ? // // UNUSED ? // }, // update_plugin - checkbox: function (plugin_uuid, header, field, selected_str, disabled_str) + checkbox: function (key, value) { var result=""; - if (header === null) - header = ''; // Prefix id with plugin_uuid result += " is present */ - checked = 'checked '; - hazelnut.current_resources.push(record[ELEMENT_KEY]); - } + if (this.options.checkboxes) // Use a key instead of hostname (hard coded...) - line.push(this.checkbox(this.options.plugin_uuid, record[ELEMENT_KEY], record['type'], checked, false)); - } + // XXX remove the empty checked attribute + line.push(this.checkbox(this.key, record[this.key])); // XXX Is adding an array of lines more efficient ? this.table.fnAddData(line); @@ -318,12 +312,34 @@ this.table.fnSetColumnVis(index, false); }, - set_checkbox: function(record) + set_checkbox: function(record, checked) { - // XXX urn should be replaced by the key - // XXX we should enforce that both queries have the same key !! - checkbox_id = "#hazelnut-checkbox-" + this.options.plugin_uuid + "-" + unfold.escape_id(record[ELEMENT_KEY].replace(/\\/g, '')) - $(checkbox_id, this.table.fnGetNodes()).attr('checked', true); + /* Default: checked = true */ + if (typeof checked === 'undefined') + checked = true; + + var key_value; + /* The function accepts both records and their key */ + switch (manifold.get_type(record)) { + case TYPE_VALUE: + key_value = record; + break; + case TYPE_RECORD: + /* XXX Test the key before ? */ + key_value = record[this.key]; + break; + default: + throw "Not implemented"; + break; + } + + + var checkbox_id = this.id('checkbox', this.id_from_key(this.key, key_value)); + checkbox_id = '#' + checkbox_id.replace(/\./g, '\\.'); + + var element = $(checkbox_id, this.table.fnGetNodes()); + + element.attr('checked', checked); }, /*************************** QUERY HANDLER ****************************/ @@ -368,7 +384,7 @@ /* NOTE in fact we are doing a join here */ if (this.received_all) // update checkbox for record - this.set_checkbox(record); + this.set_checkbox(record, true); else // store for later update of checkboxes this.in_set_buffer.push(record); @@ -390,6 +406,22 @@ this.unspin(); this.received_set = true; }, + + on_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; + } + }, // all @@ -419,7 +451,7 @@ /* ... and check the ones specified in the resource list */ $.each(this.in_set_buffer, function(i, record) { - self.set_checkbox(record); + self.set_checkbox(record, true); }); this.unspin(); @@ -496,8 +528,7 @@ * Handle clicks on checkboxes: reassociate checkbox click every time * the table is redrawn */ - $('.hazelnut-checkbox-' + this.options.plugin_uuid).unbind('click'); - $('.hazelnut-checkbox-' + this.options.plugin_uuid).click({instance: this}, this._check_click); + this.elts('hazelnut-checkbox').unbind('click').click(this, this._check_click); if (!this.table) return; @@ -523,11 +554,13 @@ _check_click: function(e) { + e.stopPropagation(); - var self = e.data.instance; + var self = e.data; // XXX this.value = key of object to be added... what about multiple keys ? manifold.raise_event(self.options.query_uuid, this.checked?SET_ADD:SET_REMOVED, this.value); + //return false; // prevent checkbox to be checked, waiting response from manifold plugin api },