X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fquerytable%2Fstatic%2Fjs%2Fquerytable.js;h=bca90c3551224ea35410d498f680ae2b990ffe3f;hb=8c82aaebbe810904dd985aacf92ebc9eab3fd5f5;hp=8712e523ec08393ae56e8c1127dbad1dd0d33673;hpb=38077fa6e864ddbb6b66ba2cd4723f6d18800305;p=myslice.git diff --git a/plugins/querytable/static/js/querytable.js b/plugins/querytable/static/js/querytable.js index 8712e523..bca90c35 100644 --- a/plugins/querytable/static/js/querytable.js +++ b/plugins/querytable/static/js/querytable.js @@ -1,9 +1,24 @@ /** - * Description: display a query result in a datatables-powered + * Description: display a query result in a slickgrid-powered
* Copyright (c) 2012-2013 UPMC Sorbonne Universite - INRIA * License: GPLv3 */ +/* ongoing adaptation to slickgrid + still missing are +. checkboxes really running properly +. ability to sort on columns (should be straightforward + IIRC this got broken when moving to dataview, see dataview doc +. ability to sort on the checkboxes column + (e.g. have resources 'in' the slice show up first) + not quite clear how to do this +. searching +. filtering +. style improvement +. rendering in the sliceview - does not use up all space, + this is different from the behaviour with simpleview +*/ + (function($) { var debug=false; @@ -24,18 +39,14 @@ this.received_all_query = false; this.received_query = false; -// // We need to remember the active filter for datatables filtering +// // We need to remember the active filter for filtering // this.filters = Array(); // an internal buffer for records that are 'in' and thus need to be checked this.buffered_records_to_check = []; - /* XXX Events XXX */ - // this.$element.on('show.Datatables', this.on_show); + /* Events */ this.elmt().on('show', this, this.on_show); - // Unbind all events using namespacing - // TODO in destructor - // $(window).unbind('QueryTable'); var query = manifold.query_store.find_analyzed_query(this.options.query_uuid); this.method = query.object; @@ -65,7 +76,7 @@ on_show: function(e) { var self = e.data; - self.table.fnAdjustColumnSizing() + self.redraw_table(); }, // on_show /* GUI EVENTS */ @@ -84,6 +95,10 @@ cssClass: "querytable-column-"+column, width:100, minWidth:40, }); } + var checkbox_selector = new Slick.CheckboxSelectColumn({ + cssClass: "slick-checkbox" + }); + this.slick_columns.push(checkbox_selector.getColumnDefinition()); // xxx should be extensible from caller with this.options.slickgrid_options this.slick_options = { @@ -112,11 +127,7 @@ messages.debug("slick_column["+c+"]:"+msg); } } - // add a checkbox column - var checkbox_selector = new Slick.CheckboxSelectColumn({ - cssClass: "slick-cell-checkboxsel" - }); - this.slick_columns.push(checkbox_selector.getColumnDefinition()); + this.slick_grid = new Slick.Grid(selector, this.slick_dataview, this.slick_columns, this.slick_options); this.slick_grid.setSelectionModel (new Slick.RowSelectionModel ({selectActiveRow: false})); this.slick_grid.registerPlugin (checkbox_selector); @@ -126,92 +137,30 @@ this.columnpicker = new Slick.Controls.ColumnPicker (this.slick_columns, this.slick_grid, this.slick_options) - }, // initialize_table + g=this.slick_grid; - // Determine index of key in the table columns - getColIndex: function(key, cols) { - var tabIndex = $.map(cols, function(x, i) { if (x.sTitle == key) return i; }); - return (tabIndex.length > 0) ? tabIndex[0] : -1; - }, // getColIndex - - checkbox_html : function (key, value) { - if (debug_deep) messages.debug("checkbox_html, value="+value); - var result=""; - // Prefix id with plugin_uuid - result += " for the checkbox + var div=this.slick_grid.getCellNode(index,checkbox_col); + if (index <=30) console.log("HERE2 div",div," index="+index+" col="+checkbox_col); + // arm callback on single son of
that is the + $(div).children("input").each(function () { + if (index<=30) console.log("HERE 3, index="+index+" key="+key); + $(this).click(function() {self._checkbox_clicked(self,this,key);}); + }); + } + }, + + // onSelectedRowsChanged will fire even when + _init_checkboxes : function () { + console.log("_init_checkboxes"); + var grid=this.slick_grid; + this.slick_grid.onSelectedRowsChanged.subscribe(function(){ + row_ids = grid.getSelectedRows(); + console.log(row_ids); + }); + }, + + // the callback for when user clicks + _checkbox_clicked: function(querytable,input,key) { + // XXX this.value = key of object to be added... what about multiple keys ? + if (debug) messages.debug("querytable click handler checked=" + input.checked + " key=" + key); + manifold.raise_event(querytable.options.query_uuid, input.checked?SET_ADD:SET_REMOVED, key); + //return false; // prevent checkbox to be checked, waiting response from manifold plugin api + + }, + + // xxx from this and down, probably needs further tweaks for slickgrid + _querytable_filter: function(oSettings, aData, iDataIndex) { var ret = true; $.each (this.filters, function(index, filter) { @@ -426,47 +457,6 @@ return ret; }, - _querytable_draw_callback: function() { - /* - * Handle clicks on checkboxes: reassociate checkbox click every time - * the table is redrawn - */ - this.elts('querytable-checkbox').unbind('click').click(this, this._check_click); - - if (!this.table) - return; - - /* Remove pagination if we show only a few results */ - var wrapper = this.table; //.parent().parent().parent(); - var rowsPerPage = this.table.fnSettings()._iDisplayLength; - var rowsToShow = this.table.fnSettings().fnRecordsDisplay(); - var minRowsPerPage = this.table.fnSettings().aLengthMenu[0]; - - if ( rowsToShow <= rowsPerPage || rowsPerPage == -1 ) { - $('.querytable_paginate', wrapper).css('visibility', 'hidden'); - } else { - $('.querytable_paginate', wrapper).css('visibility', 'visible'); - } - - if ( rowsToShow <= minRowsPerPage ) { - $('.querytable_length', wrapper).css('visibility', 'hidden'); - } else { - $('.querytable_length', wrapper).css('visibility', 'visible'); - } - }, - - _check_click: function(e) { - e.stopPropagation(); - - var self = e.data; - - // XXX this.value = key of object to be added... what about multiple keys ? - if (debug) messages.debug("querytable click handler checked=" + this.checked + " hrn=" + this.value); - 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 - - }, - _selectAll: function() { // requires jQuery id var uuid=this.id.split("-");