X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fquery_editor%2Fstatic%2Fjs%2Fquery_editor.js;h=68d0265a388d2448f99a25abdf27c33e2bfa5e06;hb=c79b3c894ec8a08686ae4978e5375c15ec6f2cbf;hp=1e15a018f96ead6013080fad2332cdc009343e4c;hpb=6a8cd8d5f11411cdb4bf2510c9be5fd60d72cb50;p=myslice.git
diff --git a/plugins/query_editor/static/js/query_editor.js b/plugins/query_editor/static/js/query_editor.js
index 1e15a018..68d0265a 100644
--- a/plugins/query_editor/static/js/query_editor.js
+++ b/plugins/query_editor/static/js/query_editor.js
@@ -16,10 +16,16 @@
event_filter_added: function(op, suffix) {
suffix = (typeof suffix === 'undefined') ? '' : manifold.separator + suffix;
var self = this;
- return function(e) {
+ return function(e, ui) {
var array = self.array_from_id(e.target.id);
var key = self.field_from_id(array); // No need to remove suffix...
- var value = e.target.value;
+
+ // using autocomplete ui
+ if(typeof(ui) != "undefined"){
+ var value = ui.item.value;
+ }else{
+ var value = e.target.value;
+ }
if (value) {
// XXX This should be handled by manifold
@@ -29,13 +35,16 @@
// XXX This should be handled by manifold
manifold.raise_event(self.options.query_uuid, FILTER_REMOVED, [key, op]);
}
- }
+ };
},
init: function(options, element) {
this._super(options, element);
-
this.listen_query(options.query_uuid);
+ // this one is the complete list of resources
+ // and will be bound to callbacks like on_all_new_record
+ this.listen_query(options.query_all_uuid, 'all');
+
this.elts('queryeditor-auto-filter').change(this.event_filter_added('='));
this.elts('queryeditor-filter').change(this.event_filter_added('='));
@@ -51,7 +60,7 @@
// XXX Why isn't it done statically ?
var nCloneTh = document.createElement( 'th' );
var nCloneTd = document.createElement( 'td' );
- nCloneTd.innerHTML = "";
+ nCloneTd.innerHTML = "";
//nCloneTd.innerHTML = '';
nCloneTh.innerHTML = 'Info';
nCloneTd.className = "center";
@@ -67,36 +76,38 @@
// We are currently using a DataTable display, but another browsing component could be better
//jQuery('#'+this.options.plugin_uuid+'-table').dataTable...
var metaTable = this.elmt('table').dataTable({
- bFilter : false,
- bPaginate : false,
- bInfo : false,
- sScrollX : '100%', // Horizontal scrolling
- sScrollY : '200px',
- //bJQueryUI : true, // Use jQuery UI
- bProcessing : true, // Loading
- aaSorting : [[ 1, "asc" ]], // sort by column fields on load
- aoColumnDefs: [
- { 'bSortable': false, 'aTargets': [ 0 ]},
- { 'sWidth': '8px', 'aTargets': [ 0 ] },
- { 'sWidth': '8px', 'aTargets': [ 4 ] } // XXX NB OF COLS
- ]
+// Thierry : I'm turning off all the dataTables options for now, so that
+// the table displays more properly again, might need more tuning though
+// bFilter : false,
+// bPaginate : false,
+// bInfo : false,
+// sScrollX : '100%', // Horizontal scrolling
+// sScrollY : '200px',
+// //bJQueryUI : true, // Use jQuery UI
+// bProcessing : true, // Loading
+// aaSorting : [[ 1, "asc" ]], // sort by column fields on load
+// aoColumnDefs: [
+// { 'bSortable': false, 'aTargets': [ 0 ]},
+// { 'sWidth': '8px', 'aTargets': [ 0 ] },
+// { 'sWidth': '8px', 'aTargets': [ 4 ] } // XXX NB OF COLS
+// ]
});
+ this.table = metaTable;
- var self = this;
// Actions on the newly added fields
this.elmt('table tbody td span').on('click', function() {
var nTr = this.parentNode.parentNode;
// use jQuery UI instead of images to keep a common UI
- // class="ui-icon treeclick ui-icon-triangle-1-s tree-minus"
- // East oriented Triangle class="ui-icon-triangle-1-e"
- // South oriented Triangle class="ui-icon-triangle-1-s"
+ // class="glyphicon glyphicon-chevron-down treeclick tree-minus"
+ // East oriented Triangle class="glyphicon-chevron-right"
+ // South oriented Triangle class="glyphicon-chevron-down"
- if (this.className=="ui-icon ui-icon-triangle-1-e") {
- this.removeClass("ui-icon-triangle-1-e").addClass("ui-icon-triangle-1-s");
+ if (this.hasClass("glyphicon-chevron-right")) {
+ this.removeClass("glyphicon-chevron-right").addClass("glyphicon-chevron-down");
// XXX ??????
metaTable.fnOpen(nTr, this.fnFormatDetails(metaTable, nTr, self.options.plugin_uuid+'_div'), 'details' );
} else {
- this.removeClass("ui-icon-triangle-1-s").addClass("ui-icon-triangle-1-e");
+ this.removeClass("glyphicon-chevron-down").addClass("glyphicon-chevron-right");
metaTable.fnClose(nTr);
}
});
@@ -105,6 +116,9 @@
'padding-top' : '0em',
'padding-bottom': '0em'
});
+
+ // autocomplete list of tags
+ this.availableTags = {};
}, // init
@@ -170,6 +184,29 @@
this.uncheck_field(field);
},
+ /* RECORD HANDLERS */
+ on_query_done: function()
+ {
+ //console.log("Query_Editor: query_done!");
+ //console.log(this.availableTags);
+ },
+ /* Autocomplete based on query_all to get all the fields, where query get only the fields selected */
+ on_all_new_record: function(record)
+ {
+ availableTags = this.availableTags;
+ jQuery.each(record,function(key,value){
+ value = unfold.get_value(value);
+ if(!availableTags.hasOwnProperty(key)){availableTags[key]=new Array();}
+ //availableTags[key].push(value);
+ var currentArray = availableTags[key];
+ if(value!=null){
+ if(jQuery.inArray(value,currentArray)==-1){availableTags[key].push(value);}
+ }
+ });
+ this.availableTags = availableTags;
+ this.update_autocomplete(availableTags);
+ },
+
/* Former code not used at the moment */
print_field_description: function(field_header, div_id)
@@ -236,6 +273,26 @@
return output;
},
+ update_autocomplete: function(availableTags)
+ {
+ var self = this;
+ var domid = this.options.plugin_uuid;
+
+ jQuery.each(availableTags, function(key, value){
+ value.sort();
+ // using dataTables's $ to search also in nodes that are not currently displayed
+ var element = self.table.$("#"+domid+"__field__"+key);
+
+ element.autocomplete({
+ source: value,
+ selectFirst: true,
+ minLength: 0, // allows to browse items with no value typed in
+ select: self.event_filter_added('=')
+ });
+ });
+ }, // update_autocomplete
+
+/*
update_autocomplete: function(e, rows, current_query)
{
var d = data;
@@ -243,7 +300,7 @@
var availableTags={};
jQuery.each (rows, function(index, obj) {
jQuery.each(obj,function(key,value){
- value = get_value(value);
+ value = unfold.get_value(value);
if(!availableTags.hasOwnProperty(key)){availableTags[key]=new Array();}
//availableTags[key].push(value);
var currentArray=availableTags[key];
@@ -272,7 +329,7 @@
});
});
}, // update_autocomplete
-
+*/
fnFormatDetails: function( metaTable, nTr, div_id )
{
var aData = metaTable.fnGetData( nTr );