1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-04-28 12:52:49 +02:00

added src-es6 folder

This commit is contained in:
Max Guglielmi 2014-11-16 11:29:07 +11:00
parent e8fba7cedd
commit 5a3a989af0
52 changed files with 2896 additions and 744 deletions

View file

@ -18,6 +18,7 @@ module.exports = function (grunt) {
watch: {
files: [
'src-es6/**/*.js',
'src/**/*.js',
'src/**/*.css',
'src/**/*.html'
@ -100,20 +101,6 @@ module.exports = function (grunt) {
copy: {
main: {
files: [
//{ src: ['<%= source_folder %>tablefilter_all.js'], dest: '<%= dist_folder %>tablefilter_all-uncompressed.js' },
//{ src: ['<%= source_folder %>tablefilter.js'], dest: '<%= dist_folder %>tablefilter-uncompressed.js' },
// { src: ['<%= source_folder %>filtergrid.css'], dest: '<%= dist_folder %>filtergrid-uncompressed.css' },
// { src: ['<%= source_folder %>tf-main.js'], dest: '<%= dist_folder %>tf-main.js' },
// { src: ['<%= source_folder %>string.js'], dest: '<%= dist_folder %>string.js' },
// { src: ['<%= source_folder %>array.js'], dest: '<%= dist_folder %>array.js' },
// { src: ['<%= source_folder %>cookie.js'], dest: '<%= dist_folder %>cookie.js' },
// { src: ['<%= source_folder %>date.js'], dest: '<%= dist_folder %>date.js' },
// { src: ['<%= source_folder %>dom.js'], dest: '<%= dist_folder %>dom.js' },
// { src: ['<%= source_folder %>event.js'], dest: '<%= dist_folder %>event.js' },
// { src: ['<%= source_folder %>types.js'], dest: '<%= dist_folder %>types.js' },
// { src: ['**'], cwd: '<%= source_folder %>modules/', dest: '<%= dist_folder %>modules/', expand: true },
// { src: ['<%= source_folder %>/*.js'], dest: '<%= dist_folder %>', flatten: true, expand: false },
// { src: ['libs/requirejs/require.js'], dest: '<%= dist_folder %>/libs/require.js' },
{ src: ['**'], cwd: '<%= source_folder %>TF_Modules/', dest: '<%= dist_folder %>TF_Modules/', expand: true },
{ src: ['**'], cwd: '<%= source_folder %>TF_Themes/', dest: '<%= dist_folder %>TF_Themes/', expand: true }
]
@ -133,9 +120,9 @@ module.exports = function (grunt) {
build:{
files: [{
expand: true,
cwd: '<%= source_folder %>es6-modules',
cwd: 'src-es6',
src: ['**/*.js'],
dest: '<%= source_folder %>modules'
dest: '<%= source_folder %>'
}]
}
}
@ -154,7 +141,7 @@ module.exports = function (grunt) {
// This is the default task being executed if Grunt
// is called without any further parameter.
grunt.registerTask('default', ['jshint', 'requirejs', 'concat', 'uglify', 'cssmin', 'copy', 'qunit']);
grunt.registerTask('default', ['jshint', '6to5', 'requirejs', 'concat', 'uglify', 'cssmin', 'copy', 'qunit']);
grunt.registerTask('dev', ['jshint', '6to5', 'concat', 'cssmin', 'copy']);
grunt.registerTask('toes5', ['6to5']);
grunt.registerTask('test', ['qunit']);

71
dist/TF_Modules/tf_alternateRows.js vendored Normal file
View file

@ -0,0 +1,71 @@
/*------------------------------------------------------------------------
- HTML Table Filter Generator
- Alternating rows color feature v1.0
- By Max Guglielmi (tablefilter.free.fr)
- Licensed under the MIT License
-------------------------------------------------------------------------*/
TF.prototype.SetRowBg = function(rIndex,index)
/*====================================================
- sets row background color
- Params:
- rIndex: row index (numeric value)
- index: valid row collection index needed to
calculate bg color
=====================================================*/
{
if(!this.alternateBgs || isNaN(rIndex)) return;
var rows = this.tbl.rows;
var i = (index==undefined) ? rIndex : index;
this.RemoveRowBg(rIndex);
tf_AddClass(
rows[rIndex],
(i%2) ? this.rowBgEvenCssClass : this.rowBgOddCssClass
);
}
TF.prototype.RemoveRowBg = function(index)
/*====================================================
- removes row background color
- Params:
- index: row index (numeric value)
=====================================================*/
{
if(isNaN(index)) return;
var rows = this.tbl.rows;
tf_RemoveClass(rows[index],this.rowBgOddCssClass);
tf_RemoveClass(rows[index],this.rowBgEvenCssClass);
}
TF.prototype.SetAlternateRows = function()
/*====================================================
- alternates row colors for better readability
=====================================================*/
{
if( !this.hasGrid && !this.isFirstLoad ) return;
var rows = this.tbl.rows;
var noValidRowsIndex = this.validRowsIndex==null;
var beginIndex = (noValidRowsIndex) ? this.refRow : 0; //1st index
var indexLen = (noValidRowsIndex) // nb indexes
? (this.nbFilterableRows+beginIndex) : this.validRowsIndex.length;
var idx = 0;
for(var j=beginIndex; j<indexLen; j++)//alternates bg color
{
var rIndex = (noValidRowsIndex) ? j : this.validRowsIndex[j];
this.SetRowBg(rIndex,idx);
idx++;
}
}
TF.prototype.RemoveAlternateRows = function()
/*====================================================
- removes alternate row colors
=====================================================*/
{
if(!this.hasGrid) return;
var row = this.tbl.rows;
for(var i=this.refRow; i<this.nbRows; i++)
this.RemoveRowBg(i);
this.isStartBgAlternate = true;
}

271
dist/TF_Modules/tf_colOps.js vendored Normal file
View file

@ -0,0 +1,271 @@
/*------------------------------------------------------------------------
- HTML Table Filter Generator
- Columns Operations feature v1.0
- By Max Guglielmi (tablefilter.free.fr)
- Licensed under the MIT License
- Special credit to Nuovella Williams
-------------------------------------------------------------------------*/
TF.prototype.SetColOperation = function()
/*====================================================
- Calculates values of a column
- params are stored in 'colOperation' table's
attribute
- colOperation['id'] contains ids of elements
showing result (array)
- colOperation['col'] contains index of
columns (array)
- colOperation['operation'] contains operation
type (array, values: sum, mean)
- colOperation['write_method'] array defines
which method to use for displaying the
result (innerHTML, setValue, createTextNode).
Note that innerHTML is the default value.
- colOperation['tot_row_index'] defines in
which row results are displayed (integers array)
- changes made by nuovella:
(1) optimized the routine (now it will only
process each column once),
(2) added calculations for the median, lower and
upper quartile.
=====================================================*/
{
if( !this.isFirstLoad && !this.hasGrid ) return;
if(this.onBeforeOperation) this.onBeforeOperation.call(null,this);
var labelId = this.colOperation['id'];
var colIndex = this.colOperation['col'];
var operation = this.colOperation['operation'];
var outputType = this.colOperation['write_method'];
var totRowIndex = this.colOperation['tot_row_index'];
var excludeRow = this.colOperation['exclude_row'];
var decimalPrecision = this.colOperation['decimal_precision']!=undefined
? this.colOperation['decimal_precision'] : 2;
//nuovella: determine unique list of columns to operate on
var ucolIndex =[];
var ucolMax=0;
ucolIndex[ucolMax]=colIndex[0];
for(var i=1; i<colIndex.length; i++)
{
saved=0;
//see if colIndex[i] is already in the list of unique indexes
for(var j=0; j<=ucolMax; j++ )
{
if (ucolIndex[j]==colIndex[i])
saved=1;
}
if (saved==0)
{//if not saved then, save the index;
ucolMax++;
ucolIndex[ucolMax]=colIndex[i];
}
}// for i
if( (typeof labelId).tf_LCase()=='object'
&& (typeof colIndex).tf_LCase()=='object'
&& (typeof operation).tf_LCase()=='object' )
{
var row = this.tbl.rows;
var colvalues = [];
for(var ucol=0; ucol<=ucolMax; ucol++)
{
//this retrieves col values
//use ucolIndex because we only want to pass through this loop once for each column
//get the values in this unique column
colvalues.push( this.GetColValues(ucolIndex[ucol],true,excludeRow) );
//next: calculate all operations for this column
var result, nbvalues=0, temp;
var meanValue=0, sumValue=0, minValue=null, maxValue=null, q1Value=null, medValue=null, q3Value=null;
var meanFlag=0, sumFlag=0, minFlag=0, maxFlag=0, q1Flag=0, medFlag=0, q3Flag=0;
var theList=[];
var opsThisCol=[], decThisCol=[], labThisCol=[], oTypeThisCol=[];
var mThisCol=-1;
for(var i=0; i<colIndex.length; i++)
{
if (colIndex[i]==ucolIndex[ucol])
{
mThisCol++;
opsThisCol[mThisCol]=operation[i].tf_LCase();
decThisCol[mThisCol]=decimalPrecision[i];
labThisCol[mThisCol]=labelId[i];
oTypeThisCol = (outputType != undefined && (typeof outputType).tf_LCase()=='object')
? outputType[i] : null;
switch( opsThisCol[mThisCol] )
{
case 'mean':
meanFlag=1;
break;
case 'sum':
sumFlag=1;
break;
case 'min':
minFlag=1;
break;
case 'max':
maxFlag=1;
break;
case 'median':
medFlag=1;
break;
case 'q1':
q1Flag=1;
break;
case 'q3':
q3Flag=1;
break;
}
}
}
for(var j=0; j<colvalues[ucol].length; j++ )
{
if ((q1Flag==1)||(q3Flag==1) || (medFlag==1))
{//sort the list for calculation of median and quartiles
if (j<colvalues[ucol].length -1)
{
for(k=j+1;k<colvalues[ucol].length; k++) {
if( eval(colvalues[ucol][k]) < eval(colvalues[ucol][j]))
{
temp = colvalues[ucol][j];
colvalues[ucol][j] = colvalues[ucol][k];
colvalues[ucol][k] = temp;
}
}
}
}
var cvalue = parseFloat(colvalues[ucol][j]);
theList[j]=parseFloat( cvalue );
if( !isNaN(cvalue) )
{
nbvalues++;
if ((sumFlag==1)|| (meanFlag==1)) sumValue += parseFloat( cvalue );
if (minFlag==1)
{
if (minValue==null)
{
minValue = parseFloat( cvalue );
}
else minValue= parseFloat( cvalue )<minValue? parseFloat( cvalue ): minValue;
}
if (maxFlag==1) {
if (maxValue==null)
{maxValue = parseFloat( cvalue );}
else {maxValue= parseFloat( cvalue )>maxValue? 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);
}

163
dist/TF_Modules/tf_cookies.js vendored Normal file
View file

@ -0,0 +1,163 @@
/*------------------------------------------------------------------------
- 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<this.fltIds.length; i++)
{//creates an array with filters' values
value = this.GetFilterValue(i);
if (value == '') value = ' ';
flt_values.push(value);
}
flt_values.push(this.fltIds.length); //adds array size
tf_WriteCookie(
name,
flt_values.join(this.separator),
this.cookieDuration
); //writes cookie
}
TF.prototype.RememberPageNb = function( name )
/*==============================================
- stores page number value in a cookie
when ChangePage method is called
- Params:
- name: cookie name (string)
===============================================*/
{
tf_WriteCookie(
name,
this.currentPageNb,
this.cookieDuration
); //writes cookie
}
TF.prototype.RememberPageLength = function( name )
/*==============================================
- stores page length value in a cookie
when ChangePageLength method is called
- Params:
- name: cookie name (string)
===============================================*/
{
tf_WriteCookie(
name,
this.resultsPerPageSlc.selectedIndex,
this.cookieDuration
); //writes cookie
}
TF.prototype.ResetValues = function()
{
this.EvtManager(this.Evt.name.resetvalues);
}
TF.prototype._ResetValues = function()
/*==============================================
- re-sets grid values when page is
re-loaded. It invokes ResetGridValues,
ResetPage and ResetPageLength methods
- Params:
- name: cookie name (string)
===============================================*/
{
if(this.rememberGridValues && this.fillSlcOnDemand) //only fillSlcOnDemand
this.ResetGridValues(this.fltsValuesCookie);
if(this.rememberPageLen) this.ResetPageLength( this.pgLenCookie );
if(this.rememberPageNb) this.ResetPage( this.pgNbCookie );
}
TF.prototype.ResetGridValues = function( name )
/*==============================================
- re-sets filters' values when page is
re-loaded if load on demand is enabled
- Params:
- name: cookie name (string)
- credits to Florent Hirchy
===============================================*/
{
if(!this.fillSlcOnDemand) return;
var flts = tf_ReadCookie(name); //reads the cookie
var reg = new RegExp(this.separator,'g');
var flts_values = flts.split(reg); //creates an array with filters' values
var slcFltsIndex = this.GetFiltersByType(this.fltTypeSlc, true);
var multiFltsIndex = this.GetFiltersByType(this.fltTypeMulti, true);
if(flts_values[(flts_values.length-1)] == this.fltIds.length)
{//if the number of columns is the same as before page reload
for(var i=0; i<(flts_values.length - 1); i++)
{
if (flts_values[i]==' ') continue;
if(this['col'+i]==this.fltTypeSlc || this['col'+i]==this.fltTypeMulti)
{// if fillSlcOnDemand, drop-down needs to contain stored value(s) for filtering
var slc = tf_Id( this.fltIds[i] );
slc.options[0].selected = false;
if( slcFltsIndex.tf_Has(i) )
{//selects
var opt = tf_CreateOpt(flts_values[i],flts_values[i],true);
slc.appendChild(opt);
this.hasStoredValues = true;
}
if(multiFltsIndex.tf_Has(i))
{//multiple select
var s = flts_values[i].split(' '+this.orOperator+' ');
for(j=0; j<s.length; j++)
{
if(s[j]=='') continue;
var opt = tf_CreateOpt(s[j],s[j],true);
slc.appendChild(opt);
this.hasStoredValues = true;
if(tf_isIE)
{// IE multiple selection work-around
this.__deferMultipleSelection(slc,j,false);
hasStoredValues = false;
}
}
}// if multiFltsIndex
}
else if(this['col'+i]==this.fltTypeCheckList)
{
var divChk = this.checkListDiv[i];
divChk.title = divChk.innerHTML;
divChk.innerHTML = '';
var ul = tf_CreateElm('ul',['id',this.fltIds[i]],['colIndex',i]);
ul.className = this.checkListCssClass;
var li0 = tf_CreateCheckItem(this.fltIds[i]+'_0', '', this.displayAllText);
li0.className = this.checkListItemCssClass;
ul.appendChild(li0);
divChk.appendChild(ul);
var s = flts_values[i].split(' '+this.orOperator+' ');
for(j=0; j<s.length; j++)
{
if(s[j]=='') continue;
var li = tf_CreateCheckItem(this.fltIds[i]+'_'+(j+1), s[j], s[j]);
li.className = this.checkListItemCssClass;
ul.appendChild(li);
li.check.checked = true;
this.__setCheckListValues(li.check);
this.hasStoredValues = true;
}
}
}//end for
if(!this.hasStoredValues && this.paging) this.SetPagingInfo();
}//end if
}

53
dist/TF_Modules/tf_extensions.js vendored Normal file
View file

@ -0,0 +1,53 @@
/*------------------------------------------------------------------------
- HTML Table Filter Generator
- Extensions loading feature v1.0
- By Max Guglielmi (tablefilter.free.fr)
- Licensed under the MIT License
-------------------------------------------------------------------------*/
TF.prototype.LoadExtensions = function()
{
if(!this.Ext){
/*** TF extensions ***/
var o = this;
this.Ext = {
list: {},
add: function(extName, extDesc, extPath, extCallBack)
{
var file = extPath.split('/')[extPath.split('/').length-1];
var re = new RegExp(file);
var path = extPath.replace(re,'');
o.Ext.list[extName] = {
name: extName,
description: extDesc,
file: file,
path: path,
callback: extCallBack
};
}
};
}
this.EvtManager(this.Evt.name.loadextensions);
}
TF.prototype._LoadExtensions = function()
/*====================================================
- loads TF extensions
=====================================================*/
{
if(!this.hasExtensions) return;
if(tf_IsArray(this.extensions.name) && tf_IsArray(this.extensions.src)){
var ext = this.extensions;
for(var e=0; e<ext.name.length; e++){
var extPath = ext.src[e];
var extName = ext.name[e];
var extInit = (ext.initialize && ext.initialize[e]) ? ext.initialize[e] : null;
var extDesc = (ext.description && ext.description[e] ) ? ext.description[e] : null;
//Registers extension
this.Ext.add(extName, extDesc, extPath, extInit);
if(tf_IsImported(extPath)) extInit.call(null,this);
else this.IncludeFile(extName, extPath, extInit);
}
}
}

253
dist/TF_Modules/tf_ezEditTable.js vendored Normal file
View file

@ -0,0 +1,253 @@
/*------------------------------------------------------------------------
- HTML Table Filter Generator
- ezEditTable Adapter v1.1
- By Max Guglielmi (tablefilter.free.fr)
- Licensed under the MIT License
-------------------------------------------------------------------------*/
TF.prototype.SetEditable = function()
/*====================================================
- Sets selection or edition features by loading
ezEditTable script by Max Guglielmi
=====================================================*/
{
if(!this.selectable && !this.editable){ return; }
var f = this.fObj;
this.ezEditTableConfig = f.ezEditTable_config!=undefined ? f.ezEditTable_config : {};
this.ezEditTableConfig.name = this.ezEditTableConfig['name']!=undefined ? f.ezEditTable_config.name : 'ezedittable';
this.ezEditTableConfig.src = this.ezEditTableConfig['src']!=undefined ? f.ezEditTable_config.src : this.basePath+'ezEditTable/ezEditTable.js';
//ezEditTable stylesheet not imported by default as filtergrid.css applies
this.ezEditTableConfig.loadStylesheet = this.ezEditTableConfig['loadStylesheet']!=undefined ? f.ezEditTable_config.loadStylesheet : false;
this.ezEditTableConfig.stylesheet = this.ezEditTableConfig['stylesheet']!=undefined ? f.ezEditTable_config.stylesheet : this.basePath+'ezEditTable/ezEditTable.css';
this.ezEditTableConfig.stylesheetName = this.ezEditTableConfig['stylesheetName']!=undefined ? f.ezEditTable_config.stylesheetName : 'ezEditTableCss';
this.ezEditTableConfig.err = 'Failed to instantiate EditTable object.\n"ezEditTable" module may not be available.';
if(tf_IsImported(this.ezEditTableConfig.src)){
this._EnableEditable();
} else {
this.IncludeFile(
this.ezEditTableConfig.name,
this.ezEditTableConfig.src,
this._EnableEditable
);
}
if(this.ezEditTableConfig.loadStylesheet && !tf_IsImported(this.ezEditTableConfig.stylesheet, 'link')){
this.IncludeFile(
this.ezEditTableConfig.stylesheetName,
this.ezEditTableConfig.stylesheet,
null, 'link'
);
}
}
TF.prototype.RemoveEditable = function()
/*====================================================
- Removes selection or edition features
=====================================================*/
{
if(this.ezEditTable){
if(this.selectable){
this.ezEditTable.Selection.ClearSelections();
this.ezEditTable.Selection.Remove();
}
if(this.editable) this.ezEditTable.Editable.Remove();
}
}
TF.prototype.ResetEditable = function()
/*====================================================
- Resets selection or edition features after
removal
=====================================================*/
{
if(this.ezEditTable){
if(this.selectable) this.ezEditTable.Selection.Set();
if(this.editable) this.ezEditTable.Editable.Set();
}
}
TF.prototype._EnableEditable = function(o)
{
if(!o) o = this;
//start row for EditTable constructor needs to be calculated
var startRow;
var thead = tf_Tag(o.tbl,'thead');
//if thead exists and startRow not specified, startRow is calculated automatically by EditTable
if(thead.length > 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); }
}

95
dist/TF_Modules/tf_fixedHeaders.js vendored Normal file
View file

@ -0,0 +1,95 @@
/*------------------------------------------------------------------------
- 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<theadTr.length; i++)
{//css below emulates fixed headers on IE<=6
theadTr[i].style.cssText += 'position:relative; ' +
'top:expression(offsetParent.scrollTop);';
theadH += parseInt(theadTr[i].clientHeight);
}
this.contDiv.style.height = (this.tBodyH+theadH)+'px';
var tfoot = tf_Tag(this.tbl,'tfoot');
if( tfoot.length==0 ) return;
var tfootTr = tf_Tag(tfoot[0],'tr');
for(var j=0; j<tfootTr.length; j++)//css below emulates fixed footer on IE<=6
tfootTr[j].style.cssText += 'position:relative; overflow-x: hidden; ' +
'top: expression(parentNode.parentNode.offsetHeight >= ' +
'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<theadTr.length; i++)
theadTr[i].style.cssText = '';
var tfoot = tf_Tag(this.tbl,'tfoot');
if( tfoot.length==0 ) return;
var tfootTr = tf_Tag(tfoot[0],'tr');
for(var j=0; j<tfootTr.length; j++)
{
tfootTr[j].style.position = 'relative';
tfootTr[j].style.top = '';
tfootTr[j].style.overeflowX = '';
}
} else {
var tbody = tf_Tag(this.tbl,'tbody');
if( tbody.length==0 ) return;
tbody[0].style.height = this.prevTBodyH+'px';
tbody[0].style.overflow = this.prevTBodyOverflow;
tbody[0].style.overflowX = this.prevTBodyOverflowX;
}
}

307
dist/TF_Modules/tf_gridLayout.js vendored Normal file
View file

@ -0,0 +1,307 @@
/*------------------------------------------------------------------------
- HTML Table Filter Generator
- Grid Layout feature v1.2
- By Max Guglielmi (tablefilter.free.fr)
- Licensed under the MIT License
-------------------------------------------------------------------------*/
TF.prototype.SetGridLayout = function()
/*====================================================
- generates a grid with fixed headers
=====================================================*/
{
if(!this.gridLayout) return;
var f = this.fObj;
this.gridWidth = f.grid_width!=undefined ? f.grid_width : null; //defines grid width
this.gridHeight = f.grid_height!=undefined ? f.grid_height : null; //defines grid height
this.gridMainContCssClass = f.grid_cont_css_class!=undefined //defines css class for main container
? f.grid_cont_css_class : 'grd_Cont';
this.gridContCssClass = f.grid_tbl_cont_css_class!=undefined //defines css class for div containing table
? f.grid_tbl_cont_css_class : 'grd_tblCont';
this.gridHeadContCssClass = f.grid_tblHead_cont_css_class!=undefined //defines css class for div containing headers' table
? f.grid_tblHead_cont_css_class : 'grd_headTblCont';
this.gridInfDivCssClass = f.grid_inf_grid_css_class!=undefined //defines css class for div containing rows counter, paging etc.
? f.grid_inf_grid_css_class : 'grd_inf';
this.gridHeadRowIndex = f.grid_headers_row_index!=undefined //defines which row contains column headers
? f.grid_headers_row_index : 0;
this.gridHeadRows = f.grid_headers_rows!=undefined //array of headers row indexes to be placed in header table
? f.grid_headers_rows : [0];
this.gridEnableFilters = f.grid_enable_default_filters!=undefined
? f.grid_enable_default_filters : true; //generate filters in table headers
this.gridDefaultColWidth = f.grid_default_col_width!=undefined
? f.grid_default_col_width : '100px'; //default col width
this.gridEnableColResizer = f.grid_enable_cols_resizer!=undefined
? f.grid_enable_cols_resizer : true; //enables/disables columns resizer
this.gridColResizerPath = f.grid_cont_col_resizer_path!=undefined //defines col resizer script path
? f.grid_cont_col_resizer_path : this.basePath+'TFExt_ColsResizer/TFExt_ColsResizer.js';
if(!this.hasColWidth){// in case column widths are not set default width 100px
this.colWidth = [];
for(var k=0; k<this.nbCells; k++){
var colW, cell = this.tbl.rows[this.gridHeadRowIndex].cells[k];
if(cell.width!='') colW = cell.width;
else if(cell.style.width!='') colW = parseInt(cell.style.width);
else colW = this.gridDefaultColWidth;
this.colWidth[k] = colW;
}
this.hasColWidth = true;
}
this.SetColWidths(this.gridHeadRowIndex);
var tblW;//initial table width
if(this.tbl.width!='') tblW = this.tbl.width;
else if(this.tbl.style.width!='') tblW = parseInt(this.tbl.style.width);
else tblW = this.tbl.clientWidth;
//Main container: it will contain all the elements
this.tblMainCont = tf_CreateElm('div',['id', this.prfxMainTblCont + this.id]);
this.tblMainCont.className = this.gridMainContCssClass;
if(this.gridWidth) this.tblMainCont.style.width = this.gridWidth;
this.tbl.parentNode.insertBefore(this.tblMainCont, this.tbl);
//Table container: div wrapping content table
this.tblCont = tf_CreateElm('div',['id', this.prfxTblCont + this.id]);
this.tblCont.className = this.gridContCssClass;
if(this.gridWidth) this.tblCont.style.width = this.gridWidth;
if(this.gridHeight) this.tblCont.style.height = this.gridHeight;
this.tbl.parentNode.insertBefore(this.tblCont, this.tbl);
var t = this.tbl.parentNode.removeChild(this.tbl);
this.tblCont.appendChild(t);
//In case table width is expressed in %
if(this.tbl.style.width == '')
this.tbl.style.width = (this.__containsStr('%',tblW)
? this.tbl.clientWidth : tblW) + 'px';
var d = this.tblCont.parentNode.removeChild(this.tblCont);
this.tblMainCont.appendChild(d);
//Headers table container: div wrapping headers table
this.headTblCont = tf_CreateElm('div',['id', this.prfxHeadTblCont + this.id]);
this.headTblCont.className = this.gridHeadContCssClass;
if(this.gridWidth) this.headTblCont.style.width = this.gridWidth;
//Headers table
this.headTbl = tf_CreateElm('table',['id', this.prfxHeadTbl + this.id]);
var tH = tf_CreateElm('tHead'); //IE<7 needs it
//1st row should be headers row, ids are added if not set
//Those ids are used by the sort feature
var hRow = this.tbl.rows[this.gridHeadRowIndex];
var sortTriggers = [];
for(var n=0; n<this.nbCells; n++){
var cell = hRow.cells[n];
var thId = cell.getAttribute('id');
if(!thId || thId==''){
thId = this.prfxGridTh+n+'_'+this.id
cell.setAttribute('id', thId);
}
sortTriggers.push(thId);
}
//Filters row is created
var filtersRow = tf_CreateElm('tr');
if(this.gridEnableFilters && this.fltGrid){
this.externalFltTgtIds = [];
for(var j=0; j<this.nbCells; j++)
{
var fltTdId = this.prfxFlt+j+ this.prfxGridFltTd +this.id;
var c = tf_CreateElm(this.fltCellTag, ['id', fltTdId]);
filtersRow.appendChild(c);
this.externalFltTgtIds[j] = fltTdId;
}
}
//Headers row are moved from content table to headers table
for(var i=0; i<this.gridHeadRows.length; i++)
{
var headRow = this.tbl.rows[this.gridHeadRows[0]];
tH.appendChild(headRow);
}
this.headTbl.appendChild(tH);
if(this.filtersRowIndex == 0) tH.insertBefore(filtersRow,hRow);
else tH.appendChild(filtersRow);
this.headTblCont.appendChild(this.headTbl);
this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);
//THead needs to be removed in content table for sort feature
var thead = tf_Tag(this.tbl,'thead');
if( thead.length>0 ) 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; i<o.nbCells; i++){
cols[i].setAttribute('id', o.id+'_col_'+i);
cols[i].style.width = o.colWidth[i];
o.gridColElms.push(cols[i]);
}
}
}
//IE <= 7 needs an additional row for widths as col element width is not enough...
if(tf_isIE || tf_isIE7){
var tbody = tf_Tag(o.tbl,'tbody'), r;
if( tbody.length>0 ) r = tbody[0].insertRow(0);
else r = o.tbl.insertRow(0);
r.style.height = '0px';
for(var i=0; i<o.nbCells; i++){
var col = tf_CreateElm('td', ['id', o.id+'_col_'+i]);
col.style.width = o.colWidth[i];
o.tbl.rows[1].cells[i].style.width = '';
r.appendChild(col);
o.gridColElms.push(col);
}
this.hasGridWidthsRow = true;
//Data table row with widths expressed
o.leadColWidthsRow = o.tbl.rows[0];
o.leadColWidthsRow.setAttribute('validRow','false');
var beforeSortFn = tf_IsFn(f.on_before_sort) ? f.on_before_sort : null;
f.on_before_sort = function(o,colIndex){
o.leadColWidthsRow.setAttribute('validRow','false');
if(beforeSortFn!=null) beforeSortFn.call(null,o,colIndex);
}
var afterSortFn = tf_IsFn(f.on_after_sort) ? f.on_after_sort : null;
f.on_after_sort = function(o,colIndex){
if(o.leadColWidthsRow.rowIndex != 0){
var r = o.leadColWidthsRow;
if( tbody.length>0 )
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
}

97
dist/TF_Modules/tf_highlightKeywords.js vendored Normal file
View file

@ -0,0 +1,97 @@
/*------------------------------------------------------------------------
- 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<this.searchArgs.length; y++){
tf_UnhighlightWord(this, this.searchArgs[y], this.highlightCssClass);
}
this.highlightedNodes = [];
}
}
function tf_HighlightWord( node,word,cssClass,o )
/*====================================================
- highlights keyword found in passed node
- accepts the following params:
- node
- word to search
- css class name for highlighting
=====================================================*/
{
// Iterate into this nodes childNodes
if(node.hasChildNodes)
for( var i=0; i<node.childNodes.length; i++ )
tf_HighlightWord(node.childNodes[i],word,cssClass,o);
// And do this node itself
if(node.nodeType == 3)
{ // text node
var tempNodeVal = node.nodeValue.tf_LCase();
var tempWordVal = word.tf_LCase();
if(tempNodeVal.indexOf(tempWordVal) != -1)
{
var pn = node.parentNode;
if(pn && pn.className != cssClass)
{
// word has not already been highlighted!
var nv = node.nodeValue;
var ni = tempNodeVal.indexOf(tempWordVal);
// Create a load of replacement nodes
var before = tf_CreateText(nv.substr(0,ni));
var docWordVal = nv.substr(ni,word.length);
var after = tf_CreateText(nv.substr(ni+word.length));
var hiwordtext = tf_CreateText(docWordVal);
var hiword = tf_CreateElm('span');
hiword.className = cssClass;
hiword.appendChild(hiwordtext);
pn.insertBefore(before,node);
pn.insertBefore(hiword,node);
pn.insertBefore(after,node);
pn.removeChild(node);
o.highlightedNodes.push(hiword.firstChild);
}
}
}// if node.nodeType == 3
}
function tf_UnhighlightWord( o,word,cssClass )
/*====================================================
- removes highlights found in passed node
- accepts the following params:
- node
- word to search
- css class name for highlighting
=====================================================*/
{
var arrRemove = [];
for(var i=0; i<o.highlightedNodes.length; i++){
var n = o.highlightedNodes[i];
if(!n){ continue; }
var tempNodeVal = n.nodeValue.tf_LCase();
var tempWordVal = word.tf_LCase();
if(tempNodeVal.indexOf(tempWordVal) != -1){
var pn = n.parentNode;
if(pn && pn.className == cssClass){
var prevSib = pn.previousSibling;
var nextSib = pn.nextSibling;
if(!prevSib || !nextSib){ continue; }
nextSib.nodeValue = prevSib.nodeValue + n.nodeValue + nextSib.nodeValue;
prevSib.nodeValue = '';
n.nodeValue = '';
arrRemove.push(i);
}
}
}
for(var k=0; k<arrRemove.length; k++){
o.highlightedNodes.splice(arrRemove[k], 1);
}
}

72
dist/TF_Modules/tf_loader.js vendored Normal file
View file

@ -0,0 +1,72 @@
/*------------------------------------------------------------------------
- HTML Table Filter Generator
- Loader feature v1.1
- By Max Guglielmi (tablefilter.free.fr)
- Licensed under the MIT License
-------------------------------------------------------------------------*/
TF.prototype.SetLoader = function()
/*====================================================
- generates loader div
=====================================================*/
{
if( this.loaderDiv!=null ) return;
var f = this.fObj;
this.loaderTgtId = f.loader_target_id!=undefined //id of container element
? f.loader_target_id : null;
this.loaderDiv = null; //div containing loader
this.loaderText = f.loader_text!=undefined ? f.loader_text : 'Loading...'; //defines loader text
this.loaderHtml = f.loader_html!=undefined ? f.loader_html : null; //defines loader innerHtml
this.loaderCssClass = f.loader_css_class!=undefined //defines css class for loader div
? f.loader_css_class : 'loader';
this.loaderCloseDelay = 200; //delay for hiding loader
this.onShowLoader = tf_IsFn(f.on_show_loader) //calls function before loader is displayed
? f.on_show_loader : null;
this.onHideLoader = tf_IsFn(f.on_hide_loader) //calls function after loader is closed
? f.on_hide_loader : null;
var containerDiv = tf_CreateElm( 'div',['id',this.prfxLoader+this.id] );
containerDiv.className = this.loaderCssClass;// for ie<=6
//containerDiv.style.display = 'none';
var targetEl = (this.loaderTgtId==null)
? (this.gridLayout ? this.tblCont : this.tbl.parentNode) : tf_Id( this.loaderTgtId );
if(this.loaderTgtId==null) targetEl.insertBefore(containerDiv, this.tbl);
else targetEl.appendChild( containerDiv );
this.loaderDiv = tf_Id(this.prfxLoader+this.id);
if(this.loaderHtml==null)
this.loaderDiv.appendChild( tf_CreateText(this.loaderText) );
else this.loaderDiv.innerHTML = this.loaderHtml;
}
TF.prototype.RemoveLoader = function()
/*====================================================
- removes loader div
=====================================================*/
{
if( this.loaderDiv==null ) return;
var targetEl = (this.loaderTgtId==null)
? (this.gridLayout ? this.tblCont : this.tbl.parentNode) : tf_Id( this.loaderTgtId );
targetEl.removeChild(this.loaderDiv);
this.loaderDiv = null;
}
TF.prototype.ShowLoader = function(p)
/*====================================================
- displays/hides loader div
=====================================================*/
{
if(!this.loader || !this.loaderDiv) return;
if(this.loaderDiv.style.display==p) return;
var o = this;
function displayLoader(){
if(!o.loaderDiv) return;
if(o.onShowLoader && p!='none')
o.onShowLoader.call(null,o);
o.loaderDiv.style.display = p;
if(o.onHideLoader && p=='none')
o.onHideLoader.call(null,o);
}
var t = (p=='none') ? this.loaderCloseDelay : 1;
window.setTimeout(displayLoader,t);
}

2
dist/filtergrid.css vendored
View file

@ -1,6 +1,6 @@
/*------------------------------------------------------------------------
- TableFilter stylesheet by Max Guglielmi
- (build date: Sun Nov 16 2014 01:27:22)
- (build date: Sun Nov 16 2014 10:15:56)
- Edit below for your projects' needs
------------------------------------------------------------------------*/

10
dist/tablefilter.js vendored

File diff suppressed because one or more lines are too long

View file

@ -84,6 +84,7 @@
col_0: 'select',
col_3: 'checklist',
base_path: '../dist/',
rows_counter: true,
enable_default_theme: true,
paging: false,
alternate_rows: true,

28
src-es6/array.js Normal file
View file

@ -0,0 +1,28 @@
/**
* Array utilities
*/
import {Str} from 'string';
var Arr = {
has: function(arr, val, caseSensitive){
var sCase = caseSensitive===undefined ? false : caseSensitive;
for (var i=0; i<arr.length; i++){
if(Str.matchCase(arr[i].toString(), sCase) == val){
return true;
}
}
return false;
},
indexByValue: function(arr, val, caseSensitive){
var sCase = caseSensitive===undefined ? false : caseSensitive;
for (var i=0; i<arr.length; i++){
if(Str.matchCase(arr[i].toString(), sCase) == val){
return i;
}
}
return -1;
}
};
exports.Arr = Arr;

58
src-es6/cookie.js Normal file
View file

@ -0,0 +1,58 @@
/**
* Cookie utilities
*/
var Cookie = {};
Cookie.write = function(name, value, hours){
var expire = '';
if(hours){
expire = new Date((new Date()).getTime() + hours * 3600000);
expire = '; expires=' + expire.toGMTString();
}
document.cookie = name + '=' + escape(value) + expire;
};
Cookie.read = function(name){
var cookieValue = '',
search = name + '=';
if(document.cookie.length > 0){
var cookie = document.cookie,
offset = cookie.indexOf(search);
if(offset !== -1){
offset += search.length;
var end = cookie.indexOf(';', offset);
if(end === -1){
end = cookie.length;
}
cookieValue = unescape(cookie.substring(offset, end));
}
}
return cookieValue;
};
Cookie.remove = function(name){
this.write(name,'',-1);
};
Cookie.valueToArray = function(name, separator){
if(!separator){
separator = ',';
}
//reads the cookie
var val = this.read(name);
//creates an array with filters' values
var arr = val.split(separator);
return arr;
};
Cookie.getValueByIndex = function(name, index, separator){
if(!separator){
separator = ',';
}
//reads the cookie
var val = this.valueToArray(name, separator);
return val[index];
};
exports.Cookie = Cookie;

165
src-es6/date.js Normal file
View file

@ -0,0 +1,165 @@
/**
* Date utilities
*/
var DateHelper = {
isValid: function(dateStr, format){
if(!format) {
format = 'DMY';
}
format = format.toUpperCase();
if(format.length != 3) {
if(format==='DDMMMYYYY'){
var d = this.format(dateStr, format);
dateStr = d.getDate() +'/'+ (d.getMonth()+1) +'/'+
d.getFullYear();
format = 'DMY';
}
}
if((format.indexOf('M') === -1) || (format.indexOf('D') === -1) ||
(format.indexOf('Y') === -1)){
format = 'DMY';
}
var reg1, reg2;
// If the year is first
if(format.substring(0, 1) == 'Y') {
reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
} else if(format.substring(1, 2) == 'Y') { // If the year is second
reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/;
reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/;
} else { // The year must be third
reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/;
reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
}
// If it doesn't conform to the right format (with either a 2 digit year or
// 4 digit year), fail
if(reg1.test(dateStr) === false && reg2.test(dateStr) === false) {
return false;
}
// Split into 3 parts based on what the divider was
var parts = dateStr.split(RegExp.$1);
var mm, dd, yy;
// Check to see if the 3 parts end up making a valid date
if(format.substring(0, 1) === 'M'){
mm = parts[0];
} else if(format.substring(1, 2) === 'M'){
mm = parts[1];
} else {
mm = parts[2];
}
if(format.substring(0, 1) === 'D'){
dd = parts[0];
} else if(format.substring(1, 2) === 'D'){
dd = parts[1];
} else {
dd = parts[2];
}
if(format.substring(0, 1) === 'Y'){
yy = parts[0];
} else if(format.substring(1, 2) === 'Y'){
yy = parts[1];
} else {
yy = parts[2];
}
if(parseInt(yy, 10) <= 50){
yy = (parseInt(yy, 10) + 2000).toString();
}
if(parseInt(yy, 10) <= 99){
yy = (parseInt(yy, 10) + 1900).toString();
}
var dt = new Date(
parseInt(yy, 10), parseInt(mm, 10)-1, parseInt(dd, 10),
0, 0, 0, 0);
if(parseInt(dd, 10) != dt.getDate()){
return false;
}
if(parseInt(mm, 10)-1 != dt.getMonth()){
return false;
}
return true;
},
format: function(dateStr, format){
if(!format){
format = 'DMY';
}
if(!dateStr || dateStr === ''){
return new Date(1001, 0, 1);
}
var oDate, parts;
function y2kDate(yr){
if(yr === undefined){
return 0;
}
if(yr.length>2){
return yr;
}
var y;
//>50 belong to 1900
if(yr <= 99 && yr>50){
y = '19' + yr;
}
//<50 belong to 2000
if(yr<50 || yr === '00'){
y = '20' + yr;
}
return y;
}
function mmm2mm(mmm){
if(mmm === undefined){
return 0;
}
var mondigit;
var MONTH_NAMES = [
'january','february','march','april','may','june','july',
'august','september','october','november','december',
'jan','feb','mar','apr','may','jun','jul','aug','sep','oct',
'nov','dec'
];
for(var m_i=0; m_i < MONTH_NAMES.length; m_i++){
var month_name = MONTH_NAMES[m_i];
if (mmm.toLowerCase() === month_name){
mondigit = m_i+1;
break;
}
}
if(mondigit > 11 || mondigit < 23){
mondigit = mondigit - 12;
}
if(mondigit < 1 || mondigit > 12){
return 0;
}
return mondigit;
}
switch(format.toUpperCase()){
case 'DDMMMYYYY':
parts = dateStr.replace(/[- \/.]/g,' ').split(' ');
oDate = new Date(y2kDate(parts[2]),mmm2mm(parts[1])-1,parts[0]);
break;
case 'DMY':
parts = dateStr.replace(
/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
oDate = new Date(y2kDate(parts[2]),parts[1]-1,parts[0]);
break;
case 'MDY':
parts = dateStr.replace(
/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
oDate = new Date(y2kDate(parts[2]),parts[0]-1,parts[1]);
break;
case 'YMD':
parts = dateStr.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,'$1 $4 $6').split(' ');
oDate = new Date(y2kDate(parts[0]),parts[1]-1,parts[2]);
break;
default: //in case format is not correct
parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
oDate = new Date(y2kDate(parts[2]),parts[1]-1,parts[0]);
break;
}
return oDate;
}
};
exports.DateHelper = DateHelper;

159
src-es6/dom.js Normal file
View file

@ -0,0 +1,159 @@
/**
* DOM utilities
*/
var Dom = {};
/**
* Returns text + text of children of given node
* @param {NodeElement} node
* @return {String}
*/
Dom.getText = function(node){
var s = node.textContent || node.innerText ||
node.innerHTML.replace(/<[^<>]+>/g, '');
s = s.replace(/^\s+/, '').replace(/\s+$/, '');
return s;
};
/**
* Creates an html element with given collection of attributes
* @param {String} tag a string of the html tag to create
* @param {Array} an undetermined number of arrays containing the with 2
* items, the attribute name and its value ['id','myId']
* @return {Object} created element
*/
Dom.create = function(tag){
if(!tag || tag===''){
return;
}
var el = document.createElement(tag),
args = arguments;
if(args.length > 1){
for(var i=0; i<args.length; i++){
var argtype = typeof args[i];
if(argtype.toLowerCase() === 'object' && args[i].length === 2){
el.setAttribute(args[i][0], args[i][1]);
}
}
}
return el;
};
/**
* Returns a text node with given text
* @param {String} text
* @return {Object}
*/
Dom.text = function(text){
return document.createTextNode(text);
};
/**
* Returns offset position of passed element
* @param {object} obj [description]
* @return {object} literal object with left and top values
*/
Dom.position = function(obj){
var l = 0, t = 0;
if (obj && obj.offsetParent){
do {
l += obj.offsetLeft;
t += obj.offsetTop;
} while (obj == obj.offsetParent);
}
return { 'left': l, 'top': t };
};
Dom.hasClass = function (ele, cls){
if(!ele){ return false; }
if(supportsClassList()){
return ele.classList.contains(cls);
}
return ele.className.match(new RegExp('(\\s|^)'+ cls +'(\\s|$)'));
};
Dom.addClass = function (ele, cls){
if(!ele){ return; }
if(supportsClassList()){
ele.classList.add(cls);
return;
}
if(ele.className === ''){
ele.className = cls;
}
else if(!this.hasClass(ele, cls)){
ele.className += " " + cls;
}
};
Dom.removeClass = function (ele, cls){
if(!ele){ return; }
if(supportsClassList()){
ele.classList.remove(cls);
return;
}
var reg = new RegExp('(\\s|^)'+ cls +'(\\s|$)', 'g');
ele.className = ele.className.replace(reg, '');
};
/**
* Creates and returns an option element
* @param {String} text option text
* @param {String} value option value
* @param {Boolean} isSel whether option is selected
* @return {Object} option element
*/
Dom.createOpt = function(text, value, isSel){
var isSelected = isSel ? true : false,
opt = isSelected ?
this.create('option', ['value',value], ['selected','true']) :
this.create('option', ['value',value]);
opt.appendChild(this.text(text));
return opt;
};
/**
* Creates and returns a checklist item
* @param {Number} chkIndex index of check item
* @param {String} chkValue check item value
* @param {String} labelText check item label text
* @return {Object} li DOM element
*/
Dom.createCheckItem = function(chkIndex, chkValue, labelText){
var li = this.create('li'),
label = this.create('label', ['for', chkIndex]),
check = this.create('input',
['id', chkIndex],
['name', chkIndex],
['type', 'checkbox'],
['value', chkValue]
);
label.appendChild(check);
label.appendChild(this.text(labelText));
li.appendChild(label);
li.label = label;
li.check = check;
return li;
};
Dom.id = function(id){
return document.getElementById(id);
};
Dom.tag = function(o, tagname){
return o.getElementsByTagName(tagname);
};
// HTML5 classList API
function supportsClassList(){
return document.documentElement.classList;
}
exports.Dom = Dom;

11
src-es6/helpers.js Normal file
View file

@ -0,0 +1,11 @@
/**
* Misc helpers
*/
var Helpers = {
isIE: function(){
return (/msie|MSIE/).test(navigator.userAgent);
}
};
exports.Helpers = Helpers;

View file

@ -1,4 +1,4 @@
import * as dom from '../dom';
import {Dom} from '../dom';
export class AlternateRows{
@ -19,7 +19,7 @@ export class AlternateRows{
/**
* Sets alternating rows color
*/
set() {
init() {
if(!this.tf.hasGrid && !this.tf.isFirstLoad){
return;
}
@ -54,7 +54,7 @@ export class AlternateRows{
var rows = this.tf.tbl.rows;
var i = !idx ? rowIdx : idx;
this.removeRowBg(rowIdx);
dom.addClass(
Dom.addClass(
rows[rowIdx],
(i%2) ? this.evenCss : this.oddCss
);
@ -69,8 +69,8 @@ export class AlternateRows{
return;
}
var rows = this.tf.tbl.rows;
dom.removeClass(rows[idx], this.oddCss);
dom.removeClass(rows[idx], this.evenCss);
Dom.removeClass(rows[idx], this.oddCss);
Dom.removeClass(rows[idx], this.evenCss);
}
/**

View file

@ -1,5 +1,5 @@
import * as dom from '../dom';
import * as str from '../string';
import {Dom} from '../dom';
import {Str} from '../string';
export class ColOps{
@ -30,7 +30,7 @@ export class ColOps{
* (1) optimized the routine (now it will only process each column once),
* (2) added calculations for the median, lower and upper quartile.
*/
set() {
calc() {
if(!this.tf.isFirstLoad && !this.tf.hasGrid){
return;
}
@ -69,9 +69,9 @@ export class ColOps{
}
}
if(str.lower(typeof labelId)=='object' &&
str.lower(typeof colIndex)=='object' &&
str.lower(typeof operation)=='object'){
if(Str.lower(typeof labelId)=='object' &&
Str.lower(typeof colIndex)=='object' &&
Str.lower(typeof operation)=='object'){
var row = this.tf.tbl.rows,
colvalues = [];
@ -110,11 +110,11 @@ export class ColOps{
for(var k=0; k<colIndex.length; k++){
if(colIndex[k] === ucolIndex[ucol]){
mThisCol++;
opsThisCol[mThisCol]=str.lower(operation[k]);
opsThisCol[mThisCol]=Str.lower(operation[k]);
decThisCol[mThisCol]=decimalPrecision[k];
labThisCol[mThisCol]=labelId[k];
oTypeThisCol = outputType !== undefined &&
str.lower(typeof outputType)==='object' ?
Str.lower(typeof outputType)==='object' ?
outputType[k] : null;
switch(opsThisCol[mThisCol]){
@ -249,24 +249,24 @@ export class ColOps{
if(oTypeThisCol && result){
result = result.toFixed( precision );
if(dom.id(labThisCol[i])){
switch( str.lower(oTypeThisCol) ){
if(Dom.id(labThisCol[i])){
switch( Str.lower(oTypeThisCol) ){
case 'innerhtml':
if (isNaN(result) || !isFinite(result) ||
nbvalues===0){
dom.id(labThisCol[i]).innerHTML = '.';
Dom.id(labThisCol[i]).innerHTML = '.';
} else{
dom.id(labThisCol[i]).innerHTML = result;
Dom.id(labThisCol[i]).innerHTML = result;
}
break;
case 'setvalue':
dom.id( labThisCol[i] ).value = result;
Dom.id( labThisCol[i] ).value = result;
break;
case 'createtextnode':
var oldnode = dom.id(labThisCol[i])
var oldnode = Dom.id(labThisCol[i])
.firstChild;
var txtnode = dom.text(result);
dom.id(labThisCol[i])
var txtnode = Dom.text(result);
Dom.id(labThisCol[i])
.replaceChild(txtnode, oldnode);
break;
}//switch
@ -275,9 +275,9 @@ export class ColOps{
try{
if(isNaN(result) || !isFinite(result) ||
nbvalues===0){
dom.id(labThisCol[i]).innerHTML = '.';
Dom.id(labThisCol[i]).innerHTML = '.';
} else {
dom.id(labThisCol[i]).innerHTML =
Dom.id(labThisCol[i]).innerHTML =
result.toFixed(precision);
}
} catch(e) {}//catch

View file

@ -1,6 +1,6 @@
import * as dom from '../dom';
import * as types from '../types';
import {Dom} from '../dom';
import {Types} from '../types';
var global = window;
@ -27,28 +27,28 @@ export class Loader{
//delay for hiding loader
tf.loaderCloseDelay = 200;
//callback function before loader is displayed
tf.onShowLoader = types.isFn(f.on_show_loader) ?
tf.onShowLoader = Types.isFn(f.on_show_loader) ?
f.on_show_loader : null;
//callback function after loader is closed
tf.onHideLoader = types.isFn(f.on_hide_loader) ?
tf.onHideLoader = Types.isFn(f.on_hide_loader) ?
f.on_hide_loader : null;
this.tf = tf;
var containerDiv = dom.create('div', ['id', tf.prfxLoader+tf.id]);
var containerDiv = Dom.create('div', ['id', tf.prfxLoader+tf.id]);
containerDiv.className = tf.loaderCssClass;
var targetEl = !tf.loaderTgtId ?
(tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) :
dom.id(tf.loaderTgtId);
Dom.id(tf.loaderTgtId);
if(!tf.loaderTgtId){
targetEl.insertBefore(containerDiv, tf.tbl);
} else {
targetEl.appendChild(containerDiv);
}
tf.loaderDiv = dom.id(tf.prfxLoader+tf.id);
tf.loaderDiv = Dom.id(tf.prfxLoader+tf.id);
if(!tf.loaderHtml){
tf.loaderDiv.appendChild(dom.text(tf.loaderText));
tf.loaderDiv.appendChild(Dom.text(tf.loaderText));
} else {
tf.loaderDiv.innerHTML = tf.loaderHtml;
}
@ -84,7 +84,7 @@ export class Loader{
}
var targetEl = !this.tf.loaderTgtId ?
(this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode):
dom.id(this.tf.loaderTgtId);
Dom.id(this.tf.loaderTgtId);
targetEl.removeChild(this.tf.loaderDiv);
this.tf.loaderDiv = null;
}

View file

@ -0,0 +1,138 @@
import {Dom} from '../dom';
import {Types} from '../types';
import {Helpers} from '../helpers';
export class RowsCounter{
/**
* Rows counter
* @param {Object} tf TableFilter instance
*/
constructor(tf){
// TableFilter configuration
var f = tf.fObj;
//id of custom container element
this.rowsCounterTgtId = f.rows_counter_target_id || null;
//element containing tot nb rows
this.rowsCounterDiv = null;
//element containing tot nb rows label
this.rowsCounterSpan = null;
//defines rows counter text
this.rowsCounterText = f.rows_counter_text || 'Rows: ';
this.fromToTextSeparator = f.from_to_text_separator || '-';
this.overText = f.over_text || ' / ';
//defines css class rows counter
this.totRowsCssClass = f.tot_rows_css_class || 'tot';
//callback raised before counter is refreshed
this.onBeforeRefreshCounter =
Types.isFn(f.on_before_refresh_counter) ?
f.on_before_refresh_counter : null;
//callback raised after counter is refreshed
this.onAfterRefreshCounter = Types.isFn(f.on_after_refresh_counter) ?
f.on_after_refresh_counter : null;
this.tf = tf;
}
init(){
var tf = this.tf;
if((!tf.hasGrid && !tf.isFirstLoad) || this.rowsCounterSpan){
return;
}
//rows counter container
var countDiv = Dom.create('div', ['id', tf.prfxCounter+tf.id]);
countDiv.className = this.totRowsCssClass;
//rows counter label
var countSpan = Dom.create('span', ['id', tf.prfxTotRows+tf.id]);
var countText = Dom.create('span', ['id', tf.prfxTotRowsTxt+tf.id]);
countText.appendChild(Dom.text(this.rowsCounterText));
// counter is added to defined element
if(!this.rowsCounterTgtId){
tf.SetTopDiv();
}
var targetEl = !this.rowsCounterTgtId ?
tf.lDiv : Dom.id( this.rowsCounterTgtId );
//IE only: clears all for sure
if(this.rowsCounterDiv && Helpers.isIE()){
this.rowsCounterDiv.outerHTML = '';
}
//default container: 'lDiv'
if(!this.rowsCounterTgtId){
countDiv.appendChild(countText);
countDiv.appendChild(countSpan);
targetEl.appendChild(countDiv);
}
else{
//custom container, no need to append statusDiv
targetEl.appendChild(countText);
targetEl.appendChild(countSpan);
}
this.rowsCounterDiv = countDiv;
this.rowsCounterSpan = countSpan;
this.refresh();
}
refresh(p){
if(!this.rowsCounterSpan){
return;
}
var tf = this.tf;
if(this.onBeforeRefreshCounter){
this.onBeforeRefreshCounter.call(null, tf, this.rowsCounterSpan);
}
var totTxt;
if(!tf.paging){
if(p && p !== ''){
totTxt = p;
} else{
totTxt = tf.nbFilterableRows - tf.nbHiddenRows -
(tf.hasVisibleRows ? tf.visibleRows.length : 0);
}
} else {
//paging start row
var paging_start_row = parseInt(tf.startPagingRow, 10) +
((tf.nbVisibleRows>0) ? 1 : 0);
var paging_end_row = (paging_start_row+tf.pagingLength)-1 <=
tf.nbVisibleRows ? paging_start_row+tf.pagingLength-1 :
tf.nbVisibleRows;
totTxt = paging_start_row + this.fromToTextSeparator +
paging_end_row + this.overText + tf.nbVisibleRows;
}
this.rowsCounterSpan.innerHTML = totTxt;
if(this.onAfterRefreshCounter){
this.onAfterRefreshCounter.call(
null, tf, this.rowsCounterSpan, totTxt);
}
}
destroy(){
var tf = this.tf;
if(!tf.hasGrid){
return;
}
if(!this.rowsCounterSpan){
return;
}
if(!this.rowsCounterTgtId && this.rowsCounterDiv){
//IE only: clears all for sure
if(Helpers.isIE()){
this.rowsCounterDiv.outerHTML = '';
} else {
this.rowsCounterDiv.parentNode.removeChild(this.rowsCounterDiv);
}
} else {
Dom.id( this.rowsCounterTgtId ).innerHTML = '';
}
this.rowsCounterSpan = null;
this.rowsCounterDiv = null;
}
}

46
src-es6/string.js Normal file
View file

@ -0,0 +1,46 @@
/**
* String utilities
*/
var Str = {};
Str.lower = function(text){
return text.toLowerCase();
};
Str.upper = function(text){
return text.toUpperCase();
};
Str.trim = function(text){
if (text.trim){
return text.trim();
}
return text.replace(/^\s*|\s*$/g, '');
};
Str.isEmpty = function(text){
return this.trim(text) === '';
};
Str.rgxEsc = function(text){
function escape(e){
var a = new RegExp('\\'+e,'g');
text = text.replace(a,'\\'+e);
}
var chars = ['\\','[','^','$','.','|','?','*','+','(',')'];
for(var e=0; e<chars.length; e++){
escape(chars[e]);
}
return text;
};
Str.matchCase = function(text, mc){
if(!mc){
return this.lower(text);
}
return text;
};
exports.Str = Str;

55
src-es6/types.js Normal file
View file

@ -0,0 +1,55 @@
/**
* Types utilities
*/
var Types = {};
var UNDEFINED = void 0;
/**
* Checks if var exists and is an object
* @param {String or Object} v
* @return {Boolean}
*/
Types.isObj = function(v){
var isO = false;
if(typeof v === 'string'){
if(window[v] && typeof window[v] === 'object'){
isO = true;
}
} else {
if(v && typeof v === 'object'){
isO = true;
}
}
return isO;
};
/**
* Checks if passed parameter is a function
* @param {Function} fn
* @return {Boolean}
*/
Types.isFn = function(fn){
return (fn && fn.constructor == Function);
};
/**
* Checks if passed param is an array
* @param {Array} obj
* @return {Boolean}
*/
Types.isArray = function(obj){
return (obj && obj.constructor == Array);
};
/**
* Determines if passed param is undefined
* @param {Any} o
* @return {Boolean}
*/
Types.isUndef = function(o){
return o === UNDEFINED;
};
exports.Types = Types;

View file

@ -1,32 +1,29 @@
/**
* Array utilities
*/
define(["exports", "string"], function (exports, _string) {
"use strict";
define(function (require) {
'use strict';
var Str = _string.Str;
var str = require('./string');
var Arr = {
has: function(arr, val, caseSensitive){
var sCase = caseSensitive===undefined ? false : caseSensitive;
for (var i=0; i<arr.length; i++){
if(str.matchCase(arr[i].toString(), sCase) == val){
return true;
}
}
return false;
},
indexByValue: function(arr, val, caseSensitive){
var sCase = caseSensitive===undefined ? false : caseSensitive;
for (var i=0; i<arr.length; i++){
if(str.matchCase(arr[i].toString(), sCase) == val){
return i;
}
}
return -1;
var Arr = {
has: function (arr, val, caseSensitive) {
var sCase = caseSensitive === undefined ? false : caseSensitive;
for (var i = 0; i < arr.length; i++) {
if (Str.matchCase(arr[i].toString(), sCase) == val) {
return true;
}
};
}
return false;
},
indexByValue: function (arr, val, caseSensitive) {
var sCase = caseSensitive === undefined ? false : caseSensitive;
for (var i = 0; i < arr.length; i++) {
if (Str.matchCase(arr[i].toString(), sCase) == val) {
return i;
}
}
return -1;
}
};
return Arr;
});
exports.Arr = Arr;
});

1
src/array.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"sources":["src-es6/array.js"],"names":[],"mappings":";;;MAIQ,GAAG,WAAH,GAAG;;;MAEP,GAAG,GAAG;AACN,mBAAc,GAAG,EAAE,GAAG,EAAE,aAAa,EAAC;AAClC,UAAI,KAAK,GAAG,aAAa;AACzB,WAAK,IAAI,CAAC,UAAM,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AAC5B,YAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,EAAC;AAC9C,iBAAO,IAAI,CAAC;SACf;OACJ;AACD,aAAO,KAAK,CAAC;;AAEjB,4BAAuB,GAAG,EAAE,GAAG,EAAE,aAAa,EAAC;AAC3C,UAAI,KAAK,GAAG,aAAa;AACzB,WAAK,IAAI,CAAC,UAAM,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AAC5B,YAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,EAAC;AAC9C,iBAAO,CAAC,CAAC;SACZ;OACJ;AACD,aAAO,CAAC,CAAC,CAAC;;GAEjB,CAAC;;SAEK,CAAC,GAAG,GAAG,GAAG,CAAC","file":"src-es6/array.js","sourcesContent":["/**\r\n * Array utilities\r\n */\r\n\r\nimport {Str} from 'string';\r\n\r\nvar Arr = {\r\n has: function(arr, val, caseSensitive){\r\n var sCase = caseSensitive===undefined ? false : caseSensitive;\r\n for (var i=0; i<arr.length; i++){\r\n if(Str.matchCase(arr[i].toString(), sCase) == val){\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n indexByValue: function(arr, val, caseSensitive){\r\n var sCase = caseSensitive===undefined ? false : caseSensitive;\r\n for (var i=0; i<arr.length; i++){\r\n if(Str.matchCase(arr[i].toString(), sCase) == val){\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n};\r\n\r\nexports.Arr = Arr;\r\n"]}

View file

@ -1,62 +1,60 @@
/**
* Cookie utilities
*/
define(["exports"], function (exports) {
"use strict";
define(function () {
'use strict';
/**
* Cookie utilities
*/
var Cookie = {};
var Cookie = {};
Cookie.write = function(name, value, hours){
var expire = '';
if(hours){
expire = new Date((new Date()).getTime() + hours * 3600000);
expire = '; expires=' + expire.toGMTString();
Cookie.write = function (name, value, hours) {
var expire = "";
if (hours) {
expire = new Date((new Date()).getTime() + hours * 3600000);
expire = "; expires=" + expire.toGMTString();
}
document.cookie = name + "=" + escape(value) + expire;
};
Cookie.read = function (name) {
var cookieValue = "", search = name + "=";
if (document.cookie.length > 0) {
var cookie = document.cookie, offset = cookie.indexOf(search);
if (offset !== -1) {
offset += search.length;
var end = cookie.indexOf(";", offset);
if (end === -1) {
end = cookie.length;
}
document.cookie = name + '=' + escape(value) + expire;
};
cookieValue = unescape(cookie.substring(offset, end));
}
}
return cookieValue;
};
Cookie.read = function(name){
var cookieValue = '',
search = name + '=';
if(document.cookie.length > 0){
var cookie = document.cookie,
offset = cookie.indexOf(search);
if(offset !== -1){
offset += search.length;
var end = cookie.indexOf(';', offset);
if(end === -1){
end = cookie.length;
}
cookieValue = unescape(cookie.substring(offset, end));
}
}
return cookieValue;
};
Cookie.remove = function (name) {
this.write(name, "", -1);
};
Cookie.remove = function(name){
this.write(name,'',-1);
};
Cookie.valueToArray = function (name, separator) {
if (!separator) {
separator = ",";
}
//reads the cookie
var val = this.read(name);
//creates an array with filters' values
var arr = val.split(separator);
return arr;
};
Cookie.valueToArray = function(name, separator){
if(!separator){
separator = ',';
}
//reads the cookie
var val = this.read(name);
//creates an array with filters' values
var arr = val.split(separator);
return arr;
};
Cookie.getValueByIndex = function (name, index, separator) {
if (!separator) {
separator = ",";
}
//reads the cookie
var val = this.valueToArray(name, separator);
return val[index];
};
Cookie.getValueByIndex = function(name, index, separator){
if(!separator){
separator = ',';
}
//reads the cookie
var val = this.valueToArray(name, separator);
return val[index];
};
return Cookie;
});
exports.Cookie = Cookie;
});

1
src/cookie.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"sources":["src-es6/cookie.js"],"names":[],"mappings":";;;;;;;AAIA,MAAI,MAAM,GAAG,EAAE,CAAC;;AAEhB,QAAM,CAAC,KAAK,GAAG,UAAS,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC;AACvC,QAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAG,KAAK,EAAC;AACL,YAAM,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;AAC5D,YAAM,GAAG,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;KAChD;AACD,YAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;GACzD,CAAC;;AAEF,QAAM,CAAC,IAAI,GAAG,UAAS,IAAI,EAAC;AACxB,QAAI,WAAW,GAAG,EAAE,EAChB,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;AACxB,QAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAC;AAC1B,UAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EACxB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACpC,UAAG,MAAM,KAAK,CAAC,CAAC,EAAC;AACb,cAAM,IAAI,MAAM,CAAC,MAAM,CAAC;AACxB,YAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACtC,YAAG,GAAG,KAAK,CAAC,CAAC,EAAC;AACV,aAAG,GAAG,MAAM,CAAC,MAAM,CAAC;SACvB;AACD,mBAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;OACzD;KACJ;AACD,WAAO,WAAW,CAAC;GACtB,CAAC;;AAEF,QAAM,CAAC,MAAM,GAAG,UAAS,IAAI,EAAC;AAC1B,QAAI,CAAC,KAAK,CAAC,IAAI,EAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;GAC1B,CAAC;;AAEF,QAAM,CAAC,YAAY,GAAG,UAAS,IAAI,EAAE,SAAS,EAAC;AAC3C,QAAG,CAAC,SAAS,EAAC;AACV,eAAS,GAAG,GAAG,CAAC;KACnB;;AAED,QAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAE1B,QAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/B,WAAO,GAAG,CAAC;GACd,CAAC;;AAEF,QAAM,CAAC,eAAe,GAAG,UAAS,IAAI,EAAE,KAAK,EAAE,SAAS,EAAC;AACrD,QAAG,CAAC,SAAS,EAAC;AACV,eAAS,GAAG,GAAG,CAAC;KACnB;;AAED,QAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7C,WAAO,GAAG,CAAC,KAAK,CAAC,CAAC;GACrB,CAAC;;AAEF,SAAO,CAAC,MAAM,GAAG,MAAM,CAAC","file":"src-es6/cookie.js","sourcesContent":["/**\r\n * Cookie utilities\r\n */\r\n\r\nvar Cookie = {};\r\n\r\nCookie.write = function(name, value, hours){\r\n var expire = '';\r\n if(hours){\r\n expire = new Date((new Date()).getTime() + hours * 3600000);\r\n expire = '; expires=' + expire.toGMTString();\r\n }\r\n document.cookie = name + '=' + escape(value) + expire;\r\n};\r\n\r\nCookie.read = function(name){\r\n var cookieValue = '',\r\n search = name + '=';\r\n if(document.cookie.length > 0){\r\n var cookie = document.cookie,\r\n offset = cookie.indexOf(search);\r\n if(offset !== -1){\r\n offset += search.length;\r\n var end = cookie.indexOf(';', offset);\r\n if(end === -1){\r\n end = cookie.length;\r\n }\r\n cookieValue = unescape(cookie.substring(offset, end));\r\n }\r\n }\r\n return cookieValue;\r\n};\r\n\r\nCookie.remove = function(name){\r\n this.write(name,'',-1);\r\n};\r\n\r\nCookie.valueToArray = function(name, separator){\r\n if(!separator){\r\n separator = ',';\r\n }\r\n //reads the cookie\r\n var val = this.read(name);\r\n //creates an array with filters' values\r\n var arr = val.split(separator);\r\n return arr;\r\n};\r\n\r\nCookie.getValueByIndex = function(name, index, separator){\r\n if(!separator){\r\n separator = ',';\r\n }\r\n //reads the cookie\r\n var val = this.valueToArray(name, separator);\r\n return val[index];\r\n};\r\n\r\nexports.Cookie = Cookie;\r\n"]}

View file

@ -12,16 +12,16 @@
define(function (require) {
var global = this,
TF = global.TF,
evt = require('event'),
dom = require('dom'),
str = require('string'),
cookie = require('cookie'),
types = require('types'),
array = require('array'),
hlp = require('helpers'),
isValidDate = require('date').isValid,
formatDate = require('date').format,
dom = require('dom').Dom,
str = require('string').Str,
cookie = require('cookie').Cookie,
types = require('types').Types,
array = require('array').Arr,
hlp = require('helpers').Helpers,
dateHelper = require('date').DateHelper,
isValidDate = dateHelper.isValid,
formatDate = dateHelper.format,
doc = global.document;
/**
@ -676,7 +676,8 @@ function TableFilter(id) {
this.Cpt = {
loader: null,
alternateRows: null,
colOps: null
colOps: null,
rowsCounter: null
};
/*** TF events ***/
@ -1204,7 +1205,9 @@ TableFilter.prototype = {
/* Filter behaviours */
if(this.rowsCounter){
this.SetRowsCounter();
var RowsCounter = require('modules/rowsCounter').RowsCounter;
this.Cpt.rowsCounter = new RowsCounter(this);
this.Cpt.rowsCounter.init();
}
if(this.statusBar){
this.SetStatusBar();
@ -1231,12 +1234,12 @@ TableFilter.prototype = {
//1st time only if no paging and rememberGridValues
var AlternateRows = require('modules/alternateRows').AlternateRows;
this.Cpt.alternateRows = new AlternateRows(this);
this.Cpt.alternateRows.set();
this.Cpt.alternateRows.init();
}
if(this.hasColOperation){
var ColOps = require('modules/colOps').ColOps;
this.Cpt.colOps = new ColOps(this);
this.Cpt.colOps.set();
this.Cpt.colOps.calc();
}
if(this.sort || this.gridLayout){
this.SetSort();
@ -1515,7 +1518,7 @@ TableFilter.prototype = {
this.RemoveStatusBar();
}
if(this.rowsCounter){
this.RemoveRowsCounter();
this.Cpt.rowsCounter.destroy();
}
if(this.btnReset){
this.RemoveResetBtn();
@ -2029,8 +2032,9 @@ TableFilter.prototype = {
var fnE = ezEditConfig.on_added_dom_row;
ezEditConfig.on_added_dom_row = function(){
o.nbFilterableRows++;
if(!o.paging){ o.RefreshNbRows(); }
else {
if(!o.paging){
o.Cpt.rowsCounter.refresh();
} else {
o.nbRows++;
o.nbVisibleRows++;
o.nbFilterableRows++;
@ -2039,7 +2043,7 @@ TableFilter.prototype = {
o.AddPaging(false);
}
if(o.alternateBgs){
o.Cpt.alternateRows.set();
o.Cpt.alternateRows.init();
}
if(fnE){
fnE.call(null, arguments[0], arguments[1], arguments[2]);
@ -2049,8 +2053,9 @@ TableFilter.prototype = {
var fnF = ezEditConfig.actions['delete'].on_after_submit;
ezEditConfig.actions['delete'].on_after_submit = function(){
o.nbFilterableRows--;
if(!o.paging){ o.RefreshNbRows(); }
else {
if(!o.paging){
o.Cpt.rowsCounter.refresh();
} else {
o.nbRows--;
o.nbVisibleRows--;
o.nbFilterableRows--;
@ -2059,7 +2064,7 @@ TableFilter.prototype = {
o.AddPaging(false);
}
if(o.alternateBgs){
o.Cpt.alternateRows.set();
o.Cpt.alternateRows.init();
}
if(fnF){
fnF.call(null, arguments[0], arguments[1]);
@ -2531,7 +2536,7 @@ TableFilter.prototype = {
r.style.display = '';
}
if(this.alternateBgs){
this.Cpt.alternateRows(this.validRowsIndex[h], h);
this.Cpt.alternateRows.setRowBg(this.validRowsIndex[h], h);
}
} else {
r.style.display = 'none';
@ -3800,129 +3805,6 @@ TableFilter.prototype = {
global.setTimeout(setMsg, d);
},
/*====================================================
- Generates rows counter label
=====================================================*/
SetRowsCounter: function(){
if((!this.hasGrid && !this.isFirstLoad) || this.rowsCounterSpan){
return;
}
var f = this.fObj;
//id of custom container element
this.rowsCounterTgtId = f.rows_counter_target_id || null;
//element containing tot nb rows
this.rowsCounterDiv = null;
//element containing tot nb rows label
this.rowsCounterSpan = null;
//defines rows counter text
this.rowsCounterText = f.rows_counter_text || 'Rows: ';
this.fromToTextSeparator = f.from_to_text_separator || '-';
this.overText = f.over_text || ' / ';
//defines css class rows counter
this.totRowsCssClass = f.tot_rows_css_class || 'tot';
//callback raised before counter is refreshed
this.onBeforeRefreshCounter =
types.isFn(f.on_before_refresh_counter) ?
f.on_before_refresh_counter : null;
//callback raised after counter is refreshed
this.onAfterRefreshCounter = types.isFn(f.on_after_refresh_counter) ?
f.on_after_refresh_counter : null;
//rows counter container
var countDiv = dom.create('div', ['id',this.prfxCounter+this.id]);
countDiv.className = this.totRowsCssClass;
//rows counter label
var countSpan = dom.create('span',['id',this.prfxTotRows+this.id]);
var countText = dom.create('span',['id',this.prfxTotRowsTxt+this.id]);
countText.appendChild(dom.text(this.rowsCounterText));
// counter is added to defined element
if(!this.rowsCounterTgtId){
this.SetTopDiv();
}
var targetEl = !this.rowsCounterTgtId ?
this.lDiv : dom.id( this.rowsCounterTgtId );
//IE only: clears all for sure
if(this.rowsCounterDiv && hlp.isIE()){
this.rowsCounterDiv.outerHTML = '';
}
//default container: 'lDiv'
if(!this.rowsCounterTgtId){
countDiv.appendChild(countText);
countDiv.appendChild(countSpan);
targetEl.appendChild(countDiv);
}
else{
//custom container, no need to append statusDiv
targetEl.appendChild(countText);
targetEl.appendChild(countSpan);
}
this.rowsCounterDiv = dom.id( this.prfxCounter+this.id );
this.rowsCounterSpan = dom.id( this.prfxTotRows+this.id );
this.RefreshNbRows();
},
/*====================================================
- Removes rows counter label
=====================================================*/
RemoveRowsCounter: function(){
if(!this.hasGrid){
return;
}
if(!this.rowsCounterSpan){
return;
}
if(!this.rowsCounterTgtId && this.rowsCounterDiv){
//IE only: clears all for sure
if(hlp.isIE()){
this.rowsCounterDiv.outerHTML = '';
} else {
this.rowsCounterDiv.parentNode.removeChild(this.rowsCounterDiv);
}
} else {
dom.id( this.rowsCounterTgtId ).innerHTML = '';
}
this.rowsCounterSpan = null;
this.rowsCounterDiv = null;
},
/*====================================================
- Shows total number of filtered rows
=====================================================*/
RefreshNbRows: function(p){
if(!this.rowsCounterSpan){
return;
}
if(this.onBeforeRefreshCounter){
this.onBeforeRefreshCounter.call(null, this, this.rowsCounterSpan);
}
var totTxt;
if(!this.paging){
if(p && p!==''){
totTxt=p;
} else{
totTxt = this.nbFilterableRows - this.nbHiddenRows -
(this.hasVisibleRows ? this.visibleRows.length : 0);
}
} else {
//paging start row
var paging_start_row = parseInt(this.startPagingRow,10) +
((this.nbVisibleRows>0) ? 1 : 0);
var paging_end_row = (paging_start_row+this.pagingLength)-1 <=
this.nbVisibleRows ? paging_start_row+this.pagingLength-1 :
this.nbVisibleRows;
totTxt = paging_start_row + this.fromToTextSeparator +
paging_end_row + this.overText + this.nbVisibleRows;
}
this.rowsCounterSpan.innerHTML = totTxt;
if(this.onAfterRefreshCounter){
this.onAfterRefreshCounter.call(
null, this, this.rowsCounterSpan, totTxt);
}
},
/*====================================================
- inserts or removes input watermark
- Params:
@ -4130,7 +4012,7 @@ TableFilter.prototype = {
//New pointerX calc taking into account scrollLeft
if(!o.isPointerXOverwritten){
try{
TF.Evt.pointerX = function(e){
o.Evt.pointerX = function(e){
e = e || global.event;
var scrollLeft = tf_StandardBody().scrollLeft +
_o.scrollLeft;
@ -5196,7 +5078,7 @@ TableFilter.prototype = {
}
//makes operation on a col
if(this.hasColOperation){
this.Cpt.colOps.set();
this.Cpt.colOps.calc();
}
//re-populates drop-down filters
if(this.refreshFilters){
@ -5206,7 +5088,7 @@ TableFilter.prototype = {
this.nbVisibleRows - this.visibleRows.length : this.nbVisibleRows;
//refreshes rows counter
if(this.rowsCounter){
this.RefreshNbRows(nr);
this.Cpt.rowsCounter.refresh(nr);
}
if(this.inpWatermark !== ''){

View file

@ -1,169 +1,160 @@
/**
* Date utilities
*/
define(["exports"], function (exports) {
"use strict";
define(function () {
'use strict';
/**
* Date utilities
*/
var DateHelper = {
isValid: function(dateStr, format){
if(!format) {
format = 'DMY';
}
format = format.toUpperCase();
if(format.length != 3) {
if(format==='DDMMMYYYY'){
var d = this.format(dateStr, format);
dateStr = d.getDate() +'/'+ (d.getMonth()+1) +'/'+
d.getFullYear();
format = 'DMY';
}
}
if((format.indexOf('M') === -1) || (format.indexOf('D') === -1) ||
(format.indexOf('Y') === -1)){
format = 'DMY';
}
var reg1, reg2;
// If the year is first
if(format.substring(0, 1) == 'Y') {
reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
} else if(format.substring(1, 2) == 'Y') { // If the year is second
reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/;
reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/;
} else { // The year must be third
reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/;
reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
}
// If it doesn't conform to the right format (with either a 2 digit year or
// 4 digit year), fail
if(reg1.test(dateStr) === false && reg2.test(dateStr) === false) {
return false;
}
// Split into 3 parts based on what the divider was
var parts = dateStr.split(RegExp.$1);
var mm, dd, yy;
// Check to see if the 3 parts end up making a valid date
if(format.substring(0, 1) === 'M'){
mm = parts[0];
} else if(format.substring(1, 2) === 'M'){
mm = parts[1];
} else {
mm = parts[2];
}
if(format.substring(0, 1) === 'D'){
dd = parts[0];
} else if(format.substring(1, 2) === 'D'){
dd = parts[1];
} else {
dd = parts[2];
}
if(format.substring(0, 1) === 'Y'){
yy = parts[0];
} else if(format.substring(1, 2) === 'Y'){
yy = parts[1];
} else {
yy = parts[2];
}
if(parseInt(yy, 10) <= 50){
yy = (parseInt(yy, 10) + 2000).toString();
}
if(parseInt(yy, 10) <= 99){
yy = (parseInt(yy, 10) + 1900).toString();
}
var dt = new Date(
parseInt(yy, 10), parseInt(mm, 10)-1, parseInt(dd, 10),
0, 0, 0, 0);
if(parseInt(dd, 10) != dt.getDate()){
return false;
}
if(parseInt(mm, 10)-1 != dt.getMonth()){
return false;
}
return true;
},
format: function(dateStr, format){
if(!format){
format = 'DMY';
}
if(!dateStr || dateStr === ''){
return new Date(1001, 0, 1);
}
var oDate, parts;
function y2kDate(yr){
if(yr === undefined){
return 0;
}
if(yr.length>2){
return yr;
}
var y;
//>50 belong to 1900
if(yr <= 99 && yr>50){
y = '19' + yr;
}
//<50 belong to 2000
if(yr<50 || yr === '00'){
y = '20' + yr;
}
return y;
}
function mmm2mm(mmm){
if(mmm === undefined){
return 0;
}
var mondigit;
var MONTH_NAMES = [
'january','february','march','april','may','june','july',
'august','september','october','november','december',
'jan','feb','mar','apr','may','jun','jul','aug','sep','oct',
'nov','dec'
];
for(var m_i=0; m_i < MONTH_NAMES.length; m_i++){
var month_name = MONTH_NAMES[m_i];
if (mmm.toLowerCase() === month_name){
mondigit = m_i+1;
break;
}
}
if(mondigit > 11 || mondigit < 23){
mondigit = mondigit - 12;
}
if(mondigit < 1 || mondigit > 12){
return 0;
}
return mondigit;
}
switch(format.toUpperCase()){
case 'DDMMMYYYY':
parts = dateStr.replace(/[- \/.]/g,' ').split(' ');
oDate = new Date(y2kDate(parts[2]),mmm2mm(parts[1])-1,parts[0]);
break;
case 'DMY':
parts = dateStr.replace(
/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
oDate = new Date(y2kDate(parts[2]),parts[1]-1,parts[0]);
break;
case 'MDY':
parts = dateStr.replace(
/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
oDate = new Date(y2kDate(parts[2]),parts[0]-1,parts[1]);
break;
case 'YMD':
parts = dateStr.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,'$1 $4 $6').split(' ');
oDate = new Date(y2kDate(parts[0]),parts[1]-1,parts[2]);
break;
default: //in case format is not correct
parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,'$1 $3 $5').split(' ');
oDate = new Date(y2kDate(parts[2]),parts[1]-1,parts[0]);
break;
}
return oDate;
var DateHelper = {
isValid: function (dateStr, format) {
if (!format) {
format = "DMY";
}
format = format.toUpperCase();
if (format.length != 3) {
if (format === "DDMMMYYYY") {
var d = this.format(dateStr, format);
dateStr = d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear();
format = "DMY";
}
};
}
if ((format.indexOf("M") === -1) || (format.indexOf("D") === -1) || (format.indexOf("Y") === -1)) {
format = "DMY";
}
var reg1, reg2;
// If the year is first
if (format.substring(0, 1) == "Y") {
reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
} else if (format.substring(1, 2) == "Y") {
// If the year is second
reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/;
reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/;
} else {
// The year must be third
reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/;
reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
}
// If it doesn't conform to the right format (with either a 2 digit year or
// 4 digit year), fail
if (reg1.test(dateStr) === false && reg2.test(dateStr) === false) {
return false;
}
// Split into 3 parts based on what the divider was
var parts = dateStr.split(RegExp.$1);
var mm, dd, yy;
// Check to see if the 3 parts end up making a valid date
if (format.substring(0, 1) === "M") {
mm = parts[0];
} else if (format.substring(1, 2) === "M") {
mm = parts[1];
} else {
mm = parts[2];
}
if (format.substring(0, 1) === "D") {
dd = parts[0];
} else if (format.substring(1, 2) === "D") {
dd = parts[1];
} else {
dd = parts[2];
}
if (format.substring(0, 1) === "Y") {
yy = parts[0];
} else if (format.substring(1, 2) === "Y") {
yy = parts[1];
} else {
yy = parts[2];
}
if (parseInt(yy, 10) <= 50) {
yy = (parseInt(yy, 10) + 2000).toString();
}
if (parseInt(yy, 10) <= 99) {
yy = (parseInt(yy, 10) + 1900).toString();
}
var dt = new Date(parseInt(yy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10), 0, 0, 0, 0);
if (parseInt(dd, 10) != dt.getDate()) {
return false;
}
if (parseInt(mm, 10) - 1 != dt.getMonth()) {
return false;
}
return true;
},
format: function (dateStr, format) {
if (!format) {
format = "DMY";
}
if (!dateStr || dateStr === "") {
return new Date(1001, 0, 1);
}
var oDate, parts;
return DateHelper;
});
function y2kDate(yr) {
if (yr === undefined) {
return 0;
}
if (yr.length > 2) {
return yr;
}
var y;
//>50 belong to 1900
if (yr <= 99 && yr > 50) {
y = "19" + yr;
}
//<50 belong to 2000
if (yr < 50 || yr === "00") {
y = "20" + yr;
}
return y;
}
function mmm2mm(mmm) {
if (mmm === undefined) {
return 0;
}
var mondigit;
var MONTH_NAMES = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
for (var m_i = 0; m_i < MONTH_NAMES.length; m_i++) {
var month_name = MONTH_NAMES[m_i];
if (mmm.toLowerCase() === month_name) {
mondigit = m_i + 1;
break;
}
}
if (mondigit > 11 || mondigit < 23) {
mondigit = mondigit - 12;
}
if (mondigit < 1 || mondigit > 12) {
return 0;
}
return mondigit;
}
switch (format.toUpperCase()) {
case "DDMMMYYYY":
parts = dateStr.replace(/[- \/.]/g, " ").split(" ");
oDate = new Date(y2kDate(parts[2]), mmm2mm(parts[1]) - 1, parts[0]);
break;
case "DMY":
parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/, "$1 $3 $5").split(" ");
oDate = new Date(y2kDate(parts[2]), parts[1] - 1, parts[0]);
break;
case "MDY":
parts = dateStr.replace(/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/, "$1 $3 $5").split(" ");
oDate = new Date(y2kDate(parts[2]), parts[0] - 1, parts[1]);
break;
case "YMD":
parts = dateStr.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/, "$1 $4 $6").split(" ");
oDate = new Date(y2kDate(parts[0]), parts[1] - 1, parts[2]);
break;
default: //in case format is not correct
parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/, "$1 $3 $5").split(" ");
oDate = new Date(y2kDate(parts[2]), parts[1] - 1, parts[0]);
break;
}
return oDate;
}
};
exports.DateHelper = DateHelper;
});

1
src/date.js.map Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,163 +1,156 @@
/**
* DOM utilities
*/
define(["exports"], function (exports) {
"use strict";
define(function (require) {
'use strict';
/**
* DOM utilities
*/
var Dom = {};
var Dom = {};
/**
* Returns text + text of children of given node
* @param {NodeElement} node
* @return {String}
*/
Dom.getText = function(node){
var s = node.textContent || node.innerText ||
node.innerHTML.replace(/<[^<>]+>/g, '');
s = s.replace(/^\s+/, '').replace(/\s+$/, '');
return s;
};
/**
* Returns text + text of children of given node
* @param {NodeElement} node
* @return {String}
*/
Dom.getText = function (node) {
var s = node.textContent || node.innerText || node.innerHTML.replace(/<[^<>]+>/g, "");
s = s.replace(/^\s+/, "").replace(/\s+$/, "");
return s;
};
/**
* Creates an html element with given collection of attributes
* @param {String} tag a string of the html tag to create
* @param {Array} an undetermined number of arrays containing the with 2
* items, the attribute name and its value ['id','myId']
* @return {Object} created element
*/
Dom.create = function(tag){
if(!tag || tag===''){
return;
}
var el = document.createElement(tag),
args = arguments;
if(args.length > 1){
for(var i=0; i<args.length; i++){
var argtype = typeof args[i];
if(argtype.toLowerCase() === 'object' && args[i].length === 2){
el.setAttribute(args[i][0], args[i][1]);
}
}
}
return el;
};
/**
* Returns a text node with given text
* @param {String} text
* @return {Object}
*/
Dom.text = function(text){
return document.createTextNode(text);
};
/**
* Returns offset position of passed element
* @param {object} obj [description]
* @return {object} literal object with left and top values
*/
Dom.position = function(obj){
var l = 0, t = 0;
if (obj && obj.offsetParent){
do {
l += obj.offsetLeft;
t += obj.offsetTop;
} while (obj == obj.offsetParent);
}
return { 'left': l, 'top': t };
};
Dom.hasClass = function (ele, cls){
if(!ele){ return false; }
if(supportsClassList()){
return ele.classList.contains(cls);
}
return ele.className.match(new RegExp('(\\s|^)'+ cls +'(\\s|$)'));
};
Dom.addClass = function (ele, cls){
if(!ele){ return; }
if(supportsClassList()){
ele.classList.add(cls);
return;
}
if(ele.className === ''){
ele.className = cls;
}
else if(!this.hasClass(ele, cls)){
ele.className += " " + cls;
}
};
Dom.removeClass = function (ele, cls){
if(!ele){ return; }
if(supportsClassList()){
ele.classList.remove(cls);
return;
}
var reg = new RegExp('(\\s|^)'+ cls +'(\\s|$)', 'g');
ele.className = ele.className.replace(reg, '');
};
/**
* Creates and returns an option element
* @param {String} text option text
* @param {String} value option value
* @param {Boolean} isSel whether option is selected
* @return {Object} option element
*/
Dom.createOpt = function(text, value, isSel){
var isSelected = isSel ? true : false,
opt = isSelected ?
this.create('option', ['value',value], ['selected','true']) :
this.create('option', ['value',value]);
opt.appendChild(this.text(text));
return opt;
};
/**
* Creates and returns a checklist item
* @param {Number} chkIndex index of check item
* @param {String} chkValue check item value
* @param {String} labelText check item label text
* @return {Object} li DOM element
*/
Dom.createCheckItem = function(chkIndex, chkValue, labelText){
var li = this.create('li'),
label = this.create('label', ['for', chkIndex]),
check = this.create('input',
['id', chkIndex],
['name', chkIndex],
['type', 'checkbox'],
['value', chkValue]
);
label.appendChild(check);
label.appendChild(this.text(labelText));
li.appendChild(label);
li.label = label;
li.check = check;
return li;
};
Dom.id = function(id){
return document.getElementById(id);
};
Dom.tag = function(o, tagname){
return o.getElementsByTagName(tagname);
};
// HTML5 classList API
function supportsClassList(){
return document.documentElement.classList;
/**
* Creates an html element with given collection of attributes
* @param {String} tag a string of the html tag to create
* @param {Array} an undetermined number of arrays containing the with 2
* items, the attribute name and its value ['id','myId']
* @return {Object} created element
*/
Dom.create = function (tag) {
if (!tag || tag === "") {
return;
}
return Dom;
});
var el = document.createElement(tag), args = arguments;
if (args.length > 1) {
for (var i = 0; i < args.length; i++) {
var argtype = typeof args[i];
if (argtype.toLowerCase() === "object" && args[i].length === 2) {
el.setAttribute(args[i][0], args[i][1]);
}
}
}
return el;
};
/**
* Returns a text node with given text
* @param {String} text
* @return {Object}
*/
Dom.text = function (text) {
return document.createTextNode(text);
};
/**
* Returns offset position of passed element
* @param {object} obj [description]
* @return {object} literal object with left and top values
*/
Dom.position = function (obj) {
var l = 0, t = 0;
if (obj && obj.offsetParent) {
do {
l += obj.offsetLeft;
t += obj.offsetTop;
} while (obj == obj.offsetParent);
}
return { left: l, top: t };
};
Dom.hasClass = function (ele, cls) {
if (!ele) {
return false;
}
if (supportsClassList()) {
return ele.classList.contains(cls);
}
return ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
};
Dom.addClass = function (ele, cls) {
if (!ele) {
return;
}
if (supportsClassList()) {
ele.classList.add(cls);
return;
}
if (ele.className === "") {
ele.className = cls;
} else if (!this.hasClass(ele, cls)) {
ele.className += " " + cls;
}
};
Dom.removeClass = function (ele, cls) {
if (!ele) {
return;
}
if (supportsClassList()) {
ele.classList.remove(cls);
return;
}
var reg = new RegExp("(\\s|^)" + cls + "(\\s|$)", "g");
ele.className = ele.className.replace(reg, "");
};
/**
* Creates and returns an option element
* @param {String} text option text
* @param {String} value option value
* @param {Boolean} isSel whether option is selected
* @return {Object} option element
*/
Dom.createOpt = function (text, value, isSel) {
var isSelected = isSel ? true : false, opt = isSelected ? this.create("option", ["value", value], ["selected", "true"]) : this.create("option", ["value", value]);
opt.appendChild(this.text(text));
return opt;
};
/**
* Creates and returns a checklist item
* @param {Number} chkIndex index of check item
* @param {String} chkValue check item value
* @param {String} labelText check item label text
* @return {Object} li DOM element
*/
Dom.createCheckItem = function (chkIndex, chkValue, labelText) {
var li = this.create("li"), label = this.create("label", ["for", chkIndex]), check = this.create("input", ["id", chkIndex], ["name", chkIndex], ["type", "checkbox"], ["value", chkValue]);
label.appendChild(check);
label.appendChild(this.text(labelText));
li.appendChild(label);
li.label = label;
li.check = check;
return li;
};
Dom.id = function (id) {
return document.getElementById(id);
};
Dom.tag = function (o, tagname) {
return o.getElementsByTagName(tagname);
};
// HTML5 classList API
function supportsClassList() {
return document.documentElement.classList;
}
exports.Dom = Dom;
});

1
src/dom.js.map Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,15 +1,15 @@
/**
* Misc helpers
*/
define(["exports"], function (exports) {
"use strict";
define(function (require) {
'use strict';
/**
* Misc helpers
*/
var Helpers = {
isIE: function(){
return (/msie|MSIE/).test(navigator.userAgent);
}
};
var Helpers = {
isIE: function () {
return (/msie|MSIE/).test(navigator.userAgent);
}
};
return Helpers;
});
exports.Helpers = Helpers;
});

1
src/helpers.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"sources":["src-es6/helpers.js"],"names":[],"mappings":";;;;;;;AAIA,MAAI,OAAO,GAAG;AACV,QAAI,EAAE,YAAU;AACZ,aAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAClD;GACJ,CAAC;;AAEF,SAAO,CAAC,OAAO,GAAG,OAAO,CAAC","file":"src-es6/helpers.js","sourcesContent":["/**\r\n * Misc helpers\r\n */\r\n\r\nvar Helpers = {\r\n isIE: function(){\r\n return (/msie|MSIE/).test(navigator.userAgent);\r\n }\r\n};\r\n\r\nexports.Helpers = Helpers;\r\n"]}

View file

@ -73,8 +73,9 @@
col_0: 'select',
col_3: 'checklist',
base_path: './',
rows_counter: true,
enable_default_theme: true,
paging: false,
paging: true,
alternate_rows: true,
highlight_keywords: true,
match_case: false,

View file

@ -6,7 +6,7 @@ define(["exports", "../dom"], function (exports, _dom) {
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
};
var dom = _dom;
var Dom = _dom.Dom;
var AlternateRows = (function () {
var AlternateRows = function AlternateRows(tf) {
var f = tf.fObj;
@ -19,7 +19,7 @@ define(["exports", "../dom"], function (exports, _dom) {
};
_classProps(AlternateRows, null, {
set: {
init: {
writable: true,
value: function () {
if (!this.tf.hasGrid && !this.tf.isFirstLoad) {
@ -50,7 +50,7 @@ define(["exports", "../dom"], function (exports, _dom) {
var rows = this.tf.tbl.rows;
var i = !idx ? rowIdx : idx;
this.removeRowBg(rowIdx);
dom.addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);
Dom.addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);
}
},
removeRowBg: {
@ -60,8 +60,8 @@ define(["exports", "../dom"], function (exports, _dom) {
return;
}
var rows = this.tf.tbl.rows;
dom.removeClass(rows[idx], this.oddCss);
dom.removeClass(rows[idx], this.evenCss);
Dom.removeClass(rows[idx], this.oddCss);
Dom.removeClass(rows[idx], this.evenCss);
}
},
remove: {

View file

@ -1 +1 @@
{"version":3,"sources":["src/es6-modules/alternateRows.js"],"names":[],"mappings":";;;;;;;;MAAY,GAAG;MAEF,aAAa;QAAb,aAAa,GAMX,SANF,aAAa,CAMV,EAAE,EAAE;AACZ,UAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;;AAEhB,UAAI,CAAC,OAAO,GAAG,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC;;AAE9C,UAAI,CAAC,MAAM,GAAG,CAAC,CAAC,iBAAiB,IAAI,KAAK,CAAC;;AAE3C,UAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB;;gBAdQ,aAAa;AAmBtB,SAAG;;eAAA,YAAG;AACF,cAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAC;AACxC,mBAAO;WACV;AACD,cAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,cAAI,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,KAAG,IAAI,CAAC;;AAErD,cAAI,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;;AAEvD,cAAI,QAAQ,GAAG,gBAAgB,GACvB,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAC,UAAU,GACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;AACtC,cAAI,GAAG,GAAG,CAAC,CAAC;;;AAGZ,eAAI,IAAI,CAAC,GAAC,UAAU,EAAE,CAAC,GAAC,QAAQ,EAAE,CAAC,EAAE,EAAC;AAClC;AACA;AACA;WACH;SACJ;;AAQD,cAAQ;;eAAA,UAAC,MAAM,EAAE,GAAG,EAAE;AAClB,cAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,EAAC;AACtC,mBAAO;WACV;AACD,cAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,cAAI,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;AAC5B,cAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACzB,aAAG,CAAC,QAAQ,CACR,IAAI,CAAC,MAAM,CAAC,EACZ,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CACrC,CAAC;SACL;;AAMD,iBAAW;;eAAA,UAAC,GAAG,EAAE;AACb,cAAG,KAAK,CAAC,GAAG,CAAC,EAAC;AACV,mBAAO;WACV;AACD,cAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,aAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACxC,aAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5C;;AAKD,YAAM;;eAAA,YAAG;AACL,cAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAC;AAChB,mBAAO;WACV;AACD,cAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,eAAI,IAAI,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AAC5C,gBAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WACvB;AACD,cAAI,CAAC,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC;SACrC;;AAED,YAAM;;eAAA,YAAG;AACL,cAAI,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC;SAC/B;;AAED,aAAO;;eAAA,YAAG;AACN,cAAI,CAAC,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC;SAChC;;;;WA7FQ,aAAa;;;UAAb,aAAa,GAAb,aAAa","file":"src/es6-modules/alternateRows.js","sourcesContent":["import * as dom from '../dom';\r\n\r\nexport class AlternateRows{\r\n\r\n /**\r\n * Alternating rows color\r\n * @param {Object} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n var f = tf.fObj;\r\n //defines css class for even rows\r\n this.evenCss = f.even_row_css_class || 'even';\r\n //defines css class for odd rows\r\n this.oddCss = f.odd_row_css_class || 'odd';\r\n\r\n this.tf = tf;\r\n }\r\n\r\n /**\r\n * Sets alternating rows color\r\n */\r\n set() {\r\n if(!this.tf.hasGrid && !this.tf.isFirstLoad){\r\n return;\r\n }\r\n var rows = this.tf.tbl.rows;\r\n var noValidRowsIndex = this.tf.validRowsIndex===null;\r\n //1st index\r\n var beginIndex = noValidRowsIndex ? this.tf.refRow : 0;\r\n // nb indexes\r\n var indexLen = noValidRowsIndex ?\r\n this.tf.nbFilterableRows+beginIndex :\r\n this.tf.validRowsIndex.length;\r\n var idx = 0;\r\n\r\n //alternates bg color\r\n for(var j=beginIndex; j<indexLen; j++){\r\n var rowIdx = noValidRowsIndex ? j : this.tf.validRowsIndex[j];\r\n this.setRowBg(rowIdx, idx);\r\n idx++;\r\n }\r\n }\r\n\r\n /**\r\n * Sets row background color\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} idx Valid rows collection index needed to calculate bg\r\n * color\r\n */\r\n setRowBg(rowIdx, idx) {\r\n if(!this.tf.alternateBgs || isNaN(rowIdx)){\r\n return;\r\n }\r\n var rows = this.tf.tbl.rows;\r\n var i = !idx ? rowIdx : idx;\r\n this.removeRowBg(rowIdx);\r\n dom.addClass(\r\n rows[rowIdx],\r\n (i%2) ? this.evenCss : this.oddCss\r\n );\r\n }\r\n\r\n /**\r\n * Removes row background color\r\n * @param {Number} idx Row index\r\n */\r\n removeRowBg(idx) {\r\n if(isNaN(idx)){\r\n return;\r\n }\r\n var rows = this.tf.tbl.rows;\r\n dom.removeClass(rows[idx], this.oddCss);\r\n dom.removeClass(rows[idx], this.evenCss);\r\n }\r\n\r\n /**\r\n * Removes all row background color\r\n */\r\n remove() {\r\n if(!this.tf.hasGrid){\r\n return;\r\n }\r\n var row = this.tf.tbl.rows;\r\n for(var i=this.tf.refRow; i<this.tf.nbRows; i++){\r\n this.removeRowBg(i);\r\n }\r\n this.tf.isStartBgAlternate = true;\r\n }\r\n\r\n enable() {\r\n this.tf.alternateBgs = true;\r\n }\r\n\r\n disable() {\r\n this.tf.alternateBgs = false;\r\n }\r\n\r\n}\r\n\r\n"]}
{"version":3,"sources":["src-es6/modules/alternateRows.js"],"names":[],"mappings":";;;;;;;;MAAQ,GAAG,QAAH,GAAG;MAEE,aAAa;QAAb,aAAa,GAMX,SANF,aAAa,CAMV,EAAE,EAAE;AACZ,UAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;;AAEhB,UAAI,CAAC,OAAO,GAAG,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC;;AAE9C,UAAI,CAAC,MAAM,GAAG,CAAC,CAAC,iBAAiB,IAAI,KAAK,CAAC;;AAE3C,UAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB;;gBAdQ,aAAa;AAmBtB,UAAI;;eAAA,YAAG;AACH,cAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAC;AACxC,mBAAO;WACV;AACD,cAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,cAAI,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,KAAG,IAAI,CAAC;;AAErD,cAAI,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;;AAEvD,cAAI,QAAQ,GAAG,gBAAgB,GACvB,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAC,UAAU,GACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;AACtC,cAAI,GAAG,GAAG,CAAC,CAAC;;;AAGZ,eAAI,IAAI,CAAC,GAAC,UAAU,EAAE,CAAC,GAAC,QAAQ,EAAE,CAAC,EAAE,EAAC;AAClC;AACA;AACA;WACH;SACJ;;AAQD,cAAQ;;eAAA,UAAC,MAAM,EAAE,GAAG,EAAE;AAClB,cAAG,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,EAAC;AACtC,mBAAO;WACV;AACD,cAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,cAAI,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;AAC5B,cAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACzB,aAAG,CAAC,QAAQ,CACR,IAAI,CAAC,MAAM,CAAC,EACZ,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CACrC,CAAC;SACL;;AAMD,iBAAW;;eAAA,UAAC,GAAG,EAAE;AACb,cAAG,KAAK,CAAC,GAAG,CAAC,EAAC;AACV,mBAAO;WACV;AACD,cAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,aAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACxC,aAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5C;;AAKD,YAAM;;eAAA,YAAG;AACL,cAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAC;AAChB,mBAAO;WACV;AACD,cAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,eAAI,IAAI,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AAC5C,gBAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WACvB;AACD,cAAI,CAAC,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC;SACrC;;AAED,YAAM;;eAAA,YAAG;AACL,cAAI,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC;SAC/B;;AAED,aAAO;;eAAA,YAAG;AACN,cAAI,CAAC,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC;SAChC;;;;WA7FQ,aAAa;;;UAAb,aAAa,GAAb,aAAa","file":"src-es6/modules/alternateRows.js","sourcesContent":["import {Dom} from '../dom';\r\n\r\nexport class AlternateRows{\r\n\r\n /**\r\n * Alternating rows color\r\n * @param {Object} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n var f = tf.fObj;\r\n //defines css class for even rows\r\n this.evenCss = f.even_row_css_class || 'even';\r\n //defines css class for odd rows\r\n this.oddCss = f.odd_row_css_class || 'odd';\r\n\r\n this.tf = tf;\r\n }\r\n\r\n /**\r\n * Sets alternating rows color\r\n */\r\n init() {\r\n if(!this.tf.hasGrid && !this.tf.isFirstLoad){\r\n return;\r\n }\r\n var rows = this.tf.tbl.rows;\r\n var noValidRowsIndex = this.tf.validRowsIndex===null;\r\n //1st index\r\n var beginIndex = noValidRowsIndex ? this.tf.refRow : 0;\r\n // nb indexes\r\n var indexLen = noValidRowsIndex ?\r\n this.tf.nbFilterableRows+beginIndex :\r\n this.tf.validRowsIndex.length;\r\n var idx = 0;\r\n\r\n //alternates bg color\r\n for(var j=beginIndex; j<indexLen; j++){\r\n var rowIdx = noValidRowsIndex ? j : this.tf.validRowsIndex[j];\r\n this.setRowBg(rowIdx, idx);\r\n idx++;\r\n }\r\n }\r\n\r\n /**\r\n * Sets row background color\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} idx Valid rows collection index needed to calculate bg\r\n * color\r\n */\r\n setRowBg(rowIdx, idx) {\r\n if(!this.tf.alternateBgs || isNaN(rowIdx)){\r\n return;\r\n }\r\n var rows = this.tf.tbl.rows;\r\n var i = !idx ? rowIdx : idx;\r\n this.removeRowBg(rowIdx);\r\n Dom.addClass(\r\n rows[rowIdx],\r\n (i%2) ? this.evenCss : this.oddCss\r\n );\r\n }\r\n\r\n /**\r\n * Removes row background color\r\n * @param {Number} idx Row index\r\n */\r\n removeRowBg(idx) {\r\n if(isNaN(idx)){\r\n return;\r\n }\r\n var rows = this.tf.tbl.rows;\r\n Dom.removeClass(rows[idx], this.oddCss);\r\n Dom.removeClass(rows[idx], this.evenCss);\r\n }\r\n\r\n /**\r\n * Removes all row background color\r\n */\r\n remove() {\r\n if(!this.tf.hasGrid){\r\n return;\r\n }\r\n var row = this.tf.tbl.rows;\r\n for(var i=this.tf.refRow; i<this.tf.nbRows; i++){\r\n this.removeRowBg(i);\r\n }\r\n this.tf.isStartBgAlternate = true;\r\n }\r\n\r\n enable() {\r\n this.tf.alternateBgs = true;\r\n }\r\n\r\n disable() {\r\n this.tf.alternateBgs = false;\r\n }\r\n\r\n}\r\n\r\n"]}

View file

@ -6,8 +6,8 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
};
var dom = _dom;
var str = _string;
var Dom = _dom.Dom;
var Str = _string.Str;
var ColOps = (function () {
var ColOps = function ColOps(tf) {
var f = tf.fObj;
@ -17,7 +17,7 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
};
_classProps(ColOps, null, {
set: {
calc: {
writable: true,
value: function () {
if (!this.tf.isFirstLoad && !this.tf.hasGrid) {
@ -49,7 +49,7 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
}
}
if (str.lower(typeof labelId) == "object" && str.lower(typeof colIndex) == "object" && str.lower(typeof operation) == "object") {
if (Str.lower(typeof labelId) == "object" && Str.lower(typeof colIndex) == "object" && Str.lower(typeof operation) == "object") {
var row = this.tf.tbl.rows, colvalues = [];
for (var ucol = 0; ucol <= ucolMax; ucol++) {
@ -64,10 +64,10 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
for (var k = 0; k < colIndex.length; k++) {
if (colIndex[k] === ucolIndex[ucol]) {
mThisCol++;
opsThisCol[mThisCol] = str.lower(operation[k]);
opsThisCol[mThisCol] = Str.lower(operation[k]);
decThisCol[mThisCol] = decimalPrecision[k];
labThisCol[mThisCol] = labelId[k];
oTypeThisCol = outputType !== undefined && str.lower(typeof outputType) === "object" ? outputType[k] : null;
oTypeThisCol = outputType !== undefined && Str.lower(typeof outputType) === "object" ? outputType[k] : null;
switch (opsThisCol[mThisCol]) {
case "mean":
@ -197,31 +197,31 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
if (oTypeThisCol && result) {
result = result.toFixed(precision);
if (dom.id(labThisCol[i])) {
switch (str.lower(oTypeThisCol)) {
if (Dom.id(labThisCol[i])) {
switch (Str.lower(oTypeThisCol)) {
case "innerhtml":
if (isNaN(result) || !isFinite(result) || nbvalues === 0) {
dom.id(labThisCol[i]).innerHTML = ".";
Dom.id(labThisCol[i]).innerHTML = ".";
} else {
dom.id(labThisCol[i]).innerHTML = result;
Dom.id(labThisCol[i]).innerHTML = result;
}
break;
case "setvalue":
dom.id(labThisCol[i]).value = result;
Dom.id(labThisCol[i]).value = result;
break;
case "createtextnode":
var oldnode = dom.id(labThisCol[i]).firstChild;
var txtnode = dom.text(result);
dom.id(labThisCol[i]).replaceChild(txtnode, oldnode);
var oldnode = Dom.id(labThisCol[i]).firstChild;
var txtnode = Dom.text(result);
Dom.id(labThisCol[i]).replaceChild(txtnode, oldnode);
break;
} //switch
}
} else {
try {
if (isNaN(result) || !isFinite(result) || nbvalues === 0) {
dom.id(labThisCol[i]).innerHTML = ".";
Dom.id(labThisCol[i]).innerHTML = ".";
} else {
dom.id(labThisCol[i]).innerHTML = result.toFixed(precision);
Dom.id(labThisCol[i]).innerHTML = result.toFixed(precision);
}
} catch (e) {} //catch
} //else

File diff suppressed because one or more lines are too long

View file

@ -6,8 +6,8 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) {
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
};
var dom = _dom;
var types = _types;
var Dom = _dom.Dom;
var Types = _types.Types;
var global = window;
@ -29,24 +29,24 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) {
//delay for hiding loader
tf.loaderCloseDelay = 200;
//callback function before loader is displayed
tf.onShowLoader = types.isFn(f.on_show_loader) ? f.on_show_loader : null;
tf.onShowLoader = Types.isFn(f.on_show_loader) ? f.on_show_loader : null;
//callback function after loader is closed
tf.onHideLoader = types.isFn(f.on_hide_loader) ? f.on_hide_loader : null;
tf.onHideLoader = Types.isFn(f.on_hide_loader) ? f.on_hide_loader : null;
this.tf = tf;
var containerDiv = dom.create("div", ["id", tf.prfxLoader + tf.id]);
var containerDiv = Dom.create("div", ["id", tf.prfxLoader + tf.id]);
containerDiv.className = tf.loaderCssClass;
var targetEl = !tf.loaderTgtId ? (tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) : dom.id(tf.loaderTgtId);
var targetEl = !tf.loaderTgtId ? (tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) : Dom.id(tf.loaderTgtId);
if (!tf.loaderTgtId) {
targetEl.insertBefore(containerDiv, tf.tbl);
} else {
targetEl.appendChild(containerDiv);
}
tf.loaderDiv = dom.id(tf.prfxLoader + tf.id);
tf.loaderDiv = Dom.id(tf.prfxLoader + tf.id);
if (!tf.loaderHtml) {
tf.loaderDiv.appendChild(dom.text(tf.loaderText));
tf.loaderDiv.appendChild(Dom.text(tf.loaderText));
} else {
tf.loaderDiv.innerHTML = tf.loaderHtml;
}
@ -84,7 +84,7 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) {
if (!this.tf.loaderDiv) {
return;
}
var targetEl = !this.tf.loaderTgtId ? (this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode) : dom.id(this.tf.loaderTgtId);
var targetEl = !this.tf.loaderTgtId ? (this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode) : Dom.id(this.tf.loaderTgtId);
targetEl.removeChild(this.tf.loaderDiv);
this.tf.loaderDiv = null;
}

File diff suppressed because one or more lines are too long

144
src/modules/rowsCounter.js Normal file
View file

@ -0,0 +1,144 @@
define(["exports", "../dom", "../types", "../helpers"], function (exports, _dom, _types, _helpers) {
"use strict";
var _classProps = function (child, staticProps, instanceProps) {
if (staticProps) Object.defineProperties(child, staticProps);
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
};
var Dom = _dom.Dom;
var Types = _types.Types;
var Helpers = _helpers.Helpers;
var RowsCounter = (function () {
var RowsCounter = function RowsCounter(tf) {
// TableFilter configuration
var f = tf.fObj;
//id of custom container element
this.rowsCounterTgtId = f.rows_counter_target_id || null;
//element containing tot nb rows
this.rowsCounterDiv = null;
//element containing tot nb rows label
this.rowsCounterSpan = null;
//defines rows counter text
this.rowsCounterText = f.rows_counter_text || "Rows: ";
this.fromToTextSeparator = f.from_to_text_separator || "-";
this.overText = f.over_text || " / ";
//defines css class rows counter
this.totRowsCssClass = f.tot_rows_css_class || "tot";
//callback raised before counter is refreshed
this.onBeforeRefreshCounter = Types.isFn(f.on_before_refresh_counter) ? f.on_before_refresh_counter : null;
//callback raised after counter is refreshed
this.onAfterRefreshCounter = Types.isFn(f.on_after_refresh_counter) ? f.on_after_refresh_counter : null;
this.tf = tf;
};
_classProps(RowsCounter, null, {
init: {
writable: true,
value: function () {
var tf = this.tf;
if ((!tf.hasGrid && !tf.isFirstLoad) || this.rowsCounterSpan) {
return;
}
//rows counter container
var countDiv = Dom.create("div", ["id", tf.prfxCounter + tf.id]);
countDiv.className = this.totRowsCssClass;
//rows counter label
var countSpan = Dom.create("span", ["id", tf.prfxTotRows + tf.id]);
var countText = Dom.create("span", ["id", tf.prfxTotRowsTxt + tf.id]);
countText.appendChild(Dom.text(this.rowsCounterText));
// counter is added to defined element
if (!this.rowsCounterTgtId) {
tf.SetTopDiv();
}
var targetEl = !this.rowsCounterTgtId ? tf.lDiv : Dom.id(this.rowsCounterTgtId);
//IE only: clears all for sure
if (this.rowsCounterDiv && Helpers.isIE()) {
this.rowsCounterDiv.outerHTML = "";
}
//default container: 'lDiv'
if (!this.rowsCounterTgtId) {
countDiv.appendChild(countText);
countDiv.appendChild(countSpan);
targetEl.appendChild(countDiv);
} else {
//custom container, no need to append statusDiv
targetEl.appendChild(countText);
targetEl.appendChild(countSpan);
}
this.rowsCounterDiv = countDiv;
this.rowsCounterSpan = countSpan;
this.refresh();
}
},
refresh: {
writable: true,
value: function (p) {
if (!this.rowsCounterSpan) {
return;
}
var tf = this.tf;
if (this.onBeforeRefreshCounter) {
this.onBeforeRefreshCounter.call(null, tf, this.rowsCounterSpan);
}
var totTxt;
if (!tf.paging) {
if (p && p !== "") {
totTxt = p;
} else {
totTxt = tf.nbFilterableRows - tf.nbHiddenRows - (tf.hasVisibleRows ? tf.visibleRows.length : 0);
}
} else {
//paging start row
var paging_start_row = parseInt(tf.startPagingRow, 10) + ((tf.nbVisibleRows > 0) ? 1 : 0);
var paging_end_row = (paging_start_row + tf.pagingLength) - 1 <= tf.nbVisibleRows ? paging_start_row + tf.pagingLength - 1 : tf.nbVisibleRows;
totTxt = paging_start_row + this.fromToTextSeparator + paging_end_row + this.overText + tf.nbVisibleRows;
}
this.rowsCounterSpan.innerHTML = totTxt;
if (this.onAfterRefreshCounter) {
this.onAfterRefreshCounter.call(null, tf, this.rowsCounterSpan, totTxt);
}
}
},
destroy: {
writable: true,
value: function () {
var tf = this.tf;
if (!tf.hasGrid) {
return;
}
if (!this.rowsCounterSpan) {
return;
}
if (!this.rowsCounterTgtId && this.rowsCounterDiv) {
//IE only: clears all for sure
if (Helpers.isIE()) {
this.rowsCounterDiv.outerHTML = "";
} else {
this.rowsCounterDiv.parentNode.removeChild(this.rowsCounterDiv);
}
} else {
Dom.id(this.rowsCounterTgtId).innerHTML = "";
}
this.rowsCounterSpan = null;
this.rowsCounterDiv = null;
}
}
});
return RowsCounter;
})();
exports.RowsCounter = RowsCounter;
});

File diff suppressed because one or more lines are too long

View file

@ -1,50 +1,50 @@
/**
* String utilities
*/
define(["exports"], function (exports) {
"use strict";
define(function () {
'use strict';
/**
* String utilities
*/
var Str = {};
var Str = {};
Str.lower = function(text){
return text.toLowerCase();
};
Str.lower = function (text) {
return text.toLowerCase();
};
Str.upper = function(text){
return text.toUpperCase();
};
Str.upper = function (text) {
return text.toUpperCase();
};
Str.trim = function(text){
if (text.trim){
return text.trim();
}
return text.replace(/^\s*|\s*$/g, '');
};
Str.trim = function (text) {
if (text.trim) {
return text.trim();
}
return text.replace(/^\s*|\s*$/g, "");
};
Str.isEmpty = function(text){
return this.trim(text) === '';
};
Str.isEmpty = function (text) {
return this.trim(text) === "";
};
Str.rgxEsc = function(text){
function escape(e){
var a = new RegExp('\\'+e,'g');
text = text.replace(a,'\\'+e);
}
Str.rgxEsc = function (text) {
function escape(e) {
var a = new RegExp("\\" + e, "g");
text = text.replace(a, "\\" + e);
}
var chars = ['\\','[','^','$','.','|','?','*','+','(',')'];
for(var e=0; e<chars.length; e++){
escape(chars[e]);
}
return text;
};
var chars = ["\\", "[", "^", "$", ".", "|", "?", "*", "+", "(", ")"];
for (var e = 0; e < chars.length; e++) {
escape(chars[e]);
}
return text;
};
Str.matchCase = function(text, mc){
if(!mc){
return this.lower(text);
}
return text;
};
Str.matchCase = function (text, mc) {
if (!mc) {
return this.lower(text);
}
return text;
};
return Str;
});
exports.Str = Str;
});

1
src/string.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"sources":["src-es6/string.js"],"names":[],"mappings":";;;;;;;AAIA,MAAI,GAAG,GAAG,EAAE,CAAC;;AAEb,KAAG,CAAC,KAAK,GAAG,UAAS,IAAI,EAAC;AACtB,WAAO,IAAI,CAAC,WAAW,EAAE,CAAC;GAC7B,CAAC;;AAEF,KAAG,CAAC,KAAK,GAAG,UAAS,IAAI,EAAC;AACtB,WAAO,IAAI,CAAC,WAAW,EAAE,CAAC;GAC7B,CAAC;;AAEF,KAAG,CAAC,IAAI,GAAG,UAAS,IAAI,EAAC;AACrB,QAAI,IAAI,CAAC,IAAI,EAAC;AACV,aAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KACtB;AACD,WAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;GACzC,CAAC;;AAEF,KAAG,CAAC,OAAO,GAAG,UAAS,IAAI,EAAC;AACxB,WAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;GACjC,CAAC;;AAEF,KAAG,CAAC,MAAM,GAAG,UAAS,IAAI,EAAC;AACvB,aAAS,MAAM,CAAC,CAAC,EAAC;AACd,UAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,GAAC,CAAC,EAAC,GAAG,CAAC,CAAC;AAC/B,UAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,GAAC,CAAC,CAAC,CAAC;KACjC;;AAED,QAAI,KAAK,GAAG,CAAC,IAAI,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,CAAC;AAC3D,SAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AAC7B,YAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB;AACD,WAAO,IAAI,CAAC;GACf,CAAC;;AAEF,KAAG,CAAC,SAAS,GAAG,UAAS,IAAI,EAAE,EAAE,EAAC;AAC9B,QAAG,CAAC,EAAE,EAAC;AACH,aAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC3B;AACD,WAAO,IAAI,CAAC;GACf,CAAC;;AAEF,SAAO,CAAC,GAAG,GAAG,GAAG,CAAC","file":"src-es6/string.js","sourcesContent":["/**\r\n * String utilities\r\n */\r\n\r\nvar Str = {};\r\n\r\nStr.lower = function(text){\r\n return text.toLowerCase();\r\n};\r\n\r\nStr.upper = function(text){\r\n return text.toUpperCase();\r\n};\r\n\r\nStr.trim = function(text){\r\n if (text.trim){\r\n return text.trim();\r\n }\r\n return text.replace(/^\\s*|\\s*$/g, '');\r\n};\r\n\r\nStr.isEmpty = function(text){\r\n return this.trim(text) === '';\r\n};\r\n\r\nStr.rgxEsc = function(text){\r\n function escape(e){\r\n var a = new RegExp('\\\\'+e,'g');\r\n text = text.replace(a,'\\\\'+e);\r\n }\r\n\r\n var chars = ['\\\\','[','^','$','.','|','?','*','+','(',')'];\r\n for(var e=0; e<chars.length; e++){\r\n escape(chars[e]);\r\n }\r\n return text;\r\n};\r\n\r\nStr.matchCase = function(text, mc){\r\n if(!mc){\r\n return this.lower(text);\r\n }\r\n return text;\r\n};\r\n\r\nexports.Str = Str;\r\n"]}

View file

@ -1,59 +1,59 @@
/**
* Types utilities
*/
define(["exports"], function (exports) {
"use strict";
define(function () {
'use strict';
/**
* Types utilities
*/
var Types = {};
var Types = {};
var UNDEFINED = void 0;
var UNDEFINED = void 0;
/**
* Checks if var exists and is an object
* @param {String or Object} v
* @return {Boolean}
*/
Types.isObj = function(v){
var isO = false;
if(typeof v === 'string'){
if(window[v] && typeof window[v] === 'object'){
isO = true;
}
} else {
if(v && typeof v === 'object'){
isO = true;
}
}
return isO;
};
/**
* Checks if var exists and is an object
* @param {String or Object} v
* @return {Boolean}
*/
Types.isObj = function (v) {
var isO = false;
if (typeof v === "string") {
if (window[v] && typeof window[v] === "object") {
isO = true;
}
} else {
if (v && typeof v === "object") {
isO = true;
}
}
return isO;
};
/**
* Checks if passed parameter is a function
* @param {Function} fn
* @return {Boolean}
*/
Types.isFn = function(fn){
return (fn && fn.constructor == Function);
};
/**
* Checks if passed parameter is a function
* @param {Function} fn
* @return {Boolean}
*/
Types.isFn = function (fn) {
return (fn && fn.constructor == Function);
};
/**
* Checks if passed param is an array
* @param {Array} obj
* @return {Boolean}
*/
Types.isArray = function(obj){
return (obj && obj.constructor == Array);
};
/**
* Checks if passed param is an array
* @param {Array} obj
* @return {Boolean}
*/
Types.isArray = function (obj) {
return (obj && obj.constructor == Array);
};
/**
* Determines if passed param is undefined
* @param {Any} o
* @return {Boolean}
*/
Types.isUndef = function(o){
return o === UNDEFINED;
};
/**
* Determines if passed param is undefined
* @param {Any} o
* @return {Boolean}
*/
Types.isUndef = function (o) {
return o === UNDEFINED;
};
return Types;
});
exports.Types = Types;
});

1
src/types.js.map Normal file
View file

@ -0,0 +1 @@
{"version":3,"sources":["src-es6/types.js"],"names":[],"mappings":";;;;;;;AAIA,MAAI,KAAK,GAAG,EAAE,CAAC;;AAEf,MAAI,SAAS,GAAG,KAAK,CAAC,CAAC;;;;;;;AAOvB,OAAK,CAAC,KAAK,GAAG,UAAS,CAAC,EAAC;AACrB,QAAI,GAAG,GAAG,KAAK,CAAC;AAChB,QAAG,OAAO,CAAC,KAAK,QAAQ,EAAC;AACrB,UAAG,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAC;AAC1C,WAAG,GAAG,IAAI,CAAC;OACd;KACJ,MAAM;AACH,UAAG,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAC;AAC1B,WAAG,GAAG,IAAI,CAAC;OACd;KACJ;AACD,WAAO,GAAG,CAAC;GACd,CAAC;;;;;;;AAOF,OAAK,CAAC,IAAI,GAAG,UAAS,EAAE,EAAC;AACrB,WAAO,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC;GAC7C,CAAC;;;;;;;AAOF,OAAK,CAAC,OAAO,GAAG,UAAS,GAAG,EAAC;AACzB,WAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;GAC5C,CAAC;;;;;;;AAOF,OAAK,CAAC,OAAO,GAAG,UAAS,CAAC,EAAC;AACvB,WAAQ,CAAC,KAAK,SAAS,CAAC;GAC3B,CAAC;;AAEF,SAAO,CAAC,KAAK,GAAG,KAAK,CAAC","file":"src-es6/types.js","sourcesContent":["/**\r\n * Types utilities\r\n */\r\n\r\nvar Types = {};\r\n\r\nvar UNDEFINED = void 0;\r\n\r\n/**\r\n * Checks if var exists and is an object\r\n * @param {String or Object} v\r\n * @return {Boolean}\r\n */\r\nTypes.isObj = function(v){\r\n var isO = false;\r\n if(typeof v === 'string'){\r\n if(window[v] && typeof window[v] === 'object'){\r\n isO = true;\r\n }\r\n } else {\r\n if(v && typeof v === 'object'){\r\n isO = true;\r\n }\r\n }\r\n return isO;\r\n};\r\n\r\n/**\r\n * Checks if passed parameter is a function\r\n * @param {Function} fn\r\n * @return {Boolean}\r\n */\r\nTypes.isFn = function(fn){\r\n return (fn && fn.constructor == Function);\r\n};\r\n\r\n/**\r\n * Checks if passed param is an array\r\n * @param {Array} obj\r\n * @return {Boolean}\r\n */\r\nTypes.isArray = function(obj){\r\n return (obj && obj.constructor == Array);\r\n};\r\n\r\n/**\r\n * Determines if passed param is undefined\r\n * @param {Any} o\r\n * @return {Boolean}\r\n */\r\nTypes.isUndef = function(o){\r\n return o === UNDEFINED;\r\n};\r\n\r\nexports.Types = Types;\r\n"]}

View file

@ -2,7 +2,7 @@ requirejs(['test-config', '../src/core'], function(config, TableFilter){
QUnit.start();
var dom = require('dom'),
var dom = require('dom').Dom,
ColOps = require('modules/colOps').ColOps;
var table = document.getElementById('demo');

View file

@ -2,7 +2,7 @@ requirejs(['test-config', '../src/core'], function(config, TableFilter){
QUnit.start();
var dom = require('dom'),
var dom = require('dom').Dom,
Loader = require('modules/loader').Loader;
var tf = new TableFilter('demo', {

View file

@ -0,0 +1,82 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TableFilter alternate rows tests</title>
<link rel="stylesheet" href="libs/qunit/qunit.css">
<link rel="stylesheet" href="../dist/filtergrid.css">
<script src="libs/qunit/qunit.js"></script>
<script>
// Defer Qunit so RequireJS can work its magic and resolve all modules.
QUnit.config.autostart = false;
QUnit.config.autoload = false;
</script>
</head>
<body>
<table id="demo" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<th>From</th>
<th>Destination</th>
<th>Road Distance (km)</th>
<th>By Air (hrs)</th>
<th>By Rail (hrs)</th>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Adelaide</td>
<td>1412</td>
<td>1.4</td>
<td>25.3</td>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Brisbane</td>
<td>982</td>
<td>1.5</td>
<td>16</td>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Canberra</td>
<td>286</td>
<td>.6</td>
<td>4.3</td>
</tr>
<tr>
<td><strong>Sydney</strong></td>
<td>Melbourne</td>
<td>872</td>
<td>1.1</td>
<td>10.5</td>
</tr>
<tr>
<td><strong>Adelaide</strong></td>
<td>Perth</td>
<td>2781</td>
<td>3.1</td>
<td>38</td>
</tr>
<tr>
<td><strong>Adelaide</strong></td>
<td>Alice Springs</td>
<td>1533</td>
<td>2</td>
<td>20.25</td>
</tr>
<tr>
<td><strong>Adelaide</strong></td>
<td>Brisbane</td>
<td>2045</td>
<td>2.15</td>
<td>40</td>
</tr>
</tbody>
</table>
<script data-main="test-rows-counter" src="../libs/requirejs/require.js"></script>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>

26
test/test-rows-counter.js Normal file
View file

@ -0,0 +1,26 @@
requirejs(['test-config', '../src/core'], function(config, TableFilter){
QUnit.start();
var dom = require('dom'),
RowsCounter = require('modules/rowsCounter').RowsCounter;
var tf = new TableFilter('demo', {
rows_counter: true
});
tf.init();
module('Sanity checks');
test('RowsCounter component', function() {
deepEqual(tf.Cpt.rowsCounter instanceof RowsCounter, true, 'RowsCounter constructor');
notEqual(tf.Cpt.rowsCounter, null, 'RowsCounter instanciated');
equal(tf.Cpt.rowsCounter.rowsCounterSpan.innerHTML, 7, 'Counter value');
});
test('RowsCounter component with paging', function() {
tf.AddPaging();
equal(tf.Cpt.rowsCounter.rowsCounterSpan.innerHTML, '1-7 / 7', 'Counter value with paging');
tf.RemovePaging();
});
});