Skip to content

Older changes 2.25.0

Rob Garrison edited this page May 17, 2018 · 2 revisions

Wiki: Home | FAQ | Customize | Snippets | Search | Language | Changes | Older-changes-2.25.0 | Older-changes-2.13.0 | Change summary

Milestones: 2.25 | 2.24 | 2.23 | 2.22 | 2.21 | 2.20 | 2.19 | 2.18 | 2.17 | 2.16 | 2.15 | 2.14

Version 2.25.9 (4/29/2016)

  • Docs:
    • Fix search for next/previous result positioning.
    • Add sortMultiSortKey alternative settings. See issue #1200.
  • ColumnSelector:
    • Refresh method properly saves changes. Fixes issue #1198.
    • Fix missing class name; fallback to "filtered" when the filter_filteredRows widget option is undefined.
    • Add columnSelector_maxPriorities. Fixes issue #1204.
  • Filter:
    • Include milliseconds in formatter date comparison. See issue #1191.
    • Properly initialize after using applyWidgetId. Fixes issue #1197.
  • Scroller:
    • Add multi-line caption height support in fixed column. Fixes issue #1202.
  • Parser (checkbox):
    • Header checkbox properly updates row class names.
    • Fix indeterminate checkbox issue in IE.
    • Fix indeterminate checkbox state checked state in IE.
    • See issue #1199.

Version 2.25.8 (4/11/2016)

  • Core: duplicateSpan set to false now uses textExtraction instead of setting the data to an empty string; see [Stackoverflow](See http://stackoverflow.com/q/36449711/145346).
  • Docs:
    • Update jQuery.
    • Various fixes.
  • Theme: Bootstrap: default cursor for sorter-false. Fixes issue #1189.
  • Print: Process lazyload images before printing. See issue #1169.
  • Grunt:
    • Update dependencies.
    • Update Qunit.

Version 2.25.7 (4/1/2016)

  • Filter: Check match on both internal & external filters. See issue #1177.
  • Lazyload: Trigger window scroll after update. See issue #1169.
  • Scroller: Throttle scroll event. Fixes issue #1186.
  • StickyHeaders: Update on table resize for Firefox. Fixes issue #1183.
  • Grunt: Update dependencies.

Version 2.25.6 (3/18/2016)

  • Core:
    • Add debug warning when widget not found.
    • Add debug warning when widget is added more than once.
  • Docs:
    • More notes added about including .filter { display: none; } in custom themes. See issue #1172.
    • Add support badges to readme.
  • Filter:
  • Lazyload:
    • Trigger lazyload after filtering. Fixes issue #1169.
    • Change skip_invisible option default to true.
  • Grunt:
    • Update dependencies.

Version 2.25.5 (3/1/2016)

  • Global:
    • Replace array push functions in main loops.
  • Docs:
    • Update storage widget changes.
    • Various corrections.
  • Editable:
    • Fix lint issue.
    • Replace pasted content with plain text. Fixes issue #994.
  • Filter:
  • Group:
    • Use non-cached variables when added after core init. Fixes issue #1158.
  • Math:
    • General cleanup & optimization.
    • Leave table in place or filter input lost. Fixes issue #903.
  • Print:
    • Stop print event propagation from nested tables. Fixes issue #1160.
  • Scroller:
  • StickyHeaders:
  • Storage:
  • Parser:
    • Add huge number parser. See issue #1161.
    • Huge number correction (make JSCS happy).
  • Build:
    • Update dependencies. Several times!

Version 2.25.4 (2/15/2016)

  • Core:
    • Remove id from widgets option prior to remove function. See issue #1155.
    • applyWidgetsId properly accepts jQuery table element.
  • ColumnSelector:
  • Editable:
    • Use execCommand to select all text, if supported.
  • Filter:
  • Grouping:
    • Reapply zebra after collapsed group opens. Fixes issue #1156.
  • Pager:
  • Docs:
    • Add ignoreRow class to pager row.
    • Show actual theme names; to use in the themes option.
  • Build: Update dependencies.
  • Testing: re-align code.

Version 2.25.3 (1/21/2016)

  • Filter:
    • Check that filter is not undefined before encoding/decoding it & treat null and undefined filters the same. See pull #1130; thanks tim-schilling!
    • Search delay now works properly. Fixes issue #1134.
  • Docs:
    • Add clarification about hiding columns. See issue #1133.
  • Build:
    • Update dependencies.

Version 2.25.2 (1/15/2016)

  • Docs:
    • Update main demo & test to use jQuery 3.0.0-beta.
  • Core:
    • Revert extra header class name updating. See issue #1116.
  • Filter:
  • Output:
  • Parsers:
    • checkbox value should no longer change. Fixes issue #1125.

Version 2.25.1 (1/10/2016)

  • Docs:
    • Update to jQuery v1.12.0.
    • Fix HTML hint issues.
  • Core:
    • Fix time parser detection. See issue #1107.
    • Add multiple widgets from table class. Fixes issue #1109.
    • Fix extra header class name updating. See issue #1116.
    • Fix typo in comments.
  • ColumnSelector:
  • Filter:
    • Use replacement character instead of null (for IE).
    • Fix "or" test regex. Fixes issue #1117.
    • Restore return false to fix unit tests.
    • Functions now get exact data, ignoring parsed flag. Fixes issue #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.
  • Grunt:
    • Add HTML hint.

Version 2.25.0 (12/13/2015)

  • Global
    • Use triggerHandler instead of trigger to prevent event bubble to any outer table. See issue #1090.
  • Core
    • Add duplicateSpan option (default is true) with unit tests (demo).
    • Add triggered "removeWidget" method & update docs.
    • applyWidgetId now properly initializes a widget, if needed.
    • applyWidgetId now adds widget name to widgets option.
    • Show parsed data in debug log. See issue #1084.
    • Prevent js error - calling "applyWidgetId" on non-existant widget.
    • Prevent js error - trying to apply a non-existent widget.
    • Fix "updateCell" issue. If "updateCell" is triggered on a thead cell, or bubbles to an outer table, tablesorter no longer gets stuck in an "isUpdating" loop.
    • Ensure table has initialized before allowing use of "updateCell". See issue #1099.
    • Fix cache debug log for multiple tbodies.
    • After init, computeColumnIndex now only adds "data-column" attribute to mismatched indexes - lessens DOM interaction on tbody (e.g. math widget).
    • Add "sortBeforeEnd" event for internal widget binding.
    • Renamed $.tablesorter.formatSortingOrder to $.tablesorter.getOrder.
    • Include table in console.error if an issue is encountered during initialization.
    • Clean up warning when no parser is found for given data.
    • Fix config.sortVars js error for non-existent header cells (makes second column of this demo sortable using "sorton").
  • Docs
    • Add reference to datejs parser. See issue #1084.
    • Add note that reflow widget only works with HTML5.
    • Add note in filter localization about escaping special characters in regular expressions. See issue #1101.
    • Update & add all options in math widget demo.
    • Fix search tooltip not hiding on side menu close.
    • Update to Bootstrap v3.3.6.
  • Editable
    • Ensure table has initialized before allowing use of "updateCell". See issue #1099.
  • Filter
    • Prevent js error when columnFilters are false. Fixes issue #1091.
    • Restore column specific default filters. Fixes issue #1088.
    • Prevent insideRange filter type (widget-filter-type-insideRange.js) searches on "all" columns.
    • Prevent edge case js error.
    • Add "filterBeforeEnd" event for internal widget binding.
    • Filters that span multiple columns now have the correct "data-column" value set.
    • Consolidated code that parsed "data-column" ranges into a findRange function (e.g. external filters with data-column="1-3,4-6,8").
  • Math
    • Add "data-math-filter" cell override of math_rowFilter option. See issue #1083.
    • Limit tbody cell processing & use cellIndex whenever possible. See issue #1048.
    • Use core textExtraction on cells. See issue #1098.
    • Initial calculation performed once - changed binding to either "filterEnd" or "pagerComplete", not both.
    • Added change flag so a cache update is only performed when cell content inside of a sortable tbody was modified.
    • Fix "data-math-filter" on "all" cell calculation with fixes to getRow & getColumn functions so that filters get priority over the "filtered" row check. See issue #1083.
    • Another "data-math-filter" fix and change flag fix. See issue #1083; thanks to @lindonb for all the feedback!
    • math_none can now be set to an empty string.
  • Print
  • Parsers
    • Checkbox row class & header now work with sorter-false set. See issue #1090.
    • Return true for header checkbox to work in IE8. See issue #1090.
  • Misc
    • gitignore file - ignore "idea" demos used for testing.

Version 2.24.6 (11/22/2015)

  • Core
    • Prevent "tablesorter-ready" event from firing multiple times in a row.
    • While detecting parsers, use cssIgnoreRow & stop after 50 rows.
  • Docs
    • Update utility options section.
  • Math
    • Add math_rowFilter option. See issue #1083.
    • Spelling corrections to math_rowFilter option.
    • Ensure internal updating flag gets cleared. Fixes issue #1083.
  • Pager
    • Initial page no longer ignored (no filter widget). Fixes issue #1085.
    • Fix other page set issues (no filter widget). Fixes issue #1085.
    • Fix page set issues (with filter widget). Fixes issue #1085.
    • Clean up pager widget code.
  • Print
    • Add print_now option. See issue #1081.
    • Fix print & close button actions.
  • SortTbodies
    • Use config parameter for numeric sorting. See issue #1082.
  • Parsers:
    • Update parser-input-select.js. See issue #971.
    • parser-date-month.js no longer removes other language data.
    • Add alternate date range parser & update filter insideRange filter type.
    • Don't use $.extend for simple additions.
  • Misc
    • Update grunt dependencies.

Version 2.24.5 (11/10/2015)

  • Pager: Fix javascript error in pager addon when using ajax.

Version 2.24.4 (11/10/2015)

  • Core
    • sortRestart works again with multi-row headers. Fixes issue #1074.
    • Add sortDisabled language setting; used in aria-labels.
  • Docs
  • Filter
  • Group
    • Include group & row data parameters in group_formatter. Fixes issue #1077.
  • HeaderTitles
    • Update aria-label usage.
  • Math
  • Pager
    • Clear tbody prior to calling ajaxProcessing. This again allows the developer to add the HTML to the table instead of needing to return it.
  • Sort2Hash
    • Make widget functions accessible.
    • Add 2 utility functions to simplify hash processing.
  • Toggle
    • Add new widget to enable/disable sort & filter. See issue #1075.
  • Parser
    • Add "file-extension" parser.
  • Misc
    • Grunt: Fix uglify comment removal & update dist folder.

Version 2.24.3 (11/4/2015)

  • Core
    • jQuery filter element parameter not defined in v1.2.6.
    • Fix sortRestart preventing sort. Fixes issue #1072.
  • Filter
    • Convert filter array to include all strings. Fixes issue #1070.
    • setFilter "apply" parameter now defaults to true. See issue #1071.
  • Resizable
    • Fix widget bindings after tablesorter "updateAll" event. See pull #1073; thanks scr34m!
  • Misc
    • One more attempt at setting ignore in bower.json. See pull #1063.

Version 2.24.2 (11/2/2015)

  • Misc
    • Restory empty bower.json ignore setting... bower is installing an empty dist folder.

Version 2.24.1 (11/2/2015)

  • Core
    • Cache "shortDate" parser & time parser now extracts the time.
  • Group
    • Add optimizations from pull #830; thanks to VorontsovIE!
    • Update demo to use new "weekday-index" parser when "group-date-week" is set, and updated "time" parser when "group-date-time" is set.
  • Print
    • Rows option now accepts custom css selectors.
  • Sort2Hash
    • Remove history push state as it ignored other tables on the page.
  • Parsers
    • Globalization parser now caches the Globalize object in a same named option.
    • Convert month & weekday parsers to utilize globalization data.
    • Add "weekday-index" parser - this parser ignores the actual date but saves the weekday from a date object
  • Misc

Version 2.24.0 (10/31/2015)

  • Docs
    • Fix mixed content using GitHub buttons on main page. See pull #1029; thanks OmgImAlexis!
    • Clarify use of pager ajaxUrl option.
    • Add theme class to tables to prevent FOUC.
    • Fix left menu push. The body no longer squeezes the content.
    • Update stickyHeaders after menu close.
    • Include horizontal scroll while jumping to search result.
    • Add some examples (filter_cssFilter).
  • Global
    • Call internal functions directly; stop using triggered events.
  • Core
    • Use plain javascript to set index attribute & remove unused variable. See issue #1048.
    • Add "entire column colspan" support. See issues #485, #746 & #1047.
    • Fix parser detect & sortVars on columns that don't exist due to colspan. See issues #485, #746 & #1047.
    • Reformat structure & expand variable names.
    • Add rowFilter parameter to getColumnText function.
    • Fix multisort indicators. Fixes issue #1005, again.
    • sortAppend now accepts an object of column references; see Stackoverflow.
    • Internalize sort counter & fix spanned sorts.
    • Add "tablesorter-ready" event.
    • Add widget from class before adding widget options.
    • Maintaining support for IE7-8 until 1/12/16.
  • Chart
    • Fix chart_layout column indexing.
  • ColumnSelector
    • Add mediaqueryHidden option. Resolves issue #964.
    • Extra rows & colspans now supported in thead & tfoot. Fixes issue #501.
    • Fix jscs reported issues.
  • Filter
    • Encode/decode filters in case they end up in cookies. See issue #1026.
    • Add "entire column colspan" support. See issues #485, #746 & #1047.
    • hideFilters applies to stickyHeaders again. Fixes issue #1050.
    • Prevent error in formatterUpdated. Fixes issue #1056.
  • Grouping
  • HeaderTitles
    • Switch to use internalized sort counter.
  • Lazyload
    • Add new widget. Demo
  • Math
    • Created new calculation type "below". It works just like "above" except in other direction starting from top to bottom. See pull #1027; thanks LvLynx!
    • Tweak changes & more tweaks for better compression.
    • Detach table prior to indexing all cells. See issue #1048.
    • Add math_none option.
    • Include config parameter in math equations - needed for math_none option.
  • Output
    • Correct formatContent function comment (missing widgetOptions variable)
    • Do not include nested table headers with parent. Fixes issue #1040.
  • Pager
    • Clear tbody if no data returned by ajax. See issue #1032.
    • Add "all" setting for page size methods; includes select option & all methods. See issue #1055.
    • Fix pager widget demo destroy method.
    • destroyPager again reveals all rows. Fixes issue #1055.
    • Parse page numbers to prevent user seeing NaN.
    • Parse page size updates.
  • Print
    • Internal variable tweaks.
    • Include css to hide filter rows. Fixes issue #1046.
    • Add print delay; allows browsers to render print preview.
  • Scroller
  • Sort2Hash
    • Update to include pager (page & size) and filter parameters.
  • SortTbodies
    • Moved config string defaults to $.tablesorter.strings to match core reformatting.
  • StickyHeaders
    • hideFilters applies to stickyHeaders again. Fixes issue #1050.
  • View
    • Add new widget. Demo.
    • Fix jscs reported issues.
  • Parsers
    • Globalize parser now allows a different language per column.
    • Fix jscs reported issues.
  • Misc

Version 2.23.5 (10/4/2015)

  • Core:
  • Docs:
    • Add instructions on how to use the new filter option (filter_childWithSibs).
    • Include filter reset in above demo.
    • Fixed spelling mistake x2. See pull #1024 & #1025; thanks OmgImAlexis!
    • Add note data-attribute values added to both parsed & raw data. Closes issue #983.
    • Move all javascript to page bottom.
  • Filter:
    • Keep parent match when no child rows match. See issue #1020.
    • Ignore filter_childWithSibs when filter_childByColumn is false. See issue #1020.
    • Select includes child rows when filter_childByColumn is set.
  • Pager
    • Prevent hiding child rows when disabling or destroying the pager. See issue #1020.

Version 2.23.4 (9/23/2015)

  • Core:
    • Ensure widgets don't get cached options. Fixes issue #946.
    • Update natural sort regular expression for chunking data.
    • Use window.console check to prevent IE9 error. Fixes issue #1019.
  • Filter:
    • Modified internal variable.
    • Add internal processOptions function & code cleanup.
    • Fix external filters not allowing columns > 9. See pull #1021; thanks a-mair!
    • Add filter_childWithSIbs option. Fixes issue #1020.
  • Build
    • Update dependencies.

Version 2.23.3 (9/1/2015)

  • Docs:
    • Correction to dateFormat demo.
  • Core:
    • Corrected sorting of col/rowspan in thead. Fixes issue #1005.
    • Correct header sort indicators in row/colspans. Fixes issue #1005.
  • Filter:
    • Use namespacing when binding reset. Fixes issue #1001.
    • Restore triggered change namespace & prevent search before init. Fixes issue #1002.
  • Group:
    • Remove unused variable.
    • Add group_forceColumn & group_enforceSort options. Fixes issue #1000.

Version 2.23.2 (8/23/2015)

  • Readme
    • Corrections for last update
  • Docs
    • Add parsed values function no longer wraps empty content.
  • Core
    • Cache regular expressions.
  • ColumnSelector
    • Add columnSelector_updated option (triggered event name).
  • Filter
    • Allow dynamically changing the "any match" filter. Fixes issue #998.
    • Cache regular expressions.
    • Add reference to widget code to make the file more compressible.

Version 2.23.1 (8/19/2015)

  • Core

    • Prevent js error when $.tablesorter.showError is called without a string. Fixes issue #997.

    • Updated $.tablesorter.showError function by including a settings parameter; a parameter passed by jQuery's .ajaxError() method, but was previously omitted.

      $.tablesorter.showError( table, xhr, settings, exception );

      I didn't bump the minor version as this is somewhat on the edge of calling this a breaking change.

  • Pager

    • Include settings parameter from ajaxError method, between the xhr and exception parameters to match the order of parameters returned by jQuery .ajaxError() method.

      ajaxError: function( config, xhr, settings, exception ){ return exception; };

Version 2.23.0 (8/17/2015)

  • Core:
    • Prevent addRows error. See issue #979.
    • Make all updating methods public
      • Call a function instead of triggering an event on the table. Changes include:
        • $.tablesorter.addRows - called by addRows method.
        • $.tablesorter.appendCache - renamed from appendToTable; appends cache to DOM, called by appendCache method.
        • $.tablesorter.isEmptyObject - clone of $.isEmptyObject (jQuery v1.4).
        • $.tablesorter.sortOn - called by sortOn method.
        • $.tablesorter.sortReset - called by sortReset method.
        • $.tablesorter.updateAll - called by updateAll method.
        • $.tablesorter.updateCache - called by updateCache method.
        • $.tablesorter.updateCell - called by updateCell method.
        • $.tablesorter.update - called by update and updateRows method.
    • addRows now accepts a row string if only one tbody exists in the table.
      • The one tbody does not include information only tbodies (which have a class name from cssInfoBlock).
      • Previously, you had to make a jQuery object, append it to the table, then pass a reference containing the new rows.
      • This method doesn't work if a table has multiple tbodies, because the plugin doesn't know where you want to add the rows.
      • Also, updated the debug message for this method.
    • Use header cells instead of references to prevent IE8 error. Fixes issue #987.
    • Fix above header cell targetting causing a javascript error in jQuery v1.2.6. Fixes issue #995.
    • Add updateHeaders method
      • Triggered event & public api function.
      • $.tablesorter.updateHeaders - called by updateHeaders method.
      • Fixes issue #989.
  • Docs:
    • Update jQuery UI theme switcher URLs.
  • ColumnSelector:
    • Modify refreshColumnSelector method so it also updates the contents of the container in case of changes to the header text, column priorities, etc.
    • See examples of these changes in the column selector methods section.
    • Fixes issue #985.
  • Editable:
    • Improve column option parsing. Fixes issues #982 & #979.
  • Filter:
    • Fix js error caused when limiting search columns - external "any" filter targeting specific columns; see Stackoverflow.
  • Pager:
    • Widget only: No more javascript error in widget ajax error message.
    • Addon only: replace use of $.isEmptyObject which was not available in jQuery v1.2.6.
    • Change enable, disable & destroy trigger methods.
      • Previously, these methods had to include a .pager namespace: enable.pager, disable.pager & destroy.pager.
      • These methods stopped working when unique pager namespaces were added.
      • New trigger methods are named as follows: enablePager, disablePager & destroyPager.
      • Fixes issue #980.
    • Unbind pager controls on destroy. Fixes issue #981.
    • Add ajaxError callback function. Fixes issue #992.
  • Parsers:
    • parser-input-select: fix javascript error when no rows returned.
  • Misc & Testing
    • Miscellaneous cleanup of testing code.
    • Add empty ignore entry to bower.json. Fixes issue #991.
    • Fix license in package.json to match the new spdx license expression syntax.

Version 2.22.5 (7/28/2015)

  • Overall:
  • Set JSHint "undef" & "unused" options. Fixed issues.
  • The math widget was throwing a javascript error after missing a changed variable name & JSHint wasn't catching it, until now.

Version 2.22.4 (7/28/2015)

  • Overall
    • update debug logging. console is now called directly & includes grouping, tables, warning & errors.
  • Core
    • Replace tbody placeholder use of a <span> with a <colgroup>. Attempt to resolve IE error reported in issue #938.
    • Fix $.tablesorter.hasWidget error introduced when fixing jscs issues.
    • Fix $.tablesorter.isProcessing error introduced when fixing jscs issues.
    • Update isValueInArray function to prevent js errors with invalid input.
  • Docs
    • Remove duplicate section in math widget docs.
    • Add resizable widget note about leaving widthFixed set to false. See issue #958.
    • Update to use jQuery v1.11.3.
    • Change deprecated window load function.
    • Improve two-digit year parser demo.
    • Minor updates.
  • Filter
    • Prevent invalid RegExp errors which occur while typing in an incomplete query.
  • Math
    • Ignored rows are now properly ignored in columns. Fixes issue #976.
  • Output
  • Pager
    • Bind using unique event namespace. See issue #961.
  • Scroller
    • Prevent error on destroy when not applied. See issue #965.
    • Fix js error in old IE.
    • Delay resize after updateAll.
    • Include sortEnd in fixed column updates. See issue #977.
  • Sort2Hash
    • This widget updates the location hash based on the table sort, and sets the table sort on initialization. demo.
    • A user can share a link with others and have the table in the same sorted order.
    • The hash can be set to use header text and any text to indicate an ascending or descending sort.
    • Add text & saveSort override options. Fixes issue #962.
    • Other minor revisions.
  • Parsers
    • Checkbox in multiple columns now toggles the row class correctly.
  • Grunt build: Add jscs checking & fix reported style issues.
  • Testing
    • Update QUnit to 1.18.0.
    • Add removeWidget test.
    • Add isValueInArray tests.
    • Add isProcessing tests.
  • Extras - dropping support for quicksearch plugin.

Version 2.22.3 (6/30/2015)

  • Scroller: fix javascript error scroller_$fixedColumns is undefined.

Version 2.22.2 (6/30/2015)

  • Core
    • Only use preventDefault in specific jQuery versions (v1.3.2 & older). Fixes issue #911.
    • The "updateCache" method now accepts a tbody object.
    • Make getParsedText a public function.
    • Allow empty string in textExtraction data-attribute. Fixes issue #954.
  • Docs
    • Update trigger sort method documentation.
    • Update information about cssIgnoreRow. See issue #911.
    • Add requirement to include .filter { display: none } in custom themes.
    • Improve Bootstrap example in column selector docs. See pull #935, thanks @Herst!
    • Clean up & corrections:
      • Code examples in math & editing demos.
      • Corrected comments in "Skip the parsing of column content" demo.
      • Fix HTML validation issues.
    • Add contributing.md link to JSCS formatting file by @Herst.
    • Update to Bootstrap v3.3.5.
  • Parsers
    • Checkbox: add checkbox parser class name option (config.checkboxClass).
    • Metric: Support metric base unit case insensitivity.
  • Editable
    • Allow Shift+Enter to create a new line (even with editable_enterToAccept set as true).
    • Update cache without requiring a hover over the thead; cache order now properly maintained on touch devices.
  • Filter
    • Target last used filter properly. See issue #920.
    • filter_selectSource now ignores parsers, if none are set (empty or ajax tables). See issue #934.
    • Add support for nesting of "AND" & "OR" searches. Fixes issues #891 & #918.
    • Filter row remains visible after focused when filter_hideFilters is set.
    • Remove trailing comma in pull #948, thanks @Herst!
  • Output
    • Allow empty string data-attributes. See issue #923.
    • output_saveRows now accepts jQuery filter selectors. See issue #923.
    • Fix hiddenColumns option causing an empty output. Fixes issue #923.
    • Prevent javascript error when no row data is passed. See issue #923.
    • Remove tfoot clone, instead concat data to the end.
    • Fix colspans and hidden columns.
    • Stop outputTable method propagation. Fixes issue #944.
  • Pager
    • Make hasWidget think the pager addon is a widget.
    • Prevent adding a row if ajax returned JSON totalrows is zero. See Stackoverflow.
  • RepeatHeaders
    • use selectorRemove option setting.
  • Resizable
    • Replace window resize trigger. See issue #912.
    • Resizing now works with overflow wrapped tables. Fixes issue #953.
  • Scroller
    • Fix added stylesheet error using "," instead of ";".
    • Remove colgroup & hidden elements in fixed columns.
    • Fix slow fixed column scrolling in Firefox. See issue #135.
    • Multiple tbody fix. See issues #906 & #913.
    • Limit horizontal scrollbar to scrolling section.
    • Removed widthFixed requirement.
    • Update RTL support.
    • Fix column alignment. Fixes issue #913.
    • Fix filter return zero to few rows.
    • Reduce init lag & correct no fixed column tbody width. See issue #906.
    • Fix mousewheel scrolling on fixed columns.
    • Cleanup & old IE fix.
    • Fix column alignment issues #940, #937, #931 & #927.
    • Throttle IE scrolling. Partially fixes issue #928.
    • Save scroll positioning. Fixes issues #926 & #932.
    • Integrate with:
  • SortTbodies (beta)
  • StickyHeaders
  • Zebra
    • Target non-info block tbodies in extra tables.
  • Grunt
    • Update grunt modules.
    • Remove moot "version" property from bower.json. See pull #941, thanks @kkirsche!
    • Don't update bower.json in Gruntfile.js.
    • Check for old IE issue in pull #949, thanks @Herst!

Version 2.22.1 (5/17/2015)

  • Filter: fix issue with searches always looking for parsed content in numeric columns.

Version 2.22.0 (5/17/2015)

  • Docs
    • Lots of minor version updates, spelling corrections & clarifications in wording.
    • Update box-sizing styles (ref).
    • Update characterEquivalents cross-reference to correctly match the code of the plugin.
    • Add Build table widget example resulting HTML for the json example.
  • Grunt build
    • package.json files now points to the entire "dist" folder. See issue #881.
    • Add grunt quick build to only update widget & parser files; it skips updating the dates in the widgets & combined files.
  • Core
    • The isDigit function now reports false on empty strings. See issue #865.
    • Add pointer events options (pointerClick, pointerDown and pointerUp). Fixes issue #885.
    • Prevent js error when using the computeColumnIndex function on empty tables (used by the math widget). Fixes issue #889.
    • Prevent js error when sortList includes an out-of-bounds column. Fixes issue #908.
    • Centralize extractor & parser code; this code is used by the main build cache loop and the "addRows" & "updateCell" methods.
    • Child row content is now properly stored in row data as an array of arrays.
    • Add "o" to sortLocaleCompare replacement table & update docs.
    • Replace all instances of using jQuery each with plain javascript. Fixes issue #827.
  • Editable
    • Modify trimContent option & use HTML to modify text. Fixes issue #886.
    • Fix selectAll & change tbody mouseleave to complete editing to thead mouseenter. Fixes issue #848.
    • Only make table cell child div/span contenteditable. See issue #900.
    • Add remove widget code & allow dynamic updating if the "no-edit" class changes. Fixes issue #900.
  • Filter
    • Regex filter searches now cache the created regex object for each query to optimize speed & a regex search now properly uses case-sensitive content
    • Add data parameter to filter_functions. This is the same data used by the filter search type functions. See issue #891.
    • Any match searches which target specific columns will no longer save each filter to its respective column; see "AnyMatch Searches" documentation.
    • Operator filter searchs now ignore empty strings (because "" < 10 is true).
    • Clean up parseFilter function.
    • Add filter_childByColumn option.
      • Setting this to true allows searching through the child rows by column.
      • When false, the search behaves as before and all child row content is included in the search of every column.
      • See a demo here.
      • Fixes issues #396 & #574.
    • Code cleanup - added a bunch of whitespace & forced line wraps at around 120.
    • Prevent setFilter function from setting the same filters after an update. Fixes issues #903 & #733.
  • Grouping
    • Add keyboard accessibility to group headers. See issue #260.
  • Math
    • Fix issues with isNaN('') // false. See issue #873.
    • Reapply column indexing after updates & prevent js error on empty tables. Fixes issue #889.
    • Reduce update time to 20ms. See issue #898.
    • Exclude ignored cells even if math_ignore is empty. Fixes issue #896.
  • Output
    • Add BOM back to downloaded file. Fixes issue #862.
    • Add output_hiddenColumns option. Fixes issue #869.
    • Add known issues section about downloading in Safari.
  • Pager (addon & widget)
    • Replace all instances of using jQuery each with plain javascript. Fixes issue #827.
  • Resizable
    • Refreshing the widget will now preserve the storage. See issue #874.
  • Scroller
    • Set overflow-x auto & apply border-box to scroller. See issue #135.
    • Remove pointer-events: none from fixed column. See issue #878.
    • Hide fixed column scrollbar in IE9 & older. See issue #135.
    • Update pointer-events and tabbing accessibility. See issue #135.
    • setFixedColumnSize now properly updates with no set size.
    • Add scroller_addFixedOverlay
      • When true, a fixed column overlay is added for additional styling. See issue #887.
      • It includes css pointer-events set to none to allow interaction with elements underneath; make sure your browser supports it!
    • Fix selector issue in the remove function.
    • Properly refresh column size after an update. Fixes the third part of issue #906.
  • Parsers
    • Add "inputs-numeric" parser. Fixes issue #888.
    • Add jQuery Globalize date & number parsers.
    • "namedNumbers" parser: ignores adjacent puncutation. Fixes issue #890.
    • input-select parsers:
      • Clean up & add event namespaces.
      • Now return an empty string if the value is empty; previously, it would return the cell text when the value was empty.
    • Network "MAC" parser:
      • Return the original string if the address is grossly invalid. Fixes issue #895.
      • No longer auto-detect as iPv6. See issue #895.
  • Themes

Version 2.21.5 (4/8/2015)

  • Filter
    • Cache main loop variables - speed enhancement.
    • Allow setting filter_selectSource along with filter_functions (demo).
  • Resizable
    • Integrate with columnSelector. See issue #859.
    • Prevent javascript error.
    • Resizable handles now properly align when the table is within a layout with margins. Fixes issue #864.
  • Scroller

Version 2.21.4 (3/28/2015)

  • Core
    • Add a utility $.tablesorter.getColumnText() function.
      • This function will provide a centralized method of obtaining column data (raw & parsed text from cells) and allow processing cells.
      • I plan to update all widgets that need to interact or obtain column data to use this function in v2.22.0.
  • Build
    • The build process now includes selected parsers (added parsers option to build json).
    • A new jquery.tablesorter.combined.js file is created which will contain the core plugin along with all selected widgets & parsers; a default build does not have any selected parsers.
    • This will work around, but not resolve, issue #855.
  • Extras
    • Update semver.js & semver-mod.js to v4.3.3.

Version 2.21.3 (3/26/2015)

  • Core
    • Fix icon targeting for class names
    • Modified sort initiation method. A "click" event can now be triggered on a header to initiate a sort - issue #849. Thanks johnjameswhitman.
    • General code cleanup; mostly changing tagName to nodeName.
    • Modified, then removed all references to config.$extraTables and config.$extraHeaders as it was causing a memory leak.
  • Docs
    • Update jQuery to v1.11.2.
    • Update Bootstrap to v3.3.4.
  • Grunt Build
    • Add custom build file name. See issue #829.
    • The default custom build file name is now "jquery.tablesorter.custom-widgets.js".
    • See the Customize wiki page for more details.
  • Filter
    • Make "disabled" a modifiable class name - modify it in $.tablesorter.css.filterDisabled.
    • Select2 filter formatter now escapes forward slashes.
  • Output:
    • Minor code tweak.
  • Pager:
    • Make pagerUpdate method page parameter optional. It was previously required or the page would reset to 0.
    • Remove "refreshComplete" bind on destroy. Fixes issue #854.
  • Resizable:
    • Major overhaul of this widget to now make it compatible with the stickyHeaders widget.
    • Sadly, it still doesn't work properly with the updated scroller widget; it's on my to-do list!
  • Scroller:
  • Storage:
    • Add option (widgetOptions.storage_useSessionStorage) to allow switching from local to session storage. Fixes #851.
    • Add a bunch of other storage widget options including storage_tableId, storage_group, storage_fixedUrl and storage_page. See the documentation on how they might be useful.
    • Deprecated config.fixedUrl in favor of the widgetOptions.storage_fixedUrl option.
  • Themes
    • Add "hover" class to all hover definitions (for the scroller widget mostly).
    • Remove filter element offsetting margins.
    • Target background-color instead of background. Fixes issue #853.

Version 2.21.2 (3/13/2015)

  • Core: get accurate column count. Fixes issue #840.
  • Docs
    • Update to use jQuery UI v1.11.4.
    • Add note about resizable widget needing a non-breaking space in an empty cell. Fixes issue #844.
  • Editable: fix editable not updating properly on update/pager complete.
  • Filter: prevent error if parseFilter returns NaN - this depends on what custom parsers return.
  • Output: change carriage returns & tabs to unicode equivalent so it works in Excel. Fixes issue #845.
  • Pager
    • Don't recalculate total rows/pages if using ajax.
    • Remove outdated pager.min file in the addons folder; it is now available in the dist/js/extras folder.
  • Uitheme: add icon classes while using stickyHeaders. See issue #842.

Version 2.21.1 (3/10/2015)

  • Core:
    • Optimize getColumnData function.
    • Use :last instead of .last() to maintain jQuery v1.2.6 compatibility.
    • Allow multiple icon class names in the cssIcon definition.
  • Docs
    • Remove initial sort on first table to avoid confusion.
    • Miscellaneous tweaks.
  • Build
    • Add UMD wrapper to built "jquery.tablesorter.widgets.js" file. Thanks to nburlett (pull #837)!
  • Scroller
    • Properly adjust column widths; fixes issue #836.

Version 2.21.0 (3/5/2015)

  • Core
    • Plan to manually update vesion number.
    • Optimizations: replace arrays using $.each with for loops. Fixes issue #827.
    • Add $.tablesorter.addInstanceMethods function.
      • This allows one to define config object instance methods (docs).
      • Thanks to prijutme4ty for contributing!
    • Add config.$headerIndexed option (docs).
  • Docs
    • Update link in readme.
    • Add contributing information.
    • Update download method information.
  • Build/Testing
    • Move jshint to "grunt test" task.
    • Attempt to make nested callbacks more stable.
    • Clean up testing & made more stable, by prijutme4ty.
  • ColumnSelector
    • Add more debug logging.
  • Filter
    • Add more debug logging.
    • Add config parameter to filter_functions.
    • Add "widget-filter-type-insideRange.js" filter type; this filter type allows searching for a value that is within a range (demo).
    • External filters can now set initial values; this includes match-any-column inputs.
    • Extend filterFormatter functions - fixes an issue where HTML5 & jQuery ui filterFormatters override the function definitions.
  • Output
    • Add output_includeFooter option.
  • Pager
    • Add more debug logging.
  • Scroller
  • StickyHeaders
    • Now works properly with a full-height wrapper. Fixes issue #564.
    • Add stickyHeader hidden class name & modal demo links. Fixes issue #832.

Version 2.20.1 (2/20/2015)

  • Filter: Fixed a major issue with the filter widget not working properly.

Version 2.20.0 (2/20/2015)

  • Grunt build process
    • Added code to use npm & grunt to build a custom widget file.
    • An example.json file has been added as an example of how to set up a custom build file; see the Customize wiki page for more details.
    • With each build, the following occurs:
      • jquery.tablesorter.js is copied to the dist/js folder.
      • All less files are copied to the dist/css/less folder.
      • All images, including the pager icons, is copied into the dist/css/images folder.
      • A jquery.tablesorter.widgets.js file is created from the selected widgets into the dist/js folder, then copied back to the js folder to allow jsFiddle demos to continue working.
      • A .min.js file is created for the core & widget file in the dist/js folder, then all parsers & widgets are compressed separately in the dist/js/parsers and dist/js/widgets folder, respectively.
      • A .min.css file is created for all themes, dragtable, filter-formatter & pager styles.
      • The black-ice theme within the distribution folder is renamed to theme.blackice.min.css (no dash). See issue #785.
    • Files - the following changes to files have been made for the Grunt build process (this might break a few jsFiddle demos):
      • jquery.metadata.js has been moved into the js/extras folder.
      • jquery.tablesorter.widgets-filter-formatter.js
        • moved to the js/widgets folder
        • Broken into two files, and renamed to widget-filter-formatter-html5.js and widget-filter-formatter-jui.js.
      • jquery.tablesorter.widgets-filter-formatter-select2.js
        • Moved into the js/widgets folder.
        • Renamed to widget-filter-formatter-select2.js
      • jquery.tablesorter.widgets.js
        • Has been broken up into separate widget files: widget-column.js, widget-filter.js, widget-resizable.js, widget-saveSort.js, widget-stickyHeaders.js, widget-storage.js and widget-uitheme.js.
        • A default build creates a file of the above widgets combined in the dist/js folder.
        • A copy of this newly created combined widget file is then copied back to the js/ folder to allow external demos (jsFiddle) to still work.
  • Resolve jQuery unbinding issue
    • When unbinding events in jQuery versions 1.7 to 1.8, if an event list contains double spaces

      $('table').unbind('a  b');

      all events will be removed from that element (see this demo)!

    • Unbinding of events updated in the Core plugin & pager addon, and the following widgets: cssStickHeaders, editable, filter, formatter, math, staticRow & stickyHeaders.

  • Modified config.cache to only include non-info only tbodies.
    • This modification effects the core & the following widgets: chart, filter, grouping, pager (widget & addon).
    • Thanks to prijutme4ty for working on this change.
    • See pull request #822 for more details.
  • Core
    • Add cssNoSort option. Add the class name from that option to any element within a header will prevent a click on that element and any containing elements from causing a sort.
    • Remove cssAllowClicks option. It wasn't working as intended and actually prevented sorting. It was replaced by it's opposite, the cssNoSort option.
    • Make core work with jQuery v1.2.6, again.
    • Make getElementText function public; with a bug fix from prijutme4ty in pull.
  • Docs
  • Filter
    • Prevent javascript error when empty rows (<tr></tr>) are included in the tbody. Fixes issue #819.
    • Prevent javascript error when performing an "any-match" search triggered on the table without an included external data-column="all" input.
    • Ensure that an "any-match" search is a string value.
    • Added "any-match" specific column search by using #:{query} where # is a one-based column index and {query} is the query. Thanks to MaksimProgr for providing the code in pull request #817. This also fixes issue #747.
    • Added filter_columnAnyMatch option to allow disabling the "any-match" specific column search.
  • Pager
    • Fix initial start page default for the widget only.
    • Update pager ajaxProcessing code demo to prevent unordered JSON keys from adding content to incorrect columns. Fixes issue #818.
  • Parsers
    • Fix checkbox parser, in the parser-input-select.js file, so that it now properly updates when changed.

Version 2.19.1 (2/9/2015)

  • Core
    • Replace all double quote with a single - OCD made me do it!
    • Save raw table cell text (unparsed) into the cache.
  • Core/Widgets
    • Fix a problem with event unbinding when using jQuery versions 1.7 & 1.8.
    • When an unbind (or off) event string contains an untrimmed or central double space, all events on the element become unbound.
    • See jQuery bug or this demo.
    • Updated the core, and the cssStickyHeaders, editable, filter, formatter, math, pager (addon & widget), staticRow widgets and stickyHeaders widgets.
  • Chart
    • Add more data points.
  • Filter
  • Math
    • Add math_event option.
  • StaticRow
    • Add staticRow_event option.

Version 2.19.0 (2/7/2015)

  • Core
    • Add AMD/browserify support; See pull #786, thanks to mwiencek!
    • Resort variable can now contain a new sort. See issue #782.
    • Prevent resort when serverSideSorting is true. Fixes issue #764.
    • Add resort option. It is used as the fallback value when no resort parameter is included with the "updateAll", "update", "addRows" and "updateCell" methods.
    • Add removeWidget function which calls the widget remove function & removes the named widget from the config.widget option.
    • A refreshing parameter was added to the widget remove function; when true it indicates that a refreshWidgets method was triggered and that the widget will only be temporarily removed.
    • Make fixColumnWidth a public function ($.tablesorter.fixColumnWidth). Calling it will refresh set column widths dynamically. See issue #680.
    • The default textExtraction function has been optimized - node.innerText was completely removed as it is significantly slower in IE.
    • Modified the "updateCell" method to not reapply widgets if the resort parameter is false; this may resolve issue with widgets causing elements to lose focus.
    • Updated the refreshWidgets to use the removeWidget function. Once the widgets have been refreshed a "refreshComplete" event will be triggered.
    • Updated applyWidget function to allow passing a callback function.
    • Prevent adding multiple icons on refresh.
    • Trim header text added to aria label.
    • The updateAll method no longer restores headers since it is only refreshing.
    • Fix parser check while building cache which can cause unresolving parsers in case the first tbody is empty and remaining tbodies have less rows than a number of tbody. See pull #814. Thanks prijutme4ty!
  • Docs
    • Specify pager's pageSet method requires a one-based index value.
    • Miscellaneous corrections & fixes. Thanks prijutme4ty!
    • Remove uitheme widget option (it was removed in v2.14.0, but not properly documented). Pertinent information on how to modify the uitheme widget class names was moved to the core theme documentation.
    • Add a new pager variables section which contains some useful variables within the pager object (table.config.pager).
    • Update "jQuery data" demo to show the difference between setting a data-attribute and jQuery data directly.
    • Add api documentation for using the getColumnData function.
  • Parsers
    • Add countdown parser (hh:mm:ss) - demo included with the duration parser.
    • Update input-select parser to use the resort option.
  • Widgets (general)
    • Build widget & storage extension: Pass "null" to $.parseJSON as a fallback. Fixes issue #586.
    • Update remove widget function for columnSelector, cssStickyHeaders, math, pager, repeatHeaders, saveSort & stickyHeaders.
    • Widgets removed from beta: alignChar, columnSelector, math, output, print, reflow & staticRow.
  • AlignChar:
    • Don't add align character when no content is right of it. Prevents adding a hanging decimal, e.g. 3000..
  • Chart widget (New; beta):
    • Generic chart widget used to basically extract data from the table and output in multiple formats.
    • Current chart libraries supported: Google charts, Highcharts & FusionCharts.
    • Some additional processing may be required to add extra variables (graph colors, labels, etc).
    • A demo is available here.
    • An example of this widget is also available here.
    • Thanks to TheSin- for creating this widget!
  • ColumnSelector:
    • Fix column index issue, again.
    • The refreshColumnSelector method has been updated to accept a parameter (get more details):
      • If an array of zero-based column indexes is passed by this method, "auto" mode will be disabled & only columns within the array will be shown - critical or disabled columns will always be shown.
      • If a non-array is passed by this method, the "auto" mode will be enabled.
      • Fixes issue #798.
    • A change in "auto" checkbox now triggers a "columnUpdate" event.
  • Dragtable (New; beta)
    • The dragtable jQuery UI widget adds column reordering to a table.

    • This isn't a tablesorter widget, but a modification made to a jQuery UI widget to better integrate with tablesorter - demo.

    • A modified version of dragtable has been included in the "extras" folder; this is a jQuery UI widget, not a tablesorter widget!

      $(function () {
        $('table')
          .dragtable({
            dragHandle: '.table-handle',
            excludeFooter: true
          })
          .tablesorter({
            theme: 'blue',
            selectorSort: '.sort',
            widgets: ['zebra', 'filter']
          });
      });
    • This modified version, so far, allows column reordering to work with the filter & resizable widgets.

    • Additional work will be required to get this jQuery UI widget to work with the scroller, columnSelector &amp stickyHeaders widgets.

    • Fixes issue #781, and portions of issue #215 and #186.

  • Editable
    • Update to add a editable_columnsArray which is created from the editable_columns option. When editable_columns contains a string (e.g. 0-3), this option will contain an array of zero-based column indexes.
    • The dragtable mod widget can then use this option to rearrange and maintain editable columns properly.
  • Filter
    • Hide filter row using the filtered class name (table.config.widgetOptions.filter_filteredRow).
    • Select source, and unparsed filter text now priorities data from the textAttribute. Fixes issues with Formatter widget - see issue #812.
    • Update select2 filterFormatter code to properly escape regexp characters. Fixes issue #796.
    • Normalize table parameter for public functions.
  • Formatter (New; beta)
    • This new widget allows you to apply formatting to the columns (demo).
    • Fixes issue #812.
  • Output
    • Fix trim spaces for header cells.
  • Pager
    • pageReset now used while filtering. See issue #778.
    • Get most up-to-date filter before setting pageReset. Fixes issue #783.
    • filteredRows now properly calculated when first tbody is set with a cssInfoBlock class name`.
    • Page size resets to original page setting instead of always 10.
    • Add pageAndSize method to set both the page & size.
    • Add pagerUpdate method to force a pager update; even if no ajax parameters have changed. Fixes issue #801.
    • Add cachedIndex variable which is useful if you need to find the currently visible rows within the pager in the internal cache (table.config.cache). See the documentation for an example.
    • Update goto selector independently of other elements. Fixes issue #811.
    • Modified to apply widgets & fire "pagerComplete" after the cache is built; this specifically applies to ajax tables.
  • Print
    • Ignore columnSelector "auto" setting when columnSelector_mediaquery option is disabled (false). Fixes issue #808.
  • Reflow
    • Trim stored header text.
  • Scroller
    • Resizing & browser zooming should now show proper widths. Fixes issues #680 & #634.
  • UITheme
    • Now updates properly when dynamically changing the table.config.theme option.
    • During an update, add inner wrapper to specific columns that are missing it.
    • Add separate sort class names to both the header & icon element; breaks old demos, but falls in-line with the addition of core css icon class settings in v2.18.3.
  • Themes
    • Add filter row background color; it appears that Chrome uses the <tr> background color when the hideme class is added to the row.
    • Updated Bootstrap to 3.3.2.
  • Testing
    • Update QUnit.
    • Remove jsHint checks.

Version 2.18.4 (12/22/2014)

  • Docs
    • Add link to demo showing how to apply jQuery selectmenu widget to a filter
    • Update theme switcher linked styles
    • Add clarification on using jQuery selectors that target the header cell. Fixes issue #766.
    • Fix various typos. Thanks seanhussey!
    • Add cssIgnoreRow docs.
  • Core
    • Add cssIgnoreRow option. Added to a header row that is to be ignored & not added to the config.$headers variable.
    • Allow passing alternate headers to getColumnData function.
  • ColumnSelector widget
    • Add columnUpdate event when columnSelector is updated.
    • Add columnSelector_cssChecked option - css class name added to checkboxes.
  • Pager (addon & widget)
    • Ensure filteredRows variable gets updated before the move to page function is called. Fixes issue #778.
  • StickyHeaders widget
    • Make includeCaption option dynamic; add note of new jQuery requirement.
    • Add popup window demo to sticky headers example.
  • Themes
    • Style filter input & selects only.
    • Only style <i> tags from tablesorter on theme Bootstrap v2 & less file. Thanks frodrigo!
    • Modify theme Dropbox & grey to also only target icon class name for css styling.

Version 2.18.3 (11/7/2014)

  • Core
    • Add class names to the header icons: cssIconNone, cssIconAsc & cssIconDesc to indicate the sort status.
    • The widthFixed option will no longer target nested table colgroup elements to determine if it needs to add a new colgroup.
  • Docs
    • Updated Bootstrap theme example.
    • Pager widget option comment corrections.
  • Themes: update all themes to hide all elements in the filter row when the filter_hideFilters option is true
  • CssStickyHeaders widget: tables with a caption now work properly in Firefox.

Version 2.18.2 (11/3/2014)

  • Filter widget

    • Fixed initialization intermittently stalling.
  • Pager addon & widget

    • Fixed pager addon javascript error.
    • Fixed pager widget not firing off "pagerComplete" in non-ajax tables.
    • Fixed savePages being overwritten on initialization.
    • Fixed pager widget updating the table content in non-ajax tables.

Version 2.18.1 (11/3/2014)

  • Core

    • Add cssAllowClicks option; setting "tablesorter-allowClicks" on a header cell will allow clicks to bubble up.
    • A column can now be targeted using a class name within the header cell as well as the header cell itself; this only applies to previous options that could use a class name/id to target the header cell.
  • Docs

    • Emphasize that this is a fork of tablesorter. Fixes issue #758.
    • Update jQuery UI to 1.11.2.
    • Update to Bootstrap 3.3.0.
    • Update QUnit & fixed testing errors.
    • Various updates to version numbers & corrections.
  • ColumnSelector widget:

  • CssStickyHeaders widget:

    • Fixed Chrome caption issue.
    • Nested tables now work properly in IE.
  • Pager addon & widget

    • Fix selectorRemove class name parsing.
    • A pagerComplete event now fires off immediately after initialization & once again fires on non-ajax tables.
    • Fix double pagerComplete events firing on init & initial filter settings.
    • Fix pager initialization with filter widget & displaying page output. Fixes issue #755 & issue #757.
    • Current filters now update properly. See issue #757.
  • UItheme widget:

    • Fixed undefined removeClass selector which previously removed all classes.

Version 2.18.0 (10/26/2014)

  • Core
    • Move "ipAddress" parser into parser-network.js parser file.
    • Add "image" parser to core.
    • Add widgetClass option
      • Allows adding widgets to the table by adding a table class name.
      • Fix debug logs for applying widgets.
      • Fixes issue #743.
    • Add $cell parameter to parser detection is function (is: function(s, table, cell, $cell) { /* ... */ }).
    • Add $table parameter to onRenderHeader function (onRenderHeader: function (index, config, $table){ /* ... */ }).
    • Fix ARIA caption label reference.
    • Get column index from data-attribute when sorting.
    • The aria-labelledby attribute is no longer to all nested captions.
    • Update widgetClass option matching. See issue #743.
  • Themes
    • Include caption element in metro theme; update various demo theme selectors to include the metro theme.
    • Fix zebra striping in nested tables.
  • Parsers
    • Created parser-network.js parser
      • Removed "ipAddress" parser from core.
      • Move "ipAddress" parser into this file; a duplicate of the parser named "ipv4Address" is included.
      • Moved "ipv6Address" parser into this file.
      • Added new MAC parser.
    • Update all date parsers to ensure a valid date is being parsed.
    • Add named number parser & demo.
  • Column Selector widget
    • Prevent adding a media query when no priorities are set.
    • col element will now be hidden along with the column. Fixes issues #740.
  • Editable widget
    • Make updatable so this widget works with the pager. Fixes issue #732.
  • Filter widget
    • Fix wildcard match logic to behave logically. Fixes issue #727.
    • Add filter_cellFilter option. Fixes issue #731.
    • External inputs can now target multiple columns (e.g. data-column="0-2,4,6-7"); see this Stackoverflow question.
    • Any match filters now properly uses filter_ignoreCase. Fixes issue #748.
    • Fix saved filter updates to multiple or "any" column inputs.
  • Grouping widget
    • Add "monthyear" grouping to dates. Fixes issue #744.
  • Pager addon & widget
    • Use a sample of page number links for large collections.
      • Add maxOptionSize option
      • Tweak code & fix problems introduces in pull #711.
      • Thanks camallen!
    • Fix output display not updating on initialization.
    • Add url check to allow ajax updating of table. Fixes issue #730.
    • Check for dynamically changing ajaxUrl option.
    • Add ajaxObject to the table.config.pager variable.
    • IE requires a value attribute for every option. Fixes issue #734.
    • Revert some code modified for large collections to use jQuery instead of native javascript (more IE issues).
    • Ensure pager.filteredRows is current on page move. See issue #745.
    • Fix empty table select showing 0 & 1 pages.
    • The fixedHeight option is now working properly. Fixes issue #742 & issue #729.
    • Widget cleanup & only use the last search data.
    • Add note about including an ajax success function within the ajaxObject definition. See issue #749.
  • RepeatHeaders widget
    • Now works with filtered & nested tables.
  • Resizable widget
    • Make it work inside of an overflow container. Fixes issue #737.
  • Scroller widget
    • Remove scroller_idPrefix in lieu of a unique namespace id.
  • StickyHeaders widget
    • Now stacks when within a nested table.
    • Wrapped sticky header components (thead & caption) in a sticky div.
    • Added stickyHeaders_xScroll and stickyHeaders_yScroll options.
    • Removed jQuery UI selection from the demo to allow the accordion to be properly themed.
  • CssStickyHeaders widget
    • Now stacks when within a nested table.
    • Removed cssStickyHeaders_zIndex option as the widget no longer uses relative positioning (it wasn't necessary)
    • Please note that using this widget on nested tables does not work properly in ALL versions of IE (including IE11).
  • UITheme
    • Ignore nested tables.
    • Add method to remove previous theme.
    • Fix multiple header row sort icons.

Version 2.17.8 (9/15/2014)

  • Core
    • Fix widthFixed option to ignore info block tbodies.
    • Make emptyTo & stringTo settings case insensitive.
    • An empty string headerTemplate option will now prevent adding an inner div to the header.
  • Docs
    • Fix setting active accordion from hash script.
    • Add emptyTo clarification.
    • Main readme: Add related projects section.
  • Editable
    • Autoresort true no longer breaks the table.
    • Update demo to use row id instead of index.
    • Update validate function to allow setting it per column.
    • Add editable_focus, editable_blur and editable_selectAll options. See issue #708.
    • Add editable_wrapContent option.
    • Add editable_trimContent option.
    • Validate function now includes a contenteditable element parameter.
    • All text callback parameters are now trimmed.
    • Trim everything & revert widget changes.
    • Refocus edited element after resort only.
    • Switch form focus to focusout.
  • Filter
    • Add filter_defaultFilter option.
      • fix issue with using class selectors.
      • Make happy with spaces within the query.
      • Will override exact/partial select filters. Fixes issue #721.
      • Fixes issue #704.
    • Add filter_excludeFilter option; add multiple exclusions separated by spaces, not commas.
    • Prevent multiple searches during initialization.
    • Ensure initial filter settings get applied.
    • Selects will exactly match the selected option unless "filter-match" class is set. Fixes issue #721.
  • Pager
    • Update cache & rows copy. Fixes issue #703.
    • Use native javascript to populate & set the goto select. Fixes issue #711.
    • Custom pager controls. Fix control updates for multiple tables.
    • Fix pager widget to be properly applied after a page move.
  • StickyHeaders: Fix issue so it works with jQuery v1.2.6 again.
  • Zebra: Apply style to one row. Fixes issue #715.
  • Parser
    • Duration parser - added with demo.
    • Select parser - Fix for IE10+ not allowing select options to be clicked.
    • IgnoreArticles parser - Added ignoreArticlesExcept option.
    • url parser - ensure it is used by the filter widget.

Version 2.17.7 (8/9/2014)

  • Core: Do not detach rows before appending to prevent ajax rows from disappearing. Fixes issue #701.
  • Docs: Fix change log links.
  • Filter: attached external select causing javascript errors. Fixes issue #702.

Version 2.17.6 (8/1/2014)

  • Core
    • Adding a class name of parser-false to a column will now automatically set sorter-false and filter-false behavior.
    • Add extractor type which allows giving a column two parsers, one to extract content from an input/select and the second to parse the extracted text. Thanks to TheSin-!
    • Ensure custom parsed data adheres to the ignoreCase option.
    • Add a delay to any sort if there is an update in progress. This prevents issues with a sort being applied causing duplicate rows to be added to the table, hopefully.
    • The widthFixed option now finds both visible th and td cells within the first row of the tbody to set column width percentages.
    • Ensure all rows have a set role for screen readers (role="row"). Fixes issue #690.
    • Redefine c.$headers when building headers for new/replaced header cells (not just content). Fixes issue #683.
  • Docs
    • Fixed lots of minor HTML issues (e.g. missing closing </li> & <p> tags)
  • Parsers
    • Add parser for textareas within the parser-input-select.js file.
    • Modify input & textarea parser to only update the table cache when:
      • The user presses enter (input) or alt + enter (textarea) within the element.
      • When the element is blurred.
      • Or, when the mouse leaves the tbody.
  • Editable
    • Add two new options:
      • editable_autoAccept: accepts any changes made to the table cell automatically (true by default)
      • editable_validate: a function used to validate the changes; return a valid string (null by default)
    • Modify editable_columns type check to prevent javascript errors. See pull #688. Thanks scratcher28!
    • Limit the editable_columns array value to columns within the table.
  • Filter
    • Make all options show within the current select when the filter-onlyAvail class is set on a column.
    • Updated & added docs for $.tablesorter.filter.buildSelect function to allow external calls to modify filter select options.
    • Update filter_selectSource to accept arrays instead of a function. This was documented as working, but it wasn't coded until now. Sorry!
    • Add filter_selectSourceSeparator option:
      • Include a separator within the filter_selectSource array (e.g. "a-z|A through Z").
      • The text that is left of the separator is added to the option value, the the text on the right is added to the option text.
      • So "a-z|A through Z" becomes <option value="a-z">A through Z</option>.
      • Fixes issue #692.
    • Add role="row" to the filter row. Fixes issue #697.
    • Any match inputs now follow the filter_startsWith setting. See this Stackoverflow question.
  • Pager
    • The output option can now include user modifiable startRow ({startRow:input}) or page ({page:input}) inputs within the output.
    • Remove selected attribute from page selector options. Fixes issue #700.
  • Resizable
    • Update $.tablesorter.addHeaderResizeEvent function's first parameter table to accept table DOM elements as well as jQuery objects. Fixes issue #687.

Version 2.17.5 (7/17/2014)

  • Core

    • Update config.totalRows variable before initialization. Fixes issue #670.
    • Add config.table variable; useful for functions that only pass the config.
    • Ensure widget init functions are only called once; and set indicator for all widgets, not just ones with options (for hasWidget).
  • Docs

  • Filter

    • Force cache build on initial search when delayInit is true. Fixes issue #678.
    • Make config.filteredRows count available within filterInit event. Fixes issue #670.
    • Selects now obtain parsed data when it is set for a particular column. Fixes issue #684.
    • Ignore change event if input value hasn't changed, otherwise it interferes with other events within the table. Fixes issue #685.
    • Ensure search query is parsed for both specific filter types and non-filter type searches, if the column is set to use parsed data.
    • Filter initialization ("filterInit") event is now delayed to prevent filterStart & filterEnd event spamming. Fixes issue #668.
    • Filter formatter functions are now required to call a function after initialization to delay "filterInit" event. Fixes issue #668.
  • Output

    • Update download method which allows downloading files without modifying the server htaccess. Fixes issue #681.
  • Pager

    • Initialize without building cache when delayInit is true. Fixes issue #678.
  • Parsers

    • Update input/select element binding
    • Add image alt parser; set config.imgAttr with attribute to target (default is "alt").
    • Add select-text parser which grabs the currently selected option text instead of the select value.
  • Resizable

    • Remove unused grip code

Version 2.17.4 (7/4/2014)

  • Docs

    • Copied the tablesorter initialized option from the event section into the configuration; renamed the event appropriately (tablesorter-initialized event)
    • Added notes about how to bind to "init" events; they should be bound before initializing tablesorter because in most cases, the events fire before the binding occurs.
  • Core

    • Add $.tablesorter.hasWidget(table, 'widgetId') function. It returns a boolean value of true when the named widget is actively applied to the table.
  • Filter

    • Add filter_searchFiltered option to allow disabling the search of already filtered rows.
    • The filter_initialized flag now gets set appropriately. Fixes issue #668.
    • Include any column filter in determination of searching already filtered rows. Fixes issue #669.
    • Add internal config.filteredRows variable. Provides a value of the number of currently filtered (visible) rows. Fixes issue #670.
    • Add internal config.totalRows variable. Provides a value of the total number of rows in the current table, not including info-tbody rows.
    • Fix change/search event being ignored for selects & filterFormatter extensions.
    • filterInit and filterEnd events now pass config as a parameter.
  • Pager

    • Removed from beta status
    • Filtered rows now equals the total rows when ajaxProcessing returns an array. Fixes issue #667.
    • Update the config.filteredRows when using ajax to match the internal config.pager.filteredRows. See issue #670.
    • Widget only: ensure pagerComplete event fires on initialization.
  • Resizable

    • Bind mousemove to document instead of table header. Makes resizable handle use consistent with other resizing libraries, as the user would expect. Fixes issue #665.
    • Add resizable_throttle option to allow throttling of the mousemove/resize event. Set this option to true or a number between 1 and 10 to add a throttling delay. Fixes issue #662.
  • UITheme: non-existent columns no longer cause a js error. Fixes issue #672.

Version 2.17.3 (6/28/2014)

  • Docs

    • Added bold notes to the output widget demo about setting the server content-disposition. Fixes issue #653.
    • Updated to latest Bootstrap (v3.2.0), jQuery UI (v1.11.0) and Cupertino theme.
    • Embedded gists within the documentation should now work properly.
  • Core

    • Add "tablesorter-processing" class name to table during processing. Fixes issue #655.
  • Filter

    • When filter_liveSearch is set to a number, it now searches when pressing enter. Fixes issue #654.
    • Modify change event so a select searches the table without requiring a carriage return. Fixes issue #650.
  • Pager

    • Objects returned by ajaxProcessing can now include a filteredRows value. Fixes issue #649.
    • Fix internal use of selectorRemove option, to consistently extract out the class name from the selector string.
    • Previous & Next buttons now disable with zero filtered pages. Fixes issue #649.
    • Changed pager widget goto page selector option to gotoPage, because goto is a reserved word. Fixes issue #657.
  • Scroller

    • Add scroller_upAfterSort option to prevent scrolling after clicking a checkbox. Fixes issue #660.
  • Static Row

    • Static rows are now manipulated witin a detached tbody.
    • Updated demo to allow toggling of static rows using ctrl (or command on Mac) + click.
  • Parsers

    • Added new Roman numeral parsers. There are three different parsers to cover three different use cases. Please see the roman numeral parser demo for details.

Version 2.17.2 (6/18/2014)

  • Docs

    • Added more details about using pager ajax options.
  • Core

    • The clearTableBody function now detaches rows instead of incorrectly detaching the tbody.
  • Editable widget:

  • Filter widget:

    • The selectSource option now correctly handles parsed values that return zero.
    • Filter formatter for jQuery UI datepicker now remembers the correct date.
    • Corrected filter events & prevent table manipulation if filters are empty on initialization. Fixes issue #645.
  • Pager addon/widget:

    • Specifically target rows to prevent issues with ember scripts. Fixes issue #638.
    • Correctly detach and append jQuery rows provided by the ajaxProcessing function. Fixes issue #650.
  • Print

    • jQuery requirement modified to support jQuery v1.2+ (previously it was v1.7+).
    • Popup now automatically closes with print dialog. Fixes issue #643.
  • Scroller widget:

    • The thead width is now set in IE. Fixes issue #637.
    • Set column widths are now maintained, including Bootstrap. Fixes issues #634 & #380.
    • Change default scroll bar width to 18. Fixes issue #363.
    • Scroller now behaves properly with horizontal overflow scroll, column alignments, and hidden cells. Fixes issues #340 & #333.
  • Themes

    • Bootstrap white unsorted icon now shows when the icon-white class is added. See issue #648.
    • Remove auto height settings from filter elements.

Version 2.17.1 (5/28/2014)

  • Docs:

    • Add some missing examples & updated some version number comments for the last update
    • Reflow widget: Fix demo to use preset widths & css transitions instead of forcing users to manually resize the examples.
    • Output widget: add note about modifying the .htaccess file to enable downloading in both IE & Firefox.
  • Core

    • Allow use of select & buttons within header cells. Previously only inputs were allowed. Fixes issue #625.
    • Add parser-false setting to prevent extracting & parsing of content from set columns. Fixes issue #629.
  • Filter widget

    • Add a not-exact-match (!=) filter type (e.g. !"Bruce" or !Bruce= will show all rows that don't exactly match Bruce). See issue #628.
  • Math widget

    • Values are now obtained from data-attributes first, then the actual cell content. This will allow making calculations with higher precision values. Fixes issue #624.
  • Pager (addon & widget)

    • The ajaxProcessing function now includes the jqxhr parameter. Thanks JuarezTurrini! See pull #626
    • Update the custom controls example to properly work with the pager widget. Fixes issue #631.
    • Fix widgets sometimes not being applied after page change.
  • Parser

    • input-select parser no longer binds to non-tablesorter tables. Fixes issue #633.

Version 2.17.0 (5/22/2014)

  • Overall

    • You can now target a column using a jQuery selector targeting the header cell (e.g. a class name, id or column index, as before).
    • This works with the core options: headers, textExtraction.
    • This also works with the widgets: filter_formatter, filter_functions, filter_selectSource and the headers options for filter & resizable.
    • This change has not yet been implemented to the following options: textSorter, sortList, sortForce, sortAppend and numberSorter (will modify this option to target columns soon).
    • What won't work is if you try to target the header using a filtering selector that uses an index, e.g. "th:eq()", ":gt()", ":lt()", ":first", ":last", ":even" or ":odd", ":first-child", ":last-child", ":nth-child()", ":nth-last-child()", etc.
  • Docs

    • Switch from using CDN versions of jQuery, jQuery UI, Bootstrap, Sugar and Select2 instead of using protocol-relative URLs because they are a pain to use locally.
    • Change style of "Update" tags to be slightly lighter than "New" tags.
    • Updated reflow widget demo with demo tables in a resizable iframe, so the browser window no longer needs to be resized.
    • Miscellaneous updates including correcting some version numbers, fixing links & other issues with the demos.
  • Themes

    • Fix green theme to properly include a background with the css3 sticky headers widget.
  • Core

    • Instead of using empty or clearing rows from the table, the rows are now detached. This also applies to the pager.

    • Added resetToLoadState method

      • Using this method will clear out any settings that have changed since the table was initialized (refreshes the entire table); so any sorting or modified widget options will be cleared.
      • However, it will not clear any values that were saved to storage. This method is basically like reloading the page.
    • Refer to columns in the headers and/or textExtraction option by class name, ID, or column index (as before).

      headers : {
          '.first-name' : { sorter: 'text' },
          '.disabled'   : { sorter: false }
      },
      textExtraction : {
          '.styled' : function(node, table, cellIndex) {
              return $(node).find('strong').text();
          }
      }
    • Added new "sorton" method values: "a" (ascending), "d" (descending), "n" (next), "s" (same) & "o" (opposite).

      // column 0: desc sort, column 1: asc sort
      $("#table1").trigger("sorton", [ [[0,"d"],[1,"a"]] ]);
      // column 0: next sort, column 1: opposite of column 0, column 2: same as column 0
      $("#table2").trigger("sorton", [ [[0,"n"],[1,"o"],[2,"s"]] ]);

      Please refer to the Sort table using a link outside the table demo for more details.

  • ColumnSelector widget

    • Added a method to refresh the selected columns using $('table').trigger('refreshColumnSelector');.
    • Fix a js error when removing the widget.
  • Filter widget

    • Fix child row filtering.

    • Fix filter-match searches.

    • Set filter parser or disable a filter in the headers option by referring to the header class name, ID, or column index (as before)

      headers : {
          '.first-name' : { filter : false },
          '.last-name'  : { filter : 'parsed' }
      }
    • Refer to filter_functions, filter_formatter and filter_selectSource columns by class name, ID, or column index (as before)

      filter_functions : {
          ".col-date" : {
              "< 2004" : function (e, n, f, i) {
                  return n < Date.UTC(2004, 0, 1); // < Jan 1 2004
              },
              ...
          }
      },
      filter_formatter : {
          ".col-value" : function($cell, indx){
            return $.tablesorter.filterFormatter.uiSpinner( $cell, indx, {
              ...
            });
          }
      },
      filter_selectSource : {
          ".model-number" : [ "abc", "def", "ghi", "xyz" ]
      }
  • Math widget

    • Now works properly with the pager. Fixes issue #621.
  • Output widget

    • Add output_ignoreColumns option. Set the zero-based index of the columns to ignore in this array. Fixes issue #607
    • Add config parameter to output_callback function. NOTE: this parameter is added before the data parameter, so it may break any already existing custom callback functions.
    • Add output_duplicateSpans option. Setting this option to false adds blank entries instead of duplicating the colspan or rowspan content. Fixes issue #619.
  • Pager (addon & widget)

    • Use detach instead of empty on tbody rows. This should save any data associated with the rows.
    • Fix pager updating not showing correct totals.
  • Print widget

    • Add print_callback option allowing manipulation of the table & stylesheet before printing.
    • Corrected the print_columns settings comments.
  • Resizable widget

    • Disable a resizable header within the headers option by referring to the column class name, ID, or column index (as before)

      headers : {
          '.first-name' : { resizable: false }
      }
    • Added note about using box-sizing & jQuery versions older than 1.8.

  • Scroller widget

    • Filter widget works with this widget again. Fixes issue #620.

Version 2.16.4 (5/5/2014)

  • Docs

    • Fix stickyHeaders scroll position adjustment.
    • Update sticky headers widget demo to include the stickyHeaders_filteredToTop option
  • ColumnSelector widget: updated css to include print media for the new print widget.

  • cssStickyHeaders widget: add cssStickyHeaders_filteredToTop option.

  • Filter widget

    • Search operators (< <= >= >) now properly uses the parser.
    • Range, not matches (!) & search operators now search all rows as needed.
    • Add filter language option, set the lanuage of to, or and and. Fixes issue #602.
    • Prevent form submission when pressing enter within the filter.
    • Prevent javascript error if delayInit is set to true.
    • Add a bunch of filter tests.
  • Math widget

    • Add math_prefix and math_suffix options.
    • The demo now includes a bunch of mask examples and an interactive example.
  • Output widget

  • Pager:

    • Updated custom pager controls code to show the correct number of pages when the table is filtered.
    • Fixes issue #605.
  • Print widget (new)

    • The user can print all, visible or filtered rows. And, choose to print all, visible or selected columns (using the columnSelector widget).
    • By default, the widget is set to only print filtered rows & visible columns.
    • Note this required an update to the columnSelector widget to include print media.
    • Try out the print widget demo.
  • Miscellaneous

    • Add Metro dark theme css file & demo
    • Add Metro LESS file - see this interactive demo.
    • Add Bootstrap LESS file - see this interactive demo.
    • Metro style includes encoded images. The images & psd have also been included.

Version 2.16.3 (4/30/2014)

  • Docs:

  • Core:

    • Fix headers option indexing of cells in multiple header rows
      • Setting an index in the multiple row header will now correctly set the column parser.
      • See this demo - the 10th cell (zero-based index) in the header has the sorter set to "month".
    • Set processing icon to only show after 500ms, it will not show at all if the sort ends before then.
    • Check for jQuery's closest function and use it, or fall back to equivalent code (maintaining support for jQuery 1.2.6+). Fixes issue #597.
    • Remove widget init delay added in v2.16.1-beta.
  • Filter:

    • Remove old cached indexing:
    • Update check for "filter-parsed" class, because the getData function will only return the first class name starting with "filter-".
    • Filter select updates:
      • Add filter-select-nosort header class name to prevent select option sorting.
      • Filter select option sort now uses the assigned column parser to parse & sort the options.
      • Filter select options are now sorted using the textSorter function, if set, and if not set, it falls back to natural sorting.
      • Fixes issue #599.
      • Add note to ensure textSorter receives strings, or a javascript error occurs.
    • Select2 filterFormatter now allows setting of initial settings. Fixes issue #598.
  • Sticky Headers

Version 2.16.2 (4/27/2014)

  • Docs:
    • Added basic setup for output widget.
    • Show various updates.
    • Update readme with more resources.
  • Core:
    • update addRows method will now accept a string or jQuery object.
    • Sort direction is now counted correctly.
    • Add "emptyMin" & "emptyMax" setting to emptyTo option. Fixes issue #577.
    • Add internal config.$extraHeaders variable.
  • Filter widget:
    • Search already filtered rows when not exactly matching content. Fixes issue #593.
    • Ensure filter_functions option is not null. Fixes issue #593.
    • Filter formatter: set datepicker to null. Fixes issue #512.
  • Math widget: add data-math-mask for each cell.
  • StickyHeaders
    • Check for filters before trying to set focus. Fixes issue #594.
    • Add stickyHeaders_filteredToTop option. Fixes issue #570.
  • Input select parser: don't update columns with both sorter & filter disabled. See issue #570.

Version 2.16.1 (4/24/2014)

  • Core:
    • Fixed an issue where ajax loaded data would cause a javascript error because of improper ignoring of data.
    • Ajax loaded data will now be parsed and cached - so stuff like the grouping widget will work properly.

Version 2.16.0 (4/23/2014)

  • Docs

    • Add notice to readme about upgrading to v2.16.
    • Add question section to readme about where to ask questions, including the new IRC channel.
    • Update jQuery UI accordion code to reapply widgets to tables within the section, when open.
  • Build widget

    • Now works with HTML in the data
    • Add zebra widget to demos.
  • Core

    • Check more than the first tbody when detecting parsers. Fixes issue #589.
    • Apply widgets on table initialization after a short delay.
  • Filter widget:

    • Fix search already filtered rows
    • Fix filteredRows count & cleanup.
    • SetFilters now behaves more like a triggered search. Fixes issue #588.
    • Filterformatter - Fix both datepicker scripts to work properly with non-U.S. formats. Fixes issue #587.
  • Pager: Now stays on the same page after updating. Fixes issue #590.

  • Testing: Add some preliminary tests for the filter widget.

Version 2.16.1-beta (4/22/2014)

  • Docs:
    • Add note about using buttons in forms (include type="button"). Fixes issue #543.
    • Add example link to select2 demo for the filter_selectSource entry.
  • Filter widget: setFilters now supports passing it a jQuery table object
  • Static Row widget
    • Add more inline comments
    • Fix issue with not repositioning static row properly within mutliple tbodies.

Version 2.16.0-beta (4/20/2014)

  • Doc & testing updates

    • More version numbers added - when certain variable & functions were added or last updated.
    • Update to use Bootstrap 3.1.1.
    • Update to the latest testing files.
    • Reorganize example section & cleanup.
    • Fix demos that include togglable parsed data.
    • Fix miscellaneous typos.
  • Core

    • Make computeColumnIndex function public (get details).
    • Move cache rows into the normalized data
      • This is a big change, as the cache rows no longer exist and did break several widgets.
      • This change allows for the Filter widget to better work with cached data (pager with removeRows set to true) & makes the sort tbodies widget possible.
      • Updated core tests.
    • Update textExtraction option
      • Default option is now "basic" and checks for a data-attribute (set by by the new textAttribute option).
      • Set this option to any string (besides an empty string) to revert back to the original method; this may be necessary in older versions of IE due to initialization speed issues.
      • Fixes issue #154
    • Add textAttribute option
      • It contains the data-attribute name which contains alternative table cell text.
      • This only applies to tbody table cells.
    • Add sortReset method callback (e.g. $("table").trigger("sortReset", [callback]);)
    • Update applyWidgets method to prevent being called numerous consecutive times.
    • Destroy method now clears the table cache & pager rows copy
  • Parsers (extract date parsers)

    • "extractUSLongDate" - this parser finds a US long date anywhere in a table cell (demo)
    • "extractMMDDYYYY" - this parser extracts dates in MMDDYYYY format (demo)
    • "extractDDMMYYYY" - this parser extracts dates in DDMMYYYY format (demo)
    • "extractYYYYMMDD" - this parser extracts dates in MMDDYYYY format (demo)
  • Filter widget

    • Updated to use the new modified internal cache format.
      • Now usable with the pager with the removeRows option set to true.
      • Fixes issue #515.
    • Add filter_placeholder global settings. Fixes issue #582.
    • Add filter_selectSource option.
      • Allows add filter select options from an alternate source (e.g. ajax), or customizing options from the set column contents.
      • Fixes issue #328.
    • Include th's in the tbody.
    • Fix build select tbody indexing.
    • Filter reset (filter_reset) now accepts a jQuery object.
  • Filter formatter

  • Math widget

    • New math widget demo Replaces the previous alpha "Column sum widget" demo.
    • This widget adds basic math capabilities; by default the following functions are available: count, sum, max, min, mean, median, mode, range, variance (sample & population), standard deviation (sample & population).
    • Custom math functions can be added
    • Data from cells is gathered from the row, cells "above" the target cell, column, or the entire table.
    • More details are provided on the demo page.
    • Fixes issue #136.
  • Output widget

    • This widget will output the table data as any of the following data formats:
      • Any separator: comma (csv), tabs (tsv), spaces, etc
      • Javascript array
      • JSON
    • Output the entire table, filtered or visible rows.
    • Works with the filter & pager widgets.
    • See this demo for more details.
  • Pager

    • The ajaxObject success function will no longer be called twice on initialization. Fixes issue #540.
    • Update to work with the filter widget & the modified row cache. Fixes issue #515.
    • Destroy method now clears the table cache & pager rows copy.
    • Add pageReset option - pager resets to set page after filtering the table. Fixes issue #565.
  • Reflow & Reflow2 widget

    • These widgets change the layout of the table when a set browser width breakpoint is reached.
    • Each tbody cell will display the header cell text when the table reflows.
    • See this demo.
    • Fixes issue #165.
  • Scroller widget

    • Update to work properly with the filter widget. Fixes issues #584 & #370.
    • Update method to bind table headers.
    • Added remove function so this widget now works properly with the "updateAll" method.
  • Static Row widget

  • StickyHeaders widget - the cloned table (sticky part) tbody & tfoot are now removed instead of hidden.

Version 2.15.14 (4/10/2014)

  • Modified bower.json to allow "read-components" compatibility. See PR #573
  • Corrected docs:
    • Filter-external doc error. Fixes issue #571
    • Added pager ajaxProcessing documentation about extra values available for the output. Fixes issue #576.
    • Grouping widget demo update (now uses collapsible table for options)
  • Core: Destroy method update
    • When including a false parameter with the destroy method, class names will be left intact as before. But this now includes the reapplying of the uitheme and zebra widgets.

      $("table").trigger("destroy", [false]);
    • This change will maintain the table's appearance.

    • See this Stackoverflow question for why this change was made.

  • Grouping widget: group name now saves after callback. Fixes issue #514.
  • Pager processAjaxOnInit now works with jQuery objects. Fixes issue #572.
  • Filter widget: getFilters will not cause a js error when it targets a non-tablesorter table.

Version 2.15.13 (4/3/2014)

  • Core:
    • Fix widgets not being applied after an update.
    • Ignore child row class name if it is the first table row
  • Filter widget ignores info tbodies again. Fixes issue #568
  • Docs: show resizable widget update
  • Bootstrap theme:
    • Fix zebra highlighting for child rows
    • Thanks to ilyai - PR #567

Version 2.15.12 (3/31/2014)

  • Replaced references to cell.cellIndex with $(cell).index()
    • Prevents an error in IE8
    • Thanks sylvain-hamel!
    • Fixed merge issues, then modified code to minize use of this indexing
    • Cell column property has correct value again.
    • Fixes issue #554
  • Fix docs so nested accordions open with hash.
  • Child row updates
    • Added tablesorter-hasChildRow class name to all parents of child rows.
    • Added .tablesorter .filtered { display: none; } to every included theme; needed to properly hide child rows
    • Fixed pager so that if the last pager row has any child rows, they are now included. Fixes part of issue #396.
    • Fixes issue #556.
  • Add resizable_widths option
    • Set the default & reset header widths using this option
    • Fixes issue #555.
  • I apologize for the last version error... it is set to 2.5.11 instead of 2.15.11 in the git repo tag. It is correct everywhere else.

Version 2.15.11 (3/18/2014)

  • Updated Bootstrap to v3.1.1
  • Check if cell has parser to catch undefined error. Fixes issue #546. Thanks antila!
  • Column count is now correct with nested tables (with tfoot). Fixes issue #547.
  • Fix table reset on pagination change. Fixes issue #548. Thanks evanboho!

Version 2.15.10 (3/13/2014)

  • Fix numberSorter option causing a javascript error & added test.

Version 2.15.9 (3/12/2014)

  • jQuery UI Filter formatter scripts work again (broken since adding unique namespaces in v2.15.7).

Version 2.15.8 (3/12/2014)

  • Filter widget

    • Search delay is no longer ignored.
    • Fixes issues #544 & #545
    • Thanks to @dturkenk for this contribution!
  • Align Character widget (beta)

    • Added this widget to help align cell content on a character (space, decimal, etc).
    • Check out the demo!

Version 2.15.7 (3/9/2014)

  • Core

    • Minor natural sort algorithm optimization
    • Added namespace which should contain a unique namespace for each table; it is used when binding to event listeners.
  • Build table widget

    • Removed inappropriate empty table console message when initializing.
    • build table widget documentation update (includes <head> scripts & css)
    • Fixed nested accordions
  • Column selector widget

    • Setting the columnSelector_saveColumns option to true now saves the "auto" state. Fixes issue #517.
  • Filter widget

    • Use the new namespace option to use with event listeners. Fixes issue #535.
  • headerTitles widget

    • Sorry for all of these breaking changes, I should have left this widget in beta.
    • The headerTitle_prefix, headerTitle_text, headerTitle_numeric options has been replaced, in lieu of the new output options; sorry for no deprecation notice.
    • Added headerTitle_useAria, headerTitle_tooltip, headerTitle_output_sorted, headerTitle_output_unsorted, headerTitle_output_nosort, headerTitle_cur_text, headerTitle_cur_numeric, headerTitle_nxt_text, headerTitle_nxt_numeric, headerTitle_type & headerTitle_callback options. See the headerTitles widget demo for more details.
    • Added "refreshHeaderTitle" method to force the widget to update.

Version 2.15.6 (3/7/2014)

  • Doc

    • Added docs for $.tablesorter.language which contains the text used in the aria-label for the header
    • Update isValueInArray & sortAppend docs.
  • Core

    • Destroy now unbinds the updateCache method properly
    • Update $.tablesorter.isValueInArray function & sortAppend option. Fixes issue #523.
    • All test dates are now time zone & DST independent. Fixes issue #516.
    • Added tests for sortForce, sortAppend, sortMultiSortKey and sortResetKey.
    • Cache natural sort regex.
    • Date parsers now return the original cell text instead of an empty string when encountering invalid dates. Sort of fixes issue #531.
    • Event fixes:
      • Sort events will now only show when the table is being sorted; previously when updating an unsorted table, sort events would fire.
      • The updateComplete event now fires after every triggered update (update, updateRows, updateAll, updateCell & addRows)
      • Updated pager to correctly trigger the updateComplete event when using ajax.
      • Added unit tests to ensure these events fire on an empty table.
      • Fixes issue #532
  • ColumnSelector widget

    • Make column disable, visible & invisible methods consistent. Fixes issue #519
  • Filter widget

    • Preset filter searches (set by data-value on the header) work again. Fixes issues #511 & #525.
    • Add note to docs about adding a placeholder. Fixes issue #522.
    • Filter build select function no longer causes a javascript error on empty tables. Fixes issue #528.
  • Grouping widget

    • The collapsed option once again shows the group headers. Fixes issues #514 & 533
    • Add group_saveGroups & group_saveReset options:
      • The group_saveGroups option (true by default) saves the group name of any collapsed groups (requires group_collapsible to be true)
      • The group_saveReset option (null by default) contains a jQuery selector string or jQuery object pointing to an element to be used to clear the saved groups.
      • Both of these options require the storage utility script contained within the jquery.tablesorter.widgets.js file.
      • Fullfils feature request of issue #514.
    • Added details about using regular expressions within the group_separator option.
  • Header Titles widget (headerTitles)

    • New widget which adds the current sort to the header title attribute.
    • It distinguishes between a text and numeric sort and includes the current sort direction
    • A prefix can be included.
    • By default, an ascending sort shows either "A - Z" or "0 - 9", or "Z - A" or "9 - 0" for descending sorts.
    • Note that date columns will show as numeric
    • Fixes issue #529.
  • Pager (addon & widget)

    • Ensure empty array [] and array of empty strings ['', '', ''] evaluate as the same when checking if the filters have changed. Fixes issue #202 (again).
    • Compare totalRows vs. totalPages when preventing an ajax call.
    • Changes to make the updateComplete event fire, but because of the asynchronous nature of ajax, it fires before any sortEnd events. It may take some more work to resolve this, if it becomes a concern.
    • Attempted to fix pager row count issue. See issue #455.
  • Miscellaneous

    • Pager custom controls (beta) now shows no pages on a single page. Fixes issue #518
    • Increase Bootstrap 3 theme css specificity. See issue #515
    • Checkbox parser no longer causes a js error when a checkbox doesn't exist.

Version 2.15.5 (2/23/2014)

  • Pager widget now initializes properly when using ajax. Fixes issue #510.

Version 2.15.4 (2/22/2014)

  • Add "updateCache" method
    • This method updates the parsers, if undefined, then updates the internal cache.
    • Used by the pager (addon & widget) to update the internal cache after an ajax update.
  • Pager (addon & widget)
    • Fixed several undefined variable javascript errors. Fixes issue #509.
    • Fixed an issue with recursion in the pager widget - removed several unnecessary "applyWidget" methods.
    • Now uses the "updateCache" method after the table is rendered using ajax.

Version 2.15.3 (2/21/2014)

  • Stickyheaders
    • Sorting works again. Fixes issue #508.
    • Table no longer scrolls to the top after initializing a sort from the sticky header.

Version 2.15.2 (2/20/2014)

  • Filter widget
    • Fix js error on empty tables & multiple rows in thead while managing c.parsers. Fixes issue #507.
    • filter-onlyAvail now updates all selects properly. Fixes issue #473.
    • Fix annoying filter search caret jumping to end while typing
  • Doc updates
    • Added delayInit demo (pull #504) - thanks Infeligo!
    • Fixed some markup issues & rearranged some links
    • Updated minified widget file date. Fixes issue #505

Version 2.15.1 (2/19/2014)

  • Filter widget
    • Switched method of saving last search times, as cloned table parts would not include saved data
    • Fixes issue #473.

Version 2.15.0 (2/19/2014)

  • Core

    • Add accessibility attributes to tablesorter (aria).
    • Make header's bindEvent function public to allow easier binding to cloned table headers.
    • Add an unsorted header class name option cssNone (empty string by default) and now all unsorted headers will have a class name of tablesorter-headerUnSorted applied; updated destroy method to remove header unsorted class name.
    • Ensure only "updateRow" is triggered within the pager plugin to prevent issues with Proptype.js, see issue #217.
    • Clean up all public API functions to accept table as either a DOM element or a jQuery table object.
    • The log will now display console errors and/or warnings based on those key words.
    • Consolidated all default class names used by the plugin within $.tablesorter.css - these are class names that are not set by the options.
  • Docs

    • Organize the examples section to make it easier to find the desired sort demo.
    • Add associated tablesorter option (with link) with the appropriate examples.
    • Add a "Custom parsers" section instead of lumping it in with the widgets.
    • Add a "Work-in-progress" section for some beta demos.
    • Add indicators to show which widgets are contained within the jquery.tablesorter.widgets.js file.
    • Add an "API" section which gives details on how to use tablesorters available public variables & functions in both the core and widgets.
    • Colorize the left border of code blocks to differentiate HTML, CSS and javascript.
    • Update & consolidate jQuery UI accordion code.
    • Miscellaneous demo fixes.
  • Parsers

    • The "shortDate" parser now works properly with header colspans. Fixes issue #474.
    • The "currency" parser will now properly detect currencies which include a plus or minus sign.
    • The "checkbox" parser (contained in the parser-input-select.js file) will now toggle a class name of checked-# (# is the column index) on the row.
    • A new parsed parameter has been added to the parser code block.
      • This parameter is set with a boolean value (i.e. true or false), to signal the filter widget to only search through parsed data when true.
      • All parsers within the "parser-input-select.js" file now include a parsed:true parameter.
      • The parsers and parsers-advanced demos have been updated to reflect this addition.
  • css Sticky headers widget:

    • Add cssStickyHeaders_zIndex option. Fixes issue #466.
    • Browser will now scroll to table top after filtering. Fixes issue #482.
  • Column selector widget (new!)

    • This widget can make a table responsive. It uses similar parameters as those used by jQuery mobile to set priorities for hiding columns (uses "data-priority" attribute).
    • The column priorities range from 1 to 6, with 1 having the highest priority. As the browser window shrinks, lower priority (higher numbers) columns will be hidden first until all numbered priority columns are hidden.
    • Any named data-priority, other than the numbers 1 - 6, (e.g. "critical" or "persistent") will be treated as a column which will not be included in the column selector.
    • With the addition of some basic selector markup and css, this widget will also allow selecting (hiding or showing) table columns.
    • Popups can also be targeted for addition of these selectors; the demo includes a Bootstrap popover sample.
    • Css selectors are used to hide/show columns for optimal speed and therefore will not work in IE8 and older browsers.
    • jQuery version 1.7+ and tablesorter verison 2.8+ are needed for this widget to work properly.
    • Check out the demo with more details on how to setup this widget!
  • Editable widget

    • Refresh other widgets after a cell has been edited. Fixes issue #487.
  • Filter widget:

    • Make operator match higher priority than exact matching. Fixes issue #465.
    • Fix " OR " is now matched case insensitive.
    • The filter_cssFilter option can now contain an array of class names to be applied to each filter input; added in addition to the "tablesorter-filter" class name.
    • Start filter values are now preserved. Fixes issue #452.
    • Filter formatter demo: Update jQuery UI & stylesheet - fixes UI spinner.
    • Fix child rows always visible when filtering.
    • Update beta demo - select2 external table filters demo, thanks to mohitmayank; see pull request #469.
    • Add filter_hideEmpty option
      • Set this option to false to always show the filter row.
      • By default, the filter row is completely hidden when no rows exist within the tbody (previous behavior)
      • Fixes issue #450
    • Rewrite filter match any column code
      • Removed filter_anyMatch option - sorry about not deprecating this first!
      • Added a filter_external option which is set to a jQuery selector string of inputs, outside of the table, to be used for searching table content.
      • External inputs must have a data-column="x" attribute where "x" is the associated column to filter; "x" can also be set as "any" to match any column.
      • All filters, internal and external, now automatically update and be used with the $.tablesorter.getFilters and $.tablesorter.setFilters functions.
      • Please refer to the documentation for the filter_external option for more details.
      • Also check out the updated filter widget external option and filter widget external inputs demos.
      • This fixes issues #114, #370, #471 and #490.
    • Parsers with a parsed: true flag will now automatically force the filter widget to only search through parsed data instead of actual table cell data
      • This is needed specifically for parsers of input, textarea and select elements.
      • All parsers within the "parser-input-select.js" file have been updated with this parameter.
      • This flag is essentially does the same thing as adding a class name of filter-parsed to the column header, or filter: "parsed" setting to the headers option.
  • Filter Formatter (Filter widget extension):

    • These updated filter widget functions are not completely backward compatible with older versions of the filter widget. Please update both!
    • Added compare & selected options:
      • These options allow the adding of a comparison operator selector to the cell (e.g. &gt;, &gt;=, &lt;, &lt;=, etc).
      • If any cellText is included, it is now wrapped in a label with a class name of "compare-select-label" and "compare-select-label#" (where "#" is the column index).
      • The selector has a class name of "compare-select" and "compare-select#" (where "#" is the column index)
      • Whichever type of input that is added to the cell is then wrapped in a div with class "compare-select-wrapper" and "compare-select-wrapper#" (where "#" is the column index).
      • These class names allow styling of an individual filter to keep elements in line, or however you wish to style it.
    • Filter reset now sets these filters to their default values, not an empty string.
    • Updated to now properly restore saved filters.
    • Added endOfDay option for jQuery UI Datepicker.
      • When true search dates will include all times from the date chosen when a comparison is made of dates "less than" the set date.
      • Example 1: if a table entry has a date of "Jan 14, 2014 11:23 AM" and the filter search is set to <= 1/14/2014, the table entry will be included in the search; the default set time would otherwise be "1/14/2014 00:00:00" and not include the entry from "11:23 AM". So, the endOfDay option sets the time to "23:59:59".
      • Example 2: if searching for one specific date, this option will now search for all times within that day. For example, searching for =1/20/2014, and the results will include dates from 1/20/2014 00:00:00 to 1/20/2014 23:59:59.
      • When comparing dates greater than the set date, the time will be set to midnight; so this option will not be applied.
      • Example 3: in two date inputs, the endOfDay time is only applied to the "to" input; search for 1/20/2014 - 1/20/2014
      • This option is available in both the comparison (one input) and range (two inputs; "to" date input only) date pickers.
    • Fixes issue #325 and issue #430.
  • Group widget:

    • Attempt to fix ajax issue. See issue #437.
    • Combining group widget with pager should now work properly. Fixes isse #437.
    • The widget will now find the correct header cell when multiple thead rows are present.
  • Pager (plugin & widget):

    • Fixed pager issues with empty tables
      • When existing rows are removed from the table, the pager display will no properly update to show zero total rows.
      • When starting from an empty table and content is added, all widgets are refreshed
      • When updating the table via an update method, the filter search will now be applied properly.
      • Fixes issues #426 & #455
    • Correct page calculation. Fixes issue #468.
    • Added custom storage keys. Thanks to eire1130; see pull request #480 & issue #481.
    • Added a public show error function $.tablesorter.showError( table, message );
      • Pass this function the table DOM element or jQuery object in table
      • The message can either be a string with a message ("table refuses to cooperate")
      • or, the message can be an HTML string of an entire table row ('<tr><td colspan="' + table.config.columns + '">yeah, instead of showing your data... I am taking a nap</td></tr>')
      • If the message is blank, all error rows are removed
      • Fulfills issue #486
      • Please note that this function was added to both the pager widget & pager plugin; In the next major release, this function will be separate from both, and can be included in the build.
      • All theme files included a minor update with this change.
    • Added accessibility attributes to the pager.
    • Fix jsHint warnings.
  • Resizable widget

    • Fix reported js error.
    • The resizable reset function $.tablesorter.resizableReset(table); now accepts jQuery objects.
  • Sticky headers widget

    • Select boxes work again within sticky headers. Fixes issue #473.
    • Browser will scroll to table top after filtering.
      • This only occurs if the sticky header is active and after a filter is applied.
      • Fixes issue #482.
    • Use core's new bindEvents public function to bind events to cloned sticky header.
    • Fix sticky header alignment within attachTo elements.
  • Miscellaneous

    • Update all Bootstrap demos to use the latest version (v3.0.3). Thanks themilkman!
    • Update all demo pages that use jQuery UI accordion with the newest version. Also added a clickable anchor to each accordion header.
    • Consolidate default class names within $.tablesorter.css for the filter, resizer and stickyHeaders widgets.
    • Renamed component.json to bower.json

Version 2.14.5 (12/16/2013)

  • Pager
    • Fix pager update when ajax returns no rows. Fixes issue #456.
    • Add pager processAjaxOnInit option. Fixes issue #424.
    • Fix & document inconsistentcies in pager triggered event parameters.
    • Disable pager arrows & show zero in display when totalPages is zero. Fixes issue #460.
    • Filter row is now included in sticky header while using the pager. Fixes issue #449.
    • Lots of thanks to Lynesth for sharing code fixes :)
  • Fix stickyHeaders_attachTo no positioning correctly. See issue #295.

Version 2.14.4 (12/14/2013)

  • Add Bootstrap 2 theme. Thanks to themilkman.
  • The addRows method now works with an empty table. Fixes issue #450.
  • Sticky headers widget
    • Add stickyHeaders_attachTo option. Fixes issues #295 & #314.
    • Add cssStickyHeaders_attachTo option. Fixes issue #453.
    • Added padding to wrapper in demo so Chrome doesn't add a horizontal scroll bar
  • Filter widget
    • Fix forced search to work again (i.e. $('table').trigger('search', false);)
    • Fix child row filtering - see this Stackoverflow question
  • Pager
    • The pager will update properly when ajax returns no rows. Fixes issue #456
    • Filter searches will now reset pager to the first page. Fixes issue #456
    • The pager will now properly count filtered rows when including/excluding child rows. Fixes this Stackoverflow question.
    • The table cache will once again update after an ajax call. Fixes issues #436 & #437.

Version 2.14.3 (12/2/2013)

  • Core
    • Refreshing widgets now only applies to previously installed widgets. Fixes issue #442.
  • Pager
    • Ajax arrays now accept html instead of cell contents, e.g. <td class="red">- 10</td>. Thanks @christhomas; fixes issue #434.
    • Add ajax counter to only allow the most recent request to process. Thanks @christhomas; fixes issue #443.
    • When filtering rows, the output will now show zeros for row & page counts instead of empty strings.
    • No more fixedHeight pager errors. Thanks @hempel; fixes issue #448.
  • Filter widget
  • Sticky Headers widget
    • Now uses the filter widget bindSearch function allowing live search, delayed searching and escape to cancel on sticky header filters.
    • Thanks to @haraldkrischner for his help!
    • Fixes issues #439 & #440.
  • CSS Sticky Headers widget (beta)
  • Added Semantic version sorting demo
    • See the demo here.
    • This demo does not use a custom parser nor widget, it requires a modified semver.js for node file to sort the column using the textSorter option.
    • The modified semver-mod.js file is contained within the new "extras" folder (tablesorter/js/extras) along with the original unmodified semver.js file.
    • Extra code is also included to highlight invalid semantic versions within the table.
    • Fixes issue #395.
  • Sorry I didn't get around to finding solutions for some of the other issues that I promised to have done this patch :(

Version 2.14.2 (11/25/2013)

  • Removed Bootstrap filter cell background color. Fixes issue #425.
  • Added css sticky header widget (beta)
    • This widget uses css3 transforms to make the table header sticky. It's a bit jumpy in Chrome, but works well in other tested browsers.
    • This widget doesn't appear to work in IE10, but it should... it will not work in IE8 and older.
    • See issue #429 for more information.
  • Stop repeat filter widget searches. Fixes issue #431.
  • Prevent filter error. Fixes issue #432.
  • Merged in and reverted issue #433.
  • Editable widget
    • Updated docs with missing editable_editComplete callback event name option.
    • Modified the editable_columns option to allow setting a column range string, e.g. "2-4" instead of creating an array ([2,3,4]).
    • Fixes issue #435.
  • Grouping widget
    • Invalid group class now fails silently.
    • Fixes issue #438.

Version 2.14.1 (11/22/2013)

  • Filter widget
    • External inputs bound using the filter bindSearch function now clear on the "filterReset" event.
    • Replace Array.indexOf() due to IE8.
  • Pager (plugin & widget)
    • Replace Array.indexOf() due to IE8. Fixes issue #388.
  • Themes
    • Non-sortables headers now show the default cursor
    • Fix Dropbox theme to work properly within the sticky header demo
    • Fix Ice theme to include a top border in the sticky header demo
    • Tweaked sticky header widget to better align columns in Firefox & adjust caption to hide border edges.
    • See the sticky header demo to see these changes.
    • Fixes #407.
  • Documentation
    • Update FAQ page to include information on the zebra widget not always working.
    • Update demos to use Bootstrap 3.0.2.
    • Add search instructions to the wiki documentation pages.
    • Add link to FAQ & search instructions on the main documenation page.
  • Add associated core version number to pager addon & widget, main widget file and filter formatter file.

Version 2.14.0 (11/19/2013)

Core

  • Changed sorting algorithms:
    • Due to problems with sorting multiple columns improperly sorting algorithms again include code to sort empty cells.
    • Internal sorting again has separate ascending and descending functions; but the previous $.tablesorter.sortNatural (ascending only), $.tablesorter.sortNumeric (ascending only) and $.tablesorter.sortText (ascending only) functions are still available.
    • Custom text & numeric sort functions, added via textSorter and numberSorter options now require you to return the sort in the correct direction.
    • Custom sort functions no longer have empty cells automatically handled for you.
    • Fixes issue #419.
  • Added sortStable option which when true will sort exactly equal items by placing them in their original unsorted order (or, perform a stable sort).
  • Removed double icon class names.
  • Added tabIndex option
    • When true, a tabindex is added to the headers for keyboard accessibility; this was previously always applied
    • When false, table headers will not be included when tabbing through the page
    • Fulfills issue #415.

Filter widget

  • Setting a filter to build a select no longer causes an error. Fixes issue #421.
  • Added filter_saveFilters option
    • When true, this option saves the current filters using the storage utility (local storage with cookie fallback).
    • This option is set to false by default.
    • See issue #388.
  • Allow multiple external filter inputs
    • The $.tablesorter.filter.bindSearch( $table, $external ) function now allows binding searches using the built-in functioning.
    • The bind search function will unbind any previously bound keyup and search event listeners on the $external elements.
    • External inputs must not have a tablesorter-filter class to distinguish them from internal filters.
    • If not using the filter_anyMatch option, external filters can be set to target specific columns by including a data-column attribute.
    • See the new filter external inputs demo.
  • Filter reset button clicks will again trigger a filterReset event. Fixes issue #423.

Grouping widget

  • Merged in fix for grouping widget + filter widget + child row widget.
  • Renamed variables & cleanup
  • Added group_dateString function to format the date string for group-date header class name.

Zebra widget

  • Now skips removable rows added by other widgets, more specifically, it skips rows with a remove-me class name (set by the selectorRemove option).

Docs updates

  • Added a side menu with search to the main document page.
    • The main documentation page now uses Bootstrap for some styles.
    • Search includes a count with clear search, previous result and next result buttons.
    • Search options included to find letters or whole words only, and choose if the search is case sensitive, or not.
    • The advantage of this search over the browser's built-in search (Ctrl-F) is that this search will find text within the hidden content
    • Indexing of the search results may not always be in order, i.e. "10/10" may not always be the lowest result on the page due to nested elements.
    • Sorry, IE7 and older users, the search works but but is really slow. And the side menu styling leaves much to be desired (using Bootstrap).
  • jQuery UI theme selector updates. See issue #407.
  • Updated typos & css in various demos
  • Added Utility options section for options used by parsers, storage utility and pager ajax data.
  • Added removed options section.
    • This applies to pager options available in the original version of tablesorter which are no longer supported.
    • Fixes issue #416.
  • Added kbd styling for better visualization of keyboard keys.

Other

  • Renamed variables within the pager custom control demo (still in beta)
  • Renamed variables within default widgets file
    • Utilities: storage, addHeaderResizeEvent,, resizableReset
    • Widgets: columns, resizable, stickyHeaders, uitheme, saveSort
  • Updated parser-date-two-digit-year.js to allow changing the date range
    • Set a different date range by adding a value to table.config.dateRange.
    • Instructions added to main documents under utility options
  • Storage utility ($.tablesorter.storage) now accepts a jQuery object as well as a DOM object of the table
    • $.tablesorter.storage( $('#mytable'), 'myvariable', 'YAY' );, or
    • $.tablesorter.storage( $('#mytable')[0], 'myvariable', 'YAY' );
Clone this wiki locally