From bb8ba54684e99223f49f6d360ceef929be5d4434 Mon Sep 17 00:00:00 2001 From: Max Guglielmi Date: Fri, 6 Mar 2015 19:49:30 +1100 Subject: [PATCH] Continued sorting feature --- Gruntfile.js | 53 +- dist/TF_Modules/tfAdapter.sortabletable.js | 266 +------- dist/TF_Modules/tf_alternateRows.js | 72 +-- dist/TF_Modules/tf_colOps.js | 272 +------- dist/TF_Modules/tf_cookies.js | 164 +---- dist/TF_Modules/tf_extensions.js | 54 +- dist/TF_Modules/tf_ezEditTable.js | 254 +------- dist/TF_Modules/tf_fixedHeaders.js | 96 +-- dist/TF_Modules/tf_gridLayout.js | 308 +-------- dist/TF_Modules/tf_highlightKeywords.js | 98 +-- dist/TF_Modules/tf_loader.js | 73 +-- dist/TF_Modules/tf_paging.js | 599 +----------------- dist/TF_Modules/tf_populateCheckList.js | 326 +--------- dist/TF_Modules/tf_populateSelect.js | 277 +------- dist/TF_Modules/tf_popupFilters.js | 162 +---- dist/TF_Modules/tf_publicMethods.js | 231 +------ dist/TF_Modules/tf_refreshFilters.js | 52 +- dist/TF_Modules/tf_resetBtn.js | 175 +---- dist/TF_Modules/tf_rowsCounter.js | 101 +-- dist/TF_Modules/tf_sort.js | 59 +- dist/TF_Modules/tf_statusBar.js | 111 +--- dist/TF_Modules/tf_themes.js | 82 +-- dist/TF_Modules/tf_watermark.js | 28 +- dist/filtergrid.css | 2 +- dist/tablefilter.js | 10 +- .../sortabletable/adapterSortabletable.js | 42 +- src-es6/{core.js => tablefilter.js} | 37 +- src/core.js | 2 - src/end.frag | 2 +- .../sortabletable/adapterSortabletable.js | 47 +- src/index.html | 13 +- src/sortabletable.js | 438 ------------- src/tablefilter.js | 2 + test/test-alternate-rows.js | 2 +- test/test-checklist.js | 2 +- test/test-clear-button.js | 2 +- test/test-col-ops.js | 2 +- test/test-dropdown.js | 2 +- test/test-grid-layout.js | 2 +- test/test-help.js | 2 +- test/test-highlight-keywords.js | 2 +- test/test-loader.js | 2 +- test/test-paging.js | 2 +- test/test-popup-filter.js | 2 +- test/test-rows-counter.js | 2 +- test/test-status-bar.js | 2 +- test/test-store.js | 2 +- test/test.js | 2 +- 48 files changed, 158 insertions(+), 4380 deletions(-) rename src-es6/{core.js => tablefilter.js} (99%) delete mode 100644 src/core.js delete mode 100644 src/sortabletable.js create mode 100644 src/tablefilter.js diff --git a/Gruntfile.js b/Gruntfile.js index 14fe253a..c0ef0122 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -13,8 +13,7 @@ module.exports = function (grunt) { src: [ 'Gruntfile.js', '<%= source_folder %>*.js', - '!<%= source_folder %>core.js', - '!<%= source_folder %>sortabletable.js' + '!<%= source_folder %>tablefilter.js' ], options: { jshintrc: '.jshintrc' @@ -41,20 +40,49 @@ module.exports = function (grunt) { baseUrl: '<%= source_folder %>', 'paths': { 'tf': '.', - 'sortabletable': '<%= source_folder %>extensions/sortabletable/' + 'sortabletable': 'extensions/sortabletable' }, - include: ['../libs/almond/almond', 'core'], - exclude: ['<%= source_folder %>/extensions/sortabletable/adapterSortabletable.js'], - out: '<%= dist_folder %>tablefilter.js', + // include: ['../libs/almond/almond', 'tablefilter'], + // exclude: [ + // 'extensions/sortabletable/sortabletable', + // 'extensions/sortabletable/adapterSortabletable' + // ], + // name: 'tablefilter', + // out: '<%= dist_folder %>tablefilter.js', + dir: '<%= dist_folder %>', wrap: { - startFile: "src/start.frag", - endFile: "src/end.frag" + startFile: "<%= source_folder %>start.frag", + endFile: "<%= source_folder %>end.frag" }, shim: { 'SortableTable': { exports: 'SortableTable' } - }/*, + }, + modules:[ + { + name: 'tablefilter', + //out: '<%= dist_folder %>tablefilter.js', + // create: true, + include: [ + '../libs/almond/almond', + 'tablefilter' + ], + exclude: [ + 'extensions/sortabletable/sortabletable', + 'extensions/sortabletable/adapterSortabletable' + ] + } + // { + // name: 'extensions/sortabletable/adapterSortabletable', + // include: [ + // 'extensions/sortabletable/sortabletable' + // ] + // } + ], + removeCombined: true, + findNestedDependencies: true + /*, optimize: 'uglify2', preserveLicenseComments: false, generateSourceMaps: true*/ @@ -65,8 +93,8 @@ module.exports = function (grunt) { concat: { /*js: { files: [{ - src: ['<%= source_folder %>core.js'], - dest: '<%= dist_folder %>core.js' + src: ['<%= source_folder %>tablefilter.js'], + dest: '<%= dist_folder %>tablefilter.js' }] },*/ css: { @@ -120,7 +148,7 @@ module.exports = function (grunt) { } }, - 'babel': { + babel: { options: { sourceMap: true, modules: 'amd' @@ -150,6 +178,7 @@ module.exports = function (grunt) { // This is the default task being executed if Grunt // is called without any further parameter. grunt.registerTask('default', ['jshint', 'babel', 'requirejs', 'concat', 'uglify', 'cssmin', 'copy', 'qunit']); + grunt.registerTask('build', ['jshint', 'babel', 'requirejs', 'concat', 'uglify', 'cssmin', 'copy']); grunt.registerTask('dev', ['jshint', 'babel', 'concat', 'cssmin', 'copy']); grunt.registerTask('toes5', ['babel']); grunt.registerTask('test', ['qunit']); diff --git a/dist/TF_Modules/tfAdapter.sortabletable.js b/dist/TF_Modules/tfAdapter.sortabletable.js index 55eea305..f1bb210a 100644 --- a/dist/TF_Modules/tfAdapter.sortabletable.js +++ b/dist/TF_Modules/tfAdapter.sortabletable.js @@ -54,268 +54,4 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Bug fix: IE9 did not sort columns correctly ------------------------------------------------------------------------*/ -TF.prototype.SetSortTable = function(){ - var o = this; //TF object - var f = o.fObj; //TF config object - var isTFPaged = false; - - //edit .sort-arrow.descending / .sort-arrow.ascending in filtergrid.css to reflect any path change - o.sortImgPath = f.sort_images_path != undefined ? f.sort_images_path : o.themesPath; - o.sortImgBlank = f.sort_image_blank != undefined ? f.sort_image_blank : 'blank.png'; - o.sortImgClassName = f.sort_image_class_name != undefined ? f.sort_image_class_name : 'sort-arrow'; - o.sortImgAscClassName = f.sort_image_asc_class_name != undefined ? f.sort_image_asc_class_name : 'ascending'; - o.sortImgDescClassName = f.sort_image_desc_class_name != undefined ? f.sort_image_desc_class_name : 'descending'; - o.sortCustomKey = f.sort_custom_key != undefined ? f.sort_custom_key : '_sortKey'; //cell attribute storing custom key - - /*** TF additional events ***/ - //additional paging events for alternating bg issue - o.Evt._Paging.nextEvt = function(){ if(o.sorted && o.alternateBgs) o.Filter(); } - o.Evt._Paging.prevEvt = o.Evt._Paging.nextEvt; - o.Evt._Paging.firstEvt = o.Evt._Paging.nextEvt; - o.Evt._Paging.lastEvt = o.Evt._Paging.nextEvt; - o.Evt._OnSlcPagesChangeEvt = o.Evt._Paging.nextEvt; - /*** ***/ - - /*** Extension events ***/ - //callback invoked after sort is loaded and instanciated - o.onSortLoaded = tf_IsFn(f.on_sort_loaded) ? f.on_sort_loaded : null; - //callback invoked before table is sorted - o.onBeforeSort = tf_IsFn(f.on_before_sort) ? f.on_before_sort : null; - //callback invoked after table is sorted - o.onAfterSort = tf_IsFn(f.on_after_sort) ? f.on_after_sort : null; - - /*** SortableTable ***/ - //in case SortableTable class is missing (sortabletable.js) - if((typeof SortableTable)=='undefined'){ return; } - - //overrides headerOnclick method in order to handle th - SortableTable.prototype.headerOnclick = function (e) { - if(!o.sort) return; // TF adaptation - var el = e.target || e.srcElement; // find Header element - - while (el.tagName != 'TD' && el.tagName != 'TH') // TF adaptation - el = el.parentNode; - - this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex); - }; - - //overrides getCellIndex IE returns wrong cellIndex when columns are hidden - SortableTable.getCellIndex = function (oTd) { - var cells = oTd.parentNode.cells, - l = cells.length, i; - for (i = 0; cells[i] != oTd && i < l; i++) - ; - return i; - }; - - //overrides initHeader in order to handle filters row position - SortableTable.prototype.initHeader = function (oSortTypes) { - if (!this.tHead) return; - this.headersRow = o.headersRow; // TF adaptation - var cells = this.tHead.rows[this.headersRow].cells; // TF adaptation - var doc = this.tHead.ownerDocument || this.tHead.document; - this.sortTypes = oSortTypes || []; - var l = cells.length; - var img, c; - for (var i = 0; i < l; i++) { - c = cells[i]; - if (this.sortTypes[i] != null && this.sortTypes[i] != 'None') { - c.style.cursor = 'pointer'; - img = tf_CreateElm('img',['src', o.sortImgPath + o.sortImgBlank]); - c.appendChild(img); - if (this.sortTypes[i] != null) - c.setAttribute( '_sortType', this.sortTypes[i]); - tf_AddEvent(c, 'click', this._headerOnclick); - } else { - c.setAttribute( '_sortType', oSortTypes[i] ); - c._sortType = 'None'; - } - } - this.updateHeaderArrows(); - }; - - //overrides updateHeaderArrows in order to handle arrows - SortableTable.prototype.updateHeaderArrows = function () { - var cells, l, img; - if(o.sortConfig.asyncSort && o.sortConfig.triggerIds!=null){//external headers - var triggers = o.sortConfig.triggerIds; - cells = [], l = triggers.length; - for(var j=0; j val.length) val = '0'+val; - vals[x] = val; - } - val = vals.join('.'); - return val; -} - -function sortIP(a,b){ - var aa = ipAddress(a.value.tf_LCase()); - var bb = ipAddress(b.value.tf_LCase()); - if (aa==bb) return 0; - else if (aae.length)e="0"+e;t[x]=e}return e=t.join("."),e}function sortIP(e,t){var n=ipAddress(e.value.tf_LCase()),r=ipAddress(t.value.tf_LCase());return n==r?0:nmaxValue? parseFloat( cvalue ): maxValue;} - } - } - }//for j - if (meanFlag==1) meanValue = sumValue/nbvalues; - if (medFlag==1) - { - var aux = 0; - if(nbvalues%2 == 1) - { - aux = Math.floor(nbvalues/2); - medValue = theList[aux]; - } - else medValue = (theList[nbvalues/2]+theList[((nbvalues/2)-1)])/2; - } - if (q1Flag==1) - { - var posa=0.0; - posa = Math.floor(nbvalues/4); - if (4*posa == nbvalues) {q1Value = (theList[posa-1] + theList[posa])/2;} - else {q1Value = theList[posa];} - } - if (q3Flag==1) - { - var posa=0.0; - var posb=0.0; - posa = Math.floor(nbvalues/4); - if (4*posa == nbvalues) - { - posb = 3*posa; - q3Value = (theList[posb] + theList[posb-1])/2; - } - else - q3Value = theList[nbvalues-posa-1]; - } - - for(var i=0; i<=mThisCol; i++ ) - { - switch( opsThisCol[i] ) - { - case 'mean': - result=meanValue; - break; - case 'sum': - result=sumValue; - break; - case 'min': - result=minValue; - break; - case 'max': - result=maxValue; - break; - case 'median': - result=medValue; - break; - case 'q1': - result=q1Value; - break; - case 'q3': - result=q3Value; - break; - } - - var precision = decThisCol[i]!=undefined && !isNaN( decThisCol[i] ) - ? decThisCol[i] : 2; - - if(oTypeThisCol!=null && result) - {//if outputType is defined - result = result.toFixed( precision ); - if( tf_Id( labThisCol[i] )!=undefined ) - { - switch( oTypeThisCol.tf_LCase() ) - { - case 'innerhtml': - if (isNaN(result) || !isFinite(result) || (nbvalues==0)) - tf_Id( labThisCol[i] ).innerHTML = '.'; - else - tf_Id( labThisCol[i] ).innerHTML = result; - break; - case 'setvalue': - tf_Id( labThisCol[i] ).value = result; - break; - case 'createtextnode': - var oldnode = tf_Id( labThisCol[i] ).firstChild; - var txtnode = tf_CreateText( result ); - tf_Id( labThisCol[i] ).replaceChild( txtnode,oldnode ); - break; - }//switch - } - } else { - try - { - if (isNaN(result) || !isFinite(result) || (nbvalues==0)) - tf_Id( labThisCol[i] ).innerHTML = '.'; - else - tf_Id( labThisCol[i] ).innerHTML = result.toFixed( precision ); - } catch(e){ }//catch - }//else - }//for i - //eventual row(s) with result are always visible - if(totRowIndex!=undefined && row[totRowIndex[ucol]]) - row[totRowIndex[ucol]].style.display = ''; - }//for ucol - }//if typeof - - if(this.onAfterOperation) this.onAfterOperation.call(null,this); -} - +TF.prototype.SetColOperation=function(){if(!this.isFirstLoad&&!this.hasGrid)return;this.onBeforeOperation&&this.onBeforeOperation.call(null,this);var labelId=this.colOperation.id,colIndex=this.colOperation.col,operation=this.colOperation.operation,outputType=this.colOperation.write_method,totRowIndex=this.colOperation.tot_row_index,excludeRow=this.colOperation.exclude_row,decimalPrecision=this.colOperation["decimal_precision"]!=undefined?this.colOperation.decimal_precision:2,ucolIndex=[],ucolMax=0;ucolIndex[ucolMax]=colIndex[0];for(var i=1;imaxValue?parseFloat(cvalue):maxValue)}}meanFlag==1&&(meanValue=sumValue/nbvalues);if(medFlag==1){var aux=0;nbvalues%2==1?(aux=Math.floor(nbvalues/2),medValue=theList[aux]):medValue=(theList[nbvalues/2]+theList[nbvalues/2-1])/2}if(q1Flag==1){var posa=0;posa=Math.floor(nbvalues/4),4*posa==nbvalues?q1Value=(theList[posa-1]+theList[posa])/2:q1Value=theList[posa]}if(q3Flag==1){var posa=0,posb=0;posa=Math.floor(nbvalues/4),4*posa==nbvalues?(posb=3*posa,q3Value=(theList[posb]+theList[posb-1])/2):q3Value=theList[nbvalues-posa-1]}for(var i=0;i<=mThisCol;i++){switch(opsThisCol[i]){case"mean":result=meanValue;break;case"sum":result=sumValue;break;case"min":result=minValue;break;case"max":result=maxValue;break;case"median":result=medValue;break;case"q1":result=q1Value;break;case"q3":result=q3Value}var precision=decThisCol[i]!=undefined&&!isNaN(decThisCol[i])?decThisCol[i]:2;if(oTypeThisCol!=null&&result){result=result.toFixed(precision);if(tf_Id(labThisCol[i])!=undefined)switch(oTypeThisCol.tf_LCase()){case"innerhtml":isNaN(result)||!isFinite(result)||nbvalues==0?tf_Id(labThisCol[i]).innerHTML=".":tf_Id(labThisCol[i]).innerHTML=result;break;case"setvalue":tf_Id(labThisCol[i]).value=result;break;case"createtextnode":var oldnode=tf_Id(labThisCol[i]).firstChild,txtnode=tf_CreateText(result);tf_Id(labThisCol[i]).replaceChild(txtnode,oldnode)}}else try{isNaN(result)||!isFinite(result)||nbvalues==0?tf_Id(labThisCol[i]).innerHTML=".":tf_Id(labThisCol[i]).innerHTML=result.toFixed(precision)}catch(e){}}totRowIndex!=undefined&&row[totRowIndex[ucol]]&&(row[totRowIndex[ucol]].style.display="")}}this.onAfterOperation&&this.onAfterOperation.call(null,this)}; \ No newline at end of file diff --git a/dist/TF_Modules/tf_cookies.js b/dist/TF_Modules/tf_cookies.js index 25891993..a1bcfcd0 100644 --- a/dist/TF_Modules/tf_cookies.js +++ b/dist/TF_Modules/tf_cookies.js @@ -1,163 +1 @@ -/*------------------------------------------------------------------------ - - HTML Table Filter Generator - - Remember values features (cookies) v1.1 - - By Max Guglielmi (tablefilter.free.fr) - - Licensed under the MIT License --------------------------------------------------------------------------*/ - -TF.prototype.RememberFiltersValue = function( name ) -/*============================================== - - stores filters' values in a cookie - when Filter() method is called - - Params: - - name: cookie name (string) - - credits to Florent Hirchy -===============================================*/ -{ - var flt_values = []; - for(var i=0; i 0 && !o.ezEditTableConfig.startRow) startRow = undefined; - //otherwise startRow config property if any or TableFilter refRow - else startRow = o.ezEditTableConfig.startRow || o.refRow; - - //Enables scroll into view feature if not defined - o.ezEditTableConfig.scroll_into_view = o.ezEditTableConfig.scroll_into_view!=undefined ? o.ezEditTableConfig.scroll_into_view : true; - o.ezEditTableConfig.base_path = o.ezEditTableConfig.base_path!=undefined ? o.ezEditTableConfig.base_path : o.basePath + 'ezEditTable/'; - o.ezEditTableConfig.editable = o.editable; - o.ezEditTableConfig.selection = o.selectable; - if(o.selectable) - o.ezEditTableConfig.default_selection = o.ezEditTableConfig.default_selection!=undefined ? o.ezEditTableConfig.default_selection : 'row'; - //CSS Styles - o.ezEditTableConfig.active_cell_css = o.ezEditTableConfig.active_cell_css!=undefined ? o.ezEditTableConfig.active_cell_css : 'ezETSelectedCell'; - - o._lastValidRowIndex = 0; - o._lastRowIndex = 0; - - if(o.selectable){ - //Row navigation needs to be calculated according to TableFilter's validRowsIndex array - function onAfterSelection(et, selecteElm, e){ - if(!o.validRowsIndex) return; //table is not filtered - var row = et.defaultSelection != 'row' ? selecteElm.parentNode : selecteElm; - var cell = selecteElm.nodeName=='TD' ? selecteElm : null; //cell for default_selection = 'both' or 'cell' - var keyCode = e != undefined ? et.Event.GetKey(e) : 0; - var isRowValid = o.validRowsIndex.tf_Has(row.rowIndex); - var nextRowIndex; - var d = (keyCode == 34 || keyCode == 33 ? (o.pagingLength || et.nbRowsPerPage) : 1); //pgup/pgdown keys - - //If next row is not valid, next valid filtered row needs to be calculated - if(!isRowValid){ - //Selection direction up/down - if(row.rowIndex>o._lastRowIndex){ - if(row.rowIndex >= o.validRowsIndex[o.validRowsIndex.length-1]) //last row - nextRowIndex = o.validRowsIndex[o.validRowsIndex.length-1]; - else{ - var calcRowIndex = (o._lastValidRowIndex + d); - if(calcRowIndex > (o.validRowsIndex.length-1)) - nextRowIndex = o.validRowsIndex[o.validRowsIndex.length-1]; - else nextRowIndex = o.validRowsIndex[calcRowIndex]; - } - } else{ - if(row.rowIndex < o.validRowsIndex[0]) nextRowIndex = o.validRowsIndex[0];//first row - else{ - var v = o.validRowsIndex[o._lastValidRowIndex - d]; - nextRowIndex = v ? v : o.validRowsIndex[0]; - } - } - o._lastRowIndex = row.rowIndex; - DoSelection(nextRowIndex); - } else{ - //If filtered row is valid, special calculation for pgup/pgdown keys - if(keyCode!=34 && keyCode!=33){ - o._lastValidRowIndex = o.validRowsIndex.tf_IndexByValue(row.rowIndex); - o._lastRowIndex = row.rowIndex; - } else { - if(keyCode == 34){ //pgdown - if((o._lastValidRowIndex + d) <= (o.validRowsIndex.length-1)) //last row - nextRowIndex = o.validRowsIndex[o._lastValidRowIndex + d]; - else nextRowIndex = o.validRowsIndex[o.validRowsIndex.length-1]; - } else { //pgup - if((o._lastValidRowIndex - d) < (o.validRowsIndex[0])) //first row - nextRowIndex = o.validRowsIndex[0]; - else nextRowIndex = o.validRowsIndex[o._lastValidRowIndex - d]; - } - o._lastRowIndex = nextRowIndex; - o._lastValidRowIndex = o.validRowsIndex.tf_IndexByValue(nextRowIndex); - DoSelection(nextRowIndex); - } - } - - //Next valid filtered row needs to be selected - function DoSelection(nextRowIndex){ - if(et.defaultSelection == 'row'){ - et.Selection.SelectRowByIndex(nextRowIndex); - } else { - et.ClearSelections(); - var cellIndex = selecteElm.cellIndex; - var row = o.tbl.rows[nextRowIndex]; - if(et.defaultSelection == 'both') et.Selection.SelectRowByIndex(nextRowIndex); - if(row) et.Selection.SelectCell(row.cells[cellIndex]); - } - //Table is filtered - if(o.validRowsIndex.length != o.GetRowsNb()){ - var row = o.tbl.rows[nextRowIndex]; - if(row) row.scrollIntoView(false); - if(cell){ - if(cell.cellIndex==(o.GetCellsNb()-1) && o.gridLayout) o.tblCont.scrollLeft = 100000000; - else if(cell.cellIndex==0 && o.gridLayout) o.tblCont.scrollLeft = 0; - else cell.scrollIntoView(false); - } - } - } - } - - //Page navigation has to be enforced whenever selected row is out of the current page range - function onBeforeSelection(et, selecteElm, e){ - var row = et.defaultSelection != 'row' ? selecteElm.parentNode : selecteElm; - if(o.paging){ - if(o.nbPages>1){ - et.nbRowsPerPage = o.pagingLength; //page length is re-assigned in case it has changed - var pagingEndRow = parseInt(o.startPagingRow) + parseInt(o.pagingLength); - var rowIndex = row.rowIndex; - if((rowIndex == o.validRowsIndex[o.validRowsIndex.length-1]) && o.currentPageNb!=o.nbPages) o.SetPage('last'); - else if((rowIndex == o.validRowsIndex[0]) && o.currentPageNb!=1) o.SetPage('first'); - else if(rowIndex > o.validRowsIndex[pagingEndRow-1] && rowIndex < o.validRowsIndex[o.validRowsIndex.length-1]) o.SetPage('next'); - else if(rowIndex < o.validRowsIndex[o.startPagingRow] && rowIndex > o.validRowsIndex[0]) o.SetPage('previous'); - } - } - } - - //Selected row needs to be visible when paging is activated - if(o.paging){ - o.onAfterChangePage = function(tf, i){ - var row = tf.ezEditTable.Selection.GetActiveRow(); - if(row) row.scrollIntoView(false); - var cell = tf.ezEditTable.Selection.GetActiveCell(); - if(cell) cell.scrollIntoView(false); - } - } - - //Rows navigation when rows are filtered is performed with the EditTable row selection callback events - if(o.ezEditTableConfig.default_selection=='row'){ - var fnB = o.ezEditTableConfig.on_before_selected_row; - o.ezEditTableConfig.on_before_selected_row = function(){ - onBeforeSelection(arguments[0], arguments[1], arguments[2]); - if(fnB) fnB.call(null, arguments[0], arguments[1], arguments[2]); - }; - var fnA = o.ezEditTableConfig.on_after_selected_row; - o.ezEditTableConfig.on_after_selected_row = function(){ - onAfterSelection(arguments[0], arguments[1], arguments[2]); - if(fnA) fnA.call(null, arguments[0], arguments[1], arguments[2]); - }; - } else { - var fnB = o.ezEditTableConfig.on_before_selected_cell; - o.ezEditTableConfig.on_before_selected_cell = function(){ - onBeforeSelection(arguments[0], arguments[1], arguments[2]); - if(fnB) fnB.call(null, arguments[0], arguments[1], arguments[2]); - }; - var fnA = o.ezEditTableConfig.on_after_selected_cell; - o.ezEditTableConfig.on_after_selected_cell = function(){ - onAfterSelection(arguments[0], arguments[1], arguments[2]); - if(fnA) fnA.call(null, arguments[0], arguments[1], arguments[2]); - }; - } - } - if(o.editable){ - //Added or removed rows, TF rows number needs to be re-calculated - var fnC = o.ezEditTableConfig.on_added_dom_row; - o.ezEditTableConfig.on_added_dom_row = function(){ - o.nbFilterableRows++; - if(!o.paging){ o.RefreshNbRows(); } - else { - o.nbRows++; o.nbVisibleRows++; o.nbFilterableRows++; - o.paging=false; o.RemovePaging(); o.AddPaging(false); - } - if(o.alternateBgs) o.SetAlternateRows(); - if(fnC) fnC.call(null, arguments[0], arguments[1], arguments[2]); - }; - if(o.ezEditTableConfig.actions && o.ezEditTableConfig.actions['delete']){ - var fnD = o.ezEditTableConfig.actions['delete'].on_after_submit; - o.ezEditTableConfig.actions['delete'].on_after_submit = function(){ - o.nbFilterableRows--; - if(!o.paging){ o.RefreshNbRows(); } - else { - o.nbRows--; o.nbVisibleRows--; o.nbFilterableRows--; - o.paging=false; o.RemovePaging(); o.AddPaging(false); - } - if(o.alternateBgs) o.SetAlternateRows(); - if(fnD) fnD.call(null, arguments[0], arguments[1]); - } - } - } - - try{ - o.ezEditTable = new EditTable(o.id, o.ezEditTableConfig, startRow); - o.ezEditTable.Init(); - } catch(e) { alert(o.ezEditTableConfig.err); } -} \ No newline at end of file +TF.prototype.SetEditable=function(){if(!this.selectable&&!this.editable)return;var e=this.fObj;this.ezEditTableConfig=e.ezEditTable_config!=undefined?e.ezEditTable_config:{},this.ezEditTableConfig.name=this.ezEditTableConfig["name"]!=undefined?e.ezEditTable_config.name:"ezedittable",this.ezEditTableConfig.src=this.ezEditTableConfig["src"]!=undefined?e.ezEditTable_config.src:this.basePath+"ezEditTable/ezEditTable.js",this.ezEditTableConfig.loadStylesheet=this.ezEditTableConfig["loadStylesheet"]!=undefined?e.ezEditTable_config.loadStylesheet:!1,this.ezEditTableConfig.stylesheet=this.ezEditTableConfig["stylesheet"]!=undefined?e.ezEditTable_config.stylesheet:this.basePath+"ezEditTable/ezEditTable.css",this.ezEditTableConfig.stylesheetName=this.ezEditTableConfig["stylesheetName"]!=undefined?e.ezEditTable_config.stylesheetName:"ezEditTableCss",this.ezEditTableConfig.err='Failed to instantiate EditTable object.\n"ezEditTable" module may not be available.',tf_IsImported(this.ezEditTableConfig.src)?this._EnableEditable():this.IncludeFile(this.ezEditTableConfig.name,this.ezEditTableConfig.src,this._EnableEditable),this.ezEditTableConfig.loadStylesheet&&!tf_IsImported(this.ezEditTableConfig.stylesheet,"link")&&this.IncludeFile(this.ezEditTableConfig.stylesheetName,this.ezEditTableConfig.stylesheet,null,"link")},TF.prototype.RemoveEditable=function(){this.ezEditTable&&(this.selectable&&(this.ezEditTable.Selection.ClearSelections(),this.ezEditTable.Selection.Remove()),this.editable&&this.ezEditTable.Editable.Remove())},TF.prototype.ResetEditable=function(){this.ezEditTable&&(this.selectable&&this.ezEditTable.Selection.Set(),this.editable&&this.ezEditTable.Editable.Set())},TF.prototype._EnableEditable=function(e){e||(e=this);var t,n=tf_Tag(e.tbl,"thead");n.length>0&&!e.ezEditTableConfig.startRow?t=undefined:t=e.ezEditTableConfig.startRow||e.refRow,e.ezEditTableConfig.scroll_into_view=e.ezEditTableConfig.scroll_into_view!=undefined?e.ezEditTableConfig.scroll_into_view:!0,e.ezEditTableConfig.base_path=e.ezEditTableConfig.base_path!=undefined?e.ezEditTableConfig.base_path:e.basePath+"ezEditTable/",e.ezEditTableConfig.editable=e.editable,e.ezEditTableConfig.selection=e.selectable,e.selectable&&(e.ezEditTableConfig.default_selection=e.ezEditTableConfig.default_selection!=undefined?e.ezEditTableConfig.default_selection:"row"),e.ezEditTableConfig.active_cell_css=e.ezEditTableConfig.active_cell_css!=undefined?e.ezEditTableConfig.active_cell_css:"ezETSelectedCell",e._lastValidRowIndex=0,e._lastRowIndex=0;if(e.selectable){function r(t,n,r){function h(r){if(t.defaultSelection=="row")t.Selection.SelectRowByIndex(r);else{t.ClearSelections();var i=n.cellIndex,o=e.tbl.rows[r];t.defaultSelection=="both"&&t.Selection.SelectRowByIndex(r),o&&t.Selection.SelectCell(o.cells[i])}if(e.validRowsIndex.length!=e.GetRowsNb()){var o=e.tbl.rows[r];o&&o.scrollIntoView(!1),s&&(s.cellIndex==e.GetCellsNb()-1&&e.gridLayout?e.tblCont.scrollLeft=1e8:s.cellIndex==0&&e.gridLayout?e.tblCont.scrollLeft=0:s.scrollIntoView(!1))}}if(!e.validRowsIndex)return;var i=t.defaultSelection!="row"?n.parentNode:n,s=n.nodeName=="TD"?n:null,o=r!=undefined?t.Event.GetKey(r):0,u=e.validRowsIndex.tf_Has(i.rowIndex),a,f=o==34||o==33?e.pagingLength||t.nbRowsPerPage:1;if(!u){if(i.rowIndex>e._lastRowIndex)if(i.rowIndex>=e.validRowsIndex[e.validRowsIndex.length-1])a=e.validRowsIndex[e.validRowsIndex.length-1];else{var l=e._lastValidRowIndex+f;l>e.validRowsIndex.length-1?a=e.validRowsIndex[e.validRowsIndex.length-1]:a=e.validRowsIndex[l]}else if(i.rowIndex1){t.nbRowsPerPage=e.pagingLength;var s=parseInt(e.startPagingRow)+parseInt(e.pagingLength),o=i.rowIndex;o==e.validRowsIndex[e.validRowsIndex.length-1]&&e.currentPageNb!=e.nbPages?e.SetPage("last"):o==e.validRowsIndex[0]&&e.currentPageNb!=1?e.SetPage("first"):o>e.validRowsIndex[s-1]&&oe.validRowsIndex[0]&&e.SetPage("previous")}}e.paging&&(e.onAfterChangePage=function(e,t){var n=e.ezEditTable.Selection.GetActiveRow();n&&n.scrollIntoView(!1);var r=e.ezEditTable.Selection.GetActiveCell();r&&r.scrollIntoView(!1)});if(e.ezEditTableConfig.default_selection=="row"){var s=e.ezEditTableConfig.on_before_selected_row;e.ezEditTableConfig.on_before_selected_row=function(){i(arguments[0],arguments[1],arguments[2]),s&&s.call(null,arguments[0],arguments[1],arguments[2])};var o=e.ezEditTableConfig.on_after_selected_row;e.ezEditTableConfig.on_after_selected_row=function(){r(arguments[0],arguments[1],arguments[2]),o&&o.call(null,arguments[0],arguments[1],arguments[2])}}else{var s=e.ezEditTableConfig.on_before_selected_cell;e.ezEditTableConfig.on_before_selected_cell=function(){i(arguments[0],arguments[1],arguments[2]),s&&s.call(null,arguments[0],arguments[1],arguments[2])};var o=e.ezEditTableConfig.on_after_selected_cell;e.ezEditTableConfig.on_after_selected_cell=function(){r(arguments[0],arguments[1],arguments[2]),o&&o.call(null,arguments[0],arguments[1],arguments[2])}}}if(e.editable){var u=e.ezEditTableConfig.on_added_dom_row;e.ezEditTableConfig.on_added_dom_row=function(){e.nbFilterableRows++,e.paging?(e.nbRows++,e.nbVisibleRows++,e.nbFilterableRows++,e.paging=!1,e.RemovePaging(),e.AddPaging(!1)):e.RefreshNbRows(),e.alternateBgs&&e.SetAlternateRows(),u&&u.call(null,arguments[0],arguments[1],arguments[2])};if(e.ezEditTableConfig.actions&&e.ezEditTableConfig.actions["delete"]){var a=e.ezEditTableConfig.actions["delete"].on_after_submit;e.ezEditTableConfig.actions["delete"].on_after_submit=function(){e.nbFilterableRows--,e.paging?(e.nbRows--,e.nbVisibleRows--,e.nbFilterableRows--,e.paging=!1,e.RemovePaging(),e.AddPaging(!1)):e.RefreshNbRows(),e.alternateBgs&&e.SetAlternateRows(),a&&a.call(null,arguments[0],arguments[1])}}}try{e.ezEditTable=new EditTable(e.id,e.ezEditTableConfig,t),e.ezEditTable.Init()}catch(f){alert(e.ezEditTableConfig.err)}}; \ No newline at end of file diff --git a/dist/TF_Modules/tf_fixedHeaders.js b/dist/TF_Modules/tf_fixedHeaders.js index 2ab4659d..619261be 100644 --- a/dist/TF_Modules/tf_fixedHeaders.js +++ b/dist/TF_Modules/tf_fixedHeaders.js @@ -1,95 +1 @@ -/*------------------------------------------------------------------------ - - HTML Table Filter Generator - - Fixed headers feature v1.0 - Deprecated! - - By Max Guglielmi (tablefilter.free.fr) - - Licensed under the MIT License --------------------------------------------------------------------------*/ - -TF.prototype.SetFixedHeaders = function() -/*==================================================== - - CSS solution making headers fixed -=====================================================*/ -{ - if((!this.hasGrid && !this.isFirstLoad) || !this.fixedHeaders) return; - if(this.contDiv) return; - var thead = tf_Tag(this.tbl,'thead'); - if( thead.length==0 ) return; - var tbody = tf_Tag(this.tbl,'tbody'); - if( tbody[0].clientHeight!=0 ) - {//firefox returns tbody height - //previous values - this.prevTBodyH = tbody[0].clientHeight; - this.prevTBodyOverflow = tbody[0].style.overflow; - this.prevTBodyOverflowX = tbody[0].style.overflowX; - - tbody[0].style.height = this.tBodyH+'px'; - tbody[0].style.overflow = 'auto'; - tbody[0].style.overflowX = 'hidden'; - } else { //IE returns 0 - // cont div is added to emulate fixed headers behaviour - var contDiv = tf_CreateElm( 'div',['id',this.prfxContentDiv+this.id] ); - contDiv.className = this.contDivCssClass; - this.tbl.parentNode.insertBefore(contDiv, this.tbl); - contDiv.appendChild(this.tbl); - this.contDiv = tf_Id(this.prfxContentDiv+this.id); - //prevents headers moving during window scroll (IE) - this.contDiv.style.position = 'relative'; - - var theadH = 0; - var theadTr = tf_Tag(thead[0],'tr'); - for(var i=0; i= ' + - 'offsetParent.offsetHeight ? 0 - parentNode.parentNode.offsetHeight + '+ - 'offsetParent.offsetHeight + offsetParent.scrollTop : 0);'; - } -} - -TF.prototype.RemoveFixedHeaders = function() -/*==================================================== - - Removes fixed headers -=====================================================*/ -{ - if(!this.hasGrid || !this.fixedHeaders ) return; - if( this.contDiv )//IE additional div - { - this.contDiv.parentNode.insertBefore(this.tbl, this.contDiv); - this.contDiv.parentNode.removeChild( this.contDiv ); - this.contDiv = null; - var thead = tf_Tag(this.tbl,'thead'); - if( thead.length==0 ) return; - var theadTr = tf_Tag(thead[0],'tr'); - if( theadTr.length==0 ) return; - for(var i=0; i= offsetParent.offsetHeight ? 0 - parentNode.parentNode.offsetHeight + offsetParent.offsetHeight + offsetParent.scrollTop : 0);"}},TF.prototype.RemoveFixedHeaders=function(){if(!this.hasGrid||!this.fixedHeaders)return;if(this.contDiv){this.contDiv.parentNode.insertBefore(this.tbl,this.contDiv),this.contDiv.parentNode.removeChild(this.contDiv),this.contDiv=null;var e=tf_Tag(this.tbl,"thead");if(e.length==0)return;var t=tf_Tag(e[0],"tr");if(t.length==0)return;for(var n=0;n0 ) this.tbl.removeChild(thead[0]); - - //Headers table style - this.headTbl.style.width = this.tbl.style.width; - this.headTbl.style.tableLayout = 'fixed'; - this.tbl.style.tableLayout = 'fixed'; - this.headTbl.cellPadding = this.tbl.cellPadding; - this.headTbl.cellSpacing = this.tbl.cellSpacing; - - //Headers container width - this.headTblCont.style.width = this.tblCont.clientWidth+'px'; - - //content table without headers needs col widths to be reset - this.SetColWidths(); - - this.tbl.style.width = ''; - if(tf_isIE || tf_isIE7) this.headTbl.style.width = ''; - - //scroll synchronisation - var o = this; //TF object - this.tblCont.onscroll = function(){ - o.headTblCont.scrollLeft = this.scrollLeft; - var _o = this; //this = scroll element - //New pointerX calc taking into account scrollLeft - if(!o.isPointerXOverwritten){ - try{ - TF.Evt.pointerX = function(e) - { - e = e || window.event; - var scrollLeft = tf_StandardBody().scrollLeft + _o.scrollLeft; - return (e.pageX + _o.scrollLeft) || (e.clientX + scrollLeft); - } - o.isPointerXOverwritten = true; - } catch(ee) { - o.isPointerXOverwritten = false; - } - } - } - - /*** Default behaviours activation ***/ - var f = this.fObj==undefined ? {} : this.fObj; - - //Sort is enabled if not specified in config object - if(f.sort != false){ - this.sort = true; - this.sortConfig.asyncSort = true; - this.sortConfig.triggerIds = sortTriggers; - } - - if(this.gridEnableColResizer){ - if(!this.hasExtensions){ - this.extensions = { - name:['ColumnsResizer_'+this.id], - src:[this.gridColResizerPath], - description:['Columns Resizing'], - initialize:[function(o){ o.SetColsResizer('ColumnsResizer_'+o.id); }] - } - this.hasExtensions = true; - } else { - if(!this.__containsStr('colsresizer',this.extensions.src.toString().tf_LCase())){ - this.extensions.name.push('ColumnsResizer_'+this.id); - this.extensions.src.push(this.gridColResizerPath); - this.extensions.description.push('Columns Resizing'); - this.extensions.initialize.push(function(o){o.SetColsResizer('ColumnsResizer_'+o.id);}); - } - } - } - - //Default columns resizer properties for grid layout - f.col_resizer_cols_headers_table = this.headTbl.getAttribute('id'); - f.col_resizer_cols_headers_index = this.gridHeadRowIndex; - f.col_resizer_width_adjustment = 0; - f.col_enable_text_ellipsis = false; - - //Cols generation for all browsers excepted IE<=7 - o.tblHasColTag = (tf_Tag(o.tbl,'col').length > 0) ? true : false; - if(!tf_isIE && !tf_isIE7){ - //Col elements are enough to keep column widths after sorting and filtering - function createColTags(o) - { - if(!o) return; - for(var k=(o.nbCells-1); k>=0; k--) - { - var col = tf_CreateElm( 'col', ['id', o.id+'_col_'+k]); - o.tbl.firstChild.parentNode.insertBefore(col,o.tbl.firstChild); - col.style.width = o.colWidth[k]; - o.gridColElms[k] = col; - } - o.tblHasColTag = true; - } - if(!o.tblHasColTag) createColTags(o); - else{ - var cols = tf_Tag(o.tbl,'col'); - for(var i=0; i0 ) r = tbody[0].insertRow(0); - else r = o.tbl.insertRow(0); - r.style.height = '0px'; - for(var i=0; i0 ) - tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0); - else o.tbl.moveRow(o.leadColWidthsRow.rowIndex, 0); - } - if(afterSortFn!=null) afterSortFn.call(null,o,colIndex); - } - } - - var afterColResizedFn = tf_IsFn(f.on_after_col_resized) ? f.on_after_col_resized : null; - f.on_after_col_resized = function(o,colIndex){ - if(colIndex==undefined) return; - var w = o.crWColsRow.cells[colIndex].style.width; - var col = o.gridColElms[colIndex]; - col.style.width = w; - - var thCW = o.crWColsRow.cells[colIndex].clientWidth; - var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth; - - if(tf_isIE || tf_isIE7) - o.tbl.style.width = o.headTbl.clientWidth+'px'; - - if(thCW != tdCW && !tf_isIE && !tf_isIE7) - o.headTbl.style.width = o.tbl.clientWidth+'px'; - - if(afterColResizedFn!=null) afterColResizedFn.call(null,o,colIndex); - } - - if(this.tbl.clientWidth != this.headTbl.clientWidth) - this.tbl.style.width = this.headTbl.clientWidth+'px'; - -} - -TF.prototype.RemoveGridLayout = function() -/*==================================================== - - removes the grid layout -=====================================================*/ -{ - if(!this.gridLayout) return; - var t = this.tbl.parentNode.removeChild(this.tbl); - this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont); - this.tblMainCont.parentNode.removeChild( this.tblMainCont ); - - this.tblMainCont = null; - this.headTblCont = null; - this.headTbl = null; - this.tblCont = null; - - this.tbl.outerHTML = this.sourceTblHtml; - this.tbl = tf_Id(this.id); //needed to keep reference -} \ No newline at end of file +TF.prototype.SetGridLayout=function(){if(!this.gridLayout)return;var e=this.fObj;this.gridWidth=e.grid_width!=undefined?e.grid_width:null,this.gridHeight=e.grid_height!=undefined?e.grid_height:null,this.gridMainContCssClass=e.grid_cont_css_class!=undefined?e.grid_cont_css_class:"grd_Cont",this.gridContCssClass=e.grid_tbl_cont_css_class!=undefined?e.grid_tbl_cont_css_class:"grd_tblCont",this.gridHeadContCssClass=e.grid_tblHead_cont_css_class!=undefined?e.grid_tblHead_cont_css_class:"grd_headTblCont",this.gridInfDivCssClass=e.grid_inf_grid_css_class!=undefined?e.grid_inf_grid_css_class:"grd_inf",this.gridHeadRowIndex=e.grid_headers_row_index!=undefined?e.grid_headers_row_index:0,this.gridHeadRows=e.grid_headers_rows!=undefined?e.grid_headers_rows:[0],this.gridEnableFilters=e.grid_enable_default_filters!=undefined?e.grid_enable_default_filters:!0,this.gridDefaultColWidth=e.grid_default_col_width!=undefined?e.grid_default_col_width:"100px",this.gridEnableColResizer=e.grid_enable_cols_resizer!=undefined?e.grid_enable_cols_resizer:!0,this.gridColResizerPath=e.grid_cont_col_resizer_path!=undefined?e.grid_cont_col_resizer_path:this.basePath+"TFExt_ColsResizer/TFExt_ColsResizer.js";if(!this.hasColWidth){this.colWidth=[];for(var t=0;t0&&this.tbl.removeChild(y[0]),this.headTbl.style.width=this.tbl.style.width,this.headTbl.style.tableLayout="fixed",this.tbl.style.tableLayout="fixed",this.headTbl.cellPadding=this.tbl.cellPadding,this.headTbl.cellSpacing=this.tbl.cellSpacing,this.headTblCont.style.width=this.tblCont.clientWidth+"px",this.SetColWidths(),this.tbl.style.width="";if(tf_isIE||tf_isIE7)this.headTbl.style.width="";var b=this;this.tblCont.onscroll=function(){b.headTblCont.scrollLeft=this.scrollLeft;var e=this;if(!b.isPointerXOverwritten)try{TF.Evt.pointerX=function(t){t=t||window.event;var n=tf_StandardBody().scrollLeft+e.scrollLeft;return t.pageX+e.scrollLeft||t.clientX+n},b.isPointerXOverwritten=!0}catch(t){b.isPointerXOverwritten=!1}};var e=this.fObj==undefined?{}:this.fObj;e.sort!=0&&(this.sort=!0,this.sortConfig.asyncSort=!0,this.sortConfig.triggerIds=f),this.gridEnableColResizer&&(this.hasExtensions?this.__containsStr("colsresizer",this.extensions.src.toString().tf_LCase())||(this.extensions.name.push("ColumnsResizer_"+this.id),this.extensions.src.push(this.gridColResizerPath),this.extensions.description.push("Columns Resizing"),this.extensions.initialize.push(function(e){e.SetColsResizer("ColumnsResizer_"+e.id)})):(this.extensions={name:["ColumnsResizer_"+this.id],src:[this.gridColResizerPath],description:["Columns Resizing"],initialize:[function(e){e.SetColsResizer("ColumnsResizer_"+e.id)}]},this.hasExtensions=!0)),e.col_resizer_cols_headers_table=this.headTbl.getAttribute("id"),e.col_resizer_cols_headers_index=this.gridHeadRowIndex,e.col_resizer_width_adjustment=0,e.col_enable_text_ellipsis=!1,b.tblHasColTag=tf_Tag(b.tbl,"col").length>0?!0:!1;if(!tf_isIE&&!tf_isIE7){function w(e){if(!e)return;for(var t=e.nbCells-1;t>=0;t--){var n=tf_CreateElm("col",["id",e.id+"_col_"+t]);e.tbl.firstChild.parentNode.insertBefore(n,e.tbl.firstChild),n.style.width=e.colWidth[t],e.gridColElms[t]=n}e.tblHasColTag=!0}if(!b.tblHasColTag)w(b);else{var E=tf_Tag(b.tbl,"col");for(var m=0;m0?x=S[0].insertRow(0):x=b.tbl.insertRow(0),x.style.height="0px";for(var m=0;m0?S[0].moveRow(e.leadColWidthsRow.rowIndex,0):e.tbl.moveRow(e.leadColWidthsRow.rowIndex,0)}C!=null&&C.call(null,e,t)}}var k=tf_IsFn(e.on_after_col_resized)?e.on_after_col_resized:null;e.on_after_col_resized=function(e,t){if(t==undefined)return;var n=e.crWColsRow.cells[t].style.width,r=e.gridColElms[t];r.style.width=n;var i=e.crWColsRow.cells[t].clientWidth,s=e.crWRowDataTbl.cells[t].clientWidth;if(tf_isIE||tf_isIE7)e.tbl.style.width=e.headTbl.clientWidth+"px";i!=s&&!tf_isIE&&!tf_isIE7&&(e.headTbl.style.width=e.tbl.clientWidth+"px"),k!=null&&k.call(null,e,t)},this.tbl.clientWidth!=this.headTbl.clientWidth&&(this.tbl.style.width=this.headTbl.clientWidth+"px")},TF.prototype.RemoveGridLayout=function(){if(!this.gridLayout)return;var e=this.tbl.parentNode.removeChild(this.tbl);this.tblMainCont.parentNode.insertBefore(e,this.tblMainCont),this.tblMainCont.parentNode.removeChild(this.tblMainCont),this.tblMainCont=null,this.headTblCont=null,this.headTbl=null,this.tblCont=null,this.tbl.outerHTML=this.sourceTblHtml,this.tbl=tf_Id(this.id)}; \ No newline at end of file diff --git a/dist/TF_Modules/tf_highlightKeywords.js b/dist/TF_Modules/tf_highlightKeywords.js index 4d59c6ac..d68b416a 100644 --- a/dist/TF_Modules/tf_highlightKeywords.js +++ b/dist/TF_Modules/tf_highlightKeywords.js @@ -1,97 +1 @@ -/*------------------------------------------------------------------------ - - HTML Table Filter Generator - - Highlight keywords feature v1.2 - - By Max Guglielmi (tablefilter.free.fr) - - Licensed under the MIT License --------------------------------------------------------------------------*/ - -TF.prototype.UnhighlightAll = function() -/*==================================================== - - removes keyword highlighting -=====================================================*/ -{ - if( this.highlightKeywords && this.searchArgs!=null ){ - for(var y=0; y'; //defines next page button text - this.btnPrevPageText = f.btn_prev_page_text!=undefined - ? f.btn_prev_page_text : '<'; //defines previous page button text - this.btnLastPageText = f.btn_last_page_text!=undefined - ? f.btn_last_page_text : '>|'; //defines last page button text - this.btnFirstPageText = f.btn_first_page_text!=undefined - ? f.btn_first_page_text : '|<' ; //defines first page button text - this.btnNextPageHtml = f.btn_next_page_html!=undefined //defines next page button html - ? f.btn_next_page_html : (!this.enableIcons ? null : - ''); - this.btnPrevPageHtml = f.btn_prev_page_html!=undefined //defines previous page button html - ? f.btn_prev_page_html : (!this.enableIcons ? null : - ''); - this.btnFirstPageHtml = f.btn_first_page_html!=undefined //defines last page button html - ? f.btn_first_page_html : (!this.enableIcons ? null : - ''); - this.btnLastPageHtml = f.btn_last_page_html!=undefined //defines previous page button html - ? f.btn_last_page_html : (!this.enableIcons ? null : - ''); - this.pageText = f.page_text!=undefined ? f.page_text : ' Page '; //defines text preceeding page selector drop-down - this.ofText = f.of_text!=undefined ? f.of_text : ' of '; //defines text after page selector drop-down - this.nbPgSpanCssClass = f.nb_pages_css_class!=undefined ? f.nb_pages_css_class :'nbpg'; //css class for span containing tot nb of pages - this.hasPagingBtns = f.paging_btns==false ? false : true; //enables/disables paging buttons - this.pagingBtnEvents = null; //stores paging buttons events - this.pageSelectorType = f.page_selector_type!=undefined - ? f.page_selector_type : this.fltTypeSlc; //defines previous page button html - this.onBeforeChangePage = tf_IsFn(f.on_before_change_page) ? f.on_before_change_page : null; //calls function before page is changed - this.onAfterChangePage = tf_IsFn(f.on_after_change_page) ? f.on_after_change_page : null; //calls function before page is changed - - var start_row = this.refRow; - var nrows = this.nbRows; - this.nbPages = Math.ceil( (nrows-start_row)/this.pagingLength );//calculates page nb - - //Paging elements events - if(!this.Evt._Paging.next) - { - var o = this; - this.Evt._Paging = {// paging buttons events - slcIndex: function(){ - return (o.pageSelectorType==o.fltTypeSlc) - ? o.pagingSlc.options.selectedIndex - : parseInt(o.pagingSlc.value)-1; - }, - nbOpts: function(){ - return (o.pageSelectorType==o.fltTypeSlc) - ? parseInt(o.pagingSlc.options.length)-1 - : (o.nbPages-1); - }, - next: function(){ - if(o.Evt._Paging.nextEvt) o.Evt._Paging.nextEvt(); - var nextIndex = (o.Evt._Paging.slcIndex()0 - ? o.Evt._Paging.slcIndex()-1 : o.Evt._Paging.nbOpts(); - o.ChangePage(prevIndex); - }, - last: function(){ - if(o.Evt._Paging.lastEvt) o.Evt._Paging.lastEvt(); - o.ChangePage(o.Evt._Paging.nbOpts()); - }, - first: function(){ - if(o.Evt._Paging.firstEvt) o.Evt._Paging.firstEvt(); - o.ChangePage(0); - }, - _detectKey: function(e) - { - var evt=(e)?e:(window.event)?window.event:null; - if(evt) - { - var key=(evt.charCode)?evt.charCode: - ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0)); - if(key=='13'){ - if(o.sorted){ o.Filter(); o.ChangePage(o.Evt._Paging.slcIndex()); } - else o.ChangePage(); - this.blur(); - } - }//if evt - }, - nextEvt: null, - prevEvt: null, - lastEvt: null, - firstEvt: null - } - } - - if(!this.Evt._OnSlcPagesChange) - { - this.Evt._OnSlcPagesChange = function() - /*==================================================== - - onchange event for paging select - =====================================================*/ - { - if(o.Evt._Paging._OnSlcPagesChangeEvt) - o.Evt._Paging._OnSlcPagesChangeEvt(); - o.ChangePage(); - this.blur(); - //ie only: blur is not enough... - if(this.parentNode && tf_isIE) - this.parentNode.focus(); - } - } - - // Paging drop-down list selector - if(this.pageSelectorType == this.fltTypeSlc) - { - var slcPages = tf_CreateElm( this.fltTypeSlc, ['id',this.prfxSlcPages+this.id] ); - slcPages.className = this.pgSlcCssClass; - slcPages.onchange = this.Evt._OnSlcPagesChange; - } - // Paging input selector - if(this.pageSelectorType == this.fltTypeInp) - { - var slcPages = tf_CreateElm( - this.fltTypeInp, - ['id',this.prfxSlcPages+this.id], - ['value',this.currentPageNb] - ); - slcPages.className = this.pgInpCssClass; - slcPages.onkeypress = this.Evt._Paging._detectKey; - } - - var btnNextSpan, btnPrevSpan, btnLastSpan, btnFirstSpan;// btns containers - btnNextSpan = tf_CreateElm('span',['id',this.prfxBtnNextSpan+this.id]); - btnPrevSpan = tf_CreateElm('span',['id',this.prfxBtnPrevSpan+this.id]); - btnLastSpan = tf_CreateElm('span',['id',this.prfxBtnLastSpan+this.id]); - btnFirstSpan = tf_CreateElm('span',['id',this.prfxBtnFirstSpan+this.id]); - - if(this.hasPagingBtns) - { - if(this.btnNextPageHtml==null) - {// Next button - var btn_next = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnNext+this.id], - ['type','button'],['value',this.btnNextPageText],['title','Next'] ); - btn_next.className = this.btnPageCssClass; - btn_next.onclick = this.Evt._Paging.next; - btnNextSpan.appendChild(btn_next); - } else { - btnNextSpan.innerHTML = this.btnNextPageHtml; - btnNextSpan.onclick = this.Evt._Paging.next; - } - - if(this.btnPrevPageHtml==null) - {// Previous button - var btn_prev = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnPrev+this.id], - ['type','button'],['value',this.btnPrevPageText],['title','Previous'] ); - btn_prev.className = this.btnPageCssClass; - btn_prev.onclick = this.Evt._Paging.prev; - btnPrevSpan.appendChild(btn_prev); - } else { - btnPrevSpan.innerHTML = this.btnPrevPageHtml; - btnPrevSpan.onclick = this.Evt._Paging.prev; - } - - if(this.btnLastPageHtml==null) - {// Last button - var btn_last = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnLast+this.id], - ['type','button'],['value',this.btnLastPageText],['title','Last'] ); - btn_last.className = this.btnPageCssClass; - btn_last.onclick = this.Evt._Paging.last; - btnLastSpan.appendChild(btn_last); - } else { - btnLastSpan.innerHTML = this.btnLastPageHtml; - btnLastSpan.onclick = this.Evt._Paging.last; - } - - if(this.btnFirstPageHtml==null) - {// First button - var btn_first = tf_CreateElm( this.fltTypeInp,['id',this.prfxBtnFirst+this.id], - ['type','button'],['value',this.btnFirstPageText],['title','First'] ); - btn_first.className = this.btnPageCssClass; - btn_first.onclick = this.Evt._Paging.first; - btnFirstSpan.appendChild(btn_first); - } else { - btnFirstSpan.innerHTML = this.btnFirstPageHtml; - btnFirstSpan.onclick = this.Evt._Paging.first; - } - }//if this.hasPagingBtns - - // paging elements (buttons+drop-down list) are added to defined element - if(this.pagingTgtId==null) this.SetTopDiv(); - var targetEl = ( this.pagingTgtId==null ) ? this.mDiv : tf_Id( this.pagingTgtId ); - - /*** if paging previously removed this prevents IE memory leak with removeChild - used in RemovePaging method. For more info refer to - http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2840253&SiteID=1 ***/ - if ( targetEl.innerHTML!='' ) targetEl.innerHTML = ''; - /*** ***/ - - targetEl.appendChild(btnFirstSpan); - targetEl.appendChild(btnPrevSpan); - - var pgBeforeSpan = tf_CreateElm( 'span',['id',this.prfxPgBeforeSpan+this.id] ); - pgBeforeSpan.appendChild( tf_CreateText(this.pageText) ); - pgBeforeSpan.className = this.nbPgSpanCssClass; - targetEl.appendChild(pgBeforeSpan); - targetEl.appendChild(slcPages); - var pgAfterSpan = tf_CreateElm( 'span',['id',this.prfxPgAfterSpan+this.id] ); - pgAfterSpan.appendChild( tf_CreateText(this.ofText) ); - pgAfterSpan.className = this.nbPgSpanCssClass; - targetEl.appendChild(pgAfterSpan) - var pgspan = tf_CreateElm( 'span',['id',this.prfxPgSpan+this.id] ); - pgspan.className = this.nbPgSpanCssClass; - pgspan.appendChild( tf_CreateText(' '+this.nbPages+' ') ); - targetEl.appendChild(pgspan); - targetEl.appendChild(btnNextSpan); - targetEl.appendChild(btnLastSpan); - this.pagingSlc = tf_Id(this.prfxSlcPages+this.id); //to be easily re-used - - // if this.rememberGridValues==true this.SetPagingInfo() is called - // in ResetGridValues() method - if( !this.rememberGridValues || this.isPagingRemoved ) - this.SetPagingInfo(); - if( !this.fltGrid ) - { - this.ValidateAllRows(); - this.SetPagingInfo(this.validRowsIndex); - } - - this.pagingBtnEvents = this.Evt._Paging; - this.isPagingRemoved = false; -} - -TF.prototype.RemovePaging = function() -/*==================================================== - - Removes paging elements -=====================================================*/ -{ - if(!this.hasGrid) return; - if( this.pagingSlc==null ) return; - var btnNextSpan, btnPrevSpan, btnLastSpan, btnFirstSpan;// btns containers - var pgBeforeSpan, pgAfterSpan, pgspan; - btnNextSpan = tf_Id(this.prfxBtnNextSpan+this.id); - btnPrevSpan = tf_Id(this.prfxBtnPrevSpan+this.id); - btnLastSpan = tf_Id(this.prfxBtnLastSpan+this.id); - btnFirstSpan = tf_Id(this.prfxBtnFirstSpan+this.id); - pgBeforeSpan = tf_Id(this.prfxPgBeforeSpan+this.id);//span containing 'Page' text - pgAfterSpan = tf_Id(this.prfxPgAfterSpan+this.id);//span containing 'of' text - pgspan = tf_Id(this.prfxPgSpan+this.id);//span containing nb of pages - - this.pagingSlc.parentNode.removeChild(this.pagingSlc); - - if( btnNextSpan!=null ) - btnNextSpan.parentNode.removeChild( btnNextSpan ); - - if( btnPrevSpan!=null ) - btnPrevSpan.parentNode.removeChild( btnPrevSpan ); - - if( btnLastSpan!=null ) - btnLastSpan.parentNode.removeChild( btnLastSpan ); - - if( btnFirstSpan!=null ) - btnFirstSpan.parentNode.removeChild( btnFirstSpan ); - - if( pgBeforeSpan!=null ) - pgBeforeSpan.parentNode.removeChild( pgBeforeSpan ); - - if( pgAfterSpan!=null ) - pgAfterSpan.parentNode.removeChild( pgAfterSpan ); - - if( pgspan!=null ) - pgspan.parentNode.removeChild( pgspan ); - - this.pagingBtnEvents = null; - this.pagingSlc = null; - this.isPagingRemoved = true; -} - -TF.prototype.SetPagingInfo = function( validRows ) -/*==================================================== - - calculates page # according to valid rows - - refreshes paging select according to page # - - Calls GroupByPage method -=====================================================*/ -{ - var row = this.tbl.rows; - var mdiv = ( this.pagingTgtId==null ) ? this.mDiv : tf_Id( this.pagingTgtId ); - var pgspan = tf_Id(this.prfxPgSpan+this.id); - - if( validRows!=undefined ) this.validRowsIndex = validRows;//stores valid rows index - else - { - this.validRowsIndex = [];//re-sets valid rows index - - for(var j=this.refRow; j0 ) - { - mdiv.style.visibility = 'visible'; - if(this.pageSelectorType==this.fltTypeSlc) - for(var z=0; z