mirror of
https://github.com/koalyptus/TableFilter.git
synced 2024-05-12 19:36:41 +02:00
added src-es6 folder
This commit is contained in:
parent
e8fba7cedd
commit
5a3a989af0
21
Gruntfile.js
21
Gruntfile.js
|
@ -18,6 +18,7 @@ module.exports = function (grunt) {
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
files: [
|
files: [
|
||||||
|
'src-es6/**/*.js',
|
||||||
'src/**/*.js',
|
'src/**/*.js',
|
||||||
'src/**/*.css',
|
'src/**/*.css',
|
||||||
'src/**/*.html'
|
'src/**/*.html'
|
||||||
|
@ -100,20 +101,6 @@ module.exports = function (grunt) {
|
||||||
copy: {
|
copy: {
|
||||||
main: {
|
main: {
|
||||||
files: [
|
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_Modules/', dest: '<%= dist_folder %>TF_Modules/', expand: true },
|
||||||
{ src: ['**'], cwd: '<%= source_folder %>TF_Themes/', dest: '<%= dist_folder %>TF_Themes/', expand: true }
|
{ src: ['**'], cwd: '<%= source_folder %>TF_Themes/', dest: '<%= dist_folder %>TF_Themes/', expand: true }
|
||||||
]
|
]
|
||||||
|
@ -133,9 +120,9 @@ module.exports = function (grunt) {
|
||||||
build:{
|
build:{
|
||||||
files: [{
|
files: [{
|
||||||
expand: true,
|
expand: true,
|
||||||
cwd: '<%= source_folder %>es6-modules',
|
cwd: 'src-es6',
|
||||||
src: ['**/*.js'],
|
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
|
// This is the default task being executed if Grunt
|
||||||
// is called without any further parameter.
|
// 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('dev', ['jshint', '6to5', 'concat', 'cssmin', 'copy']);
|
||||||
grunt.registerTask('toes5', ['6to5']);
|
grunt.registerTask('toes5', ['6to5']);
|
||||||
grunt.registerTask('test', ['qunit']);
|
grunt.registerTask('test', ['qunit']);
|
||||||
|
|
71
dist/TF_Modules/tf_alternateRows.js
vendored
Normal file
71
dist/TF_Modules/tf_alternateRows.js
vendored
Normal 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
271
dist/TF_Modules/tf_colOps.js
vendored
Normal 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
163
dist/TF_Modules/tf_cookies.js
vendored
Normal 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
53
dist/TF_Modules/tf_extensions.js
vendored
Normal 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
253
dist/TF_Modules/tf_ezEditTable.js
vendored
Normal 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
95
dist/TF_Modules/tf_fixedHeaders.js
vendored
Normal 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
307
dist/TF_Modules/tf_gridLayout.js
vendored
Normal 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
97
dist/TF_Modules/tf_highlightKeywords.js
vendored
Normal 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
72
dist/TF_Modules/tf_loader.js
vendored
Normal 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
2
dist/filtergrid.css
vendored
|
@ -1,6 +1,6 @@
|
||||||
/*------------------------------------------------------------------------
|
/*------------------------------------------------------------------------
|
||||||
- TableFilter stylesheet by Max Guglielmi
|
- 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
|
- Edit below for your projects' needs
|
||||||
------------------------------------------------------------------------*/
|
------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
10
dist/tablefilter.js
vendored
10
dist/tablefilter.js
vendored
File diff suppressed because one or more lines are too long
|
@ -84,6 +84,7 @@
|
||||||
col_0: 'select',
|
col_0: 'select',
|
||||||
col_3: 'checklist',
|
col_3: 'checklist',
|
||||||
base_path: '../dist/',
|
base_path: '../dist/',
|
||||||
|
rows_counter: true,
|
||||||
enable_default_theme: true,
|
enable_default_theme: true,
|
||||||
paging: false,
|
paging: false,
|
||||||
alternate_rows: true,
|
alternate_rows: true,
|
||||||
|
|
28
src-es6/array.js
Normal file
28
src-es6/array.js
Normal 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
58
src-es6/cookie.js
Normal 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
165
src-es6/date.js
Normal 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
159
src-es6/dom.js
Normal 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
11
src-es6/helpers.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/**
|
||||||
|
* Misc helpers
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Helpers = {
|
||||||
|
isIE: function(){
|
||||||
|
return (/msie|MSIE/).test(navigator.userAgent);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Helpers = Helpers;
|
|
@ -1,4 +1,4 @@
|
||||||
import * as dom from '../dom';
|
import {Dom} from '../dom';
|
||||||
|
|
||||||
export class AlternateRows{
|
export class AlternateRows{
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ export class AlternateRows{
|
||||||
/**
|
/**
|
||||||
* Sets alternating rows color
|
* Sets alternating rows color
|
||||||
*/
|
*/
|
||||||
set() {
|
init() {
|
||||||
if(!this.tf.hasGrid && !this.tf.isFirstLoad){
|
if(!this.tf.hasGrid && !this.tf.isFirstLoad){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ export class AlternateRows{
|
||||||
var rows = this.tf.tbl.rows;
|
var rows = this.tf.tbl.rows;
|
||||||
var i = !idx ? rowIdx : idx;
|
var i = !idx ? rowIdx : idx;
|
||||||
this.removeRowBg(rowIdx);
|
this.removeRowBg(rowIdx);
|
||||||
dom.addClass(
|
Dom.addClass(
|
||||||
rows[rowIdx],
|
rows[rowIdx],
|
||||||
(i%2) ? this.evenCss : this.oddCss
|
(i%2) ? this.evenCss : this.oddCss
|
||||||
);
|
);
|
||||||
|
@ -69,8 +69,8 @@ export class AlternateRows{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var rows = this.tf.tbl.rows;
|
var rows = this.tf.tbl.rows;
|
||||||
dom.removeClass(rows[idx], this.oddCss);
|
Dom.removeClass(rows[idx], this.oddCss);
|
||||||
dom.removeClass(rows[idx], this.evenCss);
|
Dom.removeClass(rows[idx], this.evenCss);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,5 +1,5 @@
|
||||||
import * as dom from '../dom';
|
import {Dom} from '../dom';
|
||||||
import * as str from '../string';
|
import {Str} from '../string';
|
||||||
|
|
||||||
export class ColOps{
|
export class ColOps{
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ export class ColOps{
|
||||||
* (1) optimized the routine (now it will only process each column once),
|
* (1) optimized the routine (now it will only process each column once),
|
||||||
* (2) added calculations for the median, lower and upper quartile.
|
* (2) added calculations for the median, lower and upper quartile.
|
||||||
*/
|
*/
|
||||||
set() {
|
calc() {
|
||||||
if(!this.tf.isFirstLoad && !this.tf.hasGrid){
|
if(!this.tf.isFirstLoad && !this.tf.hasGrid){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -69,9 +69,9 @@ export class ColOps{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(str.lower(typeof labelId)=='object' &&
|
if(Str.lower(typeof labelId)=='object' &&
|
||||||
str.lower(typeof colIndex)=='object' &&
|
Str.lower(typeof colIndex)=='object' &&
|
||||||
str.lower(typeof operation)=='object'){
|
Str.lower(typeof operation)=='object'){
|
||||||
var row = this.tf.tbl.rows,
|
var row = this.tf.tbl.rows,
|
||||||
colvalues = [];
|
colvalues = [];
|
||||||
|
|
||||||
|
@ -110,11 +110,11 @@ export class ColOps{
|
||||||
for(var k=0; k<colIndex.length; k++){
|
for(var k=0; k<colIndex.length; k++){
|
||||||
if(colIndex[k] === ucolIndex[ucol]){
|
if(colIndex[k] === ucolIndex[ucol]){
|
||||||
mThisCol++;
|
mThisCol++;
|
||||||
opsThisCol[mThisCol]=str.lower(operation[k]);
|
opsThisCol[mThisCol]=Str.lower(operation[k]);
|
||||||
decThisCol[mThisCol]=decimalPrecision[k];
|
decThisCol[mThisCol]=decimalPrecision[k];
|
||||||
labThisCol[mThisCol]=labelId[k];
|
labThisCol[mThisCol]=labelId[k];
|
||||||
oTypeThisCol = outputType !== undefined &&
|
oTypeThisCol = outputType !== undefined &&
|
||||||
str.lower(typeof outputType)==='object' ?
|
Str.lower(typeof outputType)==='object' ?
|
||||||
outputType[k] : null;
|
outputType[k] : null;
|
||||||
|
|
||||||
switch(opsThisCol[mThisCol]){
|
switch(opsThisCol[mThisCol]){
|
||||||
|
@ -249,24 +249,24 @@ export class ColOps{
|
||||||
if(oTypeThisCol && result){
|
if(oTypeThisCol && result){
|
||||||
result = result.toFixed( precision );
|
result = result.toFixed( precision );
|
||||||
|
|
||||||
if(dom.id(labThisCol[i])){
|
if(Dom.id(labThisCol[i])){
|
||||||
switch( str.lower(oTypeThisCol) ){
|
switch( Str.lower(oTypeThisCol) ){
|
||||||
case 'innerhtml':
|
case 'innerhtml':
|
||||||
if (isNaN(result) || !isFinite(result) ||
|
if (isNaN(result) || !isFinite(result) ||
|
||||||
nbvalues===0){
|
nbvalues===0){
|
||||||
dom.id(labThisCol[i]).innerHTML = '.';
|
Dom.id(labThisCol[i]).innerHTML = '.';
|
||||||
} else{
|
} else{
|
||||||
dom.id(labThisCol[i]).innerHTML = result;
|
Dom.id(labThisCol[i]).innerHTML = result;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'setvalue':
|
case 'setvalue':
|
||||||
dom.id( labThisCol[i] ).value = result;
|
Dom.id( labThisCol[i] ).value = result;
|
||||||
break;
|
break;
|
||||||
case 'createtextnode':
|
case 'createtextnode':
|
||||||
var oldnode = dom.id(labThisCol[i])
|
var oldnode = Dom.id(labThisCol[i])
|
||||||
.firstChild;
|
.firstChild;
|
||||||
var txtnode = dom.text(result);
|
var txtnode = Dom.text(result);
|
||||||
dom.id(labThisCol[i])
|
Dom.id(labThisCol[i])
|
||||||
.replaceChild(txtnode, oldnode);
|
.replaceChild(txtnode, oldnode);
|
||||||
break;
|
break;
|
||||||
}//switch
|
}//switch
|
||||||
|
@ -275,9 +275,9 @@ export class ColOps{
|
||||||
try{
|
try{
|
||||||
if(isNaN(result) || !isFinite(result) ||
|
if(isNaN(result) || !isFinite(result) ||
|
||||||
nbvalues===0){
|
nbvalues===0){
|
||||||
dom.id(labThisCol[i]).innerHTML = '.';
|
Dom.id(labThisCol[i]).innerHTML = '.';
|
||||||
} else {
|
} else {
|
||||||
dom.id(labThisCol[i]).innerHTML =
|
Dom.id(labThisCol[i]).innerHTML =
|
||||||
result.toFixed(precision);
|
result.toFixed(precision);
|
||||||
}
|
}
|
||||||
} catch(e) {}//catch
|
} catch(e) {}//catch
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import * as dom from '../dom';
|
import {Dom} from '../dom';
|
||||||
import * as types from '../types';
|
import {Types} from '../types';
|
||||||
|
|
||||||
var global = window;
|
var global = window;
|
||||||
|
|
||||||
|
@ -27,28 +27,28 @@ export class Loader{
|
||||||
//delay for hiding loader
|
//delay for hiding loader
|
||||||
tf.loaderCloseDelay = 200;
|
tf.loaderCloseDelay = 200;
|
||||||
//callback function before loader is displayed
|
//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;
|
f.on_show_loader : null;
|
||||||
//callback function after loader is closed
|
//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;
|
f.on_hide_loader : null;
|
||||||
|
|
||||||
this.tf = tf;
|
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;
|
containerDiv.className = tf.loaderCssClass;
|
||||||
|
|
||||||
var targetEl = !tf.loaderTgtId ?
|
var targetEl = !tf.loaderTgtId ?
|
||||||
(tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) :
|
(tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) :
|
||||||
dom.id(tf.loaderTgtId);
|
Dom.id(tf.loaderTgtId);
|
||||||
if(!tf.loaderTgtId){
|
if(!tf.loaderTgtId){
|
||||||
targetEl.insertBefore(containerDiv, tf.tbl);
|
targetEl.insertBefore(containerDiv, tf.tbl);
|
||||||
} else {
|
} else {
|
||||||
targetEl.appendChild(containerDiv);
|
targetEl.appendChild(containerDiv);
|
||||||
}
|
}
|
||||||
tf.loaderDiv = dom.id(tf.prfxLoader+tf.id);
|
tf.loaderDiv = Dom.id(tf.prfxLoader+tf.id);
|
||||||
if(!tf.loaderHtml){
|
if(!tf.loaderHtml){
|
||||||
tf.loaderDiv.appendChild(dom.text(tf.loaderText));
|
tf.loaderDiv.appendChild(Dom.text(tf.loaderText));
|
||||||
} else {
|
} else {
|
||||||
tf.loaderDiv.innerHTML = tf.loaderHtml;
|
tf.loaderDiv.innerHTML = tf.loaderHtml;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ export class Loader{
|
||||||
}
|
}
|
||||||
var targetEl = !this.tf.loaderTgtId ?
|
var targetEl = !this.tf.loaderTgtId ?
|
||||||
(this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode):
|
(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);
|
targetEl.removeChild(this.tf.loaderDiv);
|
||||||
this.tf.loaderDiv = null;
|
this.tf.loaderDiv = null;
|
||||||
}
|
}
|
138
src-es6/modules/rowsCounter.js
Normal file
138
src-es6/modules/rowsCounter.js
Normal 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
46
src-es6/string.js
Normal 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
55
src-es6/types.js
Normal 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;
|
51
src/array.js
51
src/array.js
|
@ -1,32 +1,29 @@
|
||||||
/**
|
define(["exports", "string"], function (exports, _string) {
|
||||||
* Array utilities
|
"use strict";
|
||||||
*/
|
|
||||||
|
|
||||||
define(function (require) {
|
var Str = _string.Str;
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var str = require('./string');
|
|
||||||
|
|
||||||
var Arr = {
|
var Arr = {
|
||||||
has: function(arr, val, caseSensitive){
|
has: function (arr, val, caseSensitive) {
|
||||||
var sCase = caseSensitive===undefined ? false : caseSensitive;
|
var sCase = caseSensitive === undefined ? false : caseSensitive;
|
||||||
for (var i=0; i<arr.length; i++){
|
for (var i = 0; i < arr.length; i++) {
|
||||||
if(str.matchCase(arr[i].toString(), sCase) == val){
|
if (Str.matchCase(arr[i].toString(), sCase) == val) {
|
||||||
return true;
|
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 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
1
src/array.js.map
Normal 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"]}
|
106
src/cookie.js
106
src/cookie.js
|
@ -1,62 +1,60 @@
|
||||||
/**
|
define(["exports"], function (exports) {
|
||||||
* Cookie utilities
|
"use strict";
|
||||||
*/
|
|
||||||
|
|
||||||
define(function () {
|
/**
|
||||||
'use strict';
|
* Cookie utilities
|
||||||
|
*/
|
||||||
|
|
||||||
var Cookie = {};
|
var Cookie = {};
|
||||||
|
|
||||||
Cookie.write = function(name, value, hours){
|
Cookie.write = function (name, value, hours) {
|
||||||
var expire = '';
|
var expire = "";
|
||||||
if(hours){
|
if (hours) {
|
||||||
expire = new Date((new Date()).getTime() + hours * 3600000);
|
expire = new Date((new Date()).getTime() + hours * 3600000);
|
||||||
expire = '; expires=' + expire.toGMTString();
|
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){
|
Cookie.remove = function (name) {
|
||||||
var cookieValue = '',
|
this.write(name, "", -1);
|
||||||
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){
|
Cookie.valueToArray = function (name, separator) {
|
||||||
this.write(name,'',-1);
|
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){
|
Cookie.getValueByIndex = function (name, index, separator) {
|
||||||
if(!separator){
|
if (!separator) {
|
||||||
separator = ',';
|
separator = ",";
|
||||||
}
|
}
|
||||||
//reads the cookie
|
//reads the cookie
|
||||||
var val = this.read(name);
|
var val = this.valueToArray(name, separator);
|
||||||
//creates an array with filters' values
|
return val[index];
|
||||||
var arr = val.split(separator);
|
};
|
||||||
return arr;
|
|
||||||
};
|
|
||||||
|
|
||||||
Cookie.getValueByIndex = function(name, index, separator){
|
exports.Cookie = Cookie;
|
||||||
if(!separator){
|
});
|
||||||
separator = ',';
|
|
||||||
}
|
|
||||||
//reads the cookie
|
|
||||||
var val = this.valueToArray(name, separator);
|
|
||||||
return val[index];
|
|
||||||
};
|
|
||||||
|
|
||||||
return Cookie;
|
|
||||||
});
|
|
1
src/cookie.js.map
Normal file
1
src/cookie.js.map
Normal 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"]}
|
176
src/core.js
176
src/core.js
|
@ -12,16 +12,16 @@
|
||||||
define(function (require) {
|
define(function (require) {
|
||||||
|
|
||||||
var global = this,
|
var global = this,
|
||||||
TF = global.TF,
|
|
||||||
evt = require('event'),
|
evt = require('event'),
|
||||||
dom = require('dom'),
|
dom = require('dom').Dom,
|
||||||
str = require('string'),
|
str = require('string').Str,
|
||||||
cookie = require('cookie'),
|
cookie = require('cookie').Cookie,
|
||||||
types = require('types'),
|
types = require('types').Types,
|
||||||
array = require('array'),
|
array = require('array').Arr,
|
||||||
hlp = require('helpers'),
|
hlp = require('helpers').Helpers,
|
||||||
isValidDate = require('date').isValid,
|
dateHelper = require('date').DateHelper,
|
||||||
formatDate = require('date').format,
|
isValidDate = dateHelper.isValid,
|
||||||
|
formatDate = dateHelper.format,
|
||||||
doc = global.document;
|
doc = global.document;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -676,7 +676,8 @@ function TableFilter(id) {
|
||||||
this.Cpt = {
|
this.Cpt = {
|
||||||
loader: null,
|
loader: null,
|
||||||
alternateRows: null,
|
alternateRows: null,
|
||||||
colOps: null
|
colOps: null,
|
||||||
|
rowsCounter: null
|
||||||
};
|
};
|
||||||
|
|
||||||
/*** TF events ***/
|
/*** TF events ***/
|
||||||
|
@ -1204,7 +1205,9 @@ TableFilter.prototype = {
|
||||||
|
|
||||||
/* Filter behaviours */
|
/* Filter behaviours */
|
||||||
if(this.rowsCounter){
|
if(this.rowsCounter){
|
||||||
this.SetRowsCounter();
|
var RowsCounter = require('modules/rowsCounter').RowsCounter;
|
||||||
|
this.Cpt.rowsCounter = new RowsCounter(this);
|
||||||
|
this.Cpt.rowsCounter.init();
|
||||||
}
|
}
|
||||||
if(this.statusBar){
|
if(this.statusBar){
|
||||||
this.SetStatusBar();
|
this.SetStatusBar();
|
||||||
|
@ -1231,12 +1234,12 @@ TableFilter.prototype = {
|
||||||
//1st time only if no paging and rememberGridValues
|
//1st time only if no paging and rememberGridValues
|
||||||
var AlternateRows = require('modules/alternateRows').AlternateRows;
|
var AlternateRows = require('modules/alternateRows').AlternateRows;
|
||||||
this.Cpt.alternateRows = new AlternateRows(this);
|
this.Cpt.alternateRows = new AlternateRows(this);
|
||||||
this.Cpt.alternateRows.set();
|
this.Cpt.alternateRows.init();
|
||||||
}
|
}
|
||||||
if(this.hasColOperation){
|
if(this.hasColOperation){
|
||||||
var ColOps = require('modules/colOps').ColOps;
|
var ColOps = require('modules/colOps').ColOps;
|
||||||
this.Cpt.colOps = new ColOps(this);
|
this.Cpt.colOps = new ColOps(this);
|
||||||
this.Cpt.colOps.set();
|
this.Cpt.colOps.calc();
|
||||||
}
|
}
|
||||||
if(this.sort || this.gridLayout){
|
if(this.sort || this.gridLayout){
|
||||||
this.SetSort();
|
this.SetSort();
|
||||||
|
@ -1515,7 +1518,7 @@ TableFilter.prototype = {
|
||||||
this.RemoveStatusBar();
|
this.RemoveStatusBar();
|
||||||
}
|
}
|
||||||
if(this.rowsCounter){
|
if(this.rowsCounter){
|
||||||
this.RemoveRowsCounter();
|
this.Cpt.rowsCounter.destroy();
|
||||||
}
|
}
|
||||||
if(this.btnReset){
|
if(this.btnReset){
|
||||||
this.RemoveResetBtn();
|
this.RemoveResetBtn();
|
||||||
|
@ -2029,8 +2032,9 @@ TableFilter.prototype = {
|
||||||
var fnE = ezEditConfig.on_added_dom_row;
|
var fnE = ezEditConfig.on_added_dom_row;
|
||||||
ezEditConfig.on_added_dom_row = function(){
|
ezEditConfig.on_added_dom_row = function(){
|
||||||
o.nbFilterableRows++;
|
o.nbFilterableRows++;
|
||||||
if(!o.paging){ o.RefreshNbRows(); }
|
if(!o.paging){
|
||||||
else {
|
o.Cpt.rowsCounter.refresh();
|
||||||
|
} else {
|
||||||
o.nbRows++;
|
o.nbRows++;
|
||||||
o.nbVisibleRows++;
|
o.nbVisibleRows++;
|
||||||
o.nbFilterableRows++;
|
o.nbFilterableRows++;
|
||||||
|
@ -2039,7 +2043,7 @@ TableFilter.prototype = {
|
||||||
o.AddPaging(false);
|
o.AddPaging(false);
|
||||||
}
|
}
|
||||||
if(o.alternateBgs){
|
if(o.alternateBgs){
|
||||||
o.Cpt.alternateRows.set();
|
o.Cpt.alternateRows.init();
|
||||||
}
|
}
|
||||||
if(fnE){
|
if(fnE){
|
||||||
fnE.call(null, arguments[0], arguments[1], arguments[2]);
|
fnE.call(null, arguments[0], arguments[1], arguments[2]);
|
||||||
|
@ -2049,8 +2053,9 @@ TableFilter.prototype = {
|
||||||
var fnF = ezEditConfig.actions['delete'].on_after_submit;
|
var fnF = ezEditConfig.actions['delete'].on_after_submit;
|
||||||
ezEditConfig.actions['delete'].on_after_submit = function(){
|
ezEditConfig.actions['delete'].on_after_submit = function(){
|
||||||
o.nbFilterableRows--;
|
o.nbFilterableRows--;
|
||||||
if(!o.paging){ o.RefreshNbRows(); }
|
if(!o.paging){
|
||||||
else {
|
o.Cpt.rowsCounter.refresh();
|
||||||
|
} else {
|
||||||
o.nbRows--;
|
o.nbRows--;
|
||||||
o.nbVisibleRows--;
|
o.nbVisibleRows--;
|
||||||
o.nbFilterableRows--;
|
o.nbFilterableRows--;
|
||||||
|
@ -2059,7 +2064,7 @@ TableFilter.prototype = {
|
||||||
o.AddPaging(false);
|
o.AddPaging(false);
|
||||||
}
|
}
|
||||||
if(o.alternateBgs){
|
if(o.alternateBgs){
|
||||||
o.Cpt.alternateRows.set();
|
o.Cpt.alternateRows.init();
|
||||||
}
|
}
|
||||||
if(fnF){
|
if(fnF){
|
||||||
fnF.call(null, arguments[0], arguments[1]);
|
fnF.call(null, arguments[0], arguments[1]);
|
||||||
|
@ -2531,7 +2536,7 @@ TableFilter.prototype = {
|
||||||
r.style.display = '';
|
r.style.display = '';
|
||||||
}
|
}
|
||||||
if(this.alternateBgs){
|
if(this.alternateBgs){
|
||||||
this.Cpt.alternateRows(this.validRowsIndex[h], h);
|
this.Cpt.alternateRows.setRowBg(this.validRowsIndex[h], h);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
r.style.display = 'none';
|
r.style.display = 'none';
|
||||||
|
@ -3800,129 +3805,6 @@ TableFilter.prototype = {
|
||||||
global.setTimeout(setMsg, d);
|
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
|
- inserts or removes input watermark
|
||||||
- Params:
|
- Params:
|
||||||
|
@ -4130,7 +4012,7 @@ TableFilter.prototype = {
|
||||||
//New pointerX calc taking into account scrollLeft
|
//New pointerX calc taking into account scrollLeft
|
||||||
if(!o.isPointerXOverwritten){
|
if(!o.isPointerXOverwritten){
|
||||||
try{
|
try{
|
||||||
TF.Evt.pointerX = function(e){
|
o.Evt.pointerX = function(e){
|
||||||
e = e || global.event;
|
e = e || global.event;
|
||||||
var scrollLeft = tf_StandardBody().scrollLeft +
|
var scrollLeft = tf_StandardBody().scrollLeft +
|
||||||
_o.scrollLeft;
|
_o.scrollLeft;
|
||||||
|
@ -5196,7 +5078,7 @@ TableFilter.prototype = {
|
||||||
}
|
}
|
||||||
//makes operation on a col
|
//makes operation on a col
|
||||||
if(this.hasColOperation){
|
if(this.hasColOperation){
|
||||||
this.Cpt.colOps.set();
|
this.Cpt.colOps.calc();
|
||||||
}
|
}
|
||||||
//re-populates drop-down filters
|
//re-populates drop-down filters
|
||||||
if(this.refreshFilters){
|
if(this.refreshFilters){
|
||||||
|
@ -5206,7 +5088,7 @@ TableFilter.prototype = {
|
||||||
this.nbVisibleRows - this.visibleRows.length : this.nbVisibleRows;
|
this.nbVisibleRows - this.visibleRows.length : this.nbVisibleRows;
|
||||||
//refreshes rows counter
|
//refreshes rows counter
|
||||||
if(this.rowsCounter){
|
if(this.rowsCounter){
|
||||||
this.RefreshNbRows(nr);
|
this.Cpt.rowsCounter.refresh(nr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.inpWatermark !== ''){
|
if(this.inpWatermark !== ''){
|
||||||
|
|
321
src/date.js
321
src/date.js
|
@ -1,169 +1,160 @@
|
||||||
/**
|
define(["exports"], function (exports) {
|
||||||
* Date utilities
|
"use strict";
|
||||||
*/
|
|
||||||
|
|
||||||
define(function () {
|
/**
|
||||||
'use strict';
|
* Date utilities
|
||||||
|
*/
|
||||||
|
|
||||||
var DateHelper = {
|
var DateHelper = {
|
||||||
isValid: function(dateStr, format){
|
isValid: function (dateStr, format) {
|
||||||
if(!format) {
|
if (!format) {
|
||||||
format = 'DMY';
|
format = "DMY";
|
||||||
}
|
}
|
||||||
format = format.toUpperCase();
|
format = format.toUpperCase();
|
||||||
if(format.length != 3) {
|
if (format.length != 3) {
|
||||||
if(format==='DDMMMYYYY'){
|
if (format === "DDMMMYYYY") {
|
||||||
var d = this.format(dateStr, format);
|
var d = this.format(dateStr, format);
|
||||||
dateStr = d.getDate() +'/'+ (d.getMonth()+1) +'/'+
|
dateStr = d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear();
|
||||||
d.getFullYear();
|
format = "DMY";
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
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
1
src/date.js.map
Normal file
File diff suppressed because one or more lines are too long
307
src/dom.js
307
src/dom.js
|
@ -1,163 +1,156 @@
|
||||||
/**
|
define(["exports"], function (exports) {
|
||||||
* DOM utilities
|
"use strict";
|
||||||
*/
|
|
||||||
|
|
||||||
define(function (require) {
|
/**
|
||||||
'use strict';
|
* DOM utilities
|
||||||
|
*/
|
||||||
|
|
||||||
var Dom = {};
|
var Dom = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns text + text of children of given node
|
* Returns text + text of children of given node
|
||||||
* @param {NodeElement} node
|
* @param {NodeElement} node
|
||||||
* @return {String}
|
* @return {String}
|
||||||
*/
|
*/
|
||||||
Dom.getText = function(node){
|
Dom.getText = function (node) {
|
||||||
var s = node.textContent || node.innerText ||
|
var s = node.textContent || node.innerText || node.innerHTML.replace(/<[^<>]+>/g, "");
|
||||||
node.innerHTML.replace(/<[^<>]+>/g, '');
|
s = s.replace(/^\s+/, "").replace(/\s+$/, "");
|
||||||
s = s.replace(/^\s+/, '').replace(/\s+$/, '');
|
return s;
|
||||||
return s;
|
};
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an html element with given collection of attributes
|
* Creates an html element with given collection of attributes
|
||||||
* @param {String} tag a string of the html tag to create
|
* @param {String} tag a string of the html tag to create
|
||||||
* @param {Array} an undetermined number of arrays containing the with 2
|
* @param {Array} an undetermined number of arrays containing the with 2
|
||||||
* items, the attribute name and its value ['id','myId']
|
* items, the attribute name and its value ['id','myId']
|
||||||
* @return {Object} created element
|
* @return {Object} created element
|
||||||
*/
|
*/
|
||||||
Dom.create = function(tag){
|
Dom.create = function (tag) {
|
||||||
if(!tag || tag===''){
|
if (!tag || tag === "") {
|
||||||
return;
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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
1
src/dom.js.map
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,15 +1,15 @@
|
||||||
/**
|
define(["exports"], function (exports) {
|
||||||
* Misc helpers
|
"use strict";
|
||||||
*/
|
|
||||||
|
|
||||||
define(function (require) {
|
/**
|
||||||
'use strict';
|
* Misc helpers
|
||||||
|
*/
|
||||||
|
|
||||||
var Helpers = {
|
var Helpers = {
|
||||||
isIE: function(){
|
isIE: function () {
|
||||||
return (/msie|MSIE/).test(navigator.userAgent);
|
return (/msie|MSIE/).test(navigator.userAgent);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return Helpers;
|
exports.Helpers = Helpers;
|
||||||
});
|
});
|
1
src/helpers.js.map
Normal file
1
src/helpers.js.map
Normal 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"]}
|
|
@ -73,8 +73,9 @@
|
||||||
col_0: 'select',
|
col_0: 'select',
|
||||||
col_3: 'checklist',
|
col_3: 'checklist',
|
||||||
base_path: './',
|
base_path: './',
|
||||||
|
rows_counter: true,
|
||||||
enable_default_theme: true,
|
enable_default_theme: true,
|
||||||
paging: false,
|
paging: true,
|
||||||
alternate_rows: true,
|
alternate_rows: true,
|
||||||
highlight_keywords: true,
|
highlight_keywords: true,
|
||||||
match_case: false,
|
match_case: false,
|
||||||
|
|
|
@ -6,7 +6,7 @@ define(["exports", "../dom"], function (exports, _dom) {
|
||||||
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
};
|
};
|
||||||
|
|
||||||
var dom = _dom;
|
var Dom = _dom.Dom;
|
||||||
var AlternateRows = (function () {
|
var AlternateRows = (function () {
|
||||||
var AlternateRows = function AlternateRows(tf) {
|
var AlternateRows = function AlternateRows(tf) {
|
||||||
var f = tf.fObj;
|
var f = tf.fObj;
|
||||||
|
@ -19,7 +19,7 @@ define(["exports", "../dom"], function (exports, _dom) {
|
||||||
};
|
};
|
||||||
|
|
||||||
_classProps(AlternateRows, null, {
|
_classProps(AlternateRows, null, {
|
||||||
set: {
|
init: {
|
||||||
writable: true,
|
writable: true,
|
||||||
value: function () {
|
value: function () {
|
||||||
if (!this.tf.hasGrid && !this.tf.isFirstLoad) {
|
if (!this.tf.hasGrid && !this.tf.isFirstLoad) {
|
||||||
|
@ -50,7 +50,7 @@ define(["exports", "../dom"], function (exports, _dom) {
|
||||||
var rows = this.tf.tbl.rows;
|
var rows = this.tf.tbl.rows;
|
||||||
var i = !idx ? rowIdx : idx;
|
var i = !idx ? rowIdx : idx;
|
||||||
this.removeRowBg(rowIdx);
|
this.removeRowBg(rowIdx);
|
||||||
dom.addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);
|
Dom.addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
removeRowBg: {
|
removeRowBg: {
|
||||||
|
@ -60,8 +60,8 @@ define(["exports", "../dom"], function (exports, _dom) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var rows = this.tf.tbl.rows;
|
var rows = this.tf.tbl.rows;
|
||||||
dom.removeClass(rows[idx], this.oddCss);
|
Dom.removeClass(rows[idx], this.oddCss);
|
||||||
dom.removeClass(rows[idx], this.evenCss);
|
Dom.removeClass(rows[idx], this.evenCss);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove: {
|
remove: {
|
||||||
|
|
|
@ -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"]}
|
|
@ -6,8 +6,8 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
|
||||||
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
};
|
};
|
||||||
|
|
||||||
var dom = _dom;
|
var Dom = _dom.Dom;
|
||||||
var str = _string;
|
var Str = _string.Str;
|
||||||
var ColOps = (function () {
|
var ColOps = (function () {
|
||||||
var ColOps = function ColOps(tf) {
|
var ColOps = function ColOps(tf) {
|
||||||
var f = tf.fObj;
|
var f = tf.fObj;
|
||||||
|
@ -17,7 +17,7 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
|
||||||
};
|
};
|
||||||
|
|
||||||
_classProps(ColOps, null, {
|
_classProps(ColOps, null, {
|
||||||
set: {
|
calc: {
|
||||||
writable: true,
|
writable: true,
|
||||||
value: function () {
|
value: function () {
|
||||||
if (!this.tf.isFirstLoad && !this.tf.hasGrid) {
|
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 = [];
|
var row = this.tf.tbl.rows, colvalues = [];
|
||||||
|
|
||||||
for (var ucol = 0; ucol <= ucolMax; ucol++) {
|
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++) {
|
for (var k = 0; k < colIndex.length; k++) {
|
||||||
if (colIndex[k] === ucolIndex[ucol]) {
|
if (colIndex[k] === ucolIndex[ucol]) {
|
||||||
mThisCol++;
|
mThisCol++;
|
||||||
opsThisCol[mThisCol] = str.lower(operation[k]);
|
opsThisCol[mThisCol] = Str.lower(operation[k]);
|
||||||
decThisCol[mThisCol] = decimalPrecision[k];
|
decThisCol[mThisCol] = decimalPrecision[k];
|
||||||
labThisCol[mThisCol] = labelId[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]) {
|
switch (opsThisCol[mThisCol]) {
|
||||||
case "mean":
|
case "mean":
|
||||||
|
@ -197,31 +197,31 @@ define(["exports", "../dom", "../string"], function (exports, _dom, _string) {
|
||||||
if (oTypeThisCol && result) {
|
if (oTypeThisCol && result) {
|
||||||
result = result.toFixed(precision);
|
result = result.toFixed(precision);
|
||||||
|
|
||||||
if (dom.id(labThisCol[i])) {
|
if (Dom.id(labThisCol[i])) {
|
||||||
switch (str.lower(oTypeThisCol)) {
|
switch (Str.lower(oTypeThisCol)) {
|
||||||
case "innerhtml":
|
case "innerhtml":
|
||||||
if (isNaN(result) || !isFinite(result) || nbvalues === 0) {
|
if (isNaN(result) || !isFinite(result) || nbvalues === 0) {
|
||||||
dom.id(labThisCol[i]).innerHTML = ".";
|
Dom.id(labThisCol[i]).innerHTML = ".";
|
||||||
} else {
|
} else {
|
||||||
dom.id(labThisCol[i]).innerHTML = result;
|
Dom.id(labThisCol[i]).innerHTML = result;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "setvalue":
|
case "setvalue":
|
||||||
dom.id(labThisCol[i]).value = result;
|
Dom.id(labThisCol[i]).value = result;
|
||||||
break;
|
break;
|
||||||
case "createtextnode":
|
case "createtextnode":
|
||||||
var oldnode = dom.id(labThisCol[i]).firstChild;
|
var oldnode = Dom.id(labThisCol[i]).firstChild;
|
||||||
var txtnode = dom.text(result);
|
var txtnode = Dom.text(result);
|
||||||
dom.id(labThisCol[i]).replaceChild(txtnode, oldnode);
|
Dom.id(labThisCol[i]).replaceChild(txtnode, oldnode);
|
||||||
break;
|
break;
|
||||||
} //switch
|
} //switch
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
if (isNaN(result) || !isFinite(result) || nbvalues === 0) {
|
if (isNaN(result) || !isFinite(result) || nbvalues === 0) {
|
||||||
dom.id(labThisCol[i]).innerHTML = ".";
|
Dom.id(labThisCol[i]).innerHTML = ".";
|
||||||
} else {
|
} else {
|
||||||
dom.id(labThisCol[i]).innerHTML = result.toFixed(precision);
|
Dom.id(labThisCol[i]).innerHTML = result.toFixed(precision);
|
||||||
}
|
}
|
||||||
} catch (e) {} //catch
|
} catch (e) {} //catch
|
||||||
} //else
|
} //else
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,8 +6,8 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) {
|
||||||
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
if (instanceProps) Object.defineProperties(child.prototype, instanceProps);
|
||||||
};
|
};
|
||||||
|
|
||||||
var dom = _dom;
|
var Dom = _dom.Dom;
|
||||||
var types = _types;
|
var Types = _types.Types;
|
||||||
|
|
||||||
|
|
||||||
var global = window;
|
var global = window;
|
||||||
|
@ -29,24 +29,24 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) {
|
||||||
//delay for hiding loader
|
//delay for hiding loader
|
||||||
tf.loaderCloseDelay = 200;
|
tf.loaderCloseDelay = 200;
|
||||||
//callback function before loader is displayed
|
//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
|
//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;
|
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;
|
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) {
|
if (!tf.loaderTgtId) {
|
||||||
targetEl.insertBefore(containerDiv, tf.tbl);
|
targetEl.insertBefore(containerDiv, tf.tbl);
|
||||||
} else {
|
} else {
|
||||||
targetEl.appendChild(containerDiv);
|
targetEl.appendChild(containerDiv);
|
||||||
}
|
}
|
||||||
tf.loaderDiv = dom.id(tf.prfxLoader + tf.id);
|
tf.loaderDiv = Dom.id(tf.prfxLoader + tf.id);
|
||||||
if (!tf.loaderHtml) {
|
if (!tf.loaderHtml) {
|
||||||
tf.loaderDiv.appendChild(dom.text(tf.loaderText));
|
tf.loaderDiv.appendChild(Dom.text(tf.loaderText));
|
||||||
} else {
|
} else {
|
||||||
tf.loaderDiv.innerHTML = tf.loaderHtml;
|
tf.loaderDiv.innerHTML = tf.loaderHtml;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) {
|
||||||
if (!this.tf.loaderDiv) {
|
if (!this.tf.loaderDiv) {
|
||||||
return;
|
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);
|
targetEl.removeChild(this.tf.loaderDiv);
|
||||||
this.tf.loaderDiv = null;
|
this.tf.loaderDiv = null;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
144
src/modules/rowsCounter.js
Normal file
144
src/modules/rowsCounter.js
Normal 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;
|
||||||
|
});
|
1
src/modules/rowsCounter.js.map
Normal file
1
src/modules/rowsCounter.js.map
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,50 +1,50 @@
|
||||||
/**
|
define(["exports"], function (exports) {
|
||||||
* String utilities
|
"use strict";
|
||||||
*/
|
|
||||||
|
|
||||||
define(function () {
|
/**
|
||||||
'use strict';
|
* String utilities
|
||||||
|
*/
|
||||||
|
|
||||||
var Str = {};
|
var Str = {};
|
||||||
|
|
||||||
Str.lower = function(text){
|
Str.lower = function (text) {
|
||||||
return text.toLowerCase();
|
return text.toLowerCase();
|
||||||
};
|
};
|
||||||
|
|
||||||
Str.upper = function(text){
|
Str.upper = function (text) {
|
||||||
return text.toUpperCase();
|
return text.toUpperCase();
|
||||||
};
|
};
|
||||||
|
|
||||||
Str.trim = function(text){
|
Str.trim = function (text) {
|
||||||
if (text.trim){
|
if (text.trim) {
|
||||||
return text.trim();
|
return text.trim();
|
||||||
}
|
}
|
||||||
return text.replace(/^\s*|\s*$/g, '');
|
return text.replace(/^\s*|\s*$/g, "");
|
||||||
};
|
};
|
||||||
|
|
||||||
Str.isEmpty = function(text){
|
Str.isEmpty = function (text) {
|
||||||
return this.trim(text) === '';
|
return this.trim(text) === "";
|
||||||
};
|
};
|
||||||
|
|
||||||
Str.rgxEsc = function(text){
|
Str.rgxEsc = function (text) {
|
||||||
function escape(e){
|
function escape(e) {
|
||||||
var a = new RegExp('\\'+e,'g');
|
var a = new RegExp("\\" + e, "g");
|
||||||
text = text.replace(a,'\\'+e);
|
text = text.replace(a, "\\" + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
var chars = ['\\','[','^','$','.','|','?','*','+','(',')'];
|
var chars = ["\\", "[", "^", "$", ".", "|", "?", "*", "+", "(", ")"];
|
||||||
for(var e=0; e<chars.length; e++){
|
for (var e = 0; e < chars.length; e++) {
|
||||||
escape(chars[e]);
|
escape(chars[e]);
|
||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
};
|
};
|
||||||
|
|
||||||
Str.matchCase = function(text, mc){
|
Str.matchCase = function (text, mc) {
|
||||||
if(!mc){
|
if (!mc) {
|
||||||
return this.lower(text);
|
return this.lower(text);
|
||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
};
|
};
|
||||||
|
|
||||||
return Str;
|
exports.Str = Str;
|
||||||
});
|
});
|
1
src/string.js.map
Normal file
1
src/string.js.map
Normal 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"]}
|
102
src/types.js
102
src/types.js
|
@ -1,59 +1,59 @@
|
||||||
/**
|
define(["exports"], function (exports) {
|
||||||
* Types utilities
|
"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
|
* Checks if var exists and is an object
|
||||||
* @param {String or Object} v
|
* @param {String or Object} v
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
Types.isObj = function(v){
|
Types.isObj = function (v) {
|
||||||
var isO = false;
|
var isO = false;
|
||||||
if(typeof v === 'string'){
|
if (typeof v === "string") {
|
||||||
if(window[v] && typeof window[v] === 'object'){
|
if (window[v] && typeof window[v] === "object") {
|
||||||
isO = true;
|
isO = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(v && typeof v === 'object'){
|
if (v && typeof v === "object") {
|
||||||
isO = true;
|
isO = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return isO;
|
return isO;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if passed parameter is a function
|
* Checks if passed parameter is a function
|
||||||
* @param {Function} fn
|
* @param {Function} fn
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
Types.isFn = function(fn){
|
Types.isFn = function (fn) {
|
||||||
return (fn && fn.constructor == Function);
|
return (fn && fn.constructor == Function);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if passed param is an array
|
* Checks if passed param is an array
|
||||||
* @param {Array} obj
|
* @param {Array} obj
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
Types.isArray = function(obj){
|
Types.isArray = function (obj) {
|
||||||
return (obj && obj.constructor == Array);
|
return (obj && obj.constructor == Array);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if passed param is undefined
|
* Determines if passed param is undefined
|
||||||
* @param {Any} o
|
* @param {Any} o
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
Types.isUndef = function(o){
|
Types.isUndef = function (o) {
|
||||||
return o === UNDEFINED;
|
return o === UNDEFINED;
|
||||||
};
|
};
|
||||||
|
|
||||||
return Types;
|
exports.Types = Types;
|
||||||
});
|
});
|
1
src/types.js.map
Normal file
1
src/types.js.map
Normal 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"]}
|
|
@ -2,7 +2,7 @@ requirejs(['test-config', '../src/core'], function(config, TableFilter){
|
||||||
|
|
||||||
QUnit.start();
|
QUnit.start();
|
||||||
|
|
||||||
var dom = require('dom'),
|
var dom = require('dom').Dom,
|
||||||
ColOps = require('modules/colOps').ColOps;
|
ColOps = require('modules/colOps').ColOps;
|
||||||
|
|
||||||
var table = document.getElementById('demo');
|
var table = document.getElementById('demo');
|
||||||
|
|
|
@ -2,7 +2,7 @@ requirejs(['test-config', '../src/core'], function(config, TableFilter){
|
||||||
|
|
||||||
QUnit.start();
|
QUnit.start();
|
||||||
|
|
||||||
var dom = require('dom'),
|
var dom = require('dom').Dom,
|
||||||
Loader = require('modules/loader').Loader;
|
Loader = require('modules/loader').Loader;
|
||||||
|
|
||||||
var tf = new TableFilter('demo', {
|
var tf = new TableFilter('demo', {
|
||||||
|
|
82
test/test-rows-counter.html
Normal file
82
test/test-rows-counter.html
Normal 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
26
test/test-rows-counter.js
Normal 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();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in a new issue