mirror of
https://github.com/Mottie/tablesorter.git
synced 2024-11-15 23:54:22 +00:00
version bump
This commit is contained in:
parent
06b190a520
commit
a0181a4337
29
README.md
29
README.md
@ -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` & 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.
|
||||
|
66
dist/js/jquery.tablesorter.combined.js
vendored
66
dist/js/jquery.tablesorter.combined.js
vendored
@ -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 ) {
|
||||
|
8
dist/js/jquery.tablesorter.combined.min.js
vendored
8
dist/js/jquery.tablesorter.combined.min.js
vendored
File diff suppressed because one or more lines are too long
28
dist/js/jquery.tablesorter.js
vendored
28
dist/js/jquery.tablesorter.js
vendored
@ -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',
|
||||
|
4
dist/js/jquery.tablesorter.min.js
vendored
4
dist/js/jquery.tablesorter.min.js
vendored
File diff suppressed because one or more lines are too long
38
dist/js/jquery.tablesorter.widgets.js
vendored
38
dist/js/jquery.tablesorter.widgets.js
vendored
@ -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 ) {
|
||||
|
4
dist/js/jquery.tablesorter.widgets.min.js
vendored
4
dist/js/jquery.tablesorter.widgets.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/js/widgets/widget-columnSelector.min.js
vendored
2
dist/js/widgets/widget-columnSelector.min.js
vendored
File diff suppressed because one or more lines are too long
4
dist/js/widgets/widget-filter.min.js
vendored
4
dist/js/widgets/widget-filter.min.js
vendored
File diff suppressed because one or more lines are too long
4
dist/js/widgets/widget-output.min.js
vendored
4
dist/js/widgets/widget-output.min.js
vendored
File diff suppressed because one or more lines are too long
@ -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">†</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">†</span> Filter widget (<span class="version updated">v2.25.1</span>):
|
||||
|
@ -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 ) {
|
||||
|
@ -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 : [],
|
||||
|
@ -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 ) {
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user