X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fquery_editor%2Fquery_editor.js;h=9ef90fd8d09cf791e3935755703e7f2b448ebc8e;hb=3e3c5579b2c4ebec46d03b29594fdd7ac27ff276;hp=3bc3d8bd9b3241fdb6ca0f92e81c50a29fc65bd3;hpb=d4e1a95cb427ce0960874b040532edbf0ee6b629;p=myslice.git diff --git a/plugins/query_editor/query_editor.js b/plugins/query_editor/query_editor.js index 3bc3d8bd..9ef90fd8 100644 --- a/plugins/query_editor/query_editor.js +++ b/plugins/query_editor/query_editor.js @@ -4,116 +4,25 @@ * License: GPLv3 */ -/* - * It's a best practice to pass jQuery to an IIFE (Immediately Invoked Function - * Expression) that maps it to the dollar sign so it can't be overwritten by - * another library in the scope of its execution. - */ - (function($){ - var PLUGIN_NAME = 'QueryEditor'; - - // routing calls - jQuery.fn.QueryEditor = function( method ) { - 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 { - jQuery.error( 'Method ' + method + ' does not exist on jQuery.' + PLUGIN_NAME ); - } - }; - - /*************************************************************************** - * Public methods - ***************************************************************************/ - - var methods = { - - /** - * @brief Plugin initialization - * @param options : an associative array of setting values - * @return : a jQuery collection of objects on which the plugin is - * applied, which allows to maintain chainability of calls - */ - init : function ( options ) { - - return this.each(function() { - - var $this = $(this); - - /* An object that will hold private variables and methods */ - var plugin = new QueryEditor(options); - $this.data('Manifold', plugin); - - }); // this.each - }, // init - - /** - * @brief Plugin destruction - * @return : a jQuery collection of objects on which the plugin is - * applied, which allows to maintain chainability of calls - */ - destroy : function( ) { - - return this.each(function() { - var $this = $(this); - var hazelnut = $this.data('Manifold'); - - // Unbind all events using namespacing - $(window).unbind(PLUGIN_NAME); - - // Remove associated data - hazelnut.remove(); - $this.removeData('Manifold'); - - $this.set_query_handler(options.query_uuid, hazelnut.query_handler); - $this.set_record_handler(options.query_uuid, hazelnut.record_handler); + var QueryEditor = Plugin.extend({ - /* XXX Subscribe to query updates to maintain current state of query (multiple editors) */ - jQuery.subscribe('/query/' + options.query_uuid + '/changed', {instance: $this}, query_changed); - jQuery.subscribe('/query/' + options.query_uuid + '/diff', {instance: $this}, query_changed_diff); - /* Subscribe to results in order to redraw the table when updates arrive */ - jQuery.subscribe('/results/' + options.query_uuid + '/changed', {instance: $this}, update_autocomplete); + init: function(options, element) { + $('.queryeditor-auto-filter').change(function(event) { + var key = event.target.id.split('-')[4]; // Should be consistent with the naming of fields + var op = '='; + var value = event.target.value; + manifold.raise_event(object.options.query_uuid, FILTER_ADDED, [key, op, value]); }); - }, // destroy - - }; // var methods; - - /*************************************************************************** - * Plugin object - ***************************************************************************/ - - function QueryEditor(options) - { - - /* member variables */ - this.options = options; - - var object = this; - - this.initialize_table = function(data) - { - - var d = data; jQuery('.queryeditor-filter').change(function(event) { - query = data.current_query; - var key=getKeySplitId(event.target.id,"-"); - var op='='; - var value=event.target.value; - - if(value){ - query.update_filter(key, op, value); - //add_ActiveFilter(event.target.id, '=',event.target.value,data); - }else{ - query.remove_filter(key,op,""); - //remove_ActiveFilter(event, data, event.target.id,'='); - } - // Publish the query changed, the other plugins with subscribe will get the changes - jQuery.publish('/query/' + query.uuid + '/changed', query); + var key = event.target.id.split('-')[4]; + var op = '='; + var value = event.target.value; + + manifold.raise_event(object.options.query_uuid, FILTER_ADDED, [key, op, value]); }); jQuery('.queryeditor-filter-min').change(function(event) { query = data.current_query; @@ -149,7 +58,7 @@ }); jQuery('.queryeditor-check').click(function() { - manifold.raise_event(object.options.query_uuid, this.checked?SET_ADD:SET_REMOVED, this.value); + manifold.raise_event(object.options.query_uuid, this.checked?FIELD_ADDED:FIELD_REMOVED, this.value); /* var column = this.id.substring(6); query = data.current_query; @@ -229,11 +138,64 @@ jQuery('#'+this.options.plugin_uuid+'_fields_wrapper').css({'padding-top':'0em','padding-bottom':'0em'}); //}); // onfunctionAvailable + }, // init - } // initialize_table + /* UI management */ - this.print_field_description = function(field_header, div_id) { - + check_field: function(field) + { + this.el('check', field).attr('checked', true); + }, + + uncheck_field: function(field) + { + this.el('check', field).attr('checked', false); + }, + + /* Events */ + + on_filter_added: function(filter) + { +// filter = data; +// // Set the value of the filter = to query filter value +// // Necessary if the filter has been modified by another plugin (QuickFilter) +// if(filter[1]=="="){ +// jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]).val(filter[2]); +// }else if(filter[1]=="<"){ +// jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-max').val(filter[2]); +// }else if(filter[1]==">"){ +// jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-min').val(filter[2]); +// } + }, + + on_filter_removed: function(filter) + { +// filter = data; +// if(filter[1]=="="){ +// jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]).val(null); +// }else if(filter[1]=="<"){ +// //502124d5a5848-filter-asn-max +// jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-max').val(null); +// }else if(filter[1]==">"){ +// //502124d5a5848-filter-asn-min +// jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-min').val(null); +// } + }, + + on_field_added: function(field) + { + this.check_field(field); + }, + + on_field_removed: function(field) + { + this.uncheck_field(field); + }, + + /* Former code */ + + print_field_description: function(field_header, div_id) + { //var selected = all_headers[field_header]; var selected = getMetadata_field('resource',field_header); @@ -294,9 +256,9 @@ output += ""; return output; - } + }, - this.update_autocomplete = function(e, rows, current_query) + update_autocomplete: function(e, rows, current_query) { var d = data; d.current_query = current_query; @@ -331,90 +293,10 @@ } }); }); - } // update_autocomplete - - /** - * This function is used to update autocomplete - */ - this.record_handler = function(e, event_type, record) - { - // elements in set - switch(event_type) { - case NEW_RECORD: - /* NOTE in fact we are doing a join here */ - if (object.received_all) - // update checkbox for record - object.set_checkbox(record); - else - // store for later update of checkboxes - object.in_set_buffer.push(record); - break; - case CLEAR_RECORDS: - // nothing to do here - break; - case IN_PROGRESS: - manifold.spin($(this)); - break; - case DONE: - if (object.received_all) - manifold.spin($(this), false); - object.received_set = true; - break; - } - }; + }, // update_autocomplete - this.query_handler = function(e, event_type, data) + fnFormatDetails: function( metaTable, nTr, div_id ) { - // This replaces the complex set_query function - // The plugin does not need to remember the query anymore - switch(event_type) { - // Filters - // When Query changed, Then we need to update the filters of - // QueryEditor plugin if the filter is active, set the value - // (the update can come from another plugin) else set the - // filter value to null PB if the filter is composed of MIN/MAX - // values - case FILTER_ADDED: - filter = data; - // Set the value of the filter = to query filter value - // Necessary if the filter has been modified by another plugin (QuickFilter) - if(filter[1]=="="){ - jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]).val(filter[2]); - }else if(filter[1]=="<"){ - jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-max').val(filter[2]); - }else if(filter[1]==">"){ - jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-min').val(filter[2]); - } - case FILTER_REMOVED: - filter = data; - if(filter[1]=="="){ - jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]).val(null); - }else if(filter[1]=="<"){ - //502124d5a5848-filter-asn-max - jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-max').val(null); - }else if(filter[1]==">"){ - //502124d5a5848-filter-asn-min - jQuery('#'+this.options.plugin_uuid+'-filter-'+filter[0]+'-min').val(null); - } - case CLEAR_FILTERS: - break; - - // Fields - /* Hide/unhide columns to match added/removed fields */ - case FIELD_ADDED: - $('#check_' + data).attr('checked', true); - break; - case FIELD_REMOVED: - $('#check_' + data).attr('checked', false); - break; - case CLEAR_FIELDS: - alert(PLUGIN_NAME + '::clear_fields() not implemented'); - break; - } // switch - - - } - this.fnFormatDetails = function( metaTable, nTr, div_id ) { var aData = metaTable.fnGetData( nTr ); var sOut = '
'; //sOut += prepare_tab_description(aData[1].substr(21, aData[1].length-21-7), div_id); @@ -424,18 +306,4 @@ return sOut; } - - /** - * - */ - this.initialize = function() { - //XXX - this.initialize_table(jQuery(this).data()); - } - /* Constructor */ - - this.initialize(); - - } // function PresView - })( jQuery );