tablesorter-2.29.5/000077500000000000000000000000001323420250400141325ustar00rootroot00000000000000tablesorter-2.29.5/.editorconfig000066400000000000000000000003621323420250400166100ustar00rootroot00000000000000# https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties root = true [*] indent_style = tab indent_size = 2 trim_trailing_whitespace = true end_of_line = lf charset = utf-8 insert_final_newline = true max_line_length = 80 tablesorter-2.29.5/.gitattributes000066400000000000000000000007731323420250400170340ustar00rootroot00000000000000# Auto detect text files and perform LF normalization * text=auto # Custom for Visual Studio *.cs diff=csharp *.sln merge=union *.csproj merge=union *.vbproj merge=union *.fsproj merge=union *.dbproj merge=union # Standard to msysgit *.doc diff=astextplain *.DOC diff=astextplain *.docx diff=astextplain *.DOCX diff=astextplain *.dot diff=astextplain *.DOT diff=astextplain *.pdf diff=astextplain *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain *.md diss=astextplain tablesorter-2.29.5/.gitignore000066400000000000000000000037251323420250400161310ustar00rootroot00000000000000################# ## Eclipse ################# *.pydevproject .project .metadata bin/ tmp/ *_test*.* *_idea*.* *.tmp *.bak *.swp *~.nib local.properties .classpath .settings/ .loadpath # External tool builders .externalToolBuilders/ # Locally stored "Eclipse launch configurations" *.launch # CDT-specific .cproject # PDT-specific .buildpath ################# ## Visual Studio ################# ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates # Build results [Dd]ebug/ [Rr]elease/ node_modules/ *_i.c *_p.c *.ilk *.log *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.vspscc .builds *.dotCover ## TODO: If you have NuGet Package Restore enabled, uncomment this #packages/ # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf # Visual Studio profiler *.psess *.vsp # ReSharper is a .NET coding add-in _ReSharper* # Installshield output folder [Ee]xpress # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish # Others [Bb]in [Oo]bj sql TestResults *.Cache ClientBin stylecop.* ~$* *.dbmdl Generated_Code #added for RIA/Silverlight projects # Backup & report files from converting an old project file to a newer # Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML ############ ## Windows ############ # Windows image file caches Thumbs.db # Folder config file Desktop.ini ############# ## Python ############# *.py[co] # Packages *.egg *.egg-info build eggs parts bin var sdist develop-eggs .installed.cfg # Installer logs pip-log.txt # Unit test / coverage reports .coverage .tox #Translations *.mo #Mr Developer .mr.developer.cfg # Mac crap .DS_Store tablesorter-2.29.5/.jscsrc000066400000000000000000000030371323420250400154250ustar00rootroot00000000000000{ "disallowDanglingUnderscores": true, "disallowEmptyBlocks": true, "disallowKeywords": [ "with" ], "disallowMixedSpacesAndTabs": "smart", "disallowMultipleLineBreaks": true, "disallowMultipleLineStrings": true, "disallowNewlineBeforeBlockStatements": true, "disallowOperatorBeforeLineBreak": [ "." ], "disallowSpaceAfterPrefixUnaryOperators": true, "disallowSpaceBeforeBinaryOperators": [ "," ], "disallowSpaceBeforePostfixUnaryOperators": true, "disallowSpacesInCallExpression": true, "disallowTrailingComma": true, "maximumLineLength": { "allowRegex": true, "allowUrlComments": true, "tabSize": 2, "value": 180 }, "requireBlocksOnNewline": 1, "requireCommaBeforeLineBreak": true, "requireCurlyBraces": [ "do" ], "requireDollarBeforejQueryAssignment": true, "requireDotNotation": true, "requireLineFeedAtFileEnd": true, "requireParenthesesAroundIIFE": true, "requireSemicolons": true, "requireSpaceAfterBinaryOperators": true, "requireSpaceAfterKeywords": [ "if", "else", "for", "while", "do", "switch", "case", "return", "try", "catch", "typeof" ], "requireSpaceAfterLineComment": true, "requireSpaceBeforeBinaryOperators": true, "requireSpacesInConditionalExpression": true, "requireSpacesInForStatement": true, "requireSpacesInsideArrayBrackets": "all", "validateIndentation": { "allExcept": ["emptyLines", "comments"], "value": "\t" }, "validateQuoteMarks": { "escape": true, "mark": "'" } }tablesorter-2.29.5/.mailmap000066400000000000000000000005351323420250400155560ustar00rootroot00000000000000Rob Garrison Mottie Rob Garrison Rob G Justin F. Hallett Justin F. Hallett Erik-B. Ernst Erik-B. Ernst Herst Herst tablesorter-2.29.5/AUTHORS000066400000000000000000000061111323420250400152010ustar00rootroot00000000000000# Authors ordered by first contribution. Rob Garrison rozwell Wesley Walser Michael Meisel Sam Tyson ViViDboarder blowsie Nick Craver emmerich Ryan Millikin Bo-Yi Wu Deniss Abramovs Dave Riddle Cthulhu59 Volker Thiel Dawn Budge Campbell Allen Justin F. Hallett Mathieu Lemoine gknights harryxu Craig Michael Thompson Hugot Maxime Marcin Christopher Thomas Erik-B. Ernst Mohit Jain James Reynolds Dan Dascalescu Mihhail Verhovtsov Dan Turkenkopf Anders Antila evanboho sylvain-hamel Ilya Igonkin Alexander Johansson Juarez Turrini shobute lordmat0 scratcher28 yelly Frédéric Rodrigo Sean Hussey Michael Wiencek prijutme4ty Ilya Vorontsov MaksimProgr Nicholas Burlett [GHS] John Whitman nikolas Herst Kevin Kirsche VictorT83 Andreas Mair X O Ansis Kļaviņš Alexis Tyler fire-wally Jon Dufresne Gabor Gyorvari tschilling rjoly Drumsticks1 jasongabel Anton Rieder Peter Dave Hello Finn Bock Jan S. (Milania1) Joel Perry babaevmm Chris Rogers Dan Feidt MAROT Loïc Simen Flatby Ruchir Patel Andy Sleigh Micah LaurentBarbareau ced-b Federico-G Lars Alex Weissman Andrew Murphy # Generated by tools/authors.sh tablesorter-2.29.5/CHANGELOG.md000066400000000000000000000001501323420250400157370ustar00rootroot00000000000000Change log moved to the [wiki documentation pages](https://github.com/Mottie/tablesorter/wiki/Changes). tablesorter-2.29.5/CONTRIBUTING.md000066400000000000000000000066561323420250400164000ustar00rootroot00000000000000# Contributing to tablesorter (FORK) 1. [Getting Involved](#getting-involved) 2. [How To Report issues](#how-to-report-issues) 3. [Contributing Code](#contributing-code) ## Getting Involved There are a number of ways to get involved with the development of this fork of Tablesorter. Even if you've never contributed to an Open Source project before, we're always looking for help identifying issues. ## How to Report issues, or make requests. * First off make sure it's a new issue. Search the [FAQ](https://github.com/Mottie/tablesorter/wiki/FAQ), [documents](https://mottie.github.io/tablesorter/docs/) and the [issues](https://github.com/Mottie/tablesorter/issues). * If it's an existing issue or feature request, and you want to show that it is also a concern for you. Add a comment! * If it turns out to not be an issue, but a question instead: * Please don't open a new issue. * Jump on out freenode.net IRC channel: `#tablesorter`. * Ask the question on [Stackoverflow](https://stackoverflow.com/questions/tagged/tablesorter) (tablesorter or jQuery tag). * If you do open a new issue: * If the issue only occurs in a particular browser or version of jQuery, that would be awesome to know! * Please include any *relevant* code (posting the entire page usually isn't that helpful). * Add if there are any errors showing in the console (press F12 in the browser and go to the console tab). * Include screenshots, animated gifs, videos (check out [screenr](https://www.screenr.com/)) or funny cat pictures. You never know what might help! ## Contributing Code * Installation: * Please see the [Customize](https://github.com/Mottie/tablesorter/wiki/Customize) wiki page for specifics on how to install the necessary modules & create a custom build. * If you aren't comfortable using grunt or making a build file, you can go ahead and just share the changes. * Style Guide: * We're not too strict, just try to follow the style that is already being used in the code; [click here here for the .jscsrc file used in this project](https://github.com/Mottie/tablesorter/blob/master/.jscsrc). * When naming variables: * Use names that describe it's contents. I'm guilty of naming things `t` and `i`, but I'm slowly trying to rename them to make reading code and finding the variable in the code easier. * Name jQuery objects with a leading `$`, e.g. `var $table = $('table');` * We like semicolons! Jshint will yell at you if you don't use them. * We like single quotes! It's OCD man! * We like tabs! * We like pizza! * Pull request: * Before opening a pull request, please make sure that your code is on a *fork* of the master. This is really for your own convenience: it's easy for us to accept your pull request from your master branch, but it's problematic for your fork when you want to pull the changes back and your master branch has diverged from upstream's master branch. * Add unit tests - tablesorter is still missing a lot of unit tests, so adding tests for your contribution would be a tremendous help! * Also, make sure to test your changes! * Use `grunt test` ([ref](https://github.com/Mottie/tablesorter/wiki/Customize#testing-a-build)) * If you aren't comfortable with using grunt, copy, then paste your code into [jsHint](http://jshint.com/) to help find any problems with the changes. * There is no need to open an issue, then create a pull request. Just create the pull request and add any comments about your changes there. tablesorter-2.29.5/Gruntfile.js000066400000000000000000000327011323420250400164320ustar00rootroot00000000000000/*global module:false*/ module.exports = function( grunt ) { 'use strict'; var pkg = grunt.file.readJSON( 'package.json' ), tasks, widgetFilePrefix, widgetFileSuffix, defaults = { dependencies : { widgets: { 'saveSort resizable pager filter columnSelector' : 'storage', 'filter-formatter-html5 filter-formatter-jui filter-formatter-select2' : 'filter' // 'stickyHeaders' : 'addResizeEvent' // included with stickyHeaders widget (for now) } }, standardWidgets: [ 'storage', // req by saveSort; optional in others 'uitheme', 'columns', 'filter', 'stickyHeaders', 'resizable', 'saveSort' // 'addResizeEvent', // included with stickyHeaders widget // 'zebra' // included in core ], standardWidgetFileName: 'jquery.tablesorter.widgets.js', wrappers : { widgetPrefix: 'js/widgets/widget-', widgetSuffix: '.js', parserPrefix: 'js/parsers/parser-', parserSuffix: '.js' }, wrapperUMD: { // tablesorter core coreBanner: '(function(factory) {\n' + " if (typeof define === 'function' && define.amd) {\n" + " define(['jquery'], factory);\n" + " } else if (typeof module === 'object' && typeof module.exports === 'object') {\n" + " module.exports = factory(require('jquery'));\n" + ' } else {\n' + ' factory(jQuery);\n' + ' }\n' + '}(function(jQuery) {\n\n', // widgets wrapper & combined wrapper - may need a separate entry when this wrapper is redefined to make // widgets a dependency of the core (see https://github.com/Mottie/tablesorter/issues/855) banner: '<%= pkg.banner %>/* Includes widgets ( <%= pkg.selectedWidgets %> <%= pkg.selectedParsers %>) */\n' + '(function(factory) {\n' + " if (typeof define === 'function' && define.amd) {\n" + " define(['jquery'], factory);\n" + " } else if (typeof module === 'object' && typeof module.exports === 'object') {\n" + " module.exports = factory(require('jquery'));\n" + ' } else {\n' + ' factory(jQuery);\n' + ' }\n' + '}(function(jQuery) {\n\n', footer: '\nreturn jQuery.tablesorter;\n}));\n' }, noModBanner: '/*** This file is dynamically generated ***\n' + '█████▄ ▄████▄ █████▄ ▄████▄ ██████ ███████▄ ▄████▄ █████▄ ██ ██████ ██ ██\n' + '██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▄▄ ██▄▄██\n' + '██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██\n' + '█████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀\n*/\n' }, // example widgets = [ 'pager', 'column', 'filter', 'stickyHeaders' ]; addWidgetDependencies = function( widgets ) { var indx, dep, maxDeps = 40, // just in case (there are currently 27 widgets) len = widgets.length, deps = defaults.dependencies.widgets; for ( dep in deps ) { if ( typeof dep === 'string' ) { for ( indx = 0; indx < len; indx++ ) { // make sure indexOf is not matching 'column' instead of 'columnSelector' with surrounding spaces if ( ( ' ' + dep + ' ' ).indexOf( ' ' + widgets[indx] + ' ' ) >= 0 && widgets.indexOf( deps[ dep ] ) < 0 ) { widgets.push( deps[ dep ] ); // keep checking newly added widgets, in case 'filter' is added and 'storage' hasn't been if ( len < maxDeps ) { len++; } continue; } } } } return widgets; }, formFileNames = function() { var wrap = defaults.wrappers; // add widget path & file extension pkg.processedWidgets = ( wrap.widgetPrefix + pkg.selectedWidgets.join( wrap.widgetSuffix + ',' + wrap.widgetPrefix ) + wrap.widgetSuffix ).split( ',' ); console.info( 'Creating a widgets file with: ' + pkg.selectedWidgets.join(', ') ); if ( pkg.selectedParsers ) { // parser path & file extension pkg.processedParsers = ( wrap.parserPrefix + pkg.selectedParsers.join( wrap.parserSuffix + ',' + wrap.parserPrefix ) + wrap.parserSuffix ).split( ',' ); console.info( 'Creating a combined file with selected widgets & these parsers: ' + pkg.selectedParsers.join(', ') ); // make this look nice for the banner pkg.selectedParsers = ') & parsers ( ' + pkg.selectedParsers + ' '; } console.info( pkg.processedParsers ); }; // minified banner template - updated ##/##/20## (v2.##.##) pkg.banner = '/*! <%= pkg.name %> (FORK) - updated ' + '<%= grunt.template.today("yyyy-mm-dd") %> (v<%= pkg.version %>)*/\n'; pkg.buildWidget = defaults.standardWidgetFileName; pkg.buildCombined = 'jquery.tablesorter.combined.js'; pkg.processedParsers = '!js/parsers/*.js'; // Project configuration. grunt.initConfig({ pkg: pkg, clean: { build: { src: [ 'dist/**/**/**/*', 'dist/**/**/*', 'dist/**/*', 'dist' ] }, css: { src: [ 'dist/css/*.css', '!dist/css/*.min.css', '!dist/css/theme.blue.css' ] } }, copy: { css: { files : [{ expand: true, dot: true, flatten: true, src: [ 'css/*.css', 'addons/pager/*.css' ], dest: 'dist/css/', rename: function( dest, src ) { if ( /black-ice/.test( src ) ) { src = src.replace( /-/, '' ); } return dest + src; } }] }, less: { expand: true, flatten: true, src: 'css/*.less', dest: 'dist/css/less/' }, scss: { expand: true, flatten: true, src: 'css/*.scss', dest: 'dist/css/scss/' }, images: { expand: true, flatten: true, src: [ 'addons/pager/icons/*', 'css/images/*' ], dest: 'dist/css/images/' } }, concat: { main: { options: { banner: defaults.wrapperUMD.coreBanner, footer: defaults.wrapperUMD.footer }, src: [ 'js/jquery.tablesorter.js' ], dest: 'dist/js/jquery.tablesorter.js' }, widgets: { options: { banner: defaults.wrapperUMD.banner, footer: defaults.wrapperUMD.footer }, src: [ '<%= pkg.processedWidgets %>', '!js/widgets/_test-*.js', '!js/widgets/*.min.js' ], dest: 'dist/js/<%= pkg.buildWidget %>' }, everything: { options: { banner: defaults.wrapperUMD.banner, footer: defaults.wrapperUMD.footer }, src: [ 'js/jquery.tablesorter.js', '<%= pkg.processedWidgets %>', '<%= pkg.processedParsers %>', '!js/widgets/_test-*.js', '!js/widgets/*.min.js' ], dest: 'dist/js/<%= pkg.buildCombined %>' }, // keep all the existing jsFiddle demos from breaking copybackWidgets: { options: { banner: defaults.noModBanner }, src : ['dist/js/<%= pkg.buildWidget %>'], dest: 'js/<%= pkg.buildWidget %>' }, copybackCombined: { options: { banner: defaults.noModBanner }, src : ['dist/js/<%= pkg.buildCombined %>'], dest: 'js/<%= pkg.buildCombined %>' } }, jscs: { src: [ 'addons/pager/*.js', '!addons/pager/*.min.js', 'js/jquery.*.js', 'js/**/*.js', '!js/_test-*.js', '!js/jquery.tablesorter.combined.js', '!js/jquery.tablesorter.widgets.js', '!js/extras/jquery.dragtable.mod.js', // indents with spaces; keeping original formatting to make diffs easier '!js/extras/jquery.metadata.js', // phasing this one out anyway '!js/**/_test-*.js', '!js/*.min.js', '!js/**/semver*.js' ], options: { config: '.jscsrc' } }, jshint: { files: { src: [ 'addons/pager/*.js', '!addons/pager/*.min.js', 'js/jquery.*.js', 'js/**/*.js', '!js/_test-*.js', '!js/**/_test-*.js', '!js/*.min.js', '!js/**/semver*.js' ] }, options: { globals: { 'JSON': false, 'localStorage': false, 'navigator': false, 'console': false, 'require': false, 'define': false, 'module': false }, 'loopfunc': true, 'jquery': true, 'browser': true, 'es3': true, 'unused': true, 'undef': true } }, htmlhint: { html1: { options: { 'tag-pair': true }, src: ['docs/*.html', 'beta-testing/*.html'] } }, uglify: { options: { output: { comments: /^!/, beautify: false, ie8: true }, report: 'gzip' }, allFiles: { files: [{ expand: true, cwd: './js/', // Src matches are relative to this path. src: [ '**/*.js', '!jquery.tablesorter.js', '!_test-*.js', '!**/_test-*.js', '!*.min.js', '!**/semver.js' ], dest: 'dist/js/', ext: '.min.js', // Dist files will have this extension. extDot: 'last' // Extensions in filenames begin after this dot }] }, // jquery.tablesorter.min.js is being minified from js/jquery.tablesorter.js // so it doesn't include the UMD wrapper! Point to the dist/js/ version main: { files : [{ expand: true, cwd: './dist/js/', src: [ 'jquery.tablesorter.js' ], dest: 'dist/js/', ext: '.min.js', // Dist files will have this extension. extDot: 'last' // Extensions in filenames begin after this dot }] }, pageraddon: { files: { 'dist/js/extras/jquery.tablesorter.pager.min.js': [ 'addons/pager/*.js' ] } } }, cssmin: { target: { files: [{ expand: true, flatten: true, cwd: 'dist/css', src: ['*.css', '!_test-*.css'], dest: 'dist/css', ext: '.min.css', extDot: 'last' }] } }, qunit: { files: [ 'test.html' ] }, watch: { scripts: { files: [ 'js/*.js', 'js/**/*.js', '!js/_test-*.js', '!js/*.min.js' ], tasks: [ 'build' ] } } }); grunt.loadNpmTasks( 'grunt-contrib-clean' ); grunt.loadNpmTasks( 'grunt-contrib-jshint' ); grunt.loadNpmTasks( 'grunt-htmlhint' ); grunt.loadNpmTasks( 'grunt-contrib-qunit' ); grunt.loadNpmTasks( 'grunt-contrib-concat' ); grunt.loadNpmTasks( 'grunt-contrib-uglify' ); grunt.loadNpmTasks( 'grunt-contrib-copy' ); grunt.loadNpmTasks( 'grunt-contrib-watch' ); grunt.loadNpmTasks( 'grunt-contrib-cssmin' ); grunt.loadNpmTasks( 'grunt-jscs' ); grunt.registerTask( 'test', [ 'jscs', 'jshint', 'htmlhint', 'qunit' ] ); tasks = [ 'clean:build', 'copy', 'concat', 'uglify', 'cssmin', 'clean:css', 'updateManifest' ]; // basic = same as before: core, widgets, filterformatter all separate grunt.registerTask( 'default', 'Default build', function() { pkg.selectedWidgets = addWidgetDependencies( defaults.standardWidgets ); formFileNames(); grunt.task.run(tasks); }); // quick build to just minify files for pushes between updates grunt.registerTask( 'quick', [ 'copy', 'uglify', 'clean:css' ] ); // enter 'grunt custom:{filename}' (not including the '.json') // to load in a custom json file // the expected JSON format is (with custom widgets in a string): // { "widgets" : "columnHighlight filter resizable saveSort stickyHeaders uitheme" } grunt.registerTask( 'custom', 'Custom build', function(file) { var temp, widgets, parsers = '', deps = true; /* Allow developer to set up a custom widget build (json file will have settings)*/ try { temp = grunt.file.readJSON( file ); if ( temp ) { parsers = temp.parsers; // include dependencies? deps = ('includeDependencies' in temp) ? temp.includeDependencies : true; // custom file name? pkg.buildWidget = ('destFileName' in temp) ? temp.destFileName : 'jquery.tablesorter.custom-widgets.js'; // widgets to include widgets = (temp.widgets || ''); if (widgets.replace(/\s+/g,'') === '') { grunt.log.error('No widgets found in custom build file.'); console.info('Continuing build with default widgets...'); temp = defaults.standardWidgets; pkg.buildWidget = defaults.standardWidgetFileName; } else { temp = widgets.split(/\s+/); } } } catch (err) { grunt.log.error('Custom build json not found - Use "grunt custom:{filename}"'); console.info('Continuing build with default settings'); temp = defaults.standardWidgets; } // add dependencies pkg.selectedWidgets = deps ? addWidgetDependencies( temp ) : temp; pkg.selectedParsers = parsers.split( /\s+/ ); formFileNames(); grunt.task.run(tasks); }); function escapeRegExp(str) { return str.replace(/[$()*+\-.\/?[\\\]^{|}]/g, "\\$&"); } // update tablesorter.jquery.json file version numbers to match the package.json version grunt.registerTask( 'updateManifest', function() { var i, project, projectFile = [ 'tablesorter.jquery.json' ], len = projectFile.length; for ( i = 0; i < len; i++ ) { if ( !grunt.file.exists( projectFile[ i ] ) ) { grunt.log.error( 'file ' + projectFile[ i ] + ' not found' ); return true; // return false to abort the execution } project = grunt.file.readJSON( projectFile[ i ] ); // get file as json object project.version = pkg.version; grunt.file.write( projectFile[i], JSON.stringify( project, null, 2 ) ); // serialize it back to file } // check internal version number project = grunt.file.read('js/jquery.tablesorter.js'); if ( new RegExp(escapeRegExp('/*! TableSorter (FORK) v' + pkg.version)).test(project) && new RegExp(escapeRegExp("version : '" + pkg.version)).test(project) ) { console.info('versions all match!'); } else { grunt.log.writeln('\n**** version mismatch! ****'['red'].bold); } }); }; tablesorter-2.29.5/README.md000066400000000000000000000206701323420250400154160ustar00rootroot00000000000000tablesorter (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. This 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. [![Bower Version][bower-image]][bower-url] [![NPM Version][npm-image]][npm-url] [![devDependency Status][david-dev-image]][david-dev-url] [![zenhub-image]][zenhub-url] ### Notice! * Because of the change to the internal cache, the tablesorter v2.16+ core, filter widget and pager (both plugin & widget) will only work with the same version or newer files. ### [Documentation](https://mottie.github.io/tablesorter/docs/) * See the [full documentation](https://mottie.github.io/tablesorter/docs/). * All of the [original document pages](http://tablesorter.com/docs/) have been included. * Information from my blog post on [undocumented options](https://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html) and lots of new demos have also been included. * Change log moved from included text file into the [wiki documentation](https://github.com/Mottie/tablesorter/wiki/Changes). ### Questions? [![irc-image]][irc-url] [![gitter-image]][gitter-url] [![stackoverflow-image]][stackoverflow-url] * Check the [FAQ](https://github.com/Mottie/tablesorter/wiki/FAQ) page. * Search the [main documentation](https://mottie.github.io/tablesorter/docs/) (click the menu button in the upper left corner). * Search the [issues](https://github.com/Mottie/tablesorter/issues) to see if the question or problem has been brought up before, and hopefully resolved. * If someone is available, ask your question in the `#tablesorter` IRC channel at freenode.net. * Ask your question at [Stackoverflow](https://stackoverflow.com/questions/tagged/tablesorter) using a tablesorter tag. * Please don't open a [new issue](https://github.com/Mottie/tablesorter/issues) unless it really is an issue with the plugin, or a feature request. Thanks! ### Demos * [Basic alpha-numeric sort Demo](https://mottie.github.io/tablesorter/). * Links to demo pages can be found within the main [documentation](https://mottie.github.io/tablesorter/docs/). * More demos & playgrounds - updated in the [wiki pages](https://github.com/Mottie/tablesorter/wiki). ### Features * Multi-column alphanumeric sorting and filtering. * Multi-tbody sorting - see the [options](https://mottie.github.io/tablesorter/docs/index.html#options) table on the main document page. * Supports [Bootstrap v2-4](https://mottie.github.io/tablesorter/docs/example-option-theme-bootstrap-v3.html). * Parsers for sorting text, alphanumeric text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats) & time. [Add your own easily](https://mottie.github.io/tablesorter/docs/example-parsers.html). * Inline editing - see [demo](https://mottie.github.io/tablesorter/docs/example-widget-editable.html). * Support for ROWSPAN and COLSPAN on TH elements. * Support secondary "hidden" sorting (e.g., maintain alphabetical sort when sorting on other criteria). * Extensibility via [widget system](https://mottie.github.io/tablesorter/docs/example-widgets.html). * Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+, Chrome 5.0+. * Small code size, starting at 25K minified. * Works with jQuery 1.2.6+ (jQuery 1.4.1+ needed with some widgets). * Works with jQuery 1.9+ (`$.browser.msie` was removed; needed in the original version). ### Licensing * Copyright (c) 2007 Christian Bach. * The original version can be found at [http://tablesorter.com](http://tablesorter.com), or on [GitHub](https://github.com/christianbach/tablesorter). * Dual licensed under the [MIT](https://opensource.org/licenses/mit-license.php) or [GPLv2](https://www.gnu.org/licenses/gpl-2.0.html) licenses (pick one). ### Download * Get all files: [zip](https://github.com/Mottie/tablesorter/archive/master.zip) or [tar.gz](https://github.com/Mottie/tablesorter/archive/master.tar.gz). * Use [bower](https://bower.io/): `bower install jquery.tablesorter`. * Use [node.js](https://nodejs.org/): `npm install tablesorter`. * CDNJS: https://cdnjs.com/libraries/jquery.tablesorter * jsDelivr: http://www.jsdelivr.com/?query=tablesorter ### Related Projects * [Plugin for Rails](https://github.com/themilkman/jquery-tablesorter-rails). Maintained by [themilkman](https://github.com/themilkman). * [UserFrosting](https://www.userfrosting.com) (A secure, modern user management system for PHP that uses tablesorter) by [@alexweissman](https://github.com/alexweissman). * [Grav CMS](https://getgrav.org/): `bin/gpm install tablesorter` ([ref](https://github.com/Perlkonig/grav-plugin-tablesorter)). * [tablesorter-pagercontrols](https://github.com/isg-software/tablesorter-pagercontrols) – programmatically adds pager controls below a table and applies the pager add-on for large HTML tables by [isg-software](https://github.com/isg-software). ### Contributing If you would like to contribute, please... 1. Fork. 2. Make changes in a branch & add unit tests. 3. Run `grunt test` (if qunit fails, run it again - it's fickle). 4. Create a pull request. ### Special Thanks * Big shout-out to [Nick Craver](https://github.com/NickCraver) for getting rid of the `eval()` function that was previously needed for multi-column sorting. * Big thanks to [thezoggy](https://github.com/thezoggy) for helping with code, themes and 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! * 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](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-image]: https://img.shields.io/npm/v/tablesorter.svg [david-dev-url]: https://david-dm.org/Mottie/tablesorter?type=dev [david-dev-image]: https://img.shields.io/david/dev/Mottie/tablesorter.svg [bower-url]: http://bower.io/search/?q=jquery.tablesorter [bower-image]: https://img.shields.io/bower/v/jquery.tablesorter.svg [zenhub-url]: https://zenhub.io [zenhub-image]: https://cdn.rawgit.com/Mottie/tablesorter/master/docs/img/zenhub-badge.svg [irc-url]: https://kiwiirc.com/client/irc.freenode.net#tablesorter [irc-image]: https://img.shields.io/badge/irc-%23tablesorter-yellowgreen.svg [gitter-url]: https://gitter.im/Mottie/tablesorter [gitter-image]: https://img.shields.io/badge/GITTER-join%20chat-yellowgreen.svg [stackoverflow-url]: http://stackoverflow.com/questions/tagged/tablesorter [stackoverflow-image]: https://img.shields.io/badge/stackoverflow-tablesorter-blue.svg ### Recent Changes View the [complete change log here](https://github.com/Mottie/tablesorter/wiki/Changes). #### Version 2.29.5 (2018-01-30) * Docs: * Update jQuery to v3.3.1. * Add jQuery UI theme selector to scroller demo. See [issue #1506](https://github.com/Mottie/tablesorter/issues/1506). * Minor fixes to links. * Filter: * Clean up language settings & allow empty strings. See [issue #1505](https://github.com/Mottie/tablesorter/issues/1505). * Fix linting issue. * Fix version numbering. * Parser: * Add radio parser. See [issue #1502(https://github.com/Mottie/tablesorter/issues/1502). #### Version 2.29.4 (2018-01-18) * Docs: * Downgrade Bootstrap JS (v3.3.7) in demos. * Filter: * Add `filter_filterLabel` to support filter input ARIA labels. See [issue #1495](https://github.com/Mottie/tablesorter/issues/1495). * Change filter row role from "row" to "search". * Fix select2 issue. Closes [issue #1497](https://github.com/Mottie/tablesorter/issues/1497). * Meta: * Change date format in file comments to "YYYY-MM-DD". #### Version 2.29.3 (2018-01-10) * Docs: * Update Bootstrap to v4-beta.3. * Add scroller widget incompatibilities section. * Add pager size all setting. * Parser: * Network parsers now return a text value. Fixes [issue #1494](https://github.com/Mottie/tablesorter/issues/1494). tablesorter-2.29.5/addons/000077500000000000000000000000001323420250400154025ustar00rootroot00000000000000tablesorter-2.29.5/addons/pager/000077500000000000000000000000001323420250400165005ustar00rootroot00000000000000tablesorter-2.29.5/addons/pager/icons/000077500000000000000000000000001323420250400176135ustar00rootroot00000000000000tablesorter-2.29.5/addons/pager/icons/first.png000066400000000000000000000012021323420250400214430ustar00rootroot00000000000000PNG  IHDRaIIDATxd\/݋nËkۍrqݮζmcUm۾97<tT*YbUE[ƃt%J6Pi?t+V˾]X|{(f/dŭ2)΃i`,z8RѬY\KI *+oLeS=ĺ/G!.:|wы 3^^B.5 ,^IE)/X&V21r؃Yfg|TqXhpYE?CU[F/~+T@3E2f__hnmV嚍h2L1,`UMf(껸*M|;2( 2*NCT%$7Ċk2}8n}FOFN Llm"#;$ް[K") /%/׼):}Kƴ%L`i&س55_~wlwQ:ͨ?4 g lt.X`sz  X.o}Yr 30fs}ay!J ziEQ$ `/Ʀy fLk31ktoT$/N(d9)9cYxpMqM 30>! 'CZvfTNWKGa3KV^X>,K/ҒK ݽ"#qI|S0 _ɩ"!|8$eS8Wk.)q I&Vt L4A.,wfx!*u,fD>9`t5 yt KBXoT%8mviP6wđy$nG$Uk۸q7jۂ&1}`%'d)l/ҭ(OmzY8h\vQw!vGye=q]d2A+(Tr(?9Kz#3Qoz؅\IENDB`tablesorter-2.29.5/addons/pager/icons/loading.gif000066400000000000000000000006401323420250400217170ustar00rootroot00000000000000GIF89aZZZ! NETSCAPE2.0! ,Ao\ A@%Ƭ!\8:cljJ[ xn ng2V|Jg &e! , TڎIm^yP! ,  T"QT@Mzۮ!V! ,  qmZ:rMfK! , y+q*YUB_1B! , L*9+8}P! ,  i^*r|iV! , po^s-eZeh;tablesorter-2.29.5/addons/pager/icons/next.png000066400000000000000000000012221323420250400212740ustar00rootroot00000000000000PNG  IHDRaYIDATxlS[a]~s4#m۶ٶrj]׳{;я@5:$tI(a4=;3"J'bsf]нw/ (\ gɽ.h+ͣXiQ(K`|ou[YrdluZ|*r Z?Iu|.H'(^Mdoԗ:wcer5Ysk r)uMV26La$XÐ /aVH@q٤$zvfTnJx gP^ȗHxGO.F.VHj'^Ɛu/$<{ٍ/ ~dRϮ$b]):x3֒ޟ򻔢_b JI2]9HUd2 3őrϼP,ve`\} k…mxڎu{"v,L%Ndg4FE?t5AA|7n?b4+_WErIENDB`tablesorter-2.29.5/addons/pager/icons/prev.png000066400000000000000000000012271323420250400212770ustar00rootroot00000000000000PNG  IHDRa^IDATxl/}7mGmm۶m۶Ir7vH0Dو:)e%[4i>gpX:Gj?K2%۾ѕ 9f (ZU ;F&mKf5ၑ)VgC7A4@ҙPjhhUFْ 8f\ -Vz KRW5&eͣWMV\ _wo`L/# %, N6w5rf:%z`QgЀA6bMALjA#YUkDՂ+/Bo4#19U ǠoPpӫ~U4Ԉ?Jqե€MuCR  8g8B7f4h&j_" "ys䪉 X,yۧH[޽[T`u!EKzmTk 8A>Ă~awCƟ<>zD&JUFXy|A߈b[2{N#6>=w+rp'yhF@I}<G?nG3OKB@7oMMz#3Q̄