X-Git-Url: https://git.infodrom.org/?p=infodrom%2Frico3;a=blobdiff_plain;f=minsrc%2FricoLiveGrid.js;h=1afb5d64e54059043c11f9251b01500039c25e33;hp=c69d93a7f55100203e7cebb522825afb2a5dd2e7;hb=74a8f0e68b0c99e6f4b67456c6262a2ff4edcc6e;hpb=36d52eb4a12019a01e458266b3e3cf604959b223 diff --git a/minsrc/ricoLiveGrid.js b/minsrc/ricoLiveGrid.js index c69d93a..1afb5d6 100644 --- a/minsrc/ricoLiveGrid.js +++ b/minsrc/ricoLiveGrid.js @@ -1,6 +1,6 @@ /* - * (c) 2005-2009 Richard Cowin (http://openrico.org) - * (c) 2005-2009 Matt Brown (http://dowdybrown.com) + * (c) 2005-2011 Richard Cowin (http://openrico.org) + * (c) 2005-2011 Matt Brown (http://dowdybrown.com) * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at @@ -13,9 +13,6 @@ * and limitations under the License. */ -if(typeof Rico=='undefined') throw("LiveGrid requires the Rico JavaScript framework"); - - /** @namespace */ if (!Rico.Buffer) Rico.Buffer = {}; @@ -34,8 +31,8 @@ Rico.Buffer.Base.prototype = { this.clear(); this.updateInProgress = false; this.lastOffset = 0; - this.rcvdRowCount = false; // true if an eof element was included in the last xml response - this.foundRowCount = false; // true if an xml response is ever received with eof true + this.rcvdRowCount = false; // true if an eof element was included in the last response + this.foundRowCount = false; // true if a response is ever received with eof true this.totalRows = 0; this.rowcntContent = ""; this.rcvdOffset = -1; @@ -43,14 +40,13 @@ Rico.Buffer.Base.prototype = { fixedHdrRows : 0, canFilter : true, // does buffer object support filtering? isEncoded : true, // is the data received via ajax html encoded? - acceptStyle : false // copy style from original/ajax data? + acceptStyle : false, // copy style from original/ajax data? + canRefresh : false // should "refresh" be shown on filter menu? }; Rico.extend(this.options, options || {}); if (dataTable) { this.loadRowsFromTable(dataTable,this.options.fixedHdrRows); dataTable.parentNode.removeChild(dataTable); // delete the data once it has been loaded - } else { - this.clear(); } }, @@ -211,6 +207,8 @@ Rico.Buffer.Base.prototype = { clear: function() { this.baseRows = []; this.rows = []; + this.modified = []; + this.attr = null; this.startPos = -1; this.size = 0; this.windowPos = 0; @@ -299,8 +297,13 @@ Rico.Buffer.Base.prototype = { if (bufRow>=this.size) return false; if (!this.rows[bufRow][col]) this.rows[bufRow][col]={}; this.rows[bufRow][col]=newval; - if (typeof newstyle=='string') this.rows[bufRow][col]._style=newstyle; - this.rows[bufRow][col].modified=true; + if (this.options.acceptStyle && typeof newstyle=='string') { + if (!this.attr) this.attr=[]; + if (!this.attr[bufRow]) this.attr[bufRow]=[]; + this.attr[bufRow][col]=newstyle; + } + if (!this.modified[bufRow]) this.modified[bufRow]=[]; + this.modified[bufRow][col]=true; return true; }, @@ -719,7 +722,6 @@ Rico.LiveGridMethods = { // set headings for (i=0; i<2; i++) { this.thead[i]=this.tabs[i].createTHead(); - //Rico.addClass(this.tabs[i],'ricoLG_top'); this.thead[i].className='ricoLG_top'; if (Rico.theme.gridheader) Rico.addClass(this.thead[i],Rico.theme.gridheader); } @@ -796,7 +798,7 @@ Rico.LiveGridMethods = { switch (fmt.filterUI.charAt(0)) { case 't': // text field - field=Rico.createFormField(divs[1],'input',Rico.inputtypes.search ? 'search' : 'text',name,name); + field=Rico.createFormField(divs[1],'input',Rico.inputtypes.search ? 'search' : 'text',name,'RicoFilter'); var size=fmt.filterUI.match(/\d+/); field.maxLength=fmt.Length || 50; field.size=size ? parseInt(size,10) : 10; @@ -815,17 +817,27 @@ Rico.LiveGridMethods = { // multi-select case 's': // drop-down select - field=Rico.createFormField(divs[1],'select',null,name); + field=Rico.createFormField(divs[1],'select',null,name,'RicoFilter'); Rico.addSelectOption(field,this.options.FilterAllToken,Rico.getPhraseById("filterAll")); col.filterField=field; var options={}; Rico.extend(options, this.buffer.ajaxOptions); var colnum=typeof(fmt.filterCol)=='number' ? fmt.filterCol : c; - options.parameters = {id: this.tableId, distinct:colnum}; - options.parameters[this.actionId]="query"; + options.parameters = this.buffer.formQueryHashXML(0,-1); + options.parameters.distinct = colnum; options.onComplete = this.filterValuesUpdateFunc(c); new Rico.ajaxRequest(this.buffer.dataSource, options); break; + case 'n': + field=Rico.createFormField(divs[1],'select',null,name,'RicoFilter'); + Rico.addSelectOption(field,this.options.FilterAllToken,Rico.getPhraseById("filterAll")); + col.filterField=field; + var choices=fmt.filterUI.length == 1 ? "-0+" : fmt.filterUI.substr(1); + if (choices.indexOf("-") >= 0) Rico.addSelectOption(field,"LT0","< 0"); + if (choices.indexOf("0") >= 0) Rico.addSelectOption(field,"EQ0","= 0"); + if (choices.indexOf("+") >= 0) Rico.addSelectOption(field,"GT0","> 0"); + Rico.eventBind(col.filterField,'change',Rico.eventHandle(col,'nFilterChange')); + break; case 'c': // custom if (typeof col._createFilters == 'function') @@ -860,6 +872,18 @@ Rico.LiveGridMethods = { var rowsElement = response.getElementsByTagName('rows')[0]; var col=this.columns[parseInt(colnum,10)]; var rows = this.buffer.dom2jstable(rowsElement); + var found = !col.filterValues || !col.filterValues.length; + if (!found) for (var i=0; i oldSize && this.buffer.totalRows>0) { this.isPartialBlank=true; var adjStart=this.adjustRow(this.lastRowPos); @@ -1155,6 +1184,7 @@ Rico.LiveGridMethods = { }, finishResize2: function() { + Rico.log('finishResize2 '+this.tableId+': resizeState='+this.resizeState); this.sizeDivs(); this.updateHeightDiv(); if (this.resizeState=='resize') { @@ -1216,11 +1246,13 @@ Rico.LiveGridMethods = { newdiv.className = 'ricoLG_cell '+cls; newdiv.id=this.tableId+'_'+this.pageSize+'_'+c; this.columns[c].dataColDiv.appendChild(newdiv); - if (this.columns[c].format.canDrag && Rico.registerDraggable) - Rico.registerDraggable( new Rico.LiveGridDraggable(this, this.pageSize, c), this.options.dndMgrIdx ); - newdiv.innerHTML=' '; // this seems to be required by IE if (this.columns[c]._create) { this.columns[c]._create(newdiv,this.pageSize); + } else { + newdiv.innerHTML=' '; // this seems to be required by IE + } + if (this.columns[c].format.canDrag && Rico.registerDraggable) { + Rico.registerDraggable( new Rico.LiveGridDraggable(this, this.pageSize, c), this.options.dndMgrIdx ); } } this.pageSize++; @@ -1672,7 +1704,7 @@ Rico.LiveGridMethods = { * @return array of matching column indexes */ findColumnsBySpec: function(colAttr, colValue) { - var result=[] + var result=[]; for (var n=0; n '+vals[0]; case 'LE': return '<= '+vals[0]; case 'GE': return '>= '+vals[0]; case 'LIKE': return Rico.getPhraseById('filterLike',vals[0]); @@ -2171,12 +2205,23 @@ isFiltered: function() { return this.filterType == Rico.ColumnConst.USERFILTER; }, -filterChange: function(e) { +filterChange: function(e) { var selbox=Rico.eventElement(e); - if (selbox.value==this.liveGrid.options.FilterAllToken) - this.setUnfiltered(); + if (selbox.value==this.liveGrid.options.FilterAllToken) + this.setUnfiltered(); else - this.setFilter('EQ',selbox.value,Rico.ColumnConst.USERFILTER,function() {selbox.selectedIndex=0;}); + this.setFilter('EQ',selbox.value,Rico.ColumnConst.USERFILTER,function() {selbox.selectedIndex=0;}); +}, + +nFilterChange: function(e) { + var selbox=Rico.eventElement(e); + if (selbox.value==this.liveGrid.options.FilterAllToken) { + this.setUnfiltered(); + } else { + var op=selbox.value.substr(0,2); + var value=selbox.value.substr(2); + this.setFilter(op,value,Rico.ColumnConst.USERFILTER,function() {selbox.selectedIndex=0;}); + } }, filterClear: function(e) {