jquery-tablesorter 1.16.2 → 1.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/jquery-tablesorter/version.rb +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.js +8 -6
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +30 -20
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +343 -193
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js +4 -4
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-build-table.js +3 -2
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js +2 -2
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +26 -23
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +2 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-pager.js +11 -5
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +277 -139
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +543 -220
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +3 -10
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-storage.js +28 -15
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +7 -4
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.black-ice.css +5 -4
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.blue.css +8 -5
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap.css +5 -4
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap_2.css +6 -5
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.dark.css +6 -5
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.default.css +6 -5
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.dropbox.css +5 -5
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.green.css +13 -8
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.grey.css +8 -5
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.ice.css +16 -9
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.jui.css +4 -3
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.metro-dark.css +5 -4
- metadata +3 -3
| @@ -1,5 +1,5 @@ | |
| 1 | 
            -
            /*! input & select  | 
| 2 | 
            -
             *  | 
| 1 | 
            +
            /*! parser: input & select - updated 3/26/2015 (v2.21.3) *//*
         | 
| 2 | 
            +
             * for jQuery 1.7+ & tablesorter 2.7.11+
         | 
| 3 3 | 
             
             * Demo: http://mottie.github.com/tablesorter/docs/example-widget-grouping.html
         | 
| 4 4 | 
             
             */
         | 
| 5 5 | 
             
            /*jshint browser: true, jquery:true, unused:false */
         | 
| @@ -111,7 +111,7 @@ | |
| 111 111 | 
             
            			// bind to .tablesorter (default class name)
         | 
| 112 112 | 
             
            			$(this).children('tbody')
         | 
| 113 113 | 
             
            			.on('mouseleave', function(e){
         | 
| 114 | 
            -
            				restoreValue(e.target. | 
| 114 | 
            +
            				restoreValue(e.target.nodeName === 'TBODY');
         | 
| 115 115 | 
             
            			})
         | 
| 116 116 | 
             
            			.on('focus', 'select, input, textarea', function(){
         | 
| 117 117 | 
             
            				$(this).data('ts-original-value', this.value);
         | 
| @@ -129,7 +129,7 @@ | |
| 129 129 | 
             
            				}
         | 
| 130 130 | 
             
            				// Update cell cache using... select: change, input: enter or textarea: alt + enter
         | 
| 131 131 | 
             
            				if ( ( e.type === 'change' ) ||
         | 
| 132 | 
            -
            					( e.type === 'keyup' && e.which === 13 && ( e.target. | 
| 132 | 
            +
            					( e.type === 'keyup' && e.which === 13 && ( e.target.nodeName === 'INPUT' || e.target.nodeName === 'TEXTAREA' && e.altKey ) ) ) {
         | 
| 133 133 | 
             
            					var undef,
         | 
| 134 134 | 
             
            						$tar = $(e.target),
         | 
| 135 135 | 
             
            						$cell = $tar.closest('td'),
         | 
| @@ -1,4 +1,5 @@ | |
| 1 | 
            -
            /*! Build Table  | 
| 1 | 
            +
            /*! Widget: Build Table - updated 3/26/2015 (v2.21.3) *//*
         | 
| 2 | 
            +
             * for tableSorter v2.16.0+
         | 
| 2 3 | 
             
             * by Rob Garrison
         | 
| 3 4 | 
             
             */
         | 
| 4 5 | 
             
            /*jshint browser:true, jquery:true, unused:false */
         | 
| @@ -12,7 +13,7 @@ var ts = $.tablesorter = $.tablesorter || {}, | |
| 12 13 | 
             
            	// data.rows contains an array of rows which contains an array of cells
         | 
| 13 14 | 
             
            	bt = ts.buildTable = function(tar, c){
         | 
| 14 15 | 
             
            		// add table if one doesn't exist
         | 
| 15 | 
            -
            		var $tbl = tar. | 
| 16 | 
            +
            		var $tbl = tar.nodeName === 'TABLE' ? $(tar) : $('<table>').appendTo(tar),
         | 
| 16 17 | 
             
            			table = $tbl[0],
         | 
| 17 18 | 
             
            			wo = c.widgetOptions = $.extend( true, {}, bt.defaults, c.widgetOptions ),
         | 
| 18 19 | 
             
            			p = wo.build_processing,
         | 
    
        data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            /*! Filter  | 
| 1 | 
            +
            /*! Widget: Filter formatter function select2 - updated 3/26/2015 (v2.21.3) *//*
         | 
| 2 2 | 
             
             * requires: jQuery 1.7.2+, tableSorter (FORK) 2.16+, filter widget 2.16+ and select2 v3.4.6+ plugin
         | 
| 3 3 | 
             
             */
         | 
| 4 4 | 
             
            /*jshint browser:true, jquery:true, unused:false */
         | 
| @@ -52,7 +52,7 @@ ts.filterFormatter.select2 = function($cell, indx, select2Def) { | |
| 52 52 | 
             
            			v = v.join('\u0000');
         | 
| 53 53 | 
             
            		}
         | 
| 54 54 | 
             
            		// escape special regex characters (http://stackoverflow.com/a/9310752/145346)
         | 
| 55 | 
            -
            		v = v.replace(/[-[\]{}() | 
| 55 | 
            +
            		v = v.replace(/[-[\]{}()*+?.,/\\^$|#\s]/g, '\\$&');
         | 
| 56 56 | 
             
            		// convert string back into an array
         | 
| 57 57 | 
             
            		if (arry) {
         | 
| 58 58 | 
             
            			v = v.split('\u0000');
         | 
| @@ -1,14 +1,17 @@ | |
| 1 | 
            -
            /*! Widget: filter - updated 3/ | 
| 1 | 
            +
            /*! Widget: filter - updated 3/26/2015 (v2.21.3) *//*
         | 
| 2 2 | 
             
             * Requires tablesorter v2.8+ and jQuery 1.7+
         | 
| 3 3 | 
             
             * by Rob Garrison
         | 
| 4 4 | 
             
             */
         | 
| 5 5 | 
             
            ;(function ($) {
         | 
| 6 6 | 
             
            'use strict';
         | 
| 7 | 
            -
            var ts = $.tablesorter = $.tablesorter || {} | 
| 7 | 
            +
            var ts = $.tablesorter = $.tablesorter || {},
         | 
| 8 | 
            +
            	tscss = ts.css;
         | 
| 8 9 |  | 
| 9 | 
            -
            $.extend( | 
| 10 | 
            -
            	filterRow | 
| 11 | 
            -
            	filter | 
| 10 | 
            +
            $.extend(tscss, {
         | 
| 11 | 
            +
            	filterRow      : 'tablesorter-filter-row',
         | 
| 12 | 
            +
            	filter         : 'tablesorter-filter',
         | 
| 13 | 
            +
            	filterDisabled : 'disabled',
         | 
| 14 | 
            +
            	filterRowHide  : 'hideme'
         | 
| 12 15 | 
             
            });
         | 
| 13 16 |  | 
| 14 17 | 
             
            ts.addWidget({
         | 
| @@ -58,7 +61,7 @@ ts.addWidget({ | |
| 58 61 | 
             
            			// add .tsfilter namespace to all BUT search
         | 
| 59 62 | 
             
            			.unbind( events.replace(/\s+/g, ' ') )
         | 
| 60 63 | 
             
            			// remove the filter row even if refreshing, because the column might have been moved
         | 
| 61 | 
            -
            			.find('.' +  | 
| 64 | 
            +
            			.find('.' + tscss.filterRow).remove();
         | 
| 62 65 | 
             
            		if (refreshing) { return; }
         | 
| 63 66 | 
             
            		for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
         | 
| 64 67 | 
             
            			$tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody
         | 
| @@ -286,13 +289,13 @@ ts.filter = { | |
| 286 289 | 
             
            		c.$table.bind( txt, function(event, filter) {
         | 
| 287 290 | 
             
            			val = (wo.filter_hideEmpty && $.isEmptyObject(c.cache) && !(c.delayInit && event.type === 'appendCache'));
         | 
| 288 291 | 
             
            			// hide filter row using the "filtered" class name
         | 
| 289 | 
            -
            			c.$table.find('.' +  | 
| 292 | 
            +
            			c.$table.find('.' + tscss.filterRow).toggleClass(wo.filter_filteredRow, val ); // fixes #450
         | 
| 290 293 | 
             
            			if ( !/(search|filter)/.test(event.type) ) {
         | 
| 291 294 | 
             
            				event.stopPropagation();
         | 
| 292 295 | 
             
            				ts.filter.buildDefault(table, true);
         | 
| 293 296 | 
             
            			}
         | 
| 294 297 | 
             
            			if (event.type === 'filterReset') {
         | 
| 295 | 
            -
            				c.$table.find('.' +  | 
| 298 | 
            +
            				c.$table.find('.' + tscss.filter).add(wo.filter_$externalFilters).val('');
         | 
| 296 299 | 
             
            				ts.filter.searching(table, []);
         | 
| 297 300 | 
             
            			} else if (event.type === 'filterEnd') {
         | 
| 298 301 | 
             
            				ts.filter.buildDefault(table, true);
         | 
| @@ -355,7 +358,7 @@ ts.filter = { | |
| 355 358 | 
             
            								options += '<option ' + (txt === val ? '' : 'data-function-name="' + string + '" ') + 'value="' + val + '">' + txt + '</option>';
         | 
| 356 359 | 
             
            							}
         | 
| 357 360 | 
             
            						}
         | 
| 358 | 
            -
            						c.$table.find('thead').find('select.' +  | 
| 361 | 
            +
            						c.$table.find('thead').find('select.' + tscss.filter + '[data-column="' + column + '"]').append(options);
         | 
| 359 362 | 
             
            					}
         | 
| 360 363 | 
             
            				}
         | 
| 361 364 | 
             
            			}
         | 
| @@ -364,7 +367,7 @@ ts.filter = { | |
| 364 367 | 
             
            		// it would append the same options twice.
         | 
| 365 368 | 
             
            		ts.filter.buildDefault(table, true);
         | 
| 366 369 |  | 
| 367 | 
            -
            		ts.filter.bindSearch( table, c.$table.find('.' +  | 
| 370 | 
            +
            		ts.filter.bindSearch( table, c.$table.find('.' + tscss.filter), true );
         | 
| 368 371 | 
             
            		if (wo.filter_external) {
         | 
| 369 372 | 
             
            			ts.filter.bindSearch( table, wo.filter_external );
         | 
| 370 373 | 
             
            		}
         | 
| @@ -379,7 +382,7 @@ ts.filter = { | |
| 379 382 | 
             
            				.unbind( ('filterStart filterEnd '.split(' ').join(c.namespace + 'filter ')).replace(/\s+/g, ' ') )
         | 
| 380 383 | 
             
            				.bind( 'filterStart filterEnd '.split(' ').join(c.namespace + 'filter '), function(event, columns) {
         | 
| 381 384 | 
             
            				// only add processing to certain columns to all columns
         | 
| 382 | 
            -
            				$header = (columns) ? c.$table.find('.' +  | 
| 385 | 
            +
            				$header = (columns) ? c.$table.find('.' + tscss.header).filter('[data-column]').filter(function() {
         | 
| 383 386 | 
             
            					return columns[$(this).data('column')] !== '';
         | 
| 384 387 | 
             
            				}) : '';
         | 
| 385 388 | 
             
            				ts.isProcessing(table, event.type === 'filterStart', columns ? $header : '');
         | 
| @@ -493,7 +496,7 @@ ts.filter = { | |
| 493 496 | 
             
            			// c.columns defined in computeThIndexes()
         | 
| 494 497 | 
             
            			columns = c.columns,
         | 
| 495 498 | 
             
            			arry = $.isArray(wo.filter_cellFilter),
         | 
| 496 | 
            -
            			buildFilter = '<tr role="row" class="' +  | 
| 499 | 
            +
            			buildFilter = '<tr role="row" class="' + tscss.filterRow + ' ' + c.cssIgnoreRow + '">';
         | 
| 497 500 | 
             
            		for (column = 0; column < columns; column++) {
         | 
| 498 501 | 
             
            			if (arry) {
         | 
| 499 502 | 
             
            				buildFilter += '<td' + ( wo.filter_cellFilter[column] ? ' class="' + wo.filter_cellFilter[column] + '"' : '' ) + '></td>';
         | 
| @@ -542,9 +545,9 @@ ts.filter = { | |
| 542 545 | 
             
            				name = ( $.isArray(wo.filter_cssFilter) ?
         | 
| 543 546 | 
             
            					(typeof wo.filter_cssFilter[column] !== 'undefined' ? wo.filter_cssFilter[column] || '' : '') :
         | 
| 544 547 | 
             
            					wo.filter_cssFilter ) || '';
         | 
| 545 | 
            -
            				buildFilter.addClass(  | 
| 548 | 
            +
            				buildFilter.addClass( tscss.filter + ' ' + name ).attr('data-column', column);
         | 
| 546 549 | 
             
            				if (disabled) {
         | 
| 547 | 
            -
            					buildFilter.attr('placeholder', '').addClass( | 
| 550 | 
            +
            					buildFilter.attr('placeholder', '').addClass(tscss.filterDisabled)[0].disabled = true; // disabled!
         | 
| 548 551 | 
             
            				}
         | 
| 549 552 | 
             
            			}
         | 
| 550 553 | 
             
            		}
         | 
| @@ -638,7 +641,7 @@ ts.filter = { | |
| 638 641 | 
             
            		}
         | 
| 639 642 | 
             
            		if (wo.filter_hideFilters) {
         | 
| 640 643 | 
             
            			// show/hide filter row as needed
         | 
| 641 | 
            -
            			c.$table.find('.' +  | 
| 644 | 
            +
            			c.$table.find('.' + tscss.filterRow).trigger( combinedFilters === '' ? 'mouseleave' : 'mouseenter' );
         | 
| 642 645 | 
             
            		}
         | 
| 643 646 | 
             
            		// return if the last search is the same; but filter === false when updating the search
         | 
| 644 647 | 
             
            		// see example-widget-filter.html filter toggle buttons
         | 
| @@ -664,8 +667,8 @@ ts.filter = { | |
| 664 667 | 
             
            	hideFilters: function(table, c) {
         | 
| 665 668 | 
             
            		var $filterRow, $filterRow2, timer;
         | 
| 666 669 | 
             
            		$(table)
         | 
| 667 | 
            -
            			.find('.' +  | 
| 668 | 
            -
            			.addClass( | 
| 670 | 
            +
            			.find('.' + tscss.filterRow)
         | 
| 671 | 
            +
            			.addClass(tscss.filterRowHide)
         | 
| 669 672 | 
             
            			.bind('mouseenter mouseleave', function(e) {
         | 
| 670 673 | 
             
            				// save event object - http://bugs.jquery.com/ticket/12140
         | 
| 671 674 | 
             
            				var event = e;
         | 
| @@ -673,14 +676,14 @@ ts.filter = { | |
| 673 676 | 
             
            				clearTimeout(timer);
         | 
| 674 677 | 
             
            				timer = setTimeout(function() {
         | 
| 675 678 | 
             
            					if ( /enter|over/.test(event.type) ) {
         | 
| 676 | 
            -
            						$filterRow.removeClass( | 
| 679 | 
            +
            						$filterRow.removeClass(tscss.filterRowHide);
         | 
| 677 680 | 
             
            					} else {
         | 
| 678 681 | 
             
            						// don't hide if input has focus
         | 
| 679 682 | 
             
            						// $(':focus') needs jQuery 1.6+
         | 
| 680 683 | 
             
            						if ( $(document.activeElement).closest('tr')[0] !== $filterRow[0] ) {
         | 
| 681 684 | 
             
            							// don't hide row if any filter has a value
         | 
| 682 685 | 
             
            							if (c.lastCombinedFilter === '') {
         | 
| 683 | 
            -
            								$filterRow.addClass( | 
| 686 | 
            +
            								$filterRow.addClass(tscss.filterRowHide);
         | 
| 684 687 | 
             
            							}
         | 
| 685 688 | 
             
            						}
         | 
| 686 689 | 
             
            					}
         | 
| @@ -693,7 +696,7 @@ ts.filter = { | |
| 693 696 | 
             
            				timer = setTimeout(function() {
         | 
| 694 697 | 
             
            					// don't hide row if any filter has a value
         | 
| 695 698 | 
             
            					if (ts.getFilters(c.$table).join('') === '') {
         | 
| 696 | 
            -
            						$filterRow2[ event.type === 'focus' ? 'removeClass' : 'addClass']( | 
| 699 | 
            +
            						$filterRow2[ event.type === 'focus' ? 'removeClass' : 'addClass'](tscss.filterRowHide);
         | 
| 697 700 | 
             
            					}
         | 
| 698 701 | 
             
            				}, 200);
         | 
| 699 702 | 
             
            			});
         | 
| @@ -1181,7 +1184,7 @@ ts.filter = { | |
| 1181 1184 | 
             
            			// t.data('placeholder') won't work in jQuery older than 1.4.3
         | 
| 1182 1185 | 
             
            			options = '<option value="">' + ( node.data('placeholder') || node.attr('data-placeholder') || wo.filter_placeholder.select || '' ) + '</option>',
         | 
| 1183 1186 | 
             
            			// Get curent filter value
         | 
| 1184 | 
            -
            			currentValue = c.$table.find('thead').find('select.' +  | 
| 1187 | 
            +
            			currentValue = c.$table.find('thead').find('select.' + tscss.filter + '[data-column="' + column + '"]').val();
         | 
| 1185 1188 | 
             
            		// nothing included in arry (external source), so get the options from filter_selectSource or column data
         | 
| 1186 1189 | 
             
            		if (typeof arry === 'undefined' || arry === '') {
         | 
| 1187 1190 | 
             
            			arry = ts.filter.getOptionSource(table, column, onlyAvail);
         | 
| @@ -1208,7 +1211,7 @@ ts.filter = { | |
| 1208 1211 | 
             
            		}
         | 
| 1209 1212 |  | 
| 1210 1213 | 
             
            		// update all selects in the same column (clone thead in sticky headers & any external selects) - fixes 473
         | 
| 1211 | 
            -
            		$filters = ( c.$filters ? c.$filters : c.$table.children('thead') ).find('.' +  | 
| 1214 | 
            +
            		$filters = ( c.$filters ? c.$filters : c.$table.children('thead') ).find('.' + tscss.filter);
         | 
| 1212 1215 | 
             
            		if (wo.filter_$externalFilters) {
         | 
| 1213 1216 | 
             
            			$filters = $filters && $filters.length ? $filters.add(wo.filter_$externalFilters) : wo.filter_$externalFilters;
         | 
| 1214 1217 | 
             
            		}
         | 
| @@ -1252,7 +1255,7 @@ ts.getFilters = function(table, getRaw, setFilters, skipFirst) { | |
| 1252 1255 | 
             
            	}
         | 
| 1253 1256 | 
             
            	if (c) {
         | 
| 1254 1257 | 
             
            		if (c.$filters) {
         | 
| 1255 | 
            -
            			$filters = c.$filters.find('.' +  | 
| 1258 | 
            +
            			$filters = c.$filters.find('.' + tscss.filter);
         | 
| 1256 1259 | 
             
            		}
         | 
| 1257 1260 | 
             
            		if (wo.filter_$externalFilters) {
         | 
| 1258 1261 | 
             
            			$filters = $filters && $filters.length ? $filters.add(wo.filter_$externalFilters) : wo.filter_$externalFilters;
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            /*! Widget: Output - updated 3/26/2015 (v2.21.3) *//*
         | 
| 2 2 | 
             
             * Requires tablesorter v2.8+ and jQuery 1.7+
         | 
| 3 3 | 
             
             * Modified from:
         | 
| 4 4 | 
             
             * HTML Table to CSV: http://www.kunalbabre.com/projects/table2CSV.php (License unknown?)
         | 
| @@ -160,7 +160,7 @@ output = ts.output = { | |
| 160 160 | 
             
            		// callback; if true returned, continue processing
         | 
| 161 161 | 
             
            		if ($.isFunction(wo.output_callback) && !wo.output_callback(c, mydata)) { return; }
         | 
| 162 162 |  | 
| 163 | 
            -
            		if ( /p | 
| 163 | 
            +
            		if ( /p/i.test( wo.output_delivery || '' ) ) {
         | 
| 164 164 | 
             
            			output.popup(mydata, wo.output_popupStyle, outputJSON || outputArray);
         | 
| 165 165 | 
             
            		} else {
         | 
| 166 166 | 
             
            			output.download(wo, mydata);
         | 
| @@ -314,7 +314,6 @@ ts.addWidget({ | |
| 314 314 | 
             
            		output_callbackJSON  : function($cell, txt, cellIndex) { return txt + '(' + (cellIndex) + ')'; },
         | 
| 315 315 | 
             
            		// the need to modify this for Excel no longer exists
         | 
| 316 316 | 
             
            		output_encoding      : 'data:application/octet-stream;charset=utf8,'
         | 
| 317 | 
            -
             | 
| 318 317 | 
             
            	},
         | 
| 319 318 | 
             
            	init: function(table, thisWidget, c) {
         | 
| 320 319 | 
             
            		output.init(c);
         | 
| @@ -1,4 +1,7 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            /*! Widget: Pager - updated 3/26/2015 (v2.21.3) */
         | 
| 2 | 
            +
            /* Requires tablesorter v2.8+ and jQuery 1.7+
         | 
| 3 | 
            +
             * by Rob Garrison
         | 
| 4 | 
            +
             */
         | 
| 2 5 | 
             
            /*jshint browser:true, jquery:true, unused:false */
         | 
| 3 6 | 
             
            ;(function($){
         | 
| 4 7 | 
             
            "use strict";
         | 
| @@ -143,7 +146,7 @@ tsp = ts.pager = { | |
| 143 146 | 
             
            				setSize: wo.pager_size,
         | 
| 144 147 | 
             
            				setPage: wo.pager_startPage,
         | 
| 145 148 | 
             
            				events: 'filterInit filterStart filterEnd sortEnd disable enable destroy updateComplete ' +
         | 
| 146 | 
            -
            					'pageSize pageSet pageAndSize pagerUpdate '
         | 
| 149 | 
            +
            					'pageSize pageSet pageAndSize pagerUpdate refreshComplete '
         | 
| 147 150 | 
             
            			}, c.pager);
         | 
| 148 151 |  | 
| 149 152 | 
             
            		// pager initializes multiple times before table has completed initialization
         | 
| @@ -296,9 +299,12 @@ tsp = ts.pager = { | |
| 296 299 | 
             
            			})
         | 
| 297 300 | 
             
            			.on('pageSet.pager pagerUpdate.pager', function(e,v){
         | 
| 298 301 | 
             
            				e.stopPropagation();
         | 
| 299 | 
            -
            				p.page = (parseInt(v, 10) || 1) - 1;
         | 
| 300 302 | 
             
            				// force pager refresh
         | 
| 301 | 
            -
            				if (e.type === 'pagerUpdate') { | 
| 303 | 
            +
            				if (e.type === 'pagerUpdate') {
         | 
| 304 | 
            +
            					v = typeof v === 'undefined' ? p.page + 1 : v;
         | 
| 305 | 
            +
            					p.last.page = true;
         | 
| 306 | 
            +
            				}
         | 
| 307 | 
            +
            				p.page = (parseInt(v, 10) || 1) - 1;
         | 
| 302 308 | 
             
            				tsp.moveToPage(table, p, true);
         | 
| 303 309 | 
             
            				tsp.updatePageDisplay(table, c, false);
         | 
| 304 310 | 
             
            			})
         | 
| @@ -454,7 +460,7 @@ tsp = ts.pager = { | |
| 454 460 | 
             
            				p.$goto.html(t).val( p.page + 1 );
         | 
| 455 461 | 
             
            			}
         | 
| 456 462 | 
             
            			if ($out.length) {
         | 
| 457 | 
            -
            				$out[ ($out[0]. | 
| 463 | 
            +
            				$out[ ($out[0].nodeName === 'INPUT') ? 'val' : 'html' ](s);
         | 
| 458 464 | 
             
            				// rebind startRow/page inputs
         | 
| 459 465 | 
             
            				$out.find('.ts-startRow, .ts-page').off('change.pager').on('change.pager', function(){
         | 
| 460 466 | 
             
            					var v = $(this).val(),
         | 
| @@ -1,176 +1,314 @@ | |
| 1 | 
            -
            /*! Widget: resizable */
         | 
| 1 | 
            +
            /*! Widget: resizable - updated 3/26/2015 (v2.21.3) */
         | 
| 2 2 | 
             
            ;(function ($, window) {
         | 
| 3 3 | 
             
            'use strict';
         | 
| 4 4 | 
             
            var ts = $.tablesorter = $.tablesorter || {};
         | 
| 5 5 |  | 
| 6 6 | 
             
            $.extend(ts.css, {
         | 
| 7 | 
            -
            	 | 
| 7 | 
            +
            	resizableContainer : 'tablesorter-resizable-container',
         | 
| 8 | 
            +
            	resizableHandle    : 'tablesorter-resizable-handle',
         | 
| 9 | 
            +
            	resizableNoSelect  : 'tablesorter-disableSelection',
         | 
| 10 | 
            +
            	resizableStorage   : 'tablesorter-resizable'
         | 
| 8 11 | 
             
            });
         | 
| 9 12 |  | 
| 10 | 
            -
            //  | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            ts. | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
            		 | 
| 18 | 
            -
             | 
| 19 | 
            -
            		 | 
| 20 | 
            -
             | 
| 13 | 
            +
            // Add extra scroller css
         | 
| 14 | 
            +
            $(function(){
         | 
| 15 | 
            +
            	var s = '<style>' +
         | 
| 16 | 
            +
            		'body.' + ts.css.resizableNoSelect + ' { -ms-user-select: none; -moz-user-select: -moz-none;' +
         | 
| 17 | 
            +
            			'-khtml-user-select: none; -webkit-user-select: none; user-select: none; }' +
         | 
| 18 | 
            +
            		'.' + ts.css.resizableContainer + ' { position: relative; height: 1px; }' +
         | 
| 19 | 
            +
            		// make handle z-index > than stickyHeader z-index, so the handle stays above sticky header
         | 
| 20 | 
            +
            		'.' + ts.css.resizableHandle + ' { position: absolute; display: inline-block; width: 8px; top: 1px;' +
         | 
| 21 | 
            +
            			'cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }' +
         | 
| 22 | 
            +
            		'</style>';
         | 
| 23 | 
            +
            	$(s).appendTo('body');
         | 
| 24 | 
            +
            });
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ts.resizable = {
         | 
| 27 | 
            +
            	init : function( c, wo ) {
         | 
| 28 | 
            +
            		if ( c.$table.hasClass( 'hasResizable' ) ) { return; }
         | 
| 29 | 
            +
            		c.$table.addClass( 'hasResizable' );
         | 
| 30 | 
            +
            		ts.resizableReset( c.table, true ); // set default widths
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            		// internal variables
         | 
| 33 | 
            +
            		wo.resizable_ = {
         | 
| 34 | 
            +
            			$wrap : c.$table.parent(),
         | 
| 35 | 
            +
            			mouseXPosition : 0,
         | 
| 36 | 
            +
            			$target : null,
         | 
| 37 | 
            +
            			$next : null,
         | 
| 38 | 
            +
            			overflow : c.$table.parent().css('overflow') === 'auto',
         | 
| 39 | 
            +
            			fullWidth : Math.abs(c.$table.parent().width() - c.$table.width()) < 20,
         | 
| 40 | 
            +
            			storedSizes : []
         | 
| 41 | 
            +
            		};
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            		var noResize, $header, column, storedSizes,
         | 
| 44 | 
            +
            			marginTop = parseInt( c.$table.css( 'margin-top' ), 10 );
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            		wo.resizable_.storedSizes = storedSizes = ( ( ts.storage && wo.resizable !== false ) ?
         | 
| 47 | 
            +
            			ts.storage( c.table, ts.css.resizableStorage ) :
         | 
| 48 | 
            +
            			[] ) || [];
         | 
| 49 | 
            +
            		ts.resizable.setWidths( c, wo, storedSizes );
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            		wo.$resizable_container = $( '<div class="' + ts.css.resizableContainer + '">' )
         | 
| 52 | 
            +
            			.css({ top : marginTop })
         | 
| 53 | 
            +
            			.insertBefore( c.$table );
         | 
| 54 | 
            +
            		// add container
         | 
| 55 | 
            +
            		for ( column = 0; column < c.columns; column++ ) {
         | 
| 56 | 
            +
            			$header = c.$headerIndexed[ column ];
         | 
| 57 | 
            +
            			noResize = ts.getData( $header, ts.getColumnData( c.table, c.headers, column ), 'resizable' ) === 'false';
         | 
| 58 | 
            +
            			if ( !noResize ) {
         | 
| 59 | 
            +
            				$( '<div class="' + ts.css.resizableHandle + '">' )
         | 
| 60 | 
            +
            					.appendTo( wo.$resizable_container )
         | 
| 61 | 
            +
            					.attr({
         | 
| 62 | 
            +
            						'data-column' : column,
         | 
| 63 | 
            +
            						'unselectable' : 'on'
         | 
| 64 | 
            +
            					})
         | 
| 65 | 
            +
            					.data( 'header', $header )
         | 
| 66 | 
            +
            					.bind( 'selectstart', false );
         | 
| 67 | 
            +
            			}
         | 
| 68 | 
            +
            		}
         | 
| 69 | 
            +
            		c.$table.one('tablesorter-initialized', function() {
         | 
| 70 | 
            +
            			ts.resizable.setHandlePosition( c, wo );
         | 
| 71 | 
            +
            			ts.resizable.bindings( this.config, this.config.widgetOptions );
         | 
| 72 | 
            +
            		});
         | 
| 21 73 | 
             
            	},
         | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
            		 | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
            			 | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
            			$ | 
| 34 | 
            -
            			 | 
| 35 | 
            -
             | 
| 36 | 
            -
            				if (mouseXPosition === 0 || !$target) { return; }
         | 
| 37 | 
            -
            				// resize columns
         | 
| 38 | 
            -
            				var leftEdge = event.pageX - mouseXPosition,
         | 
| 39 | 
            -
            					targetWidth = $target.width();
         | 
| 40 | 
            -
            				$target.width( targetWidth + leftEdge );
         | 
| 41 | 
            -
            				if ($target.width() !== targetWidth && fullWidth) {
         | 
| 42 | 
            -
            					$next.width( $next.width() - leftEdge );
         | 
| 43 | 
            -
            				} else if (overflow) {
         | 
| 44 | 
            -
            					$table.width(function(i, w){
         | 
| 45 | 
            -
            						return w + leftEdge;
         | 
| 46 | 
            -
            					});
         | 
| 47 | 
            -
            					if (!$next.length) {
         | 
| 48 | 
            -
            						// if expanding right-most column, scroll the wrapper
         | 
| 49 | 
            -
            						$wrap[0].scrollLeft = $table.width();
         | 
| 50 | 
            -
            					}
         | 
| 51 | 
            -
            				}
         | 
| 52 | 
            -
            				mouseXPosition = event.pageX;
         | 
| 53 | 
            -
            			},
         | 
| 54 | 
            -
            			stopResize = function() {
         | 
| 55 | 
            -
            				if (ts.storage && $target && $next) {
         | 
| 56 | 
            -
            					storedSizes = {};
         | 
| 57 | 
            -
            					storedSizes[$target.index()] = $target.width();
         | 
| 58 | 
            -
            					storedSizes[$next.index()] = $next.width();
         | 
| 59 | 
            -
            					$target.width( storedSizes[$target.index()] );
         | 
| 60 | 
            -
            					$next.width( storedSizes[$next.index()] );
         | 
| 61 | 
            -
            					if (wo.resizable !== false) {
         | 
| 62 | 
            -
            						// save all column widths
         | 
| 63 | 
            -
            						ts.storage(table, 'tablesorter-resizable', c.$headers.map(function(){ return $(this).width(); }).get() );
         | 
| 64 | 
            -
            					}
         | 
| 65 | 
            -
            				}
         | 
| 66 | 
            -
            				mouseXPosition = 0;
         | 
| 67 | 
            -
            				$target = $next = null;
         | 
| 68 | 
            -
            				$(window).trigger('resize'); // will update stickyHeaders, just in case
         | 
| 69 | 
            -
            			};
         | 
| 70 | 
            -
            		storedSizes = (ts.storage && wo.resizable !== false) ? ts.storage(table, 'tablesorter-resizable') : {};
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            	setWidth : function( $el, width ) {
         | 
| 76 | 
            +
            		$el.css({
         | 
| 77 | 
            +
            			'width' : width,
         | 
| 78 | 
            +
            			'min-width' : '',
         | 
| 79 | 
            +
            			'max-width' : ''
         | 
| 80 | 
            +
            		});
         | 
| 81 | 
            +
            	},
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            	setWidths : function( c, wo, storedSizes ) {
         | 
| 84 | 
            +
            		var column,
         | 
| 85 | 
            +
            			$extra = $( c.namespace + '_extra_headers' ),
         | 
| 86 | 
            +
            			$col = c.$table.children( 'colgroup' ).children( 'col' );
         | 
| 87 | 
            +
            		storedSizes = storedSizes || wo.resizable_.storedSizes || [];
         | 
| 71 88 | 
             
            		// process only if table ID or url match
         | 
| 72 | 
            -
            		if (storedSizes) {
         | 
| 73 | 
            -
            			for (column  | 
| 74 | 
            -
            				 | 
| 75 | 
            -
             | 
| 89 | 
            +
            		if ( storedSizes.length ) {
         | 
| 90 | 
            +
            			for ( column = 0; column < c.columns; column++ ) {
         | 
| 91 | 
            +
            				// set saved resizable widths
         | 
| 92 | 
            +
            				c.$headers.eq( column ).width( storedSizes[ column ] );
         | 
| 93 | 
            +
            				if ( $extra.length ) {
         | 
| 94 | 
            +
            					// stickyHeaders needs to modify min & max width as well
         | 
| 95 | 
            +
            					ts.resizable.setWidth( $extra.eq( column ).add( $col.eq( column ) ), storedSizes[ column ] );
         | 
| 76 96 | 
             
            				}
         | 
| 77 97 | 
             
            			}
         | 
| 98 | 
            +
            			if ( $( c.namespace + '_extra_table' ).length && !ts.hasWidget( c.table, 'scroller' ) ) {
         | 
| 99 | 
            +
            				ts.resizable.setWidth( $( c.namespace + '_extra_table' ), c.$table.outerWidth() );
         | 
| 100 | 
            +
            			}
         | 
| 78 101 | 
             
            		}
         | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
            			 | 
| 85 | 
            -
            			 | 
| 86 | 
            -
            			$ | 
| 87 | 
            -
             | 
| 88 | 
            -
            		 | 
| 89 | 
            -
             | 
| 90 | 
            -
            			 | 
| 91 | 
            -
             | 
| 92 | 
            -
            				//  | 
| 93 | 
            -
            				$ | 
| 102 | 
            +
            	},
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            	setHandlePosition : function( c, wo ) {
         | 
| 105 | 
            +
            		var tableWidth = c.$table.outerWidth(),
         | 
| 106 | 
            +
            			hasScroller = ts.hasWidget( c.table, 'scroller' ),
         | 
| 107 | 
            +
            			tableHeight = c.$table.height(),
         | 
| 108 | 
            +
            			$handles = wo.$resizable_container.children(),
         | 
| 109 | 
            +
            			handleCenter = Math.floor( $handles.width() / 2 - parseFloat( c.$headers.css( 'border-right-width' ) ) * 2 );
         | 
| 110 | 
            +
             | 
| 111 | 
            +
            		if ( hasScroller ) {
         | 
| 112 | 
            +
            			tableHeight = 0;
         | 
| 113 | 
            +
            			c.$table.closest( '.' + ts.css.scrollerWrap ).children().each(function(){
         | 
| 114 | 
            +
            				var $this = $(this);
         | 
| 115 | 
            +
            				// center table has a max-height set
         | 
| 116 | 
            +
            				tableHeight += $this.filter('[style*="height"]').length ? $this.height() : $this.children('table').height();
         | 
| 117 | 
            +
            			});
         | 
| 118 | 
            +
            		}
         | 
| 119 | 
            +
            		$handles.each( function() {
         | 
| 120 | 
            +
            			var $this = $(this),
         | 
| 121 | 
            +
            				column = parseInt( $this.attr( 'data-column' ), 10 ),
         | 
| 122 | 
            +
            				columns = c.columns - 1,
         | 
| 123 | 
            +
            				$header = $this.data( 'header' );
         | 
| 124 | 
            +
            			if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
         | 
| 125 | 
            +
            				$this.css({
         | 
| 126 | 
            +
            					height : tableHeight,
         | 
| 127 | 
            +
            					left : $header.position().left + $header.width() - handleCenter
         | 
| 128 | 
            +
            				});
         | 
| 94 129 | 
             
            			}
         | 
| 95 | 
            -
            			// don't include the last column of the row
         | 
| 96 | 
            -
            			if (!wo.resizable_addLastColumn) { $column = $column.slice(0,-1); }
         | 
| 97 | 
            -
            			$columns = $columns ? $columns.add($column) : $column;
         | 
| 98 130 | 
             
            		});
         | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 131 | 
            +
            	},
         | 
| 132 | 
            +
             | 
| 133 | 
            +
            	// prevent text selection while dragging resize bar
         | 
| 134 | 
            +
            	toggleTextSelection : function( c, toggle ) {
         | 
| 135 | 
            +
            		var namespace = c.namespace + 'tsresize';
         | 
| 136 | 
            +
            		c.widgetOptions.resizable_.disabled = toggle;
         | 
| 137 | 
            +
            		$( 'body' ).toggleClass( ts.css.resizableNoSelect, toggle );
         | 
| 138 | 
            +
            		if ( toggle ) {
         | 
| 139 | 
            +
            			$( 'body' )
         | 
| 140 | 
            +
            				.attr( 'unselectable', 'on' )
         | 
| 141 | 
            +
            				.bind( 'selectstart' + namespace, false );
         | 
| 142 | 
            +
            		} else {
         | 
| 143 | 
            +
            			$( 'body' )
         | 
| 144 | 
            +
            				.removeAttr( 'unselectable' )
         | 
| 145 | 
            +
            				.unbind( 'selectstart' + namespace );
         | 
| 146 | 
            +
            		}
         | 
| 147 | 
            +
            	},
         | 
| 148 | 
            +
             | 
| 149 | 
            +
            	bindings : function( c, wo ) {
         | 
| 150 | 
            +
            		var namespace = c.namespace + 'tsresize';
         | 
| 151 | 
            +
            		wo.$resizable_container.children().bind( 'mousedown', function( event ) {
         | 
| 110 152 | 
             
            			// save header cell and mouse position
         | 
| 111 | 
            -
            			 | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 153 | 
            +
            			var column,
         | 
| 154 | 
            +
            				vars = wo.resizable_,
         | 
| 155 | 
            +
            				$extras = $( c.namespace + '_extra_headers' ),
         | 
| 156 | 
            +
            				$header = $( event.target ).data( 'header' );
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            			column = parseInt( $header.attr( 'data-column' ), 10 );
         | 
| 159 | 
            +
            			vars.$target = $header = $header.add( $extras.filter('[data-column="' + column + '"]') );
         | 
| 160 | 
            +
            			vars.target = column;
         | 
| 161 | 
            +
             | 
| 114 162 | 
             
            			// if table is not as wide as it's parent, then resize the table
         | 
| 115 | 
            -
            			 | 
| 116 | 
            -
             | 
| 163 | 
            +
            			vars.$next = event.shiftKey || wo.resizable_targetLast ?
         | 
| 164 | 
            +
            				$header.parent().children().not( '.resizable-false' ).filter( ':last' ) :
         | 
| 165 | 
            +
            				$header.nextAll( ':not(.resizable-false)' ).eq( 0 );
         | 
| 166 | 
            +
             | 
| 167 | 
            +
            			column = parseInt( vars.$next.attr( 'data-column' ), 10 );
         | 
| 168 | 
            +
            			vars.$next = vars.$next.add( $extras.filter('[data-column="' + column + '"]') );
         | 
| 169 | 
            +
            			vars.next = column;
         | 
| 170 | 
            +
             | 
| 171 | 
            +
            			vars.mouseXPosition = event.pageX;
         | 
| 172 | 
            +
            			vars.storedSizes = c.$headers.map(function(){ return $(this).width(); }).get();
         | 
| 173 | 
            +
            			ts.resizable.toggleTextSelection( c, true );
         | 
| 117 174 | 
             
            		});
         | 
| 118 | 
            -
             | 
| 119 | 
            -
            		 | 
| 120 | 
            -
            			 | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
            				 | 
| 124 | 
            -
            				 | 
| 125 | 
            -
            					 | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
            			 | 
| 175 | 
            +
             | 
| 176 | 
            +
            		$( document )
         | 
| 177 | 
            +
            			.bind( 'mousemove' + namespace, function( event ) {
         | 
| 178 | 
            +
            				var vars = wo.resizable_;
         | 
| 179 | 
            +
            				// ignore mousemove if no mousedown
         | 
| 180 | 
            +
            				if ( !vars.disabled || vars.mouseXPosition === 0 || !vars.$target ) { return; }
         | 
| 181 | 
            +
            				if ( wo.resizable_throttle ) {
         | 
| 182 | 
            +
            					clearTimeout( vars.timer );
         | 
| 183 | 
            +
            					vars.timer = setTimeout( function() {
         | 
| 184 | 
            +
            						ts.resizable.mouseMove( c, wo, event );
         | 
| 185 | 
            +
            					}, isNaN( wo.resizable_throttle ) ? 5 : wo.resizable_throttle );
         | 
| 186 | 
            +
            				} else {
         | 
| 187 | 
            +
            					ts.resizable.mouseMove( c, wo, event );
         | 
| 188 | 
            +
            				}
         | 
| 189 | 
            +
            			})
         | 
| 190 | 
            +
            			.bind( 'mouseup' + namespace, function() {
         | 
| 191 | 
            +
            				if (!wo.resizable_.disabled) { return; }
         | 
| 192 | 
            +
            				ts.resizable.toggleTextSelection( c, false );
         | 
| 193 | 
            +
            				ts.resizable.stopResize( c, wo );
         | 
| 194 | 
            +
            				ts.resizable.setHandlePosition( c, wo );
         | 
| 195 | 
            +
            			});
         | 
| 196 | 
            +
             | 
| 197 | 
            +
            		// resizeEnd event triggered by scroller widget
         | 
| 198 | 
            +
            		$( window ).bind( 'resize' + namespace + ' resizeEnd' + namespace, function() {
         | 
| 199 | 
            +
            			ts.resizable.setHandlePosition( c, wo );
         | 
| 133 200 | 
             
            		});
         | 
| 134 201 |  | 
| 135 202 | 
             
            		// right click to reset columns to default widths
         | 
| 136 | 
            -
            		 | 
| 137 | 
            -
             | 
| 203 | 
            +
            		c.$table.find( 'thead:first' ).add( $( c.namespace + '_extra_table' ).find( 'thead:first' ) )
         | 
| 204 | 
            +
            		.bind( 'contextmenu' + namespace, function() {
         | 
| 138 205 | 
             
            			// $.isEmptyObject() needs jQuery 1.4+; allow right click if already reset
         | 
| 139 | 
            -
            			var allowClick =  | 
| 140 | 
            -
            			 | 
| 206 | 
            +
            			var allowClick = wo.resizable_.storedSizes.length === 0;
         | 
| 207 | 
            +
            			ts.resizableReset( c.table );
         | 
| 208 | 
            +
            			ts.resizable.setHandlePosition( c, wo );
         | 
| 209 | 
            +
            			wo.resizable_.storedSizes = [];
         | 
| 141 210 | 
             
            			return allowClick;
         | 
| 142 211 | 
             
            		});
         | 
| 212 | 
            +
             | 
| 143 213 | 
             
            	},
         | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
            			 | 
| 150 | 
            -
            			 | 
| 151 | 
            -
            			 | 
| 152 | 
            -
            			 | 
| 153 | 
            -
            		 | 
| 214 | 
            +
             | 
| 215 | 
            +
            	mouseMove : function( c, wo, event ) {
         | 
| 216 | 
            +
            		if ( wo.resizable_.mouseXPosition === 0 || !wo.resizable_.$target ) { return; }
         | 
| 217 | 
            +
            		// resize columns
         | 
| 218 | 
            +
            		var vars = wo.resizable_,
         | 
| 219 | 
            +
            			$target = vars.$target,
         | 
| 220 | 
            +
            			$next = vars.$next,
         | 
| 221 | 
            +
            			leftEdge = event.pageX - vars.mouseXPosition,
         | 
| 222 | 
            +
            			targetWidth = $target.width();
         | 
| 223 | 
            +
            		if ( vars.fullWidth ) {
         | 
| 224 | 
            +
            			vars.storedSizes[ vars.target ] += leftEdge;
         | 
| 225 | 
            +
            			vars.storedSizes[ vars.next ] -= leftEdge;
         | 
| 226 | 
            +
            			ts.resizable.setWidths( c, wo );
         | 
| 227 | 
            +
             | 
| 228 | 
            +
            		} else if ( vars.overflow ) {
         | 
| 229 | 
            +
            			c.$table.add( $( c.namespace + '_extra_table' ) ).width(function(i, w){
         | 
| 230 | 
            +
            				return w + leftEdge;
         | 
| 231 | 
            +
            			});
         | 
| 232 | 
            +
            			if ( !$next.length ) {
         | 
| 233 | 
            +
            				// if expanding right-most column, scroll the wrapper
         | 
| 234 | 
            +
            				vars.$wrap[0].scrollLeft = c.$table.width();
         | 
| 235 | 
            +
            			}
         | 
| 236 | 
            +
            		} else {
         | 
| 237 | 
            +
            			vars.storedSizes[ vars.target ] += leftEdge;
         | 
| 238 | 
            +
            			ts.resizable.setWidths( c, wo );
         | 
| 239 | 
            +
            		}
         | 
| 240 | 
            +
            		vars.mouseXPosition = event.pageX;
         | 
| 241 | 
            +
            	},
         | 
| 242 | 
            +
             | 
| 243 | 
            +
            	stopResize : function( c, wo ) {
         | 
| 244 | 
            +
            		var vars = wo.resizable_;
         | 
| 245 | 
            +
            		vars.storedSizes = [];
         | 
| 246 | 
            +
            		if ( ts.storage ) {
         | 
| 247 | 
            +
            			vars.storedSizes = c.$headers.map(function(){ return $(this).width(); }).get();
         | 
| 248 | 
            +
            			if ( wo.resizable !== false ) {
         | 
| 249 | 
            +
            				// save all column widths
         | 
| 250 | 
            +
            				ts.storage( c.table, ts.css.resizableStorage, vars.storedSizes );
         | 
| 251 | 
            +
            			}
         | 
| 252 | 
            +
            		}
         | 
| 253 | 
            +
            		vars.mouseXPosition = 0;
         | 
| 254 | 
            +
            		vars.$target = vars.$next = null;
         | 
| 255 | 
            +
            		$(window).trigger('resize'); // will update stickyHeaders, just in case
         | 
| 256 | 
            +
            	}
         | 
| 257 | 
            +
            };
         | 
| 258 | 
            +
             | 
| 259 | 
            +
            // this widget saves the column widths if
         | 
| 260 | 
            +
            // $.tablesorter.storage function is included
         | 
| 261 | 
            +
            // **************************
         | 
| 262 | 
            +
            ts.addWidget({
         | 
| 263 | 
            +
            	id: "resizable",
         | 
| 264 | 
            +
            	priority: 40,
         | 
| 265 | 
            +
            	options: {
         | 
| 266 | 
            +
            		resizable : true,
         | 
| 267 | 
            +
            		resizable_addLastColumn : false,
         | 
| 268 | 
            +
            		resizable_widths : [],
         | 
| 269 | 
            +
            		resizable_throttle : false, // set to true (5ms) or any number 0-10 range
         | 
| 270 | 
            +
            		resizable_targetLast : false
         | 
| 271 | 
            +
            	},
         | 
| 272 | 
            +
            	init: function(table, thisWidget, c, wo) {
         | 
| 273 | 
            +
            		ts.resizable.init( c, wo );
         | 
| 274 | 
            +
            	},
         | 
| 275 | 
            +
            	remove: function( table, c, wo ) {
         | 
| 276 | 
            +
            		if (wo.$resizable_container) {
         | 
| 277 | 
            +
            			var namespace = c.namespace + 'tsresize';
         | 
| 278 | 
            +
            			c.$table.add( $( c.namespace + '_extra_table' ) )
         | 
| 279 | 
            +
            				.removeClass('hasResizable')
         | 
| 280 | 
            +
            				.children( 'thead' ).unbind( 'contextmenu' + namespace );
         | 
| 281 | 
            +
             | 
| 282 | 
            +
            				wo.$resizable_container.remove();
         | 
| 283 | 
            +
            			ts.resizable.toggleTextSelection( c, false );
         | 
| 284 | 
            +
            			ts.resizableReset( table );
         | 
| 285 | 
            +
            			$( document ).unbind( 'mousemove' + namespace + ' mouseup' + namespace );
         | 
| 286 | 
            +
            		}
         | 
| 154 287 | 
             
            	}
         | 
| 155 288 | 
             
            });
         | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 289 | 
            +
             | 
| 290 | 
            +
            ts.resizableReset = function( table, nosave ) {
         | 
| 291 | 
            +
            	$( table ).each(function(){
         | 
| 158 292 | 
             
            		var $t,
         | 
| 159 293 | 
             
            			c = this.config,
         | 
| 160 294 | 
             
            			wo = c && c.widgetOptions;
         | 
| 161 | 
            -
            		if (table && c) {
         | 
| 162 | 
            -
            			c.$headers.each(function(i){
         | 
| 295 | 
            +
            		if ( table && c ) {
         | 
| 296 | 
            +
            			c.$headers.each( function( i ) {
         | 
| 163 297 | 
             
            				$t = $(this);
         | 
| 164 | 
            -
            				if (wo.resizable_widths && wo.resizable_widths[i]) {
         | 
| 165 | 
            -
            					$t.css('width', wo.resizable_widths[i]);
         | 
| 166 | 
            -
            				} else if (!$t.hasClass('resizable-false')) {
         | 
| 298 | 
            +
            				if ( wo.resizable_widths && wo.resizable_widths[ i ] ) {
         | 
| 299 | 
            +
            					$t.css( 'width', wo.resizable_widths[ i ] );
         | 
| 300 | 
            +
            				} else if ( !$t.hasClass( 'resizable-false' ) ) {
         | 
| 167 301 | 
             
            					// don't clear the width of any column that is not resizable
         | 
| 168 | 
            -
            					$t.css('width','');
         | 
| 302 | 
            +
            					$t.css( 'width', '' );
         | 
| 169 303 | 
             
            				}
         | 
| 170 304 | 
             
            			});
         | 
| 171 | 
            -
            			 | 
| 305 | 
            +
            			// reset stickyHeader widths
         | 
| 306 | 
            +
            			$( window ).trigger( 'resize' );
         | 
| 307 | 
            +
            			if ( ts.storage && !nosave ) {
         | 
| 308 | 
            +
            				ts.storage( this, ts.css.resizableStorage, {} );
         | 
| 309 | 
            +
            			}
         | 
| 172 310 | 
             
            		}
         | 
| 173 311 | 
             
            	});
         | 
| 174 312 | 
             
            };
         | 
| 175 313 |  | 
| 176 | 
            -
            })(jQuery, window);
         | 
| 314 | 
            +
            })( jQuery, window );
         |