* Set to `true` for U.S. number format: `1,234,567.89`
* Set to `false` for German `1.234.567,89` or French `1 234 567,89` formats.'
* Fix for [issue #34](https://github.com/Mottie/tablesorter/issues/34) and [issue # 31](https://github.com/Mottie/tablesorter/issues/31#issuecomment-4236945).
* Changed pager plugin ajax functions & demo
* The `ajaxProcessing` function now must now return two or three pieces of information: [ total, rows, headers ]
* `total` is the total number of rows in the database.
* `rows` is an array of table rows with an array of table cells in each row.
* `headers` is an array of header cell text (optional).
```javascript
// process ajax so that the following information is returned:
* Added `table` and `cellIndex` variables to the `textExtraction` function to allow using a more general function for text extraction.
* Empty cells will no longer skip the parser allowing extracting data attributes.
* This was only an issue on table cells with no text.
* Added a demo to the [demos wiki page](https://github.com/Mottie/tablesorter/wiki) whichs allows [dynamic sorting of checkboxes](http://jsfiddle.net/Mottie/vCTHw/18/).
Version 2.1.1 (3/8/2012)
============================
* Renamed `filter_fromStart` to `filter_startsWith`.
* Fixed an issue with `sortRestart` not working properly.
* In turn, `sortReset`, `lockOrder` and `sortInitialOrder` were modified with this change and were made sure to all work properly.
* The `sortInitialOrder` will work in either the main options or specifically within the headers option when a particular column needs a different initial sort order.
* Added a [sortReset/sortRestart](http://mottie.github.com/tablesorter/docs/example-option-sortreset-sortrestart.html) demo.
* Updated pager plugin to better work with the sticky header widget.
Version 2.1 (3/7/2012)
============================
* Added `selectorRemove` option
* Any table row with this css class will be removed from the table prior to updating the table contents.
* The reason this was added was in case a widget or some other script adds rows to the table for styling, or something else. If a table update is triggered (`$(table).trigger('update');`), all rows in the table will be included in the update.
* The [writing custom widgets](http://mottie.github.com/tablesorter/docs/example-widgets.html) demo has been updated to include this class name.
* The pager plugin update also uses this to remove the row added by the new `fixedHeight` option.
* It's default value is `tr.remove-me`, so it can be modified to remove more than just rows.
* Fixed a bug that broke the plugin if you set `sorter: true` in the header options.
* Pager plugin update
* Ajax
* The pager plugin will now interact with a database via JSON. See [demo here](http://mottie.github.com/tablesorter/docs/example-pager-ajax.html).
* Added `ajaxUrl` option which contains the variables `{page}` and `{size}` which will be replaced by the plugin to obtain that data.
* Another option named `ajaxProcessing` was included to process the data before returning it to the pager plugin. Basically the JSON needs to contain the data to match the example below. An additional required variable is the total number of records or rows needs to be returned.
```javascript
// process ajax so that the data object is returned along with the total number of rows
* I tried to make the plugin interact with a database as flexible as possible, but I'm sure I haven't covered every situation. So any and all feedback is welcome!
* Also, much thanks to [kachar](https://github.com/kachar) for the [enhancement request](https://github.com/Mottie/tablesorter/issues/31) and willingness to help test it!
* Removed `positionFixed` and `offset` options.
* Added `fixedHeight` option which replaces the `positionFixed` and `offset` options by maintaining the height of the table no matter how few rows are showing. During testing, it displayed some odd behaviour after adding or deleting rows, but it should have been fixed... just please keep an eye out ;).
* The pager now adds all of its options to the table configuration options within an object named "pager". Basically what this means is that instead of add all of the pager options to be mixed in with the tablesorter options, the pager options have been isolated and can be found by typing this into the browser console: `$('table')[0].config.pager`.
* **Storage** function added named `$.tablesorter.storage` for use in widgets
* It is used by various widgets to save data to either local storage (if available) or cookies.
* This function needs to use `JSON.stringify()` which is [not supported by IE7](http://caniuse.com/#search=json). If you need to support IE7, then include this library: [JSON-js](https://github.com/douglascrockford/JSON-js).
* Use the function with your own custom widgets as follows:
```javascript
// *** Save data (JSON format only) ***
// val must be valid JSON... use http://jsonlint.com/ to ensure it is valid
var val = { "mywidget" : "data1" }; // valid JSON uses double quotes
// *** Get data: $.tablesorter.storage(table, key); ***
v = $.tablesorter.storage(table, 'tablesorter-mywidget');
// val may be empty, so also check for your data
val = (v && v.hasOwnProperty('mywidget')) ? v.mywidget : '';
alert(val); // "data1" if saved, or "" if not
```
* Added an option named `widgetOptions`:
* This is a move to store all widget specific options in one place so as not to polute the main table options.
* All current widgets have been modified to use this new option.
* Only one widget option, `widgetZebra` will be retained for backwards compatibility with the original plugin.
* More details for each widget are explained below.
* **Zebra** widget:
* Added `zebra` options to the new `widgetOptions`.
```javascript
widgetOptions : {
zebra : [ "even", "odd" ]
}
```
* This replaces `widgetZebra: { css: [ "even", "odd" ] }`, but if the `widgetZebra` option exists, it will over-ride this newer `widgetOptions.zebra` option in order to maintain backwards compatibility.
* **UI Theme** widget:
* Changed css class of div wrapping the contents of each header cell from "inner" to "tablesorter-inner".
* Added "ui-state-default" to the table head columns. Thanks to [Raigen](https://github.com/Raigen) for [sharing the code](https://github.com/Mottie/tablesorter/pull/33)!
* Moved `widgetUitheme` option into the new `widgetOptions`.
```javascript
widgetOptions : {
// adding zebra striping, using content and default styles - the ui css removes the background from default
// even and odd class names included for this demo to allow switching themes
* Added a new filter widget specific option `widgetOptions.filter_fromStart` which makes the filter only work from the first letter.
* Added a `widgetOptions.filter_cssFilter` option which now contains the class name added to the filter row and each input within it. Previously the class name used was "filters" for the row and "filter" for the input, now both are "tablesorter-filter". Thanks to [cr125rider](https://github.com/cr125rider) for [sharing a code fix](https://github.com/Mottie/tablesorter/issues/32)!
* Added css3 box sizing to allow a better fitting filter box. Thanks to [thezoggy](https://github.com/thezoggy) for sharing the code!
* The css changes were also added to the blue, green and UI style sheets.
* Updated the filter widget demo with the available options described above; this includes the `widgetOptions.filter_childRows` option which was previously undocumented, recently renamed.
* **Resizable Columns** Widget changes:
* The resized column width is now saved using the `$.tablesorter.storage()` function (optional)
* If the storage function doesn't exist, the widget will still function, but just not save the column width.
* **Save Sort** Widget changes:
* Modified to now use the `$.tablesorter.storage()` function (required)
* The storage function is required for this widget to work properly.
* Previous saved data is not compatible with the changes made and will be ignored.
* Modified the "filter" widget to disable the input window instead of setting it with display none. Now the input is disabled and a "disabled" class is applied to allow for further styling.
* Fixed a problem with the addWidget init function which apparently was always being called, even if you didn't want it! Fix for [issue #28](https://github.com/Mottie/tablesorter/issues/28). Thanks to thezoggy for helping with troubleshooting!
* Added a new function to widgets called "init" which is called upon initialization, before any of the widgets are applied.
* I added it to allow the "saveSort" widget to get the saved sort data (localStorage or cookie) before the initial sort was applied.
* The "saveSort" widget is still compatible with the original tablesorter, but the original version will call all of the widgets twice on initialization, if using the "saveSort" widget.
* New add widget format is as follows:
```javascript
$.tablesorter.addWidget({
id: 'myWidget',
init: function(table, allWidgets, thisWidget){
// widget initialization code - this is only run ONCE
// but in this example I call the format function because
// I want to keep it backwards compatible with the original tablesorter
thisWidget.format(table, true);
},
format: function(table, initFlag) {
// widget code to apply to the table AFTER EACH SORT
// the initFlag is true when format is called for the first time, but
* Setting this option to `true`, allows you to click on the header a third time to clear the sort
* Clearing the sort DOES NOT return the table to it's initial unsorted state.
* Added `saveSort` widget
* This widget will save the last sort to local storage, and will fallback to cookies.
* The widget does use the `JSON.stringify` function which is [not fully supported](http://caniuse.com/#search=json) (IE7), so if you plan to support it and use this widget, please include this [JSON library](https://github.com/douglascrockford/JSON-js).
* Fixed pager page size not sticking. Fix for [issue #24](https://github.com/Mottie/tablesorter/issues/24).
* Widgets should no longer be applied twice when an initial sort direction is added. Fix for [issue #21](https://github.com/Mottie/tablesorter/issues/21).
* Modified Green theme:
* The Green theme sort direction icon is now applied to only the first span it encounters inside the header. The UI theme adds a second span for it's icon.
* Essentially to fix [this demo](http://mottie.github.com/tablesorter/docs/example-widget-ui-theme.html) which allows switching between all of the themes.
* Modified the UI theme to now add a div that wraps all of the header cell content to allow positioning of the sort direction icon.
* Fixed disabled column style for the ui theme widget. Thanks to [bbbco](https://github.com/bbbco) for the fix in [issue #17](https://github.com/Mottie/tablesorter/issues/17).
* The ui theme and sticky header widgets now work together and update the arrow direction. Fix for [issue #15](https://github.com/Mottie/tablesorter/issues/15).
* Empty cells with only a tab or space will now sort at the bottom. Thanks to [pursual](https://github.com/pursual) for the fix for [issue #16](https://github.com/Mottie/tablesorter/issues/16).
* Updated the sticky header widget again to not interfere with the filter widget. Fix for [issue #10](https://github.com/Mottie/tablesorter/issues/10).
* Updated the sticky header widget to reposition the sticky header when scrolling left. Fix for [issue #9](https://github.com/Mottie/tablesorter/issues/9).
* Changed filter input from visibility hidden to display none. Fix/enhancement from [issue #7](https://github.com/Mottie/tablesorter/issues/7).
* Modified the widget to better work with child rows. Added the `widgetFilterChildRows` option. Fix for [issue #8](https://github.com/Mottie/tablesorter/issues/8).
* When `widgetFilterChildRows` is true, all child row content is included in the row filtering; if false, the child row content is ignored.
* Added `tableClass` to the documents. Apparently I forgot to add it before.
* Added a note to the filter demo bringing up [issue #6](https://github.com/Mottie/tablesorter/issues/6).
* This event is triggered immediately before the actual sort. So this event occurs after the `sortStart` and after the `sortList` option has been updated.
* It was added to allow for changing the sort dynamically. See [issue #3](https://github.com/Mottie/tablesorter/issues/3).
* Added `removeRows` option to the pager plugin
* When `true`, the default value, the pager plugin removes all non-active rows from the table. This greatly increases the sort speed of large tables.
* When `false`, the pager plugin merely hides the non-active rows so they all continue to exist in the table. This should allow for better access to data within the table (i.e. submitting form elements)
* Added notes to demo pages to indicate if the original (version 2.0.5, at [tablesorter.com](http://tablesorter.com/docs/)) does have that option or method.
* Added "addRows" method that allows adding table rows.
* This method differs from the "update" method in that it only adds rows to the cache.
* Use this new method to add rows to a table with the pager plugin applied. Using the "update" method on a table with the pager plugin will remove all hidden rows from the cache.
* Added a "destroy.pager" method to remove the pager from the table - pager demo updated.
* Reverted the changes made in 2.0.13 and added checks to prevent errors.
* Allowed sorting an empty table which would then automatically sort its contents when the table is updated.
* Modified "Update" and "UpdateCell" methods to automatically resort the table using the existing sort.
* Updated the [Initializing tablesorter on an empty table](http://mottie.github.com/tablesorter/docs/example-empty-table.html) demo and [Updating a table cell](http://mottie.github.com/tablesorter/docs/example-update-cell.html).
* Modified the numeric sort with a new method to deal with non-numeric content:
* When sorting columns with numeric values, by default any non-numeric or empty cells are treated as if they have a zero value. This puts the text between negative and positive values in a column.
* Adding `string : "max+"` to the `headers` option will now treat any non-numeric table cells as if they have a maxiumum positive value (a value greater than the maximum positive value in the column).
* Adding `string : "max-"` to the `headers` option will now treat any non-numeric table cells as if they have a maxiumum negative value (a value greater than the maximum negative value in the column).
* See the "[Dealing with text strings in numeric sorts](http://mottie.github.com/tablesorter/docs/example-options-headers-digits-strings.html)" demo for a better visual example.
* Changed UI theme widget code to use "ui-widget-header" instead of "ui-widget-default" to better match the themes.
* Renamed changelog.markdown to changelog.txt to prevent downloading when clicking on the link
* Add the jQuery UI theme widget code found on [this example page](http://mottie.github.com/tablesorter/docs/example-ui-theme.html). This demo page includes the UI theme switcher.
* Added a header index to the `onRenderHeader` function to make it easier to target specific header cells for modification. See the [render header example](http://mottie.github.com/tablesorter/docs/example-option-render-header.html) for an example.
* Removed the `separator` option and added an `output` option which allows you to completely customize the output string.
* In the `output` string, include any of the following variables:
* `{page}` is replaced with the current page number.
* `{totalPages}` is replaced with the total number of pages.
* `{startRow}` is replaced with the number of the visible start row of the pager.
* `{endRow}` is replaced with the number of the visible end row of the pager.
* `{totalRows}` is replaced with the total number of rows.
* The `cssPageDisplay` option can now target any element; in previous versions, this element was an input of type text.
* Added a `pagerArrows` and `cssDisabled` options:
* When `pagerArrows` is true, the first and previous pager arrows have the css class name contained in the `cssDisabled` option applied when the first row is visible.
* The next and last pager arrows will be have the `cssDisabled` class applied when the last row is visible.
* Additionally, if the number of table rows is less than the pager size, the pager will get the `cssDisabled` class name applied.
* If false (the default setting), the pager arrows class names will not change.
* Fixed parsers for currency and digits to work with number values separated by commas. Thanks to Josh Renaud for the information!
* Fixed "lockedOrder" header option and added documentation and an example on how to use it.
* Made the sort order "desc" only trigger off of the first letter, so any word/abbreviation starting with "d" will set the descending sort order, all other letters will set the order to ascending (shhh, because I'm a bad speller :P)
* Modified the "sortInitialOrder" option so it can also be set in the headers option.
* Added "pagerChange" and "pagerComplete" events to the pager plugin which trigger on the table. See the [pager demo](http://mottie.github.com/tablesorter/docs/example-pager.html) for an example on how to bind to them.
* Added the "sortAppend" since the option was there, but apparently the code wasn't.
* Added missing documentation from [my blog post](http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html)
* This included a few new example pages: apply widgets, child rows, render header, sort append and zebra widget.
* Added a methods and events table.
* Fixed the minified version. Apparently sorting functions called by the eval were removed by the Google Closure Compiler. Resolved by using "Whitespace only" optimization.