Merge branch 'master' into gh-pages

This commit is contained in:
Rob Garrison 2017-06-08 19:27:14 -05:00
commit 2c001de19e
19 changed files with 297 additions and 52 deletions

5
.mailmap Normal file
View File

@ -0,0 +1,5 @@
Rob Garrison <wowmotty@gmail.com> Mottie <wowmotty@gmail.com>
Rob Garrison <wowmotty@gmail.com> Rob G <wowmotty@gmail.com>
Justin F. Hallett <thesin@gmail.com> Justin F. Hallett <thesin@users.sf.net>
Erik-B. Ernst <git@black-milk.de> Erik-B. Ernst <github@black-milk.de>
Herst <Herst@users.noreply.github.com> Herst <github.x.herst@spamgourmet.com>

81
AUTHORS Normal file
View File

@ -0,0 +1,81 @@
# Authors ordered by first contribution.
Rob Garrison <wowmotty@gmail.com>
rozwell <rozwell69@gmail.com>
Wesley Walser <wwalser@atlassian.com>
Michael Meisel <michael@thousandeyes.com>
Sam Tyson <styson@gmail.com>
ViViDboarder <ViViDboarder@gmail.com>
blowsie <sam@blowsie.com>
Nick Craver <nrcraver@gmail.com>
emmerich <stevenhall@scottlogic.co.uk>
Ryan Millikin <rmillikin@gmail.com>
Bo-Yi Wu <appleboy.tw@gmail.com>
Deniss Abramovs <somebi@gmail.com>
Dave Riddle <david@joyvuu.com>
Cthulhu59 <stephane.bouteille@novigotech.com>
Volker Thiel <riker09@gmx.de>
Dawn Budge <d.budge@nature.com>
Campbell Allen <campbell.allen@gmail.com>
Justin F. Hallett <thesin@gmail.com>
Mathieu Lemoine <mathieu@wemakecustom.com>
gknights <gjknights@gmail.com>
harryxu <harryzhxu@gmail.com>
Craig Michael Thompson <craig@craigsworks.com>
Hugot Maxime <hugot.maxime@gmail.com>
Marcin <marcin@feedoptimise.com>
Christopher Thomas <chris.thomas@antimatter-studios.com>
Erik-B. Ernst <git@black-milk.de>
Mohit Jain <mayank.mohit@gmail.com>
James Reynolds <eire1130@gmail.com>
Dan Dascalescu <ddascalescu+github@gmail.com>
Mihhail Verhovtsov <mihhail.verhovtsov@icefire.ee>
Dan Turkenkopf <dturkenk@gmail.com>
Anders Antila <anders.antila@gmail.com>
evanboho <evan.kuchar@gmail.com>
sylvain-hamel <sylvainhamel0@gmail.com>
Ilya Igonkin <osdev0@gmail.com>
Alexander Johansson <ajax@ustwo.co.uk>
Juarez Turrini <juarez.turrini@gmail.com>
shobute <tesuuji@gmail.com>
lordmat0 <lordmat@gmail.com>
scratcher28 <scratcher@k.ro>
yelly <arielchinn@gmail.com>
Frédéric Rodrigo <fred.rodrigo@gmail.com>
Sean Hussey <sean@seanhussey.com>
Michael Wiencek <mwtuea@gmail.com>
prijutme4ty <prijutme4ty@gmail.com>
Ilya Vorontsov <prijutme4ty@gmail.com>
MaksimProgr <medvedevmaksim6@gmail.com>
Nicholas Burlett [GHS] <nburlett@ghs.com>
John Whitman <johnjameswhitman@gmail.com>
nikolas <nnyby@columbia.edu>
Herst <Herst@users.noreply.github.com>
Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>
VictorT83 <vteicher@gmail.com>
Andreas Mair <andreas.mair@linogate.de>
X O <xo@wvvw.me>
Ansis Kļaviņš <LvLynx@users.noreply.github.com>
Alexis Tyler <xo@wvvw.me>
fire-wally <evilhecubus@gmail.com>
Jon Dufresne <jon.dufresne@gmail.com>
Gabor Gyorvari <scr34m@gmail.com>
tschilling <schillingt@better-simple.com>
rjoly <rjoly@groupe-cogep.fr>
Drumsticks1 <Drumsticks1@users.noreply.github.com>
jasongabel <jasongabel@outlook.com>
Anton Rieder <aried3r@gmail.com>
Peter Dave Hello <hsu@peterdavehello.org>
Finn Bock <bckfnn@users.noreply.github.com>
Jan S. (Milania1) <github@milania.de>
Joel Perry <joelperry@me.com>
babaevmm <babaevmm@gmail.com>
Chris Rogers <ChrisM-Rogers@users.noreply.github.com>
Dan Feidt <dan.feidt@gmail.com>
MAROT Loïc <frennetix@gmail.com>
Simen Flatby <simenflatby@users.noreply.github.com>
Ruchir Patel <ruchir.patel19@gmail.com>
Andy Sleigh <adsleigh@hotmail.com>
Micah <micahedumont@gmail.com>
# Generated by tools/authors.sh

View File

@ -82,7 +82,7 @@ If you would like to contribute, please...
* Big thanks to [ThsSin-](https://github.com/TheSin-) for taking over for a while and also providing valuable feedback. * Big thanks to [ThsSin-](https://github.com/TheSin-) for taking over for a while and also providing valuable feedback.
* Thanks to [prijutme4ty](https://github.com/prijutme4ty) for numerous contributions! * Thanks to [prijutme4ty](https://github.com/prijutme4ty) for numerous contributions!
* Also extra thanks to [christhomas](https://github.com/christhomas) and [Lynesth](https://github.com/Lynesth) for help with code. * Also extra thanks to [christhomas](https://github.com/christhomas) and [Lynesth](https://github.com/Lynesth) for help with code.
* And, of course thanks to everyone else that has contributed, and continues to contribute to this forked project! * And, of course thanks to everyone else that has [contributed](https://github.com/Mottie/tablesorter/blob/master/AUTHORS), and continues to contribute through pull requests and open issues to this forked project!
[npm-url]: https://npmjs.org/package/tablesorter [npm-url]: https://npmjs.org/package/tablesorter
[npm-image]: https://img.shields.io/npm/v/tablesorter.svg [npm-image]: https://img.shields.io/npm/v/tablesorter.svg
@ -104,6 +104,18 @@ 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.14">Version 2.28.14</a> (6/8/2017)
* Core:
* Show console error for mismatched column count. See [issue #1415](https://github.com/Mottie/tablesorter/issues/1415).
* Pager:
* (addon) Ensure ajax is called after filter widget init. Fixes [issue #1389](https://github.com/Mottie/tablesorter/issues/1389).
* (addon) Fix height issues for certain browsers (border-spacing). See [pull #1418](https://github.com/Mottie/tablesorter/pull/1418); thanks [@DoctorWhite](https://github.com/DoctorWhite)
* (widget) Apply height adjustment code to pager widget.
* Use selectorRemove to remove error rows. Removes error rows with dynamically changed class names.
* Meta:
* Added [AUTHORS](https://github.com/Mottie/tablesorter/blob/master/AUTHORS) file.
#### <a name="v2.28.13">Version 2.28.13</a> (6/2/2017) #### <a name="v2.28.13">Version 2.28.13</a> (6/2/2017)
* Core: * Core:
@ -127,24 +139,3 @@ View the [complete change log here](https://github.com/Mottie/tablesorter/wiki/C
* Fix linting issues. * Fix linting issues.
* Update jQuery UI to v1.12.1. * Update jQuery UI to v1.12.1.
* Update [filter selectmenu demo](https://mottie.github.io/tablesorter/docs/example-widget-filter-selectmenu.html). * Update [filter selectmenu demo](https://mottie.github.io/tablesorter/docs/example-widget-filter-selectmenu.html).
#### <a name="v2.28.11">Version 2.28.11</a> (5/24/2017)
* Docs:
* Reword `sortReset` method description. See [issue #1404](https://github.com/Mottie/tablesorter/issues/1404).
* Columns:
* Initialize after pager widget.
* CssStickyHeaders:
* Fix captioned tables in Safari. See [issue #1405](https://github.com/Mottie/tablesorter/issues/1405); thanks [@TheSin-](https://github.com/TheSin-)!
* Fix in Edge browser.
* Filter:
* Attempt to fix [issue #1152](https://github.com/Mottie/tablesorter/issues/1152) (`liveSearch`).
* Second attempt at [issue #1152](https://github.com/Mottie/tablesorter/issues/1152).
* Trigger `liveSearch` on blur & cleanup.
* Pager (widget only):
* Allow ajax processing on init.
* Ensure ajax is called after filter widget initializes.
* Parsers:
* Update links to sugarjs/datejs demos.
* Meta:
* Update dependencies.

View File

@ -321,16 +321,22 @@
}, },
fixHeight = function(table, p) { fixHeight = function(table, p) {
var d, h, var d, h, bs,
c = table.config, c = table.config,
$b = c.$tbodies.eq(0); $b = c.$tbodies.eq(0);
$b.find('tr.pagerSavedHeightSpacer').remove(); $b.find('tr.pagerSavedHeightSpacer').remove();
if (p.fixedHeight && !p.isDisabled) { if (p.fixedHeight && !p.isDisabled) {
h = $.data(table, 'pagerSavedHeight'); h = $.data(table, 'pagerSavedHeight');
if (h) { if (h) {
d = h - $b.height(); bs = 0;
if ( d > 5 && $.data(table, 'pagerLastSize') === p.size && if ($(table).css('border-spacing').split(' ').length > 1) {
$b.children('tr:visible').length < (p.size === 'all' ? p.totalRows : p.size) ) { bs = $(table).css('border-spacing').split(' ')[1].replace(/[^-\d\.]/g, '');
}
d = h - $b.height() + (bs * p.size) - bs;
if (
d > 5 && $.data(table, 'pagerLastSize') === p.size &&
$b.children('tr:visible').length < (p.size === 'all' ? p.totalRows : p.size)
) {
$b.append('<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice(1) + '" style="height:' + d + 'px;"></tr>'); $b.append('<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice(1) + '" style="height:' + d + 'px;"></tr>');
} }
} }
@ -969,6 +975,10 @@
.bind('filterInit filterStart '.split(' ').join(namespace + ' '), function(e, filters) { .bind('filterInit filterStart '.split(' ').join(namespace + ' '), function(e, filters) {
p.currentFilters = $.isArray(filters) ? filters : c.$table.data('lastSearch'); p.currentFilters = $.isArray(filters) ? filters : c.$table.data('lastSearch');
var filtersEqual; var filtersEqual;
if (p.ajax && e.type === 'filterInit') {
// ensure pager ajax is called after filter widget has initialized
return moveToPage( table, p, false );
}
if (ts.filter.equalFilters) { if (ts.filter.equalFilters) {
filtersEqual = ts.filter.equalFilters(c, c.lastSearch, p.currentFilters); filtersEqual = ts.filter.equalFilters(c, c.lastSearch, p.currentFilters);
} else { } else {
@ -1188,7 +1198,7 @@
valid = true, valid = true,
message = '', message = '',
removeRow = function(){ removeRow = function(){
c.$table.find( 'thead' ).find( '.' + errorRow ).remove(); c.$table.find( 'thead' ).find( c.selectorRemove ).remove();
}; };
if ( !$table.length ) { if ( !$table.length ) {

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
/*! tablesorter (FORK) - updated 06-02-2017 (v2.28.13)*/ /*! tablesorter (FORK) - updated 06-08-2017 (v2.28.14)*/
/* 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.13 *//* /*! TableSorter (FORK) v2.28.14 *//*
* 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.13', version : '2.28.14',
parsers : [], parsers : [],
widgets : [], widgets : [],
@ -2287,9 +2287,42 @@
} }
} }
} }
ts.checkColumnCount($rows, matrix, matrixrow.length);
return matrixrow.length; return matrixrow.length;
}, },
checkColumnCount : function($rows, matrix, columns) {
// this DOES NOT report any tbody column issues, except for the math and
// and column selector widgets
var i, len,
valid = true,
cells = [];
for ( i = 0; i < matrix.length; i++ ) {
// some matrix entries are undefined when testing the footer because
// it is using the rowIndex property
if ( matrix[i] ) {
len = matrix[i].length;
if ( matrix[i].length !== columns ) {
valid = false;
break;
}
}
}
if ( !valid ) {
$rows.each( function( indx, el ) {
var cell = el.parentElement.nodeName;
if ( cells.indexOf( cell ) ) {
cells.push( cell );
}
});
console.error(
'Invalid or incorrect number of columns in the ' +
cells.join( ' or ' ) + '; expected ' + columns +
', but found ' + len + ' columns'
);
}
},
// automatically add a colgroup with col elements set to a percentage width // automatically add a colgroup with col elements set to a percentage width
fixColumnWidth : function( table ) { fixColumnWidth : function( table ) {
table = $( table )[ 0 ]; table = $( table )[ 0 ];

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.13 *//* /*! TableSorter (FORK) v2.28.14 *//*
* 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.13', version : '2.28.14',
parsers : [], parsers : [],
widgets : [], widgets : [],
@ -2285,9 +2285,42 @@
} }
} }
} }
ts.checkColumnCount($rows, matrix, matrixrow.length);
return matrixrow.length; return matrixrow.length;
}, },
checkColumnCount : function($rows, matrix, columns) {
// this DOES NOT report any tbody column issues, except for the math and
// and column selector widgets
var i, len,
valid = true,
cells = [];
for ( i = 0; i < matrix.length; i++ ) {
// some matrix entries are undefined when testing the footer because
// it is using the rowIndex property
if ( matrix[i] ) {
len = matrix[i].length;
if ( matrix[i].length !== columns ) {
valid = false;
break;
}
}
}
if ( !valid ) {
$rows.each( function( indx, el ) {
var cell = el.parentElement.nodeName;
if ( cells.indexOf( cell ) ) {
cells.push( cell );
}
});
console.error(
'Invalid or incorrect number of columns in the ' +
cells.join( ' or ' ) + '; expected ' + columns +
', but found ' + len + ' columns'
);
}
},
// automatically add a colgroup with col elements set to a percentage width // automatically add a colgroup with col elements set to a percentage width
fixColumnWidth : function( table ) { fixColumnWidth : function( table ) {
table = $( table )[ 0 ]; table = $( table )[ 0 ];

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
/*! tablesorter (FORK) - updated 06-02-2017 (v2.28.13)*/ /*! tablesorter (FORK) - updated 06-08-2017 (v2.28.14)*/
/* 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) {

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 06-02-2017 (v2.28.13)*/ /*! tablesorter (FORK) - updated 06-08-2017 (v2.28.14)*/
/* 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.13 *//* /*! TableSorter (FORK) v2.28.14 *//*
* 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.13', version : '2.28.14',
parsers : [], parsers : [],
widgets : [], widgets : [],
@ -2293,9 +2293,42 @@
} }
} }
} }
ts.checkColumnCount($rows, matrix, matrixrow.length);
return matrixrow.length; return matrixrow.length;
}, },
checkColumnCount : function($rows, matrix, columns) {
// this DOES NOT report any tbody column issues, except for the math and
// and column selector widgets
var i, len,
valid = true,
cells = [];
for ( i = 0; i < matrix.length; i++ ) {
// some matrix entries are undefined when testing the footer because
// it is using the rowIndex property
if ( matrix[i] ) {
len = matrix[i].length;
if ( matrix[i].length !== columns ) {
valid = false;
break;
}
}
}
if ( !valid ) {
$rows.each( function( indx, el ) {
var cell = el.parentElement.nodeName;
if ( cells.indexOf( cell ) ) {
cells.push( cell );
}
});
console.error(
'Invalid or incorrect number of columns in the ' +
cells.join( ' or ' ) + '; expected ' + columns +
', but found ' + len + ' columns'
);
}
},
// automatically add a colgroup with col elements set to a percentage width // automatically add a colgroup with col elements set to a percentage width
fixColumnWidth : function( table ) { fixColumnWidth : function( table ) {
table = $( table )[ 0 ]; table = $( table )[ 0 ];

View File

@ -1,4 +1,4 @@
/*! TableSorter (FORK) v2.28.13 *//* /*! TableSorter (FORK) v2.28.14 *//*
* 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.13', version : '2.28.14',
parsers : [], parsers : [],
widgets : [], widgets : [],
@ -2275,9 +2275,42 @@
} }
} }
} }
ts.checkColumnCount($rows, matrix, matrixrow.length);
return matrixrow.length; return matrixrow.length;
}, },
checkColumnCount : function($rows, matrix, columns) {
// this DOES NOT report any tbody column issues, except for the math and
// and column selector widgets
var i, len,
valid = true,
cells = [];
for ( i = 0; i < matrix.length; i++ ) {
// some matrix entries are undefined when testing the footer because
// it is using the rowIndex property
if ( matrix[i] ) {
len = matrix[i].length;
if ( matrix[i].length !== columns ) {
valid = false;
break;
}
}
}
if ( !valid ) {
$rows.each( function( indx, el ) {
var cell = el.parentElement.nodeName;
if ( cells.indexOf( cell ) ) {
cells.push( cell );
}
});
console.error(
'Invalid or incorrect number of columns in the ' +
cells.join( ' or ' ) + '; expected ' + columns +
', but found ' + len + ' columns'
);
}
},
// automatically add a colgroup with col elements set to a percentage width // automatically add a colgroup with col elements set to a percentage width
fixColumnWidth : function( table ) { fixColumnWidth : function( table ) {
table = $( table )[ 0 ]; table = $( table )[ 0 ];

View File

@ -4,7 +4,7 @@
*/ */
/*! tablesorter (FORK) - updated 06-02-2017 (v2.28.13)*/ /*! tablesorter (FORK) - updated 06-08-2017 (v2.28.14)*/
/* 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) {

View File

@ -611,7 +611,7 @@
}, },
fixHeight: function( c ) { fixHeight: function( c ) {
var d, h, var d, h, bs,
table = c.table, table = c.table,
p = c.pager, p = c.pager,
wo = c.widgetOptions, wo = c.widgetOptions,
@ -620,9 +620,15 @@
if ( wo.pager_fixedHeight && !p.isDisabled ) { if ( wo.pager_fixedHeight && !p.isDisabled ) {
h = $.data( table, 'pagerSavedHeight' ); h = $.data( table, 'pagerSavedHeight' );
if ( h ) { if ( h ) {
d = h - $b.height(); bs = 0;
if ( d > 5 && $.data( table, 'pagerLastSize' ) === p.size && if ( $(table).css('border-spacing').split(' ').length > 1 ) {
$b.children( 'tr:visible' ).length < ( p.size === 'all' ? p.totalRows : p.size ) ) { bs = $(table).css('border-spacing').split(' ')[1].replace( /[^-\d\.]/g, '' );
}
d = h - $b.height() + (bs * p.size) - bs;
if (
d > 5 && $.data( table, 'pagerLastSize' ) === p.size &&
$b.children( 'tr:visible' ).length < ( p.size === 'all' ? p.totalRows : p.size )
) {
$b.append( '<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice( 1 ) + $b.append( '<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice( 1 ) +
'" style="height:' + d + 'px;"></tr>' ); '" style="height:' + d + 'px;"></tr>' );
} }
@ -1301,7 +1307,7 @@
valid = true, valid = true,
message = '', message = '',
removeRow = function() { removeRow = function() {
c.$table.find( 'thead' ).find( '.' + errorRow ).remove(); c.$table.find( 'thead' ).find( c.selectorRemove ).remove();
}; };
if ( !$table.length ) { if ( !$table.length ) {

View File

@ -1,7 +1,7 @@
{ {
"name": "tablesorter", "name": "tablesorter",
"title": "tablesorter", "title": "tablesorter",
"version": "2.28.13", "version": "2.28.14",
"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",
@ -38,6 +38,9 @@
"type": "git", "type": "git",
"url": "git://github.com/Mottie/tablesorter.git" "url": "git://github.com/Mottie/tablesorter.git"
}, },
"scripts": {
"authors": "bash testing/authors.sh"
},
"npmName": "tablesorter", "npmName": "tablesorter",
"npmFileMap": [ "npmFileMap": [
{ {

View File

@ -1,7 +1,7 @@
{ {
"name": "tablesorter", "name": "tablesorter",
"title": "tablesorter", "title": "tablesorter",
"version": "2.28.13", "version": "2.28.14",
"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",

17
testing/authors.sh Normal file
View File

@ -0,0 +1,17 @@
#!/bin/bash
# generate AUTHORS, modify .mailmap in case of duplicates
git log --reverse --format='%aN <%aE>' | perl -we '
BEGIN {
%seen = (), @authors = ();
}
while (<>) {
next if $seen{$_};
$seen{$_} = push @authors, $_;
}
END {
print "# Authors ordered by first contribution.\n";
print "\n", @authors, "\n";
print "# Generated by tools/authors.sh\n";
}
' > "${BASH_SOURCE%/*}/../AUTHORS"