} else if ( node.tagName.toLowerCase() === 'img' ) {
return $node.attr( 'alt' ) || ''; // handle undefined alt
} else {
- return $.map( $.makeArray( node.childNodes ), function( elem ) {
+ return $.map( $.makeArray( node.childNodes ), function ( elem ) {
// 1 is for document.ELEMENT_NODE (the constant is undefined on old browsers)
if ( elem.nodeType === 1 ) {
return getElementSortKey( elem );
nodeValue = '';
}
- if ( nodeValue !== '') {
+ if ( nodeValue !== '' ) {
if ( parsers[i].is( nodeValue, table ) ) {
concurrent++;
rowIndex++;
}
function buildParserCache( table, $headers ) {
- var rows = table.tBodies[0].rows,
- sortType,
+ var sortType, cells, len, i, parser,
+ rows = table.tBodies[0].rows,
parsers = [];
if ( rows[0] ) {
- var cells = rows[0].cells,
- len = cells.length,
- i, parser;
+ cells = rows[0].cells;
+ len = cells.length;
for ( i = 0; i < len; i++ ) {
parser = false;
/* Other utility functions */
function buildCache( table ) {
- var totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
+ var i, j, $row, cols,
+ totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
totalCells = ( table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length ) || 0,
parsers = table.config.parsers,
cache = {
normalized: []
};
- for ( var i = 0; i < totalRows; ++i ) {
+ for ( i = 0; i < totalRows; ++i ) {
// Add the table data to main data array
- var $row = $( table.tBodies[0].rows[i] ),
- cols = [];
+ $row = $( table.tBodies[0].rows[i] );
+ cols = [];
// if this is a child row, add it to the last row's children and
// continue to the next row
cache.row.push( $row );
- for ( var j = 0; j < totalCells; ++j ) {
+ for ( j = 0; j < totalCells; ++j ) {
cols.push( parsers[j].format( getElementSortKey( $row[0].cells[j] ), table, $row[0].cells[j] ) );
}
function emulateTHeadAndFoot( $table ) {
var $thead, $tfoot, i, len,
$rows = $table.find( '> tbody > tr' );
- if ( !$table.get(0).tHead ) {
+ if ( !$table.get( 0 ).tHead ) {
$thead = $( '<thead>' );
$rows.each( function () {
- if ( $(this).children( 'td' ).length ) {
+ if ( $( this ).children( 'td' ).length ) {
// This row contains a <td>, so it's not a header row
// Stop here
return false;
}
$thead.append( this );
} );
- $table.find(' > tbody:first').before( $thead );
+ $table.find( ' > tbody:first' ).before( $thead );
}
- if ( !$table.get(0).tFoot ) {
+ if ( !$table.get( 0 ).tFoot ) {
$tfoot = $( '<tfoot>' );
len = $rows.length;
for ( i = len - 1; i >= 0; i-- ) {
- if ( $( $rows[i] ).children( 'td' ).length ){
+ if ( $( $rows[i] ).children( 'td' ).length ) {
break;
}
- $tfoot.prepend( $( $rows[i] ));
+ $tfoot.prepend( $( $rows[i] ) );
}
$table.append( $tfoot );
}
colspanOffset = 0,
columns,
i,
+ rowspan,
+ colspan,
+ headerCount,
+ longestTR,
+ matrixRowIndex,
+ matrixColumnIndex,
+ exploded,
$tableHeaders = $( [] ),
$tableRows = $( 'thead:eq(0) > tr', table );
if ( $tableRows.length <= 1 ) {
$tableHeaders = $tableRows.children( 'th' );
} else {
- var rowspan,
- colspan,
- headerCount,
- longestTR,
- matrixRowIndex,
- matrixColumnIndex,
- exploded = [];
+ exploded = [];
// Loop through all the dom cells of the thead
$tableRows.each( function ( rowIndex, row ) {
- $.each( row.cells, function( columnIndex, cell ) {
+ $.each( row.cells, function ( columnIndex, cell ) {
rowspan = Number( cell.rowSpan );
colspan = Number( cell.colSpan );
} );
// We want to find the row that has the most columns (ignoring colspan)
$.each( exploded, function ( index, cellArray ) {
- headerCount = $.unique( $(cellArray) ).length;
+ headerCount = $.unique( $( cellArray ) ).length;
if ( headerCount >= maxSeen ) {
maxSeen = headerCount;
longestTR = index;
*/
function setHeadersOrder( $headers, sortList, headerToColumns ) {
// Loop through all headers to retrieve the indices of the columns the header spans across:
- $.each( headerToColumns, function( headerIndex, columns ) {
+ $.each( headerToColumns, function ( headerIndex, columns ) {
- $.each( columns, function( i, columnIndex ) {
+ $.each( columns, function ( i, columnIndex ) {
var header = $headers[headerIndex];
if ( !isValueInArray( columnIndex, sortList ) ) {
header.count = 0;
} else {
// Column shall be sorted: Apply designated count and order.
- $.each( sortList, function( j, sortColumn ) {
+ $.each( sortList, function ( j, sortColumn ) {
if ( sortColumn[0] === i ) {
header.order = sortColumn[1];
header.count = sortColumn[1] + 1;
}
function isValueInArray( v, a ) {
- var l = a.length;
- for ( var i = 0; i < l; i++ ) {
+ var i,
+ len = a.length;
+ for ( i = 0; i < len; i++ ) {
if ( a[i][0] === v ) {
return true;
}
function uniqueElements( array ) {
var uniques = [];
- $.each( array, function( index, elem ) {
+ $.each( array, function ( index, elem ) {
if ( elem !== undefined && $.inArray( elem, uniques ) === -1 ) {
uniques.push( elem );
}
}
function sortText( a, b ) {
- return ( (a < b) ? -1 : ((a > b) ? 1 : 0) );
+ return ( ( a < b ) ? -1 : ( ( a > b ) ? 1 : 0 ) );
}
function sortTextDesc( a, b ) {
- return ( (b < a) ? -1 : ((b > a) ? 1 : 0) );
+ return ( ( b < a ) ? -1 : ( ( b > a ) ? 1 : 0 ) );
}
function multisort( table, sortList, cache ) {
// We allow a trailing percent sign, which we just strip. This works fine
// if percents and regular numbers aren't being mixed.
- ts.numberRegex = new RegExp('^(' + '[-+\u2212]?[0-9][0-9,]*(\\.[0-9,]*)?(E[-+\u2212]?[0-9][0-9,]*)?' + // Fortran-style scientific
+ ts.numberRegex = new RegExp( '^(' + '[-+\u2212]?[0-9][0-9,]*(\\.[0-9,]*)?(E[-+\u2212]?[0-9][0-9,]*)?' + // Fortran-style scientific
'|' + '[-+\u2212]?' + digitClass + '+[\\s\\xa0]*%?' + // Generic localised
- ')$', 'i');
+ ')$', 'i' );
}
function buildDateTable() {
// Build RegEx
// Any date formated with . , ' - or /
- ts.dateRegex[0] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i);
+ ts.dateRegex[0] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i );
// Written Month name, dmy
ts.dateRegex[1] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
// Build array of key names
for ( key in ts.collationTable ) {
// Check hasOwn to be safe
- if ( ts.collationTable.hasOwnProperty(key) ) {
- keys.push(key);
+ if ( ts.collationTable.hasOwnProperty( key ) ) {
+ keys.push( key );
}
}
if ( keys.length ) {
}
ts.rgx = {
IPAddress: [
- new RegExp( /^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/)
+ new RegExp( /^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/ )
],
currency: [
- new RegExp( /(^[£$€¥]|[£$€¥]$)/),
- new RegExp( /[£$€¥]/g)
+ new RegExp( /(^[£$€¥]|[£$€¥]$)/ ),
+ new RegExp( /[£$€¥]/g )
],
url: [
- new RegExp( /^(https?|ftp|file):\/\/$/),
- new RegExp( /(https?|ftp|file):\/\//)
+ new RegExp( /^(https?|ftp|file):\/\/$/ ),
+ new RegExp( /(https?|ftp|file):\/\// )
],
isoDate: [
- new RegExp( /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/)
+ new RegExp( /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/ )
],
usLongDate: [
- new RegExp( /^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/)
+ new RegExp( /^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/ )
],
time: [
- new RegExp( /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/)
+ new RegExp( /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/ )
]
};
}
function convertSortList( sortObjects ) {
var sortList = [];
- $.each( sortObjects, function( i, sortObject ) {
- $.each ( sortObject, function( columnIndex, order ) {
+ $.each( sortObjects, function ( i, sortObject ) {
+ $.each( sortObject, function ( columnIndex, order ) {
var orderIndex = ( order === 'desc' ) ? 1 : 0;
sortList.push( [parseInt( columnIndex, 10 ), orderIndex] );
} );
// Legacy fix of .sortbottoms
// Wrap them inside inside a tfoot (because that's what they actually want to be) &
// and put the <tfoot> at the end of the <table>
- var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
+ var $tfoot,
+ $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
if ( $sortbottoms.length ) {
- var $tfoot = $table.children( 'tfoot' );
+ $tfoot = $table.children( 'tfoot' );
if ( $tfoot.length ) {
- $tfoot.eq(0).prepend( $sortbottoms );
+ $tfoot.eq( 0 ).prepend( $sortbottoms );
} else {
$table.append( $( '<tfoot>' ).append( $sortbottoms ) );
}
// Apply event handling to headers
// this is too big, perhaps break it out?
$headers.not( '.' + table.config.unsortableClass ).on( 'keypress click', function ( e ) {
+ var cell, columns, newSortList, i,
+ totalRows,
+ j, s, o;
+
if ( e.type === 'click' && e.target.nodeName.toLowerCase() === 'a' ) {
// The user clicked on a link inside a table header.
// Do nothing and let the default link click action continue.
// cells get event .change() and bubbles up to the <table> here
cache = buildCache( table );
- var totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
+ totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
if ( !table.sortDisabled && totalRows > 0 ) {
// Get current column sort order
this.order = this.count % 2;
this.count++;
- var cell, columns, newSortList, i;
-
cell = this;
// Get current column index
columns = table.headerToColumns[ this.headerIndex ];
newSortList = $.map( columns, function ( c ) {
// jQuery "helpfully" flattens the arrays...
return [[c, cell.order]];
- });
+ } );
// Index of first column belonging to this header
i = columns[0];
if ( isValueInArray( i, config.sortList ) ) {
// The user has clicked on an already sorted column.
// Reverse the sorting direction for all tables.
- for ( var j = 0; j < config.sortList.length; j++ ) {
- var s = config.sortList[j],
- o = config.headerList[s[0]];
+ for ( j = 0; j < config.sortList.length; j++ ) {
+ s = config.sortList[j];
+ o = config.headerList[s[0]];
if ( isValueInArray( s[0], newSortList ) ) {
o.count = s[1];
o.count++;
},
addParser: function ( parser ) {
- var l = parsers.length,
+ var i,
+ len = parsers.length,
a = true;
- for ( var i = 0; i < l; i++ ) {
+ for ( i = 0; i < len; i++ ) {
if ( parsers[i].id.toLowerCase() === parser.id.toLowerCase() ) {
a = false;
}
if ( ts.transformTable !== false ) {
out = '';
for ( p = 0; p < s.length; p++ ) {
- c = s.charAt(p);
+ c = s.charAt( p );
if ( c in ts.transformTable ) {
out += ts.transformTable[c];
} else {
},
formatFloat: function ( s ) {
- var i = parseFloat(s);
+ var i = parseFloat( s );
return isNaN( i ) ? 0 : i;
},
ts.addParser( {
id: 'IPAddress',
is: function ( s ) {
- return ts.rgx.IPAddress[0].test(s);
+ return ts.rgx.IPAddress[0].test( s );
},
format: function ( s ) {
- var a = s.split( '.' ),
+ var i, item,
+ a = s.split( '.' ),
r = '',
- l = a.length;
- for ( var i = 0; i < l; i++ ) {
- var item = a[i];
+ len = a.length;
+ for ( i = 0; i < len; i++ ) {
+ item = a[i];
if ( item.length === 1 ) {
r += '00' + item;
} else if ( item.length === 2 ) {
r += item;
}
}
- return $.tablesorter.formatFloat(r);
+ return $.tablesorter.formatFloat( r );
},
type: 'numeric'
} );
ts.addParser( {
id: 'currency',
is: function ( s ) {
- return ts.rgx.currency[0].test(s);
+ return ts.rgx.currency[0].test( s );
},
format: function ( s ) {
return $.tablesorter.formatDigit( s.replace( ts.rgx.currency[1], '' ) );
ts.addParser( {
id: 'url',
is: function ( s ) {
- return ts.rgx.url[0].test(s);
+ return ts.rgx.url[0].test( s );
},
format: function ( s ) {
return $.trim( s.replace( ts.rgx.url[1], '' ) );
ts.addParser( {
id: 'isoDate',
is: function ( s ) {
- return ts.rgx.isoDate[0].test(s);
+ return ts.rgx.isoDate[0].test( s );
},
format: function ( s ) {
- return $.tablesorter.formatFloat((s !== '') ? new Date(s.replace(
- new RegExp( /-/g), '/')).getTime() : '0' );
+ return $.tablesorter.formatFloat( ( s !== '' ) ? new Date( s.replace(
+ new RegExp( /-/g ), '/' ) ).getTime() : '0' );
},
type: 'numeric'
} );
ts.addParser( {
id: 'usLongDate',
is: function ( s ) {
- return ts.rgx.usLongDate[0].test(s);
+ return ts.rgx.usLongDate[0].test( s );
},
format: function ( s ) {
- return $.tablesorter.formatFloat( new Date(s).getTime() );
+ return $.tablesorter.formatFloat( new Date( s ).getTime() );
},
type: 'numeric'
} );
ts.addParser( {
id: 'date',
is: function ( s ) {
- return ( ts.dateRegex[0].test(s) || ts.dateRegex[1].test(s) || ts.dateRegex[2].test(s ));
+ return ( ts.dateRegex[0].test( s ) || ts.dateRegex[1].test( s ) || ts.dateRegex[2].test( s ) );
},
format: function ( s ) {
- var match;
+ var match, y;
s = $.trim( s.toLowerCase() );
if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) {
s[2] = '0' + s[2];
}
- var y;
- if ( ( y = parseInt( s[0], 10) ) < 100 ) {
+ if ( ( y = parseInt( s[0], 10 ) ) < 100 ) {
// Guestimate years without centuries
if ( y < 30 ) {
s[0] = 2000 + y;
ts.addParser( {
id: 'time',
is: function ( s ) {
- return ts.rgx.time[0].test(s);
+ return ts.rgx.time[0].test( s );
},
format: function ( s ) {
return $.tablesorter.formatFloat( new Date( '2000/01/01 ' + s ).getTime() );
ts.addParser( {
id: 'number',
is: function ( s ) {
- return $.tablesorter.numberRegex.test( $.trim( s ));
+ return $.tablesorter.numberRegex.test( $.trim( s ) );
},
format: function ( s ) {
- return $.tablesorter.formatDigit(s);
+ return $.tablesorter.formatDigit( s );
},
type: 'numeric'
} );