version bump

This commit is contained in:
Rob Garrison 2016-01-10 22:22:16 -06:00
parent 06b190a520
commit a0181a4337
16 changed files with 151 additions and 150 deletions

View File

@ -92,6 +92,31 @@ If you would like to contribute, please...
View the [complete change log here](//github.com/Mottie/tablesorter/wiki/Changes).
#### <a name="v2.25.1">Version 2.25.1</a> (1/10/2016)
* Docs:
* Update to jQuery v1.12.0.
* Fix HTML hint issues.
* Core:
* Fix time parser detection. See [issue #1107](https://github.com/Mottie/tablesorter/issues/1107).
* Add multiple widgets from table class. Fixes [issue #1109](https://github.com/Mottie/tablesorter/issues/1109).
* Fix extra header class name updating. See [issue #1116](https://github.com/Mottie/tablesorter/issues/1116).
* Fix typo in comments.
* ColumnSelector:
* Prevent remove widget js error. Fixes [issue #1106](https://github.com/Mottie/tablesorter/issues/1106).
* Add `tbody` colspan support. See [issue #1120](https://github.com/Mottie/tablesorter/issues/1120).
* Add child row colspan support. See [issue #1120](https://github.com/Mottie/tablesorter/issues/1120).
* Filter:
* Use replacement character instead of null (for IE).
* Fix "or" test regex. Fixes [issue #1117](https://github.com/Mottie/tablesorter/issues/1117).
* Restore `return false` to fix unit tests.
* Functions now get exact data, ignoring parsed flag. Fixes [issue #1107](https://github.com/Mottie/tablesorter/issues/1107).
* Parsed flag now all set `true` if `filter_useParsedData` is `true` &amp; stop using `config.$headers`.
* Output:
* `output_callback` can now return modified data. See [issue #1121](https://github.com/Mottie/tablesorter/issues/1121).
* Grunt:
* Add HTML hint.
#### <a name="v2.25.0">Version 2.25.0</a> (12/13/2015)
* Global
@ -175,7 +200,3 @@ View the [complete change log here](//github.com/Mottie/tablesorter/wiki/Changes
* Don't use `$.extend` for simple additions.
* Misc
* Update grunt dependencies.
#### <a name="v2.24.5">Version 2.24.5</a> (11/10/2015)
* Pager: Fix javascript error in pager addon when using ajax.

View File

@ -1,4 +1,4 @@
/*! tablesorter (FORK) - updated 12-13-2015 (v2.25.0)*/
/*! tablesorter (FORK) - updated 01-10-2016 (v2.25.1)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) {
if (typeof define === 'function' && define.amd) {
@ -10,7 +10,7 @@
}
}(function($) {
/*! TableSorter (FORK) v2.25.0 *//*
/*! TableSorter (FORK) v2.25.1 *//*
* Client-side table sorting with ease!
* @requires jQuery v1.2.6+
*
@ -33,7 +33,7 @@
'use strict';
var ts = $.tablesorter = {
version : '2.25.0',
version : '2.25.1',
parsers : [],
widgets : [],
@ -1058,8 +1058,8 @@
// find the footer
$headers = c.$table
.find( 'tfoot tr' )
.children()
.add( $( c.namespace + '_extra_headers' ) )
.add( $( c.namespace + '_extra_headers' ).children( 'tr' ) )
.children( 'td, th' )
.removeClass( css.join( ' ' ) );
// remove all header information
c.$headers
@ -1892,15 +1892,19 @@
var len, indx,
c = table.config,
// look for widgets to apply from table class
// stop using \b otherwise this matches 'ui-widget-content' & adds 'content' widget
regex = '\\s' + c.widgetClass.replace( ts.regex.templateName, '([\\w-]+)' ) + '\\s',
// don't match from 'ui-widget-content'; use \S instead of \w to include widgets
// with dashes in the name, e.g. "widget-test-2" extracts out "test-2"
regex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\S+)+' ) + '$',
widgetClass = new RegExp( regex, 'g' ),
// extract out the widget id from the table class (widget id's can include dashes)
widget = ( ' ' + c.table.className + ' ' ).match( widgetClass );
if ( widget ) {
len = widget.length;
// split up table class (widget id's can include dashes) - stop using match
// otherwise only one widget gets extracted, see #1109
widgets = ( table.className || '' ).split( ts.regex.spaces );
if ( widgets.length ) {
len = widgets.length;
for ( indx = 0; indx < len; indx++ ) {
c.widgets.push( widget[ indx ].replace( widgetClass, '$1' ) );
if ( widgets[ indx ].match( widgetClass ) ) {
c.widgets.push( widgets[ indx ].replace( widgetClass, '$1' ) );
}
}
}
},
@ -2636,7 +2640,7 @@
});
// match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk
ts.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
ts.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
ts.regex.timeMatch = /([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i;
ts.addParser({
id : 'time',
@ -3076,7 +3080,7 @@
})(jQuery);
/*! Widget: filter - updated 12/13/2015 (v2.25.0) *//*
/*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison
*/
@ -3445,7 +3449,7 @@
toSplit : new RegExp( '(?:\\s+(?:-|' + ts.language.to + ')\\s+)', 'gi' ),
andTest : new RegExp( '\\s+(' + ts.language.and + '|&&)\\s+', 'i' ),
andSplit : new RegExp( '(?:\\s+(?:' + ts.language.and + '|&&)\\s+)', 'gi' ),
orTest : /\|/,
orTest : new RegExp( '(\\||\\s+' + ts.language.or + '\\s+)', 'i' ),
orSplit : new RegExp( '(?:\\s+(?:' + ts.language.or + ')\\s+|\\|)', 'gi' ),
iQuery : new RegExp( val, 'i' ),
igQuery : new RegExp( val, 'ig' ),
@ -3920,7 +3924,7 @@
filters = Array.prototype.map ?
filters.map( String ) :
// for IE8 & older browsers - maybe not the best method
filters.join( '\u0000' ).split( '\u0000' );
filters.join( '\ufffd' ).split( '\ufffd' );
if ( wo.filter_initialized ) {
c.$table.triggerHandler( 'filterStart', [ filters ] );
@ -4126,7 +4130,6 @@
vars.excludeMatch = vars.noAnyMatch;
filterMatched = tsf.processTypes( c, data, vars );
if ( filterMatched !== null ) {
showRow = filterMatched;
} else {
@ -4159,13 +4162,8 @@
// ignore if filter is empty or disabled
if ( data.filter ) {
data.cache = data.cacheArray[ columnIndex ];
// check if column data should be from the cell or from parsed data
if ( wo.filter_useParsedData || data.parsed[ columnIndex ] ) {
data.exact = data.cache;
} else {
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
}
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
data.iExact = !tsfRegex.type.test( typeof data.exact ) && wo.filter_ignoreCase ?
data.exact.toLowerCase() : data.exact;
@ -4220,8 +4218,7 @@
result = filterMatched;
// Look for match, and add child row data for matching
} else {
txt = ( data.iExact + data.childRowText )
.indexOf( tsf.parseFilter( c, data.iFilter, data ) );
txt = ( data.iExact + data.childRowText ).indexOf( tsf.parseFilter( c, data.iFilter, data ) );
result = ( ( !wo.filter_startsWith && txt >= 0 ) || ( wo.filter_startsWith && txt === 0 ) );
}
} else {
@ -4261,18 +4258,17 @@
};
// parse columns after formatter, in case the class is added at that point
data.parsed = c.$headers.map( function( columnIndex ) {
return c.parsers && c.parsers[ columnIndex ] &&
// force parsing if parser type is numeric
c.parsers[ columnIndex ].parsed ||
// getData won't return 'parsed' if other 'filter-' class names exist
data.parsed = [];
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
data.parsed[ columnIndex ] = wo.filter_useParsedData ||
// parser has a "parsed" parameter
( c.parsers && c.parsers[ columnIndex ] && c.parsers[ columnIndex ].parsed ||
// getData may not return 'parsed' if other 'filter-' class names exist
// ( e.g. <th class="filter-select filter-parsed"> )
ts.getData && ts.getData( c.$headerIndexed[ columnIndex ],
ts.getColumnData( table, c.headers, columnIndex ), 'filter' ) === 'parsed' ||
$( this ).hasClass( 'filter-parsed' );
}).get();
c.$headerIndexed[ columnIndex ].hasClass( 'filter-parsed' ) );
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
vars.functions[ columnIndex ] =
ts.getColumnData( table, wo.filter_functions, columnIndex );
vars.defaultColFilter[ columnIndex ] =
@ -4430,7 +4426,7 @@
// don't pass reference to val
val = showParent ? true : false;
childRow = rowData.$row.filter( ':gt( 0 )' );
childRow = rowData.$row.filter( ':gt(0)' );
if ( wo.filter_childRows && childRow.length ) {
if ( wo.filter_childByColumn ) {
if ( !wo.filter_childWithSibs ) {

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
}
}(function($) {
/*! TableSorter (FORK) v2.25.0 *//*
/*! TableSorter (FORK) v2.25.1 *//*
* Client-side table sorting with ease!
* @requires jQuery v1.2.6+
*
@ -31,7 +31,7 @@
'use strict';
var ts = $.tablesorter = {
version : '2.25.0',
version : '2.25.1',
parsers : [],
widgets : [],
@ -1056,8 +1056,8 @@
// find the footer
$headers = c.$table
.find( 'tfoot tr' )
.children()
.add( $( c.namespace + '_extra_headers' ) )
.add( $( c.namespace + '_extra_headers' ).children( 'tr' ) )
.children( 'td, th' )
.removeClass( css.join( ' ' ) );
// remove all header information
c.$headers
@ -1890,15 +1890,19 @@
var len, indx,
c = table.config,
// look for widgets to apply from table class
// stop using \b otherwise this matches 'ui-widget-content' & adds 'content' widget
regex = '\\s' + c.widgetClass.replace( ts.regex.templateName, '([\\w-]+)' ) + '\\s',
// don't match from 'ui-widget-content'; use \S instead of \w to include widgets
// with dashes in the name, e.g. "widget-test-2" extracts out "test-2"
regex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\S+)+' ) + '$',
widgetClass = new RegExp( regex, 'g' ),
// extract out the widget id from the table class (widget id's can include dashes)
widget = ( ' ' + c.table.className + ' ' ).match( widgetClass );
if ( widget ) {
len = widget.length;
// split up table class (widget id's can include dashes) - stop using match
// otherwise only one widget gets extracted, see #1109
widgets = ( table.className || '' ).split( ts.regex.spaces );
if ( widgets.length ) {
len = widgets.length;
for ( indx = 0; indx < len; indx++ ) {
c.widgets.push( widget[ indx ].replace( widgetClass, '$1' ) );
if ( widgets[ indx ].match( widgetClass ) ) {
c.widgets.push( widgets[ indx ].replace( widgetClass, '$1' ) );
}
}
}
},
@ -2634,7 +2638,7 @@
});
// match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk
ts.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
ts.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
ts.regex.timeMatch = /([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i;
ts.addParser({
id : 'time',

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
/*! tablesorter (FORK) - updated 12-13-2015 (v2.25.0)*/
/*! tablesorter (FORK) - updated 01-10-2016 (v2.25.1)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) {
if (typeof define === 'function' && define.amd) {
@ -366,7 +366,7 @@
})(jQuery);
/*! Widget: filter - updated 12/13/2015 (v2.25.0) *//*
/*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison
*/
@ -735,7 +735,7 @@
toSplit : new RegExp( '(?:\\s+(?:-|' + ts.language.to + ')\\s+)', 'gi' ),
andTest : new RegExp( '\\s+(' + ts.language.and + '|&&)\\s+', 'i' ),
andSplit : new RegExp( '(?:\\s+(?:' + ts.language.and + '|&&)\\s+)', 'gi' ),
orTest : /\|/,
orTest : new RegExp( '(\\||\\s+' + ts.language.or + '\\s+)', 'i' ),
orSplit : new RegExp( '(?:\\s+(?:' + ts.language.or + ')\\s+|\\|)', 'gi' ),
iQuery : new RegExp( val, 'i' ),
igQuery : new RegExp( val, 'ig' ),
@ -1210,7 +1210,7 @@
filters = Array.prototype.map ?
filters.map( String ) :
// for IE8 & older browsers - maybe not the best method
filters.join( '\u0000' ).split( '\u0000' );
filters.join( '\ufffd' ).split( '\ufffd' );
if ( wo.filter_initialized ) {
c.$table.triggerHandler( 'filterStart', [ filters ] );
@ -1416,7 +1416,6 @@
vars.excludeMatch = vars.noAnyMatch;
filterMatched = tsf.processTypes( c, data, vars );
if ( filterMatched !== null ) {
showRow = filterMatched;
} else {
@ -1449,13 +1448,8 @@
// ignore if filter is empty or disabled
if ( data.filter ) {
data.cache = data.cacheArray[ columnIndex ];
// check if column data should be from the cell or from parsed data
if ( wo.filter_useParsedData || data.parsed[ columnIndex ] ) {
data.exact = data.cache;
} else {
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
}
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
data.iExact = !tsfRegex.type.test( typeof data.exact ) && wo.filter_ignoreCase ?
data.exact.toLowerCase() : data.exact;
@ -1510,8 +1504,7 @@
result = filterMatched;
// Look for match, and add child row data for matching
} else {
txt = ( data.iExact + data.childRowText )
.indexOf( tsf.parseFilter( c, data.iFilter, data ) );
txt = ( data.iExact + data.childRowText ).indexOf( tsf.parseFilter( c, data.iFilter, data ) );
result = ( ( !wo.filter_startsWith && txt >= 0 ) || ( wo.filter_startsWith && txt === 0 ) );
}
} else {
@ -1551,18 +1544,17 @@
};
// parse columns after formatter, in case the class is added at that point
data.parsed = c.$headers.map( function( columnIndex ) {
return c.parsers && c.parsers[ columnIndex ] &&
// force parsing if parser type is numeric
c.parsers[ columnIndex ].parsed ||
// getData won't return 'parsed' if other 'filter-' class names exist
data.parsed = [];
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
data.parsed[ columnIndex ] = wo.filter_useParsedData ||
// parser has a "parsed" parameter
( c.parsers && c.parsers[ columnIndex ] && c.parsers[ columnIndex ].parsed ||
// getData may not return 'parsed' if other 'filter-' class names exist
// ( e.g. <th class="filter-select filter-parsed"> )
ts.getData && ts.getData( c.$headerIndexed[ columnIndex ],
ts.getColumnData( table, c.headers, columnIndex ), 'filter' ) === 'parsed' ||
$( this ).hasClass( 'filter-parsed' );
}).get();
c.$headerIndexed[ columnIndex ].hasClass( 'filter-parsed' ) );
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
vars.functions[ columnIndex ] =
ts.getColumnData( table, wo.filter_functions, columnIndex );
vars.defaultColFilter[ columnIndex ] =
@ -1720,7 +1712,7 @@
// don't pass reference to val
val = showParent ? true : false;
childRow = rowData.$row.filter( ':gt( 0 )' );
childRow = rowData.$row.filter( ':gt(0)' );
if ( wo.filter_childRows && childRow.length ) {
if ( wo.filter_childByColumn ) {
if ( !wo.filter_childWithSibs ) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -455,7 +455,7 @@
<li><span class="label label-info">Beta</span> <a href="example-widget-chart.html">Chart Widget</a> (<span class="version">v2.19.0</span>; <span class="version updated">v2.24.0</span>).</li>
<li><span class="results">&dagger;</span> <a href="example-widget-columns.html">Columns highlight widget</a> (v2.0.17).</li>
<li><a href="example-widget-column-selector.html">Column selector widget</a> (<span class="version">v2.15</span>; <span class="version updated">v2.24.0</span>).</li>
<li><a href="example-widget-column-selector.html">Column selector widget</a> (<span class="version">v2.15</span>; <span class="version updated">v2.25.1</span>).</li>
<li><a href="example-widget-editable.html">Content editable widget</a> (v2.9; <span class="version updated">v2.25.0</span>).</li>
<li><span class="label label-info">Beta</span> <a href="example-dragtable.html">Dragtable mod</a> - (jQuery UI widget for column reordering [<a href="http://stackoverflow.com/a/27770224/145346">ref</a>]; <span class="version">v2.24.0</span>).</li>
<li><span class="results">&dagger;</span> Filter widget (<span class="version updated">v2.25.1</span>):

View File

@ -4,7 +4,7 @@
*/
/*! tablesorter (FORK) - updated 12-13-2015 (v2.25.0)*/
/*! tablesorter (FORK) - updated 01-10-2016 (v2.25.1)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) {
if (typeof define === 'function' && define.amd) {
@ -16,7 +16,7 @@
}
}(function($) {
/*! TableSorter (FORK) v2.25.0 *//*
/*! TableSorter (FORK) v2.25.1 *//*
* Client-side table sorting with ease!
* @requires jQuery v1.2.6+
*
@ -39,7 +39,7 @@
'use strict';
var ts = $.tablesorter = {
version : '2.25.0',
version : '2.25.1',
parsers : [],
widgets : [],
@ -1064,8 +1064,8 @@
// find the footer
$headers = c.$table
.find( 'tfoot tr' )
.children()
.add( $( c.namespace + '_extra_headers' ) )
.add( $( c.namespace + '_extra_headers' ).children( 'tr' ) )
.children( 'td, th' )
.removeClass( css.join( ' ' ) );
// remove all header information
c.$headers
@ -1898,15 +1898,19 @@
var len, indx,
c = table.config,
// look for widgets to apply from table class
// stop using \b otherwise this matches 'ui-widget-content' & adds 'content' widget
regex = '\\s' + c.widgetClass.replace( ts.regex.templateName, '([\\w-]+)' ) + '\\s',
// don't match from 'ui-widget-content'; use \S instead of \w to include widgets
// with dashes in the name, e.g. "widget-test-2" extracts out "test-2"
regex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\S+)+' ) + '$',
widgetClass = new RegExp( regex, 'g' ),
// extract out the widget id from the table class (widget id's can include dashes)
widget = ( ' ' + c.table.className + ' ' ).match( widgetClass );
if ( widget ) {
len = widget.length;
// split up table class (widget id's can include dashes) - stop using match
// otherwise only one widget gets extracted, see #1109
widgets = ( table.className || '' ).split( ts.regex.spaces );
if ( widgets.length ) {
len = widgets.length;
for ( indx = 0; indx < len; indx++ ) {
c.widgets.push( widget[ indx ].replace( widgetClass, '$1' ) );
if ( widgets[ indx ].match( widgetClass ) ) {
c.widgets.push( widgets[ indx ].replace( widgetClass, '$1' ) );
}
}
}
},
@ -2642,7 +2646,7 @@
});
// match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk
ts.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
ts.regex.timeTest = /^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
ts.regex.timeMatch = /([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i;
ts.addParser({
id : 'time',
@ -3082,7 +3086,7 @@
})(jQuery);
/*! Widget: filter - updated 12/13/2015 (v2.25.0) *//*
/*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison
*/
@ -3451,7 +3455,7 @@
toSplit : new RegExp( '(?:\\s+(?:-|' + ts.language.to + ')\\s+)', 'gi' ),
andTest : new RegExp( '\\s+(' + ts.language.and + '|&&)\\s+', 'i' ),
andSplit : new RegExp( '(?:\\s+(?:' + ts.language.and + '|&&)\\s+)', 'gi' ),
orTest : /\|/,
orTest : new RegExp( '(\\||\\s+' + ts.language.or + '\\s+)', 'i' ),
orSplit : new RegExp( '(?:\\s+(?:' + ts.language.or + ')\\s+|\\|)', 'gi' ),
iQuery : new RegExp( val, 'i' ),
igQuery : new RegExp( val, 'ig' ),
@ -3926,7 +3930,7 @@
filters = Array.prototype.map ?
filters.map( String ) :
// for IE8 & older browsers - maybe not the best method
filters.join( '\u0000' ).split( '\u0000' );
filters.join( '\ufffd' ).split( '\ufffd' );
if ( wo.filter_initialized ) {
c.$table.triggerHandler( 'filterStart', [ filters ] );
@ -4132,7 +4136,6 @@
vars.excludeMatch = vars.noAnyMatch;
filterMatched = tsf.processTypes( c, data, vars );
if ( filterMatched !== null ) {
showRow = filterMatched;
} else {
@ -4165,13 +4168,8 @@
// ignore if filter is empty or disabled
if ( data.filter ) {
data.cache = data.cacheArray[ columnIndex ];
// check if column data should be from the cell or from parsed data
if ( wo.filter_useParsedData || data.parsed[ columnIndex ] ) {
data.exact = data.cache;
} else {
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
}
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
data.iExact = !tsfRegex.type.test( typeof data.exact ) && wo.filter_ignoreCase ?
data.exact.toLowerCase() : data.exact;
@ -4226,8 +4224,7 @@
result = filterMatched;
// Look for match, and add child row data for matching
} else {
txt = ( data.iExact + data.childRowText )
.indexOf( tsf.parseFilter( c, data.iFilter, data ) );
txt = ( data.iExact + data.childRowText ).indexOf( tsf.parseFilter( c, data.iFilter, data ) );
result = ( ( !wo.filter_startsWith && txt >= 0 ) || ( wo.filter_startsWith && txt === 0 ) );
}
} else {
@ -4267,18 +4264,17 @@
};
// parse columns after formatter, in case the class is added at that point
data.parsed = c.$headers.map( function( columnIndex ) {
return c.parsers && c.parsers[ columnIndex ] &&
// force parsing if parser type is numeric
c.parsers[ columnIndex ].parsed ||
// getData won't return 'parsed' if other 'filter-' class names exist
data.parsed = [];
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
data.parsed[ columnIndex ] = wo.filter_useParsedData ||
// parser has a "parsed" parameter
( c.parsers && c.parsers[ columnIndex ] && c.parsers[ columnIndex ].parsed ||
// getData may not return 'parsed' if other 'filter-' class names exist
// ( e.g. <th class="filter-select filter-parsed"> )
ts.getData && ts.getData( c.$headerIndexed[ columnIndex ],
ts.getColumnData( table, c.headers, columnIndex ), 'filter' ) === 'parsed' ||
$( this ).hasClass( 'filter-parsed' );
}).get();
c.$headerIndexed[ columnIndex ].hasClass( 'filter-parsed' ) );
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
vars.functions[ columnIndex ] =
ts.getColumnData( table, wo.filter_functions, columnIndex );
vars.defaultColFilter[ columnIndex ] =
@ -4436,7 +4432,7 @@
// don't pass reference to val
val = showParent ? true : false;
childRow = rowData.$row.filter( ':gt( 0 )' );
childRow = rowData.$row.filter( ':gt(0)' );
if ( wo.filter_childRows && childRow.length ) {
if ( wo.filter_childByColumn ) {
if ( !wo.filter_childWithSibs ) {

View File

@ -1,4 +1,4 @@
/*! TableSorter (FORK) v2.25.0 *//*
/*! TableSorter (FORK) v2.25.1 *//*
* Client-side table sorting with ease!
* @requires jQuery v1.2.6+
*
@ -21,7 +21,7 @@
'use strict';
var ts = $.tablesorter = {
version : '2.25.0',
version : '2.25.1',
parsers : [],
widgets : [],

View File

@ -4,7 +4,7 @@
*/
/*! tablesorter (FORK) - updated 12-13-2015 (v2.25.0)*/
/*! tablesorter (FORK) - updated 01-10-2016 (v2.25.1)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) {
if (typeof define === 'function' && define.amd) {
@ -372,7 +372,7 @@
})(jQuery);
/*! Widget: filter - updated 12/13/2015 (v2.25.0) *//*
/*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison
*/
@ -741,7 +741,7 @@
toSplit : new RegExp( '(?:\\s+(?:-|' + ts.language.to + ')\\s+)', 'gi' ),
andTest : new RegExp( '\\s+(' + ts.language.and + '|&&)\\s+', 'i' ),
andSplit : new RegExp( '(?:\\s+(?:' + ts.language.and + '|&&)\\s+)', 'gi' ),
orTest : /\|/,
orTest : new RegExp( '(\\||\\s+' + ts.language.or + '\\s+)', 'i' ),
orSplit : new RegExp( '(?:\\s+(?:' + ts.language.or + ')\\s+|\\|)', 'gi' ),
iQuery : new RegExp( val, 'i' ),
igQuery : new RegExp( val, 'ig' ),
@ -1216,7 +1216,7 @@
filters = Array.prototype.map ?
filters.map( String ) :
// for IE8 & older browsers - maybe not the best method
filters.join( '\u0000' ).split( '\u0000' );
filters.join( '\ufffd' ).split( '\ufffd' );
if ( wo.filter_initialized ) {
c.$table.triggerHandler( 'filterStart', [ filters ] );
@ -1422,7 +1422,6 @@
vars.excludeMatch = vars.noAnyMatch;
filterMatched = tsf.processTypes( c, data, vars );
if ( filterMatched !== null ) {
showRow = filterMatched;
} else {
@ -1455,13 +1454,8 @@
// ignore if filter is empty or disabled
if ( data.filter ) {
data.cache = data.cacheArray[ columnIndex ];
// check if column data should be from the cell or from parsed data
if ( wo.filter_useParsedData || data.parsed[ columnIndex ] ) {
data.exact = data.cache;
} else {
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
}
result = data.rawArray[ columnIndex ] || '';
data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
data.iExact = !tsfRegex.type.test( typeof data.exact ) && wo.filter_ignoreCase ?
data.exact.toLowerCase() : data.exact;
@ -1516,8 +1510,7 @@
result = filterMatched;
// Look for match, and add child row data for matching
} else {
txt = ( data.iExact + data.childRowText )
.indexOf( tsf.parseFilter( c, data.iFilter, data ) );
txt = ( data.iExact + data.childRowText ).indexOf( tsf.parseFilter( c, data.iFilter, data ) );
result = ( ( !wo.filter_startsWith && txt >= 0 ) || ( wo.filter_startsWith && txt === 0 ) );
}
} else {
@ -1557,18 +1550,17 @@
};
// parse columns after formatter, in case the class is added at that point
data.parsed = c.$headers.map( function( columnIndex ) {
return c.parsers && c.parsers[ columnIndex ] &&
// force parsing if parser type is numeric
c.parsers[ columnIndex ].parsed ||
// getData won't return 'parsed' if other 'filter-' class names exist
data.parsed = [];
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
data.parsed[ columnIndex ] = wo.filter_useParsedData ||
// parser has a "parsed" parameter
( c.parsers && c.parsers[ columnIndex ] && c.parsers[ columnIndex ].parsed ||
// getData may not return 'parsed' if other 'filter-' class names exist
// ( e.g. <th class="filter-select filter-parsed"> )
ts.getData && ts.getData( c.$headerIndexed[ columnIndex ],
ts.getColumnData( table, c.headers, columnIndex ), 'filter' ) === 'parsed' ||
$( this ).hasClass( 'filter-parsed' );
}).get();
c.$headerIndexed[ columnIndex ].hasClass( 'filter-parsed' ) );
for ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {
vars.functions[ columnIndex ] =
ts.getColumnData( table, wo.filter_functions, columnIndex );
vars.defaultColFilter[ columnIndex ] =
@ -1726,7 +1718,7 @@
// don't pass reference to val
val = showParent ? true : false;
childRow = rowData.$row.filter( ':gt( 0 )' );
childRow = rowData.$row.filter( ':gt(0)' );
if ( wo.filter_childRows && childRow.length ) {
if ( wo.filter_childByColumn ) {
if ( !wo.filter_childWithSibs ) {

View File

@ -1,7 +1,7 @@
{
"name": "tablesorter",
"title": "tablesorter",
"version": "2.25.0",
"version": "2.25.1",
"description": "tablesorter (FORK) is a jQuery plugin for turning a standard HTML table with THEAD and TBODY tags into a sortable table without page refreshes. tablesorter can successfully parse and sort many types of data including linked data in a cell.",
"author": {
"name": "Christian Bach",

View File

@ -1,7 +1,7 @@
{
"name": "tablesorter",
"title": "tablesorter",
"version": "2.25.0",
"version": "2.25.1",
"description": "tablesorter is a jQuery plugin for turning a standard HTML table with THEAD and TBODY tags into a sortable table without page refreshes. tablesorter can successfully parse and sort many types of data including linked data in a cell.\n\nThis forked version adds lots of new enhancements including: alphanumeric sorting, pager callback functons, multiple widgets providing column styling, ui theme application, sticky headers, column filters and resizer, as well as extended documentation with a lot more demos.",
"author": {
"name": "Christian Bach",