This commit is contained in:
Rob Garrison 2017-04-04 05:16:26 -05:00
parent d79dd5a27b
commit b80d402fc3
16 changed files with 89 additions and 90 deletions

View File

@ -104,6 +104,16 @@ If you would like to contribute, please...
View the [complete change log here](https://github.com/Mottie/tablesorter/wiki/Changes). View the [complete change log here](https://github.com/Mottie/tablesorter/wiki/Changes).
#### <a name="v2.28.7">Version 2.28.7</a> (4/4/2017)
* Editable:
* Remove "blur" event listeners. See [issue #1360](https://github.com/Mottie/tablesorter/issues/1360).
* Filter:
* Add "filterAndSortReset" method. See [issue #1361](https://github.com/Mottie/tablesorter/issues/1361).
* Prevent JS error added from last update. Fixes [issue #1377](https://github.com/Mottie/tablesorter/issues/1377).
* Meta:
* Fix composer.json license.
#### <a name="v2.28.6">Version 2.28.6</a> (4/2/2017) #### <a name="v2.28.6">Version 2.28.6</a> (4/2/2017)
* Core: * Core:
@ -156,42 +166,3 @@ View the [complete change log here](https://github.com/Mottie/tablesorter/wiki/C
* Scroller: * Scroller:
* Add `scrollerComplete` event. Fixes [issue #1351](https://github.com/Mottie/tablesorter/issues/1351). * Add `scrollerComplete` event. Fixes [issue #1351](https://github.com/Mottie/tablesorter/issues/1351).
* Readme: Add related project, tablesorter-pagercontrols * Readme: Add related project, tablesorter-pagercontrols
#### <a name="v2.28.4">Version 2.28.4</a> (1/6/2017)
* Docs:
* Add more notes about moving "ipAddress" parser into an external file. See [issue #1344](https://github.com/Mottie/tablesorter/issues/1344).
* Load storage widget in grouping widget demo. Fixes [issue #1346](https://github.com/Mottie/tablesorter/issues/1346).
* Add page header section to grouping child demo. See [issue #1346](https://github.com/Mottie/tablesorter/issues/1346).
* Include jQuery in page header section in various demos.
* Add page header to output demo. See [issue #1349](https://github.com/Mottie/tablesorter/issues/1349).
* Add comma to broken output demo.
* Add info on output to Excel in output widget demo. See [issue #1349](https://github.com/Mottie/tablesorter/issues/1349).
* Renamed [Bootstrap v2.x demo](https://mottie.github.io/tablesorter/docs/example-option-theme-bootstrap-v2.html).
* Renamed [Bootstrap v3.x demo](https://mottie.github.io/tablesorter/docs/example-option-theme-bootstrap-v3.html).
* Created [Bootstrap v4.x demo](https://mottie.github.io/tablesorter/docs/example-option-theme-bootstrap-v4.html).
* Update all Bootstrap links to point to Bootstrap v3.x demo.
* Maintain minimal original [Bootstrap demo](https://mottie.github.io/tablesorter/docs/example-widget-bootstrap-theme.html).
* Output:
* Prevent error on output to an already open popup.
* Add `output_savePlugin` option &amp; update download code.
* Add `output_includeHeader` option &amp; docs. Fixes [issue #1349](https://github.com/Mottie/tablesorter/issues/1349).
* Pager:
* (widget only) make compatible with stickyHeaders. [Fixes #1313](https://github.com/Mottie/tablesorter/issues/1313):
* Removed all references to stored `pager.$goto` and `pager.$size`
* Removed check if header text matches header length - this breaks when a header row has a "tablesorter-ignoreRow" class name.
* Add stickyHeader container to `pager.$container` in case the pager controls are inside the thead.
* Fix rendering of sticky headers after ajax.
* Use option to target inner header.
* Restore check for new headers. [Fixes #1343](https://github.com/Mottie/tablesorter/issues/1343).
* Add `data-attribute` override on output. See [issue #1348](https://github.com/Mottie/tablesorter/issues/1348).
* StickHeaders:
* Reduce widget priority below the pager widget priority.
* Theme:
* Add group widget css file. See [issue #1346](https://github.com/Mottie/tablesorter/issues/1346).
* Add column widget support to Bootstrap. See [issue #1347](https://github.com/Mottie/tablesorter/issues/1347).
* Update high-specificity blue theme - [demo](https://jsfiddle.net/Mottie/k9uasLc7/); see [Stack Overflow](http://stackoverflow.com/q/41472634/145346).
* Add `theme.bootstrap_4.css` file ([demo](https://mottie.github.io/tablesorter/docs/example-option-theme-bootstrap-v4.html); Bootstrap v4-alpha - do not use in production!).
* Duplicated `theme.bootstrap_3.css` from `theme.bootstrap.css` (maintaining this non-versioned file name until Bootstrap v4-stable has been available for about 6 months).
* Readme:
* Update log for v2.28.3.

View File

@ -1,4 +1,4 @@
/*! tablesorter (FORK) - updated 04-02-2017 (v2.28.6)*/ /*! tablesorter (FORK) - updated 04-04-2017 (v2.28.7)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */ /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) { (function(factory) {
if (typeof define === 'function' && define.amd) { if (typeof define === 'function' && define.amd) {
@ -10,7 +10,7 @@
} }
}(function(jQuery) { }(function(jQuery) {
/*! TableSorter (FORK) v2.28.6 *//* /*! TableSorter (FORK) v2.28.7 *//*
* Client-side table sorting with ease! * Client-side table sorting with ease!
* @requires jQuery v1.2.6+ * @requires jQuery v1.2.6+
* *
@ -34,7 +34,7 @@
'use strict'; 'use strict';
var ts = $.tablesorter = { var ts = $.tablesorter = {
version : '2.28.6', version : '2.28.7',
parsers : [], parsers : [],
widgets : [], widgets : [],
@ -3198,7 +3198,7 @@
})(jQuery); })(jQuery);
/*! Widget: filter - updated 4/2/2017 (v2.28.6) *//* /*! Widget: filter - updated 4/4/2017 (v2.28.7) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+ * Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison * by Rob Garrison
*/ */
@ -3269,7 +3269,7 @@
var tbodyIndex, $tbody, var tbodyIndex, $tbody,
$table = c.$table, $table = c.$table,
$tbodies = c.$tbodies, $tbodies = c.$tbodies,
events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ' events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterAndSortReset filterEnd search '
.split( ' ' ).join( c.namespace + 'filter ' ); .split( ' ' ).join( c.namespace + 'filter ' );
$table $table
.removeClass( 'hasFilters' ) .removeClass( 'hasFilters' )
@ -3610,7 +3610,7 @@
} }
txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' + txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' +
'filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' ); 'filterAndSortReset filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' );
c.$table.bind( txt, function( event, filter ) { c.$table.bind( txt, function( event, filter ) {
val = wo.filter_hideEmpty && val = wo.filter_hideEmpty &&
$.isEmptyObject( c.cache ) && $.isEmptyObject( c.cache ) &&
@ -3621,9 +3621,16 @@
event.stopPropagation(); event.stopPropagation();
tsf.buildDefault( table, true ); tsf.buildDefault( table, true );
} }
if ( event.type === 'filterReset' ) { // Add filterAndSortReset - see #1361
if ( event.type === 'filterReset' || event.type === 'filterAndSortReset' ) {
c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' ); c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' );
tsf.searching( table, [] ); if ( event.type === 'filterAndSortReset' ) {
ts.sortReset( this.config, function() {
tsf.searching( table, [] );
});
} else {
tsf.searching( table, [] );
}
} else if ( event.type === 'filterResetSaved' ) { } else if ( event.type === 'filterResetSaved' ) {
ts.storage( table, 'tablesorter-filters', '' ); ts.storage( table, 'tablesorter-filters', '' );
} else if ( event.type === 'filterEnd' ) { } else if ( event.type === 'filterEnd' ) {
@ -5005,7 +5012,7 @@
// setFilters called, but last search is exactly the same as the current // setFilters called, but last search is exactly the same as the current
// fixes issue #733 & #903 where calling update causes the input values to reset // fixes issue #733 & #903 where calling update causes the input values to reset
( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) { ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
return $( table ).data( 'lastSearch' ); return $( table ).data( 'lastSearch' ) || [];
} }
if ( c ) { if ( c ) {
if ( c.$filters ) { if ( c.$filters ) {

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
} }
}(function(jQuery) { }(function(jQuery) {
/*! TableSorter (FORK) v2.28.6 *//* /*! TableSorter (FORK) v2.28.7 *//*
* Client-side table sorting with ease! * Client-side table sorting with ease!
* @requires jQuery v1.2.6+ * @requires jQuery v1.2.6+
* *
@ -32,7 +32,7 @@
'use strict'; 'use strict';
var ts = $.tablesorter = { var ts = $.tablesorter = {
version : '2.28.6', version : '2.28.7',
parsers : [], parsers : [],
widgets : [], widgets : [],

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
/*! tablesorter (FORK) - updated 04-02-2017 (v2.28.6)*/ /*! tablesorter (FORK) - updated 04-04-2017 (v2.28.7)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */ /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) { (function(factory) {
if (typeof define === 'function' && define.amd) { if (typeof define === 'function' && define.amd) {
@ -387,7 +387,7 @@
})(jQuery); })(jQuery);
/*! Widget: filter - updated 4/2/2017 (v2.28.6) *//* /*! Widget: filter - updated 4/4/2017 (v2.28.7) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+ * Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison * by Rob Garrison
*/ */
@ -458,7 +458,7 @@
var tbodyIndex, $tbody, var tbodyIndex, $tbody,
$table = c.$table, $table = c.$table,
$tbodies = c.$tbodies, $tbodies = c.$tbodies,
events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ' events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterAndSortReset filterEnd search '
.split( ' ' ).join( c.namespace + 'filter ' ); .split( ' ' ).join( c.namespace + 'filter ' );
$table $table
.removeClass( 'hasFilters' ) .removeClass( 'hasFilters' )
@ -799,7 +799,7 @@
} }
txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' + txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' +
'filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' ); 'filterAndSortReset filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' );
c.$table.bind( txt, function( event, filter ) { c.$table.bind( txt, function( event, filter ) {
val = wo.filter_hideEmpty && val = wo.filter_hideEmpty &&
$.isEmptyObject( c.cache ) && $.isEmptyObject( c.cache ) &&
@ -810,9 +810,16 @@
event.stopPropagation(); event.stopPropagation();
tsf.buildDefault( table, true ); tsf.buildDefault( table, true );
} }
if ( event.type === 'filterReset' ) { // Add filterAndSortReset - see #1361
if ( event.type === 'filterReset' || event.type === 'filterAndSortReset' ) {
c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' ); c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' );
tsf.searching( table, [] ); if ( event.type === 'filterAndSortReset' ) {
ts.sortReset( this.config, function() {
tsf.searching( table, [] );
});
} else {
tsf.searching( table, [] );
}
} else if ( event.type === 'filterResetSaved' ) { } else if ( event.type === 'filterResetSaved' ) {
ts.storage( table, 'tablesorter-filters', '' ); ts.storage( table, 'tablesorter-filters', '' );
} else if ( event.type === 'filterEnd' ) { } else if ( event.type === 'filterEnd' ) {
@ -2194,7 +2201,7 @@
// setFilters called, but last search is exactly the same as the current // setFilters called, but last search is exactly the same as the current
// fixes issue #733 & #903 where calling update causes the input values to reset // fixes issue #733 & #903 where calling update causes the input values to reset
( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) { ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
return $( table ).data( 'lastSearch' ); return $( table ).data( 'lastSearch' ) || [];
} }
if ( c ) { if ( c ) {
if ( c.$filters ) { if ( c.$filters ) {

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

@ -4,7 +4,7 @@
*/ */
/*! tablesorter (FORK) - updated 04-02-2017 (v2.28.6)*/ /*! tablesorter (FORK) - updated 04-04-2017 (v2.28.7)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */ /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) { (function(factory) {
if (typeof define === 'function' && define.amd) { if (typeof define === 'function' && define.amd) {
@ -16,7 +16,7 @@
} }
}(function(jQuery) { }(function(jQuery) {
/*! TableSorter (FORK) v2.28.6 *//* /*! TableSorter (FORK) v2.28.7 *//*
* Client-side table sorting with ease! * Client-side table sorting with ease!
* @requires jQuery v1.2.6+ * @requires jQuery v1.2.6+
* *
@ -40,7 +40,7 @@
'use strict'; 'use strict';
var ts = $.tablesorter = { var ts = $.tablesorter = {
version : '2.28.6', version : '2.28.7',
parsers : [], parsers : [],
widgets : [], widgets : [],
@ -3204,7 +3204,7 @@
})(jQuery); })(jQuery);
/*! Widget: filter - updated 4/2/2017 (v2.28.6) *//* /*! Widget: filter - updated 4/4/2017 (v2.28.7) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+ * Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison * by Rob Garrison
*/ */
@ -3275,7 +3275,7 @@
var tbodyIndex, $tbody, var tbodyIndex, $tbody,
$table = c.$table, $table = c.$table,
$tbodies = c.$tbodies, $tbodies = c.$tbodies,
events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ' events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterAndSortReset filterEnd search '
.split( ' ' ).join( c.namespace + 'filter ' ); .split( ' ' ).join( c.namespace + 'filter ' );
$table $table
.removeClass( 'hasFilters' ) .removeClass( 'hasFilters' )
@ -3616,7 +3616,7 @@
} }
txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' + txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' +
'filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' ); 'filterAndSortReset filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' );
c.$table.bind( txt, function( event, filter ) { c.$table.bind( txt, function( event, filter ) {
val = wo.filter_hideEmpty && val = wo.filter_hideEmpty &&
$.isEmptyObject( c.cache ) && $.isEmptyObject( c.cache ) &&
@ -3627,9 +3627,16 @@
event.stopPropagation(); event.stopPropagation();
tsf.buildDefault( table, true ); tsf.buildDefault( table, true );
} }
if ( event.type === 'filterReset' ) { // Add filterAndSortReset - see #1361
if ( event.type === 'filterReset' || event.type === 'filterAndSortReset' ) {
c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' ); c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' );
tsf.searching( table, [] ); if ( event.type === 'filterAndSortReset' ) {
ts.sortReset( this.config, function() {
tsf.searching( table, [] );
});
} else {
tsf.searching( table, [] );
}
} else if ( event.type === 'filterResetSaved' ) { } else if ( event.type === 'filterResetSaved' ) {
ts.storage( table, 'tablesorter-filters', '' ); ts.storage( table, 'tablesorter-filters', '' );
} else if ( event.type === 'filterEnd' ) { } else if ( event.type === 'filterEnd' ) {
@ -5011,7 +5018,7 @@
// setFilters called, but last search is exactly the same as the current // setFilters called, but last search is exactly the same as the current
// fixes issue #733 & #903 where calling update causes the input values to reset // fixes issue #733 & #903 where calling update causes the input values to reset
( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) { ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
return $( table ).data( 'lastSearch' ); return $( table ).data( 'lastSearch' ) || [];
} }
if ( c ) { if ( c ) {
if ( c.$filters ) { if ( c.$filters ) {

View File

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

View File

@ -4,7 +4,7 @@
*/ */
/*! tablesorter (FORK) - updated 04-02-2017 (v2.28.6)*/ /*! tablesorter (FORK) - updated 04-04-2017 (v2.28.7)*/
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */ /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
(function(factory) { (function(factory) {
if (typeof define === 'function' && define.amd) { if (typeof define === 'function' && define.amd) {
@ -393,7 +393,7 @@
})(jQuery); })(jQuery);
/*! Widget: filter - updated 4/2/2017 (v2.28.6) *//* /*! Widget: filter - updated 4/4/2017 (v2.28.7) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+ * Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison * by Rob Garrison
*/ */
@ -464,7 +464,7 @@
var tbodyIndex, $tbody, var tbodyIndex, $tbody,
$table = c.$table, $table = c.$table,
$tbodies = c.$tbodies, $tbodies = c.$tbodies,
events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ' events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterAndSortReset filterEnd search '
.split( ' ' ).join( c.namespace + 'filter ' ); .split( ' ' ).join( c.namespace + 'filter ' );
$table $table
.removeClass( 'hasFilters' ) .removeClass( 'hasFilters' )
@ -805,7 +805,7 @@
} }
txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' + txt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' +
'filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' ); 'filterAndSortReset filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' );
c.$table.bind( txt, function( event, filter ) { c.$table.bind( txt, function( event, filter ) {
val = wo.filter_hideEmpty && val = wo.filter_hideEmpty &&
$.isEmptyObject( c.cache ) && $.isEmptyObject( c.cache ) &&
@ -816,9 +816,16 @@
event.stopPropagation(); event.stopPropagation();
tsf.buildDefault( table, true ); tsf.buildDefault( table, true );
} }
if ( event.type === 'filterReset' ) { // Add filterAndSortReset - see #1361
if ( event.type === 'filterReset' || event.type === 'filterAndSortReset' ) {
c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' ); c.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' );
tsf.searching( table, [] ); if ( event.type === 'filterAndSortReset' ) {
ts.sortReset( this.config, function() {
tsf.searching( table, [] );
});
} else {
tsf.searching( table, [] );
}
} else if ( event.type === 'filterResetSaved' ) { } else if ( event.type === 'filterResetSaved' ) {
ts.storage( table, 'tablesorter-filters', '' ); ts.storage( table, 'tablesorter-filters', '' );
} else if ( event.type === 'filterEnd' ) { } else if ( event.type === 'filterEnd' ) {
@ -2200,7 +2207,7 @@
// setFilters called, but last search is exactly the same as the current // setFilters called, but last search is exactly the same as the current
// fixes issue #733 & #903 where calling update causes the input values to reset // fixes issue #733 & #903 where calling update causes the input values to reset
( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) { ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
return $( table ).data( 'lastSearch' ); return $( table ).data( 'lastSearch' ) || [];
} }
if ( c ) { if ( c ) {
if ( c.$filters ) { if ( c.$filters ) {

View File

@ -1,4 +1,4 @@
/*! Widget: editable - updated 3/1/2016 (v2.25.5) *//* /*! Widget: editable - updated 4/4/2017 (v2.28.7) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+ * Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison * by Rob Garrison
*/ */

View File

@ -1,4 +1,4 @@
/*! Widget: filter - updated 4/2/2017 (v2.28.6) *//* /*! Widget: filter - updated 4/4/2017 (v2.28.7) *//*
* Requires tablesorter v2.8+ and jQuery 1.7+ * Requires tablesorter v2.8+ and jQuery 1.7+
* by Rob Garrison * by Rob Garrison
*/ */

View File

@ -1,7 +1,7 @@
{ {
"name": "tablesorter", "name": "tablesorter",
"title": "tablesorter", "title": "tablesorter",
"version": "2.28.6", "version": "2.28.7",
"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.", "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": { "author": {
"name": "Christian Bach", "name": "Christian Bach",

View File

@ -1,7 +1,7 @@
{ {
"name": "tablesorter", "name": "tablesorter",
"title": "tablesorter", "title": "tablesorter",
"version": "2.28.6", "version": "2.28.7",
"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.", "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": { "author": {
"name": "Christian Bach", "name": "Christian Bach",