From f68b3898c01bc668bb9c577ea64ec0f3c14aedbe Mon Sep 17 00:00:00 2001 From: Mottie Date: Tue, 19 Nov 2013 22:21:16 -0600 Subject: [PATCH] more search menu tweaks & version bump --- README.md | 222 +++++++++------------------ component.json | 2 +- docs/css/menu.css | 8 +- docs/index.html | 19 ++- docs/js/search.js | 1 + js/jquery.tablesorter.js | 6 +- js/jquery.tablesorter.min.js | 4 +- js/jquery.tablesorter.widgets.js | 10 +- js/jquery.tablesorter.widgets.min.js | 26 ++-- package.json | 2 +- tablesorter.jquery.json | 2 +- 11 files changed, 115 insertions(+), 187 deletions(-) diff --git a/README.md b/README.md index 10884de5..c31b3d74 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,75 @@ tablesorter can successfully parse and sort many types of data including linked View the [complete listing here](https://github.com/Mottie/tablesorter/wiki/Change). +#### 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](https://github.com/Mottie/tablesorter/issues/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](http://en.wikipedia.org/wiki/Stable_sort#Stability)). +* 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](https://github.com/Mottie/tablesorter/issues/415). + +**Filter widget** +* Setting a filter to build a select no longer causes an error. Fixes [issue #421](https://github.com/Mottie/tablesorter/issues/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](https://github.com/Mottie/tablesorter/issues/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](http://mottie.github.io/tablesorter/docs/example-widget-filter-external-inputs.html). +* Filter reset button clicks will again trigger a `filterReset` event. Fixes [issue #423](https://github.com/Mottie/tablesorter/issues/423). + +**Grouping widget** +* Merged in fix for grouping widget + filter widget + child row widget. + * Updated demo with multi-child column styling. + * Thanks [Xamamule](https://github.com/Xamamule) in [pull #414](https://github.com/Mottie/tablesorter/pull/414)! + * This also fixes [issue #422](https://github.com/Mottie/tablesorter/issues/422). +* 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](https://github.com/Mottie/tablesorter/issues/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](https://github.com/Mottie/tablesorter/issues/416). +x* Added `kbd` styling for better visualization of keyboard keys. + +**Other** +* Renamed variables within the [pager custom control demo](http://mottie.github.io/tablesorter/beta-testing/example-pager-custom-controls.html) (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' );` + #### Version 2.13.3 (11/9/2013) * Pager (plugin/widget) @@ -121,156 +190,3 @@ View the [complete listing here](https://github.com/Mottie/tablesorter/wiki/Chan * Other changes * Improved `formatFloat()` replace method. * Sorting a zero hex value (`0x00`) is now possible. - -#### Version 2.12 (10/18/2013) - -**Core** -* Added `numberSorter` option allowing you to modify the overall numeric sorter. -* Updated the `textSorter` option to allow setting a text sorter for each column. - * The `textSorter` functon parameters have changed from `(a, b, table, column)` to `(a, b, direction, column, table)`. - * Restructured & combined sorting functions internally so that tablesorter will always sort empty cells no matter what sorting algorithm is used by the `textSorter`. - * Renamed `$.tablesorter.sortText()` to `$.tablesorter.sortNatural()` - * Added a new basic alphabetical sort algorithm `$.tablesorter.sortText = function(a, b) { return a > b ? 1 : (a < b ? -1 : 0); };` which can be set using the `textSorter` option. - * New examples can be found in the updated [custom sort demo](http://mottie.github.io/tablesorter/docs/example-option-custom-sort.html). - -* Added `fixedUrl` option for use with the `$.tablesorter.storage()` function. - * Setting this with a fixed name (it doesn't need to be a url) allows saving table data (`saveSort` widget, `savePages` in pager widget) for tables on multiple pages in a domain. - * Additional storage options are described below under "Storage". -* An accurate number of table columns is now contained within `table.config.columns`. This accounts for multiple header rows, tds, ths, etc. -* Replaced `.innerHTML` with jQuery's `.html()` to fix issues in IE8. Fixes [issue #385](https://github.com/Mottie/tablesorter/issues/385). -* Version numbers should now all be accurate, even in the comments.. at least this time ;). Fixes [issue #386](https://github.com/Mottie/tablesorter/issues/386). - -**Pager** -* In attempts to initialize the pager after the filter widget: - * Added a pager widget (still beta testing) to allow initializing the pager after certain widgets (filter widget). - * Updated tablesorter core (properly count table columns) & filter widget code to allow it to initialize on an empty table (thanks @stanislavprokopov!). - * Hopefully one or both of these changes fixes [issue #388](https://github.com/Mottie/tablesorter/issues/388). - * New pager widget demos: [basic](http://mottie.github.io/tablesorter/docs/example-widget-pager.html) & [ajax](http://mottie.github.io/tablesorter/docs/example-widget-pager-ajax.html). -* `savePages` option - * Should no longer cause an error if stored data is malformed or unrecognized. Fixes [issue #387](https://github.com/Mottie/tablesorter/issues/387). - * The stored size and page is now cleared if the table is destroyed. -* Fixed an error occuring in IE when trying to determine if a variable is an array (`toString` function call not recognized). Fixes [issue #390](https://github.com/Mottie/tablesorter/issues/390). -* Updated pager rendering to prevent multiple ajax calls. -* During this update, the pager page size would return as zero and set the totalPages value to inifinity. Yeah, it doesn't do that anymore; but you can still set the pager size to zero if you want! - -**Widgets** -* Filter widget: - * Should now properly initialize when the pager plugin/widget is used with ajax and/or the `filter_serversideFiltering` option is `true`. Fixes [issue #388](https://github.com/Mottie/tablesorter/issues/388). - * Please note that the select dropdowns still sort using the natural sort algorithm, but since it is using the function directly, empty cells will not sort based on the `emptyTo` option. If this is a big problem, let me know! -* Grouping widget: - * Added `group_callback` option - this sets a callback function which allows modification of each group header label - like adding a subtotal for each group, or something. See the [updated demo](http://mottie.github.io/tablesorter/docs/example-widget-grouping.html). - * Added `group_complete` option which is `"groupingComplete"` by default. This is the name of the event that is triggered once the grouping widget has completed updating. -* Updated the editable widget: - * Added `editable_editComplete` option which names the event that is triggered after tablesorter has completed updating the recent edit. - * You can also bind to the `change` event for that editable element, but it may occur before tablesorter has updated its internal data cache. -* Storage - * The `$.tablesorter.storage()` function now has options including the `fixedUrl` option described in the core section above. - * Also added storage options which can be used for custom widgets: `$.tablesorter.storage(table, key, value, { url : 'mydomain', id : 'table-group' })`. - * Additionally, for already build-in widgets, you can apply data-attributes to the table: `...
`. - * For more details, please see [issue #389](https://github.com/Mottie/tablesorter/issues/389). - -**Parsers** -* Added an IPv6 parser - * This parser will auto-detect (the `is` function checks for valid IPv6 addresses). - * Added a new [IPv6 parser demo](http://mottie.github.io/tablesorter/docs/example-parsers-ip-address.html). - * Included rather extensive unit tests for just this parser o.O. - -#### Version 2.11.1 (10/11/2013) - -* Fixed an updating bug: - * The pager was not updating properly - * The `updateComplete` event was not firing when not using ajax. - * Thanks @sbine for sharing the fix! - -#### Version 2.11 (10/10/2013) - -**Core** -* Initialized widgets (widgets with options) are now tracked to ensure widget options are extended when using "applyWidgets". Fixes [issue #330](https://github.com/Mottie/tablesorter/issues/330). -* An javascript error no longer pops up when setting the `delayInit` option to `true` and using the `saveSort` widget (or triggering a `sorton` method). Fixes [issue #346](https://github.com/Mottie/tablesorter/issues/346). -* Only visible columns will be considered when fixing column widths. Fixes [issue #371](https://github.com/Mottie/tablesorter/issues/371). -* Merged in fix for jQuery version check ([pull #338](https://github.com/Mottie/tablesorter/pull/338)). This also fixes [issue #379](https://github.com/Mottie/tablesorter/issues/379). Thanks @lemoinem! -* Removed natural sort's ability to sort dates. This shouldn't be a problem since tablesorter uses parsers detect & parse date columns automatically. Fixes [issue #373](https://github.com/Mottie/tablesorter/issues/373). -* Fixed [issue #381](https://github.com/Mottie/tablesorter/issues/381). - * Any class name that is set by an option and is later used to search for that element now has an empty default class name. - * The reasoning is that if a developer adds two class names to the option, the jQuery find breaks. - * All default single class name options are now contained within `$.tablesorter.css` - * Options affected include: tableClass, cssAsc, cssDesc, cssHeader, cssIcon, cssHeaderRow, cssProcessing in the core. - * Note that the `cssIcon` option retains it's default class name & functionality to not add an `` inside the table cell if this *extra class name* is undefined. - * Widget options affected include: filter_cssFilter and stickyHeaders. -* Removed `return false` from header mouse/keyboard interaction. Fixes [issue #305](https://github.com/Mottie/tablesorter/pull/305) & [issue #366](https://github.com/Mottie/tablesorter/issues/366). - -**Parsers** -* Fixed sugar date parser demo to point to the correct parser file and sugarjs resource. -* General cleaned up date, fraction and metric parsers & fixing of minor bugs. - -**Build Table Widget (new)** -* Build a table starting with an assortment of data types ( array, text (CSV, HTML) or object (json) ). -* This widget isn't really a widget because it is run and does it's processing before tablesorter has initialized; but the options for it are contained within the tablesorter `widgetOptions`. - -**Column Widget** -* General cleanup - -**Filter Widget** -* Exact matches can still be made if the user enters an exact match indicator twice (i.e. `John==` will still find `John` in the column; before it would think the user was looking for `John=` after the second `=` was typed) -* Dynamically added filter reset buttons will now work automatically. Added by [pull #327](https://github.com/Mottie/tablesorter/pull/327). Thanks @riker09! -* Chrome appears to have fixed the hidden input bug, so reverted changes to the basic filter demo. Fixes [issue #341](https://github.com/Mottie/tablesorter/issues/341). -* The filter widget will work properly with sub-tables. Fixes [issue #354](https://github.com/Mottie/tablesorter/issues/354). Thanks @johngrogg! -* Fixed issues with `filter_columnFilters` set to `false`. Fixes [issue #355](https://github.com/Mottie/tablesorter/issues/355). -* Searches now have accents replaced if the `sortLocaleCompare` option is `true`. Fixes [issue #357](https://github.com/Mottie/tablesorter/issues/357). -* Merged in enhancement for the filter widget & updated docs - add row to `filter_functions` parameters ([issue #367](https://github.com/Mottie/tablesorter/issues/367), [pull #368](https://github.com/Mottie/tablesorter/pull/368)). Thanks @gknights! -* FilterFormatter jQuery UI Datepicker now includes the user selected time for comparisons. Thanks @TheSin-! -* Another fix to the filteFormatter jQuery UI Datepicker to make it work properly with the sticky header widget. Thanks @TheSin-! -* Removed filter_cssFilter default class name. The "tablesorter-filter" class name is automatically added, and this option now contains any additional class names to add. Fixes [issue #381](https://github.com/Mottie/tablesorter/issues/381). - -**Grouping Widget** -* The grouping widget now works across multiple tbodies. -* Added `group-false` header option which disables the grouping widget for a specific column. Fixes [issue #344](https://github.com/Mottie/tablesorter/issues/344). -* Added the `group_collapsed` option which when true and the `group_collapsible` option is also true, all groups will start collapsed. Fulfills [issue #352](https://github.com/Mottie/tablesorter/issues/352). -* You can now toggle *all* group rows by holding down the shift key while clicking on a group header. -* This widget now works properly with the pager addon (pager addon updated). Fixes [issue #281](https://github.com/Mottie/tablesorter/issues/281). - -**StickyHeaders Widget** -* Caption outerheight now used to get the correct full height of the caption. Thanks @TheSin-! -* `stickyHeaders_zIndex` option added to allow users to customize their sticky header z-index. Fixes [issue #332](https://github.com/Mottie/tablesorter/pull/332). Thanks @TheSin-! - -**UITheme widget** -* Updated Bootstrap theme to work with Bootstrap v3 - * Only additions were made to the sorting icons class names within in the `$.tablesorter.themes.bootstrap` defaults (contained in the `jquery.tablesorter.widgets.js` file). - * So the theme will support all current versions of Bootstrap, just make sure you are using the appropriate icon class name (`icon-{name}` = v2; `glyphicon glyphicon-{name}` = v3). - * Removed the gradient background from the header & footer cells. - * Added a reduced icon font side for header sort icons. - * Renamed the pager class from `pager` to `ts-pager` as Bootstrap adds a lot of padding to that class. See [Bootstrap theme demo](http://mottie.github.io/tablesorter/docs/example-widget-bootstrap-theme.html). - * Thanks @YeaYeah for sharing how to fix the top border in [issue #365](https://github.com/Mottie/tablesorter/issues/365). - -**Pager** -* Fixed the `removeRows` option error when set to `true`. -* The pager now stores any object returned by the `ajaxProcessing` function in `table.config.pager.ajaxData` - * The object should contain attributes for `total` (numeric), `headers` (array) and `rows` (array of arrays). - * A replacement `output` option can also be loaded via this method and must be included in the `output` attribute (i.e. `ajaxData.output`). - * Additional attributes are also available to the output display by using the attribute key wrapped in curly brackets (e.g. `{extra}` from `ajaxData.extra`). - * Additional attributes can also be objects or arrays and can be accessed via the output string as `{extra:0}` (for arrays) or `{extra:key}` for objects. - * The page number is processed first, so it would be possible to use this string `{extra:{page}}` (`{page}` is a one-based index), or if you need a different value use `{page+1}` (zero-based index plus any number), or `{page-1}` (zero-based index minus any number). - * For more details, please see [issue #326](https://github.com/Mottie/tablesorter/issues/326). - * Thanks @camallen for the suggestions & feedback! -* The "updateComplete" event should now properly trigger after an ansynchronous ajax call has completed. Fixes [issue #343](https://github.com/Mottie/tablesorter/issues/343). -* Added a new `savePages` option - * Requires requires the `$.tablesorter.storage` script within the `jquery.tablesorter.widget.js` file to work properly. - * When `true`, it saves pager page & size if the storage script is loaded (requires $.tablesorter.storage in jquery.tablesorter.widgets.js). - * The pager will continue to function properly without the storage script, it just won't save the current page or pager size. - * Fulfills enhancement request from [issue #345](https://github.com/Mottie/tablesorter/issues/345). -* Removed table update when using ajax with a server that is already doing all of the work. Fixes [issue #372](https://github.com/Mottie/tablesorter/issues/372) & [issue #361](https://github.com/Mottie/tablesorter/issues/361). Thanks @sbine! -* Merged in change to count table th length after ajaxProcessing ([pull #383](https://github.com/Mottie/tablesorter/pull/383)). Thanks @harryxu! -* Reverted changes made in [pull #349](https://github.com/Mottie/tablesorter/pull/349) as the error row was not showing because the urls did not exactly equal each other. -* Child rows within the pager will now properly display/hide. Fixes [issue #348](https://github.com/Mottie/tablesorter/issues/348). -* Merged in fix for pager redundant ajax requests ([pull #336](https://github.com/Mottie/tablesorter/pull/336)). Thanks @camallen! -* Merged in fix for pager totalRows check ([pull #324](https://github.com/Mottie/tablesorter/pull/324)). Thanks @camallen! - -**Internal fixes** -* Modified the pager plugin internal variables to use `p` for pager options and `c` for table config options - for consistency. -* Cleaned up the formatting of a few parsers (mostly cosmetic!) -* Some parser functions were added to the `$.tablesorter` object instead of keeping them as private functions, just because my OCD compelled me to do it. -* Some of the changes made the parsers are no longer backward compatible to the original version of tablesorter. Break away man, just do it! - -**Thanks** -* Thanks to @thezoggy and @TheSin- for help maintaining and supporting the tablesorter github project while I was away! -* Also thanks to everyone else that contributed and even more thanks to those that helped troubleshoot and solve problems! diff --git a/component.json b/component.json index 4386d1b1..b93f5ef0 100644 --- a/component.json +++ b/component.json @@ -1,6 +1,6 @@ { "name": "tablesorter", - "version": "2.13.3", + "version": "2.14.0", "dependencies": { "jquery": ">=1.2.6" } diff --git a/docs/css/menu.css b/docs/css/menu.css index 27184773..317a87b7 100644 --- a/docs/css/menu.css +++ b/docs/css/menu.css @@ -24,7 +24,7 @@ a{text-decoration:none;} .input-group input.search.form-control{width:100%;font-size:14px;border-radius:4px 0 0 4px!important;-webkit-border-radius:4px 0 0 4px!important;background-clip:padding-box;} .status{position:absolute;right:60px;top:1em;background:#FFF;color:#555;font-size:9px;} .status.busy{width:20px;height:20px;margin-top:-4px;background:no-repeat center center;background-color:#fff!important;background-image:url(../../addons/pager/icons/loading.gif);text-indent:100%;white-space:nowrap;overflow:hidden;} -.status.label-danger{color:#FFF;background-color:#d9534f;} +.status.label-danger{color:#FFF;background-color:#d9534f;cursor:pointer;} .highlight{background:#FF0;color:#000;cursor:pointer;padding:0 3px;} .highlight.selected{background:orange;} .message{margin:2px auto;} @@ -39,8 +39,8 @@ a{text-decoration:none;} #main-nav-check:checked ~ #main .main-header span{background-color:rgba(0,0,0,0.0);-webkit-transition-delay:.2s;-moz-transition-delay:.2s;-o-transition-delay:.2s;transition-delay:.2s;} #main-nav-check:checked ~ #main .main-header span:before{margin-top:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition-delay:0 .2s;-moz-transition-delay:0 .2s;-o-transition-delay:0 .2s;transition-delay:0 .2s;} #main-nav-check:checked ~ #main .main-header span:after{margin-top:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transition-delay:0 .2s;-moz-transition-delay:0 .2s;-o-transition-delay:0 .2s;transition-delay:0 .2s;} -.search-options{padding-left:12px;} /* http://www.cssflow.com/snippets/toggle-switches */ +.search-options{padding-left:12px;} .switch{position:relative;display:inline-block;height:26px;width:100px;margin-top:5px;background:rgba(0,0,0,0.25);border-radius:3px;-webkit-border-radius:3px;background-clip:padding-box;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.3), 0 1px rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.3), 0 1px rgba(255,255,255,0.1);} .switch-label{position:relative;z-index:2;float:left;width:48px;line-height:26px;font-size:11px;color:rgba(255,255,255,0.35);text-align:center;text-shadow:0 1px 1px rgba(0,0,0,0.45);cursor:pointer;} .switch-label:active{font-weight:700;} @@ -52,8 +52,8 @@ a{text-decoration:none;} .switch-selection-right{left:50px;} /* separated from next line or IE ignores it */ .switch-input:checked + .switch-label-on ~ .switch-selection{left:50px;} /* tipsy */ -.tipsy{font-size:10px;position:absolute;z-index:100000;padding:5px;} -.tipsy-inner{background-color:#000;color:#FFF;max-width:200px;text-align:center;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;padding:5px 8px 4px;} +.tipsy{font-size:12px;position:absolute;z-index:100000;padding:5px;} +.tipsy-inner{background-color:#000;color:#FFF;max-width:250px;text-align:center;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;padding:5px 8px 4px;} .tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000;} .tipsy-arrow-n{border-bottom-color:#000;} .tipsy-arrow-s{border-top-color:#000;} diff --git a/docs/index.html b/docs/index.html index d509f8c8..d2308626 100644 --- a/docs/index.html +++ b/docs/index.html @@ -88,7 +88,7 @@
-

If you would like to contribute, fork a copy on github.

-

Some basic unit testing has been added. If you would like to add more or report a problem, please use the appropriate link above (v2.6).

+

Some basic unit testing has been added (v2.6). If you would like to add more or report a problem, please use the appropriate link above.

Support is also available from stackoverflow.

@@ -3954,9 +3954,20 @@ $.tablesorter.addHeaderResizeEvent( table, true );

Written by Christian Bach.

Documentation written by Brian Ghidinelli, - based on Mike Alsup's great documention.
+ based on Mike Alsup's great documention. +

+

Additional & Missing documentation, alphanumeric sort, numerous widgets, unit testing and other changes added by Mottie.

+

+ Thanks to all that have contributed code, comments, feedback and everything else. A special thanks goes out to: +

+

John Resig for the fantastic jQuery

diff --git a/docs/js/search.js b/docs/js/search.js index 85f47cd3..b8ef1fff 100644 --- a/docs/js/search.js +++ b/docs/js/search.js @@ -144,6 +144,7 @@ jQuery(function($){ $('.tooltip-top').tipsy({ gravity: 's' }); $('.tooltip-edge-left').tipsy({ gravity: 'nw' }); $('.tooltip-edge-right').tipsy({ gravity: 'ne' }); + $('.tooltip-right').tipsy({ gravity: 'w' }); $('.status').tipsy({ gravity: 's', opacity: 1, diff --git a/js/jquery.tablesorter.js b/js/jquery.tablesorter.js index 6e5d4b3b..8147aef5 100644 --- a/js/jquery.tablesorter.js +++ b/js/jquery.tablesorter.js @@ -1,5 +1,5 @@ /**! -* TableSorter 2.13.3 - Client-side table sorting with ease! +* TableSorter 2.14.0 - Client-side table sorting with ease! * @requires jQuery v1.2.6+ * * Copyright (c) 2007 Christian Bach @@ -24,7 +24,7 @@ var ts = this; - ts.version = "2.13.3"; + ts.version = "2.14.0"; ts.parsers = []; ts.widgets = []; @@ -641,7 +641,7 @@ // sort multiple columns function multisort(table) { /*jshint loopfunc:true */ - var i, k, e, num, col, colMax, cache, lc, + var i, k, num, col, colMax, cache, lc, order, orgOrderCol, sortTime, sort, x, y, dir = 0, c = table.config, diff --git a/js/jquery.tablesorter.min.js b/js/jquery.tablesorter.min.js index 1aba2c1c..e595e38e 100644 --- a/js/jquery.tablesorter.min.js +++ b/js/jquery.tablesorter.min.js @@ -1,5 +1,5 @@ /*! -* TableSorter 2.13.3 min - Client-side table sorting with ease! +* TableSorter 2.14.0 min - Client-side table sorting with ease! * Copyright (c) 2007 Christian Bach */ -!(function(f){f.extend({tablesorter:new function(){function c(){var a=1
':"";m.$headers=f(a).find(m.selectorHeaders).each(function(a){h=f(this);d=m.headers[a];m.headerContent[a]=f(this).html(); k=m.headerTemplate.replace(/\{content\}/g,f(this).html()).replace(/\{icon\}/g,g);m.onRenderTemplate&&(x=m.onRenderTemplate.apply(h,[a,k]))&&"string"===typeof x&&(k=x);f(this).html('
'+k+"
");m.onRenderHeader&&m.onRenderHeader.apply(h,[a]);this.column=b[this.parentNode.rowIndex+"-"+this.cellIndex];var c=e.getData(h,d,"sortInitialOrder")||m.sortInitialOrder;this.order=/^d/i.test(c)||1===c?[1,0,2]:[0,1,2];this.count=-1;this.lockedOrder=!1;q=e.getData(h,d,"lockedOrder")|| !1;"undefined"!==typeof q&&!1!==q&&(this.order=this.lockedOrder=/^d/i.test(q)||1===q?[1,1,1]:[0,0,0]);h.addClass(e.css.header+" "+m.cssHeader);m.headerList[a]=this;h.parent().addClass(e.css.headerRow+" "+m.cssHeaderRow);h.attr("tabindex",0)});D(a);m.debug&&(n("Built headers:",r),c(m.$headers))}function F(a,b,d){var h=a.config;h.$table.find(h.selectorRemove).remove();w(a);z(a);G(h.$table,b,d)}function D(a){var b,d=a.config;d.$headers.each(function(a,c){b="false"===e.getData(c,d.headers[a],"sorter"); c.sortDisabled=b;f(c)[b?"addClass":"removeClass"]("sorter-false")})}function H(a){var b,d,h,c=a.config,g=c.sortList,k=[e.css.sortAsc+" "+c.cssAsc,e.css.sortDesc+" "+c.cssDesc],q=f(a).find("tfoot tr").children().removeClass(k.join(" "));c.$headers.removeClass(k.join(" "));h=g.length;for(b=0;b"),d=f(a).width();f(a.tBodies[0]).find("tr:first").children("td:visible").each(function(){b.append(f("").css("width",parseInt(f(this).width()/d*1E3,10)/10+"%"))});f(a).prepend(b)}}function M(a,b){var d,h,c,g=a.config,k=b||g.sortList;g.sortList=[];f.each(k,function(a,b){d=[parseInt(b[0],10),parseInt(b[1],10)];if(c=g.$headers[d[0]])g.sortList.push(d),h=f.inArray(d[1], c.order),c.count=0<=h?h:d[1]%(g.sortReset?3:2)})}function N(a,b,d){var h,c,g,k=a.config,q=!d[k.sortMultiSortKey],l=f(a);l.trigger("sortStart",a);b.count=d[k.sortResetKey]?2:(b.count+1)%(k.sortReset?3:2);k.sortRestart&&(c=b,k.$headers.each(function(){this===c||!q&&f(this).is("."+e.css.sortDesc+",."+e.css.sortAsc)||(this.count=-1)}));c=b.column;if(q){k.sortList=[];if(null!==k.sortForce)for(h=k.sortForce,d=0;dh&&(k.sortList.push([c, h]),1h&&(k.sortList.push([c,h]),1 thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]}; e.css={table:"tablesorter",childRow:"tablesorter-childRow",header:"tablesorter-header",headerRow:"tablesorter-headerRow",icon:"tablesorter-icon",info:"tablesorter-infoOnly",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc"};e.log=c;e.benchmark=n;e.construct=function(a){return this.each(function(){var b=f.extend(!0,{},e.defaults,a);!this.hasInitialized&&e.buildTable&&"TABLE"!==this.tagName&&e.buildTable(this,b);e.setup(this,b)})};e.setup=function(a, b){if(!a||!a.tHead||0===a.tBodies.length||!0===a.hasInitialized)return b.debug?c("stopping initialization! No table, thead, tbody or tablesorter has already been initialized"):"";var d="",h=f(a),l=f.metadata;a.hasInitialized=!1;a.isProcessing=!0;a.config=b;f.data(a,"tablesorter",b);b.debug&&f.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===f("x")[0].textContent;b.supportsDataObject=function(a){a[0]=parseInt(a[0],10);return 1'),d=f.fn.detach?b.detach():b.remove();d=f(a).find("span.tablesorter-savemyplace"); b.insertAfter(d);d.remove();a.isProcessing=!1};e.clearTableBody=function(a){f(a)[0].config.$tbodies.empty()};e.restoreHeaders=function(a){var b=a.config;b.$table.find(b.selectorHeaders).each(function(a){f(this).find(".tablesorter-header-inner").length&&f(this).html(b.headerContent[a])})};e.destroy=function(a,b,d){a=f(a)[0];if(a.hasInitialized){e.refreshWidgets(a,!0,!0);var c=f(a),l=a.config,g=c.find("thead:first"),k=g.find("tr."+e.css.headerRow).removeClass(e.css.headerRow+" "+l.cssHeaderRow),n=c.find("tfoot:first > tr").children("th, td"); g.find("tr").not(k).remove();c.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(".tablesorter "));l.$headers.add(n).removeClass([e.css.header,l.cssHeader,l.cssAsc,l.cssDesc,e.css.sortAsc,e.css.sortDesc].join(" ")).removeAttr("data-column");k.find(l.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter keypress.tablesorter"); e.restoreHeaders(a);!1!==b&&c.removeClass(e.css.table+" "+l.tableClass+" tablesorter-"+l.theme);a.hasInitialized=!1;"function"===typeof d&&d(a)}};e.regex={chunk:/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,hex:/^0x[0-9a-f]+$/i};e.sortNatural=function(a,b){if(a===b)return 0;var d,c,f,g,k,l;c=e.regex;if(c.hex.test(b)){d=parseInt(a.match(c.hex),16);f=parseInt(b.match(c.hex),16);if(df)return 1}d=a.replace(c.chunk,"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/, "").split("\\0");c=b.replace(c.chunk,"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");l=Math.max(d.length,c.length);for(k=0;kg)return 1}return 0};e.sortText=function(a,b){return a>b?1:af.inArray(k[h].id,g))&&(l.debug&& c("Refeshing widgets: Removing "+k[h].id),k[h].hasOwnProperty("remove")&&(k[h].remove(a,l,l.widgetOptions),l.widgetInit[k[h].id]=!1));!0!==d&&e.applyWidget(a,b)};e.getData=function(a,b,c){var e="";a=f(a);var l,g;if(!a.length)return"";l=f.metadata?a.metadata():!1;g=" "+(a.attr("class")||"");"undefined"!==typeof a.data(c)||"undefined"!==typeof a.data(c.toLowerCase())?e+=a.data(c)||a.data(c.toLowerCase()):l&&"undefined"!==typeof l[c]?e+=l[c]:b&&"undefined"!==typeof b[c]?e+=b[c]:" "!==g&&g.match(" "+ c+"-")&&(e=g.match(RegExp("\\s"+c+"-([\\w-]+)"))[1]||"");return f.trim(e)};e.formatFloat=function(a,b){if("string"!==typeof a||""===a)return a;var c;a=(b&&b.config?!1!==b.config.usNumberFormat:"undefined"!==typeof b?b:1)?a.replace(/,/g,""):a.replace(/[\s|\.]/g,"").replace(/,/g,".");/^\s*\([.\d]+\)/.test(a)&&(a=a.replace(/^\s*\(([.\d]+)\)/,"-$1"));c=parseFloat(a);return isNaN(c)?f.trim(a):c};e.isDigit=function(a){return isNaN(a)?/^[\-+(]?\d+[)]?$/.test(a.toString().replace(/[,.'"\s]/g,"")):!0}}}); var p=f.tablesorter;f.fn.extend({tablesorter:p.construct});p.addParser({id:"text",is:function(){return!0},format:function(c,n){var l=n.config;c&&(c=f.trim(l.ignoreCase?c.toLocaleLowerCase():c),c=l.sortLocaleCompare?p.replaceAccents(c):c);return c},type:"text"});p.addParser({id:"digit",is:function(c){return p.isDigit(c)},format:function(c,n){var l=p.formatFloat((c||"").replace(/[^\w,. \-()]/g,""),n);return c&&"number"===typeof l?l:c?f.trim(c&&n.config.ignoreCase?c.toLocaleLowerCase():c):c},type:"numeric"}); p.addParser({id:"currency",is:function(c){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((c||"").replace(/[,. ]/g,""))},format:function(c,n){var l=p.formatFloat((c||"").replace(/[^\w,. \-()]/g,""),n);return c&&"number"===typeof l?l:c?f.trim(c&&n.config.ignoreCase?c.toLocaleLowerCase():c):c},type:"numeric"});p.addParser({id:"ipAddress",is:function(c){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(c)},format:function(c,f){var l,u=c?c.split("."): "",w="",z=u.length;for(l=0;lc.length},format:function(c,f){return c?p.formatFloat(c.replace(/%/g,""),f):c},type:"numeric"});p.addParser({id:"usLongDate",is:function(c){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(c)||/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(c)},format:function(c,f){return c?p.formatFloat((new Date(c.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",f):c},type:"numeric"});p.addParser({id:"shortDate",is:function(c){return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((c|| "").replace(/\s+/g," ").replace(/[\-.,]/g,"/"))},format:function(c,f,l,u){if(c){l=f.config;var w=l.headerList[u];u=w.dateFormat||p.getData(w,l.headers[u],"dateFormat")||l.dateFormat;c=c.replace(/\s+/g," ").replace(/[\-.,]/g,"/");"mmddyyyy"===u?c=c.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===u?c=c.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===u&&(c=c.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3"))}return c?p.formatFloat((new Date(c)).getTime()|| "",f):c},type:"numeric"});p.addParser({id:"time",is:function(c){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(c)},format:function(c,f){return c?p.formatFloat((new Date("2000/01/01 "+c.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",f):c},type:"numeric"});p.addParser({id:"metadata",is:function(){return!1},format:function(c,n,l){c=n.config;c=c.parserMetadataName?c.parserMetadataName:"sortValue";return f(l).metadata()[c]},type:"numeric"});p.addWidget({id:"zebra",priority:90,format:function(c, n,l){var u,w,z,B,E,C,F=RegExp(n.cssChildRow,"i"),D=n.$tbodies;n.debug&&(E=new Date);for(c=0;c':"";m.$headers=g(a).find(m.selectorHeaders).each(function(a){h= g(this);d=m.headers[a];m.headerContent[a]=g(this).html();l=m.headerTemplate.replace(/\{content\}/g,g(this).html()).replace(/\{icon\}/g,n);m.onRenderTemplate&&(e=m.onRenderTemplate.apply(h,[a,l]))&&"string"===typeof e&&(l=e);g(this).html('
'+l+"
");m.onRenderHeader&&m.onRenderHeader.apply(h,[a]);this.column=b[this.parentNode.rowIndex+"-"+this.cellIndex];this.order=B(f.getData(h,d,"sortInitialOrder")||m.sortInitialOrder)?[1,0,2]:[0,1,2];this.count=-1;this.lockedOrder= !1;v=f.getData(h,d,"lockedOrder")||!1;"undefined"!==typeof v&&!1!==v&&(this.order=this.lockedOrder=B(v)?[1,1,1]:[0,0,0]);h.addClass(f.css.header+" "+m.cssHeader);m.headerList[a]=this;h.parent().addClass(f.css.headerRow+" "+m.cssHeaderRow);m.tabIndex&&h.attr("tabindex",0)});I(a);m.debug&&(q("Built headers:",k),c(m.$headers))}function C(a,b,d){var h=a.config;h.$table.find(h.selectorRemove).remove();s(a);w(a);F(h.$table,b,d)}function I(a){var b,d=a.config;d.$headers.each(function(a,e){b="false"===f.getData(e, d.headers[a],"sorter");e.sortDisabled=b;g(e)[b?"addClass":"removeClass"]("sorter-false")})}function G(a){var b,d,h,e=a.config,n=e.sortList,c=[f.css.sortAsc+" "+e.cssAsc,f.css.sortDesc+" "+e.cssDesc],v=g(a).find("tfoot tr").children().removeClass(c.join(" "));e.$headers.removeClass(c.join(" "));h=n.length;for(b=0;b"),d=g(a).width();g(a.tBodies[0]).find("tr:first").children("td:visible").each(function(){b.append(g("").css("width",parseInt(g(this).width()/d*1E3,10)/10+"%"))});g(a).prepend(b)}}function M(a,b){var d,h,e,n=a.config,c=b||n.sortList;n.sortList=[];g.each(c,function(a,b){d=[parseInt(b[0],10),parseInt(b[1],10)];if(e=n.$headers[d[0]])n.sortList.push(d), h=g.inArray(d[1],e.order),e.count=0<=h?h:d[1]%(n.sortReset?3:2)})}function N(a,b){return a&&a[b]?a[b].type||"":""}function O(a,b,d){var h,e,n,c=a.config,v=!d[c.sortMultiSortKey],k=g(a);k.trigger("sortStart",a);b.count=d[c.sortResetKey]?2:(b.count+1)%(c.sortReset?3:2);c.sortRestart&&(e=b,c.$headers.each(function(){this===e||!v&&g(this).is("."+f.css.sortDesc+",."+f.css.sortAsc)||(this.count=-1)}));e=b.column;if(v){c.sortList=[];if(null!==c.sortForce)for(h=c.sortForce,d=0;dh&&(c.sortList.push([e,h]),1h&&(c.sortList.push([e,h]),1 thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[], empties:{},strings:{},parsers:[]};f.css={table:"tablesorter",childRow:"tablesorter-childRow",header:"tablesorter-header",headerRow:"tablesorter-headerRow",icon:"tablesorter-icon",info:"tablesorter-infoOnly",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc"};f.log=c;f.benchmark=q;f.construct=function(a){return this.each(function(){var b=g.extend(!0,{},f.defaults,a);!this.hasInitialized&&f.buildTable&&"TABLE"!==this.tagName&&f.buildTable(this,b);f.setup(this, b)})};f.setup=function(a,b){if(!a||!a.tHead||0===a.tBodies.length||!0===a.hasInitialized)return b.debug?c("stopping initialization! No table, thead, tbody or tablesorter has already been initialized"):"";var d="",h=g(a),e=g.metadata;a.hasInitialized=!1;a.isProcessing=!0;a.config=b;g.data(a,"tablesorter",b);b.debug&&g.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===g("x")[0].textContent;b.supportsDataObject=function(a){a[0]=parseInt(a[0],10);return 1'),d=g.fn.detach? b.detach():b.remove();d=g(a).find("span.tablesorter-savemyplace");b.insertAfter(d);d.remove();a.isProcessing=!1};f.clearTableBody=function(a){g(a)[0].config.$tbodies.empty()};f.restoreHeaders=function(a){var b=a.config;b.$table.find(b.selectorHeaders).each(function(a){g(this).find(".tablesorter-header-inner").length&&g(this).html(b.headerContent[a])})};f.destroy=function(a,b,d){a=g(a)[0];if(a.hasInitialized){f.refreshWidgets(a,!0,!0);var c=g(a),e=a.config,n=c.find("thead:first"),l=n.find("tr."+f.css.headerRow).removeClass(f.css.headerRow+ " "+e.cssHeaderRow),k=c.find("tfoot:first > tr").children("th, td");n.find("tr").not(l).remove();c.removeData("tablesorter").unbind("sortReset update updateAll updateRows updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd ".split(" ").join(".tablesorter "));e.$headers.add(k).removeClass([f.css.header,e.cssHeader,e.cssAsc,e.cssDesc,f.css.sortAsc,f.css.sortDesc].join(" ")).removeAttr("data-column");l.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter keypress.tablesorter"); f.restoreHeaders(a);!1!==b&&c.removeClass(f.css.table+" "+e.tableClass+" tablesorter-"+e.theme);a.hasInitialized=!1;"function"===typeof d&&d(a)}};f.regex={chunk:/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,hex:/^0x[0-9a-f]+$/i};f.sortNatural=function(a,b){if(a===b)return 0;var d,c,e,g,l,k;c=f.regex;if(c.hex.test(b)){d=parseInt(a.match(c.hex),16);e=parseInt(b.match(c.hex),16);if(de)return 1}d=a.replace(c.chunk,"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/, "").split("\\0");c=b.replace(c.chunk,"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");k=Math.max(d.length,c.length);for(l=0;lg)return 1}return 0};f.sortNaturalAsc=function(a,b,d,c,e){if(a===b)return 0;d=e.string[e.empties[d]||e.emptyTo];return""===a&&0!==d?"boolean"===typeof d?d?-1:1:-d||-1:""=== b&&0!==d?"boolean"===typeof d?d?1:-1:d||1:f.sortNatural(a,b)};f.sortNaturalDesc=function(a,b,d,c,e){if(a===b)return 0;d=e.string[e.empties[d]||e.emptyTo];return""===a&&0!==d?"boolean"===typeof d?d?-1:1:d||1:""===b&&0!==d?"boolean"===typeof d?d?1:-1:-d||-1:f.sortNatural(b,a)};f.sortText=function(a,b){return a>b?1:ag.inArray(l[h].id,k))&&(e.debug&&c("Refeshing widgets: Removing "+l[h].id),l[h].hasOwnProperty("remove")&&(l[h].remove(a,e,e.widgetOptions), e.widgetInit[l[h].id]=!1));!0!==d&&f.applyWidget(a,b)};f.getData=function(a,b,d){var c="";a=g(a);var e,f;if(!a.length)return"";e=g.metadata?a.metadata():!1;f=" "+(a.attr("class")||"");"undefined"!==typeof a.data(d)||"undefined"!==typeof a.data(d.toLowerCase())?c+=a.data(d)||a.data(d.toLowerCase()):e&&"undefined"!==typeof e[d]?c+=e[d]:b&&"undefined"!==typeof b[d]?c+=b[d]:" "!==f&&f.match(" "+d+"-")&&(c=f.match(RegExp("\\s"+d+"-([\\w-]+)"))[1]||"");return g.trim(c)};f.formatFloat=function(a,b){if("string"!== typeof a||""===a)return a;var c;a=(b&&b.config?!1!==b.config.usNumberFormat:"undefined"!==typeof b?b:1)?a.replace(/,/g,""):a.replace(/[\s|\.]/g,"").replace(/,/g,".");/^\s*\([.\d]+\)/.test(a)&&(a=a.replace(/^\s*\(([.\d]+)\)/,"-$1"));c=parseFloat(a);return isNaN(c)?g.trim(a):c};f.isDigit=function(a){return isNaN(a)?/^[\-+(]?\d+[)]?$/.test(a.toString().replace(/[,.'"\s]/g,"")):!0}}});var p=g.tablesorter;g.fn.extend({tablesorter:p.construct});p.addParser({id:"text",is:function(){return!0},format:function(c, q){var k=q.config;c&&(c=g.trim(k.ignoreCase?c.toLocaleLowerCase():c),c=k.sortLocaleCompare?p.replaceAccents(c):c);return c},type:"text"});p.addParser({id:"digit",is:function(c){return p.isDigit(c)},format:function(c,q){var k=p.formatFloat((c||"").replace(/[^\w,. \-()]/g,""),q);return c&&"number"===typeof k?k:c?g.trim(c&&q.config.ignoreCase?c.toLocaleLowerCase():c):c},type:"numeric"});p.addParser({id:"currency",is:function(c){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((c|| "").replace(/[,. ]/g,""))},format:function(c,q){var k=p.formatFloat((c||"").replace(/[^\w,. \-()]/g,""),q);return c&&"number"===typeof k?k:c?g.trim(c&&q.config.ignoreCase?c.toLocaleLowerCase():c):c},type:"numeric"});p.addParser({id:"ipAddress",is:function(c){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(c)},format:function(c,g){var k,t=c?c.split("."):"",s="",w=t.length;for(k=0;kc.length},format:function(c,g){return c?p.formatFloat(c.replace(/%/g,""),g):c},type:"numeric"});p.addParser({id:"usLongDate", is:function(c){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(c)||/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(c)},format:function(c,g){return c?p.formatFloat((new Date(c.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",g):c},type:"numeric"});p.addParser({id:"shortDate",is:function(c){return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((c||"").replace(/\s+/g," ").replace(/[\-.,]/g,"/"))},format:function(c,g,k,t){if(c){k=g.config; var s=k.headerList[t];t=s.dateFormat||p.getData(s,k.headers[t],"dateFormat")||k.dateFormat;c=c.replace(/\s+/g," ").replace(/[\-.,]/g,"/");"mmddyyyy"===t?c=c.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===t?c=c.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===t&&(c=c.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3"))}return c?p.formatFloat((new Date(c)).getTime()||"",g):c},type:"numeric"});p.addParser({id:"time",is:function(c){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(c)}, format:function(c,g){return c?p.formatFloat((new Date("2000/01/01 "+c.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",g):c},type:"numeric"});p.addParser({id:"metadata",is:function(){return!1},format:function(c,p,k){c=p.config;c=c.parserMetadataName?c.parserMetadataName:"sortValue";return g(k).metadata()[c]},type:"numeric"});p.addWidget({id:"zebra",priority:90,format:function(c,q,k){var t,s,w,z,D,B,E=RegExp(q.cssChildRow,"i"),C=q.$tbodies;q.debug&&(D=new Date);for(c=0;c'),a.cssIcon&&p.find("."+e.css.icon).addClass(k.icons),q.hasClass("hasFilters")&&p.find(".tablesorter-filter-row").addClass(k.filterRow));l.each(p,function(a){g=l(this);h=e.css.icon?g.find("."+e.css.icon):g;this.sortDisabled?(g.removeClass(r),h.removeClass(r+" tablesorter-icon "+k.icons)):(n=q.hasClass("hasStickyHeaders")?q.find(x).find("th").eq(a).add(g):g,f= g.hasClass(e.css.sortAsc)?k.sortAsc:g.hasClass(e.css.sortDesc)?k.sortDesc:g.hasClass(e.css.header)?k.sortNone:"",g[f===k.sortNone?"removeClass":"addClass"](k.active),h.removeClass(r).addClass(f))});a.debug&&e.benchmark("Applying "+m+" theme",d)},remove:function(b,a,c){b=a.$table;a="object"===typeof c.uitheme?"jui":c.uitheme||"jui";c="object"===typeof c.uitheme?c.uitheme:e.themes[e.themes.hasOwnProperty(a)?a:"jui"];var d=b.children("thead").children(),f=c.sortNone+" "+c.sortDesc+" "+c.sortAsc;b.removeClass("tablesorter-"+ a+" "+c.table).find(e.css.header).removeClass(c.header);d.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(c.hover+" "+f+" "+c.active).find(".tablesorter-filter-row").removeClass(c.filterRow);d.find(".tablesorter-icon").removeClass(c.icons)}}); -e.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(b,a,c){var d,f,g,h,n,q,m,k,p,x=a.$table,r=a.$tbodies,s=a.sortList,u=s.length,w=a.widgetColumns&&a.widgetColumns.hasOwnProperty("css")?a.widgetColumns.css|| w:c&&c.hasOwnProperty("columns")?c.columns||w:w;q=w.length-1;m=w.join(" ");a.debug&&(n=new Date);for(p=0;p=]/g},types:{regex:function(b,a,c,d){if(e.filter.regex.regex.test(a)){var f;b=e.filter.regex.regex.exec(a);try{f=RegExp(b[1],b[2]).test(d)}catch(g){f=!1}return f}return null},exact:function(b,a,c,d){return a.replace(e.filter.regex.exact,"")==d?!0:null},notMatch:function(b,a,c,d,f,e,h,n){return/^\!/.test(a)? (a=a.replace("!",""),b=d.search(l.trim(a)),""===a?!0:!(n.filter_startsWith?0===b:0<=b)):null},operators:function(b,a,c,d,f,g,h,l,q){if(/^[<>]=?/.test(a)){var m,k;m=h.config;b=e.formatFloat(a.replace(e.filter.regex.operators,""),h);c=m.parsers[g];l=b;if(q[g]||"numeric"===c.type)m=c.format(""+a.replace(e.filter.regex.operators,""),h,m.$headers.eq(g),g),b="number"!==typeof b||""===m||isNaN(m)?b:m;m=!q[g]&&"numeric"!==c.type||isNaN(b)||!f?isNaN(d)?e.formatFloat(d.replace(e.filter.regex.nondigit,""),h): e.formatFloat(d,h):f;/>/.test(a)&&(k=/>=/.test(a)?m>=b:m>b);/m&&(a=l,l=m,m=a);return a>=l&&a<=m||""===l||""===m}return null},wild:function(b,a,c,d,f,e,h){return/[\?|\*]/.test(a)||/\s+OR\s+/.test(b)?(b=h.config,a=a.replace(/\s+OR\s+/gi, "|"),!b.$headers.filter('[data-column="'+e+'"]:last').hasClass("filter-match")&&/\|/.test(a)&&(a="^("+a+")$"),RegExp(a.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*")).test(d)):null},fuzzy:function(b,a,c,d){if(/^~/.test(a)){b=0;c=d.length;var f=a.slice(1);for(a=0;a'+(g.data("placeholder")||g.attr("data-placeholder")||"")+"":"",d+='");a.$table.find("thead").find('select.tablesorter-filter[data-column="'+h+'"]').append(d)}e.filter.buildDefault(b,!0);a.$table.find("select.tablesorter-filter").bind("change search",function(a,c){e.filter.checkFilters(b,c)});c.filter_hideFilters&&e.filter.hideFilters(b, a,c);a.showProcessing&&a.$table.bind("filterStart.tsfilter filterEnd.tsfilter",function(c,d){g=d?a.$table.find("."+e.css.header).filter("[data-column]").filter(function(){return""!==d[l(this).data("column")]}):"";e.isProcessing(b,"filterStart"===c.type,d?g:"")});a.debug&&e.benchmark("Applying Filter widget",q);a.$table.bind("tablesorter-initialized pagerInitialized",function(){n=e.filter.setDefaults(b,a,c)||[];n.length&&e.setFilters(b,n,!0)});c.filter_Initialized=!0;a.$table.trigger("filterInit"); e.filter.checkFilters(b)},setDefaults:function(b,a,c){var d,f=[],e=a.columns;for(d=0;d';for(b=0;b";a.$filters=l(f+"").appendTo(a.$table.find("thead").eq(0)).find("td");for(b=0;b").appendTo(a.$filters.eq(b)):(c.filter_formatter&&l.isFunction(c.filter_formatter[b])?((f=c.filter_formatter[b](a.$filters.eq(b),b))&&0===f.length&&(f=a.$filters.eq(b).children("input")),f&&(0===f.parent().length||f.parent().length&&f.parent()[0]!== a.$filters[b])&&a.$filters.eq(b).append(f)):f=l('').appendTo(a.$filters.eq(b)),f&&f.attr("placeholder",d.data("placeholder")||d.attr("data-placeholder")||"")),f&&(f.addClass("tablesorter-filter "+c.filter_cssFilter).attr("data-column",b),g&&(f.addClass("disabled")[0].disabled=!0))},bindSearch:function(b,a){b=l(b)[0];var c,d=b.config.widgetOptions;a.bind("keyup search",function(a,g){if(27===a.which)this.value="";else if("number"===typeof d.filter_liveSearch&&this.value.length< d.filter_liveSearch&&""!==this.value||"keyup"===a.type&&(32>a.which&&8!==a.which&&!0===d.filter_liveSearch&&13!==a.which||37<=a.which&&40>=a.which||13!==a.which&&!1===d.filter_liveSearch))return;c=l(this).hasClass("tablesorter-filter")?g:[l(this).val()];e.filter.searching(b,g,c)})},checkFilters:function(b,a){var c=b.config,d=c.widgetOptions,f=l.isArray(a),g=f?a:e.getFilters(b),h=(g||[]).join("");f&&e.setFilters(b,g);d.filter_hideFilters&&c.$table.find(".tablesorter-filter-row").trigger(""===h?"mouseleave": "mouseenter");if(c.lastCombinedFilter!==h||!1===a)if(c.$table.trigger("filterStart",[g]),c.showProcessing)setTimeout(function(){e.filter.findRows(b,g,h);return!1},30);else return e.filter.findRows(b,g,h),!1},hideFilters:function(b,a,c){var d,f,g;a.$table.find(".tablesorter-filter-row").addClass("hideme").bind("mouseenter mouseleave",function(a){d=l(this);clearTimeout(g);g=setTimeout(function(){/enter|over/.test(a.type)?d.removeClass("hideme"):l(document.activeElement).closest("tr")[0]!==d[0]&&""=== e.getFilters(b).join("")&&d.addClass("hideme")},200)}).find("input, select").bind("focus blur",function(a){f=l(this).closest("tr");clearTimeout(g);g=setTimeout(function(){if(""===e.getFilters(b).join(""))f["focus"===a.type?"removeClass":"addClass"]("hideme")},200)})},findRows:function(b,a,c){var d,f,g,h,n,q,m,k,p,x,r,s,u,w,y,A,B,C,z,E,v=b.config,t=v.widgetOptions,G=v.columns,D=v.$tbodies,H=["range","operators"],F=v.$headers.map(function(a){return e.getData?"parsed"===e.getData(v.$headers.filter('[data-column="'+ a+'"]:last'),v.headers[a],"filter"):l(this).hasClass("filter-parsed")}).get();v.debug&&(E=new Date);for(n=0;nH.indexOf(c))if(y=e(a[k],u,r,s,d,k,b,t,F),null!==y)return C=y,!1}),null!==C?A=C:(r=(s+x).indexOf(u),A=!t.filter_startsWith&&0<=r||t.filter_startsWith&&0===r));if(t.filter_anyMatch){if(z=A)break}else z=A?z:!1}g[h].style.display=z?"":"none";g.eq(h)[z?"removeClass":"addClass"](t.filter_filteredRow);if(p.length){if(v.pager&&v.pager.countChildRows||t.pager_countChildRows)p[z? "removeClass":"addClass"](t.filter_filteredRow);p.toggle(z)}}e.processTbody(b,q,!1)}v.lastCombinedFilter=c;v.lastSearch=a;v.$table.data("lastSearch",a);v.debug&&e.benchmark("Completed filter widget search",E);v.$table.trigger("applyWidgets");v.$table.trigger("filterEnd")},buildSelect:function(b,a,c,d){a=parseInt(a,10);var f,g,h;b=b.config;var n=b.widgetOptions,q=b.$tbodies,m=[],k=b.$headers.filter('[data-column="'+a+'"]:last'),p='";for(g=0;g"+m[d]+"":"";b.$table.find("thead").find('select.tablesorter-filter[data-column="'+a+'"]')[c?"html":"append"](p)},buildDefault:function(b,a){var c,d,f=b.config,g=f.widgetOptions,h=f.columns;for(c=0;cb.top&&eb.which&&8!==b.which||37<=b.which&&40>=b.which)){w=!0;b=l(this);var d=b.attr("data-column");a.$filters.find(".tablesorter-filter").eq(d).val(b.val()).trigger("search"); setTimeout(function(){w=!1},c.filter_searchDelay)}});d.trigger("stickyHeadersInit")}},remove:function(b,a,c){a.$table.removeClass("hasStickyHeaders").unbind("sortEnd.tsSticky pagerComplete.tsSticky").find(".tablesorter-stickyHeader").remove();c.$sticky&&c.$sticky.length&&c.$sticky.remove();l(".hasStickyHeaders").length||l(window).unbind("scroll.tsSticky resize.tsSticky");e.addHeaderResizeEvent(b,!1)}}); -e.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1},format:function(b, a,c){if(!a.$table.hasClass("hasResizable")){a.$table.addClass("hasResizable");var d,f,g,h,n={},q,m,k,p,x=a.$table,r=0,s=null,u=null,w=20>Math.abs(x.parent().width()-x.width()),y=function(){e.storage&&s&&(n[s.index()]=s.width(),n[u.index()]=u.width(),s.width(n[s.index()]),u.width(n[u.index()]),!1!==c.resizable&&e.storage(b,"tablesorter-resizable",n));r=0;s=u=null;l(window).trigger("resize")};if(n=e.storage&&!1!==c.resizable?e.storage(b,"tablesorter-resizable"):{})for(h in n)!isNaN(h)&&h');c.resizable_addLastColumn|| (q=q.slice(0,-1));m=m?m.add(q):q});m.each(function(){d=l(this);h=parseInt(d.css("padding-right"),10)+10;f='
';d.find(".tablesorter-wrapper").append(f)}).bind("mousemove.tsresize",function(a){0!==r&&s&&(k=a.pageX-r,p=s.width(),s.width(p+k),s.width()!==p&&w&&u.width(u.width()-k),r=a.pageX)}).bind("mouseup.tsresize",function(){y()}).find(".tablesorter-resizer,.tablesorter-resizer-grip").bind("mousedown", function(b){s=l(b.target).closest("th");f=a.$headers.filter('[data-column="'+s.attr("data-column")+'"]');1'),a.cssIcon&&m.find("."+e.css.icon).addClass(n.icons),q.hasClass("hasFilters")&& m.find(".tablesorter-filter-row").addClass(n.filterRow));l.each(m,function(){g=l(this);h=e.css.icon?g.find("."+e.css.icon):g;this.sortDisabled?(g.removeClass(u),h.removeClass(u+" tablesorter-icon "+n.icons)):(d=g.hasClass(e.css.sortAsc)?n.sortAsc:g.hasClass(e.css.sortDesc)?n.sortDesc:g.hasClass(e.css.header)?n.sortNone:"",g[d===n.sortNone?"removeClass":"addClass"](n.active),h.removeClass(u).addClass(d))});a.debug&&e.benchmark("Applying "+k+" theme",f)},remove:function(b,a,c){b=a.$table;a=a.theme|| "jui";c=e.themes[a]||e.themes.jui;var f=b.children("thead").children(),d=c.sortNone+" "+c.sortDesc+" "+c.sortAsc;b.removeClass("tablesorter-"+a+" "+c.table).find(e.css.header).removeClass(c.header);f.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(c.hover+" "+d+" "+c.active).find(".tablesorter-filter-row").removeClass(c.filterRow);f.find(".tablesorter-icon").removeClass(c.icons)}}); +e.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(b, a,c){var f,d,g,h,p,q,m,k,n=a.$table,u=a.$tbodies,r=a.sortList,w=r.length,v=c&&c.columns||["primary","secondary","tertiary"],x=v.length-1;m=v.join(" ");a.debug&&(f=new Date);for(g=0;g=]/g},types:{regex:function(b,a,c,f){if(e.filter.regex.regex.test(a)){var d;b=e.filter.regex.regex.exec(a);try{d=RegExp(b[1],b[2]).test(f)}catch(g){d=!1}return d}return null},exact:function(b,a,c,f){return a.replace(e.filter.regex.exact, "")==f?!0:null},notMatch:function(b,a,c,f,d,e,h,p){return/^\!/.test(a)?(a=a.replace("!",""),b=f.search(l.trim(a)),""===a?!0:!(p.filter_startsWith?0===b:0<=b)):null},operators:function(b,a,c,f,d,g,h,l,q){if(/^[<>]=?/.test(a)){var m,k;m=h.config;b=e.formatFloat(a.replace(e.filter.regex.operators,""),h);c=m.parsers[g];l=b;if(q[g]||"numeric"===c.type)m=c.format(""+a.replace(e.filter.regex.operators,""),h,m.$headers.eq(g),g),b="number"!==typeof b||""===m||isNaN(m)?b:m;m=!q[g]&&"numeric"!==c.type||isNaN(b)|| !d?isNaN(f)?e.formatFloat(f.replace(e.filter.regex.nondigit,""),h):e.formatFloat(f,h):d;/>/.test(a)&&(k=/>=/.test(a)?m>=b:m>b);/m&&(a=l,l=m,m=a);return a>=l&&a<=m||""===l|| ""===m}return null},wild:function(b,a,c,f,d,e,h){return/[\?|\*]/.test(a)||/\s+OR\s+/.test(b)?(b=h.config,a=a.replace(/\s+OR\s+/gi,"|"),!b.$headers.filter('[data-column="'+e+'"]:last').hasClass("filter-match")&&/\|/.test(a)&&(a="^("+a+")$"),RegExp(a.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*")).test(f)):null},fuzzy:function(b,a,c,f){if(/^~/.test(a)){b=0;c=f.length;var d=a.slice(1);for(a=0;a'+(g.data("placeholder")||g.attr("data-placeholder")||"")+"":"",f+='");a.$table.find("thead").find('select.tablesorter-filter[data-column="'+h+'"]').append(f)}e.filter.buildDefault(b, !0);a.$table.find("select.tablesorter-filter").bind("change search",function(a,c){e.filter.checkFilters(b,c)});c.filter_hideFilters&&e.filter.hideFilters(b,a,c);a.showProcessing&&a.$table.bind("filterStart.tsfilter filterEnd.tsfilter",function(c,d){g=d?a.$table.find("."+e.css.header).filter("[data-column]").filter(function(){return""!==d[l(this).data("column")]}):"";e.isProcessing(b,"filterStart"===c.type,d?g:"")});a.debug&&e.benchmark("Applying Filter widget",q);a.$table.bind("tablesorter-initialized pagerInitialized", function(){p=e.filter.setDefaults(b,a,c)||[];p.length&&e.setFilters(b,p,!0);e.filter.checkFilters(b,p)});c.filter_Initialized=!0;a.$table.trigger("filterInit")},setDefaults:function(b,a,c){var f,d=[],g=a.columns;c.filter_saveFilters&&e.storage&&(d=e.storage(b,"tablesorter-filters")||[],""===d.join("")&&(d=[]));if(!d.length)for(f=0;f';for(b=0;b";a.$filters=l(d+"").appendTo(a.$table.find("thead").eq(0)).find("td");for(b=0;b").appendTo(a.$filters.eq(b)):(c.filter_formatter&&l.isFunction(c.filter_formatter[b])?((d=c.filter_formatter[b](a.$filters.eq(b),b))&&0===d.length&&(d=a.$filters.eq(b).children("input")),d&&(0===d.parent().length||d.parent().length&&d.parent()[0]!==a.$filters[b])&&a.$filters.eq(b).append(d)):d=l('').appendTo(a.$filters.eq(b)),d&&d.attr("placeholder",f.data("placeholder")||f.attr("data-placeholder")||"")),d&&(d.addClass("tablesorter-filter "+c.filter_cssFilter).attr("data-column", b),g&&(d.addClass("disabled")[0].disabled=!0))},bindSearch:function(b,a){b=l(b)[0];var c,f=b.config.widgetOptions;a.unbind("keyup search").bind("keyup search",function(d,g){if(27===d.which)this.value="";else if("number"===typeof f.filter_liveSearch&&this.value.lengthd.which&&8!==d.which&&!0===f.filter_liveSearch&&13!==d.which||37<=d.which&&40>=d.which||13!==d.which&&!1===f.filter_liveSearch))return;l(this).hasClass("tablesorter-filter")? c=g:(c=[],a.each(function(){c[l(this).data("column")||0]=l(this).val()}));e.filter.searching(b,g,c)})},checkFilters:function(b,a){var c=b.config,f=c.widgetOptions,d=l.isArray(a),g=d?a:e.getFilters(b),h=(g||[]).join("");d&&e.setFilters(b,g);f.filter_hideFilters&&c.$table.find(".tablesorter-filter-row").trigger(""===h?"mouseleave":"mouseenter");if(c.lastCombinedFilter!==h||!1===a)if(c.$table.trigger("filterStart",[g]),c.showProcessing)setTimeout(function(){e.filter.findRows(b,g,h);return!1},30);else return e.filter.findRows(b, g,h),!1},hideFilters:function(b,a,c){var f,d,g;a.$table.find(".tablesorter-filter-row").addClass("hideme").bind("mouseenter mouseleave",function(a){f=l(this);clearTimeout(g);g=setTimeout(function(){/enter|over/.test(a.type)?f.removeClass("hideme"):l(document.activeElement).closest("tr")[0]!==f[0]&&""===e.getFilters(b).join("")&&f.addClass("hideme")},200)}).find("input, select").bind("focus blur",function(a){d=l(this).closest("tr");clearTimeout(g);g=setTimeout(function(){if(""===e.getFilters(b).join(""))d["focus"=== a.type?"removeClass":"addClass"]("hideme")},200)})},findRows:function(b,a,c){var f,d,g,h,p,q,m,k,n,u,r,w,v,x,A,z,B,C,y,E,t=b.config,s=t.widgetOptions,G=t.columns,D=t.$tbodies,H=["range","notMatch","operators"],F=t.$headers.map(function(a){return e.getData?"parsed"===e.getData(t.$headers.filter('[data-column="'+a+'"]:last'),t.headers[a],"filter"):l(this).hasClass("filter-parsed")}).get();t.debug&&(E=new Date);for(p=0;pH.indexOf(c))if(A= d(a[k],v,r,w,f,k,b,s,F),null!==A)return C=A,!1}),null!==C?z=C:(r=(w+u).indexOf(v),z=!s.filter_startsWith&&0<=r||s.filter_startsWith&&0===r));if(s.filter_anyMatch){if(y=z)break}else y=z?y:!1}g[h].style.display=y?"":"none";g.eq(h)[y?"removeClass":"addClass"](s.filter_filteredRow);if(n.length){if(t.pager&&t.pager.countChildRows||s.pager_countChildRows)n[y?"removeClass":"addClass"](s.filter_filteredRow);n.toggle(y)}}e.processTbody(b,q,!1)}t.lastCombinedFilter=c;t.lastSearch=a;t.$table.data("lastSearch", a);s.filter_saveFilters&&e.storage&&e.storage(b,"tablesorter-filters",a);t.debug&&e.benchmark("Completed filter widget search",E);t.$table.trigger("applyWidgets");t.$table.trigger("filterEnd")},buildSelect:function(b,a,c,f){a=parseInt(a,10);var d,g,h;b=b.config;var p=b.widgetOptions,q=b.$tbodies,m=[],k=b.$headers.filter('[data-column="'+a+'"]:last'),n='";for(g=0;g"+m[f]+"":"";b.$table.find("thead").find('select.tablesorter-filter[data-column="'+a+'"]')[c?"html":"append"](n)},buildDefault:function(b,a){var c,f,d=b.config,g=d.widgetOptions,h=d.columns;for(c=0;cb.top&&eb.which&&8!==b.which||37<=b.which&&40>=b.which)){x=!0;b=l(this);var d=b.attr("data-column");a.$filters.find(".tablesorter-filter").eq(d).val(b.val()).trigger("search");setTimeout(function(){x=!1},c.filter_searchDelay)}});d.trigger("stickyHeadersInit")}},remove:function(b,a,c){a.$table.removeClass("hasStickyHeaders").unbind("sortEnd.tsSticky pagerComplete.tsSticky").find(".tablesorter-stickyHeader").remove();c.$sticky&&c.$sticky.length&& c.$sticky.remove();l(".hasStickyHeaders").length||l(window).unbind("scroll.tsSticky resize.tsSticky");e.addHeaderResizeEvent(b,!1)}}); +e.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1},format:function(b,a,c){if(!a.$table.hasClass("hasResizable")){a.$table.addClass("hasResizable");var f,d,g,h,p={},q=a.$table,m=0,k=null,n=null,u=20>Math.abs(q.parent().width()-q.width()),r=function(){e.storage&&k&&(p[k.index()]=k.width(),p[n.index()]=n.width(),k.width(p[k.index()]), n.width(p[n.index()]),!1!==c.resizable&&e.storage(b,"tablesorter-resizable",p));m=0;k=n=null;l(window).trigger("resize")};if(p=e.storage&&!1!==c.resizable?e.storage(b,"tablesorter-resizable"):{})for(h in p)!isNaN(h)&&h');c.resizable_addLastColumn||(g=g.slice(0,-1));d=d?d.add(g):g});d.each(function(){var a=l(this),b=parseInt(a.css("padding-right"),10)+10;a.find(".tablesorter-wrapper").append('
')}).bind("mousemove.tsresize", function(a){if(0!==m&&k){var b=a.pageX-m,c=k.width();k.width(c+b);k.width()!==c&&u&&n.width(n.width()-b);m=a.pageX}}).bind("mouseup.tsresize",function(){r()}).find(".tablesorter-resizer,.tablesorter-resizer-grip").bind("mousedown",function(b){k=l(b.target).closest("th");var c=a.$headers.filter('[data-column="'+k.attr("data-column")+'"]');1