jquery-tablesorter 1.18.3 → 1.18.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a142ba049c8283ad5701ebc22af25c6f2a0a186e
4
- data.tar.gz: 01d9fbb2e17cd989c67376e6f71aa809ed3c3639
3
+ metadata.gz: 7f25b2d1c32020eb01d61f3b5b36078ea6c6ac85
4
+ data.tar.gz: 3d8e1b92751a59e9f79aaa7989bd0303fec33118
5
5
  SHA512:
6
- metadata.gz: f0dafc07d7437a3af57ab0542226dd55d5cd0f1cbb4ad86290d1326644337a091b597cf03f98b20ab7cf8c3fbb8327024f16c4dbe59f226b1ea3a527e69337cd
7
- data.tar.gz: 0c23865e29959b6c0ea505cb026ed5635d39e1b760b902bd25a2f0dc29c6553875a1b07899349353afc907d0d356fd716119cbb0d4e3799643a0bf4a78469f4c
6
+ metadata.gz: 2abcb7450f22141441bb95ca5044426d0041d3430e2fb96a5fd6421ee2fc5ce0e45798d253366c7a4641a0e3735c94ba28b0bbe45a55ff0978ae323864fc0198
7
+ data.tar.gz: c7ec726ac20494eceb26014dcfb791b47c256ee8f6ffe86a6765ccae79c071c6483ea4a9832edcd95bd9a1a607e911612de52845d5d0382e2b15e69a9a94c6bc
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Simple integration of jquery-tablesorter into the asset pipeline.
6
6
 
7
- Current tablesorter version: 2.23.3 (9/1/2015), [documentation]
7
+ Current tablesorter version: 2.23.4 (9/23/2015), [documentation]
8
8
 
9
9
  Any issue associated with the js/css files, please report to [Mottie's fork].
10
10
 
@@ -1,3 +1,3 @@
1
1
  module JqueryTablesorter
2
- VERSION = '1.18.3'
2
+ VERSION = '1.18.4'
3
3
  end
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 09-01-2015 (v2.23.3)*/
7
+ /*! tablesorter (FORK) - updated 09-23-2015 (v2.23.4)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -16,7 +16,7 @@
16
16
  }
17
17
  }(function($) {
18
18
 
19
- /*! TableSorter (FORK) v2.23.3 *//*
19
+ /*! TableSorter (FORK) v2.23.4 *//*
20
20
  * Client-side table sorting with ease!
21
21
  * @requires jQuery v1.2.6+
22
22
  *
@@ -43,7 +43,7 @@
43
43
 
44
44
  var ts = this;
45
45
 
46
- ts.version = '2.23.3';
46
+ ts.version = '2.23.4';
47
47
 
48
48
  ts.parsers = [];
49
49
  ts.widgets = [];
@@ -1606,7 +1606,7 @@
1606
1606
 
1607
1607
  // *** sort functions ***
1608
1608
  // regex used in natural sort
1609
- ts.regex.chunk = /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi; // chunk/tokenize numbers & letters
1609
+ ts.regex.chunk = /(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi; // chunk/tokenize numbers & letters
1610
1610
  ts.regex.chunks = /(^\\0|\\0$)/; // replace chunks @ ends
1611
1611
  ts.regex.hex = /^0x[0-9a-f]+$/i; // hex
1612
1612
 
@@ -1810,13 +1810,12 @@
1810
1810
 
1811
1811
  ts.applyWidgetOptions = function( table, c ){
1812
1812
  var indx, widget,
1813
- len = c.widgets.length,
1814
- wo = c.widgetOptions;
1813
+ len = c.widgets.length;
1815
1814
  if (len) {
1816
1815
  for (indx = 0; indx < len; indx++) {
1817
1816
  widget = ts.getWidgetById( c.widgets[indx] );
1818
1817
  if ( widget && 'options' in widget ) {
1819
- wo = table.config.widgetOptions = $.extend( true, {}, widget.options, wo );
1818
+ c.widgetOptions = $.extend( true, {}, widget.options, c.widgetOptions );
1820
1819
  }
1821
1820
  }
1822
1821
  }
@@ -1826,7 +1825,6 @@
1826
1825
  table = $(table)[0]; // in case this is called externally
1827
1826
  var indx, len, names, widget, name, applied,
1828
1827
  c = table.config,
1829
- wo = c.widgetOptions,
1830
1828
  tableClass = ' ' + c.table.className + ' ',
1831
1829
  widgets = [],
1832
1830
  time, time2, w, wd;
@@ -1884,14 +1882,14 @@
1884
1882
  c.widgetInit[ name ] = true;
1885
1883
  if (table.hasInitialized) {
1886
1884
  // don't reapply widget options on tablesorter init
1887
- ts.applyWidgetOptions( table, c );
1885
+ ts.applyWidgetOptions( table, table.config );
1888
1886
  }
1889
1887
  if ( 'init' in widget ) {
1890
1888
  applied = true;
1891
1889
  if (c.debug) {
1892
1890
  console[ console.group ? 'group' : 'log' ]( 'Initializing ' + name + ' widget' );
1893
1891
  }
1894
- widget.init(table, widget, c, wo);
1892
+ widget.init(table, widget, table.config, table.config.widgetOptions);
1895
1893
  }
1896
1894
  }
1897
1895
  if ( !init && 'format' in widget ) {
@@ -1899,7 +1897,7 @@
1899
1897
  if (c.debug) {
1900
1898
  console[ console.group ? 'group' : 'log' ]( 'Updating ' + name + ' widget' );
1901
1899
  }
1902
- widget.format(table, c, wo, false);
1900
+ widget.format(table, table.config, table.config.widgetOptions, false);
1903
1901
  }
1904
1902
  if (c.debug) {
1905
1903
  if (applied) {
@@ -2109,7 +2107,7 @@
2109
2107
  });
2110
2108
 
2111
2109
  // set up debug logs
2112
- if ( !( console && console.log ) ) {
2110
+ if ( !( window.console && window.console.log ) ) {
2113
2111
  ts.logs = [];
2114
2112
  /*jshint -W020 */
2115
2113
  console = {};
@@ -2718,7 +2716,7 @@
2718
2716
 
2719
2717
  })(jQuery);
2720
2718
 
2721
- /*! Widget: filter - updated 9/1/2015 (v2.23.3) *//*
2719
+ /*! Widget: filter - updated 9/23/2015 (v2.23.4) *//*
2722
2720
  * Requires tablesorter v2.8+ and jQuery 1.7+
2723
2721
  * by Rob Garrison
2724
2722
  */
@@ -2741,6 +2739,7 @@
2741
2739
  options : {
2742
2740
  filter_childRows : false, // if true, filter includes child row content in the search
2743
2741
  filter_childByColumn : false, // ( filter_childRows must be true ) if true = search child rows by column; false = search all child row text grouped
2742
+ filter_childWithSibs : true, // if true, include matching child row siblings
2744
2743
  filter_columnFilters : true, // if true, a filter will be added to the top of each table column
2745
2744
  filter_columnAnyMatch: true, // if true, allows using '#:{query}' in AnyMatch searches ( column:query )
2746
2745
  filter_cellFilter : '', // css class name added to the filter cell ( string or array )
@@ -3077,7 +3076,7 @@
3077
3076
  c.$table.addClass( 'hasFilters' );
3078
3077
 
3079
3078
  // define timers so using clearTimeout won't cause an undefined error
3080
- wo.searchTimer = null;
3079
+ wo.filter_searchTimer = null;
3081
3080
  wo.filter_initTimer = null;
3082
3081
  wo.filter_formatterCount = 0;
3083
3082
  wo.filter_formatterInit = [];
@@ -3210,7 +3209,7 @@
3210
3209
  .find( 'select.' + tscss.filter + '[data-column="' + column + '"]' )
3211
3210
  .append( options );
3212
3211
  txt = wo.filter_selectSource;
3213
- fxn = $.isFunction( txt ) ? true : ts.getColumnData( table, txt, column );
3212
+ fxn = typeof txt === 'function' ? true : ts.getColumnData( table, txt, column );
3214
3213
  if ( fxn ) {
3215
3214
  // updating so the extra options are appended
3216
3215
  tsf.buildSelect( c.table, column, '', true, $header.hasClass( wo.filter_onlyAvail ) );
@@ -3229,7 +3228,7 @@
3229
3228
  }
3230
3229
 
3231
3230
  if ( wo.filter_hideFilters ) {
3232
- tsf.hideFilters( table, c );
3231
+ tsf.hideFilters( c );
3233
3232
  }
3234
3233
 
3235
3234
  // show processing icon
@@ -3356,7 +3355,7 @@
3356
3355
  return parsed ? c.parsers[column].format( filter, c.table, [], column ) : filter;
3357
3356
  },
3358
3357
  buildRow: function( table, c, wo ) {
3359
- var col, column, $header, buildSelect, disabled, name, ffxn, tmp,
3358
+ var col, column, $header, makeSelect, disabled, name, ffxn, tmp,
3360
3359
  // c.columns defined in computeThIndexes()
3361
3360
  cellFilter = wo.filter_cellFilter,
3362
3361
  columns = c.columns,
@@ -3380,14 +3379,14 @@
3380
3379
  // assuming last cell of a column is the main column
3381
3380
  $header = c.$headerIndexed[ column ];
3382
3381
  ffxn = ts.getColumnData( table, wo.filter_functions, column );
3383
- buildSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||
3382
+ makeSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||
3384
3383
  $header.hasClass( 'filter-select' );
3385
3384
  // get data from jQuery data, metadata, headers option or header class name
3386
3385
  col = ts.getColumnData( table, c.headers, column );
3387
3386
  disabled = ts.getData( $header[0], col, 'filter' ) === 'false' ||
3388
3387
  ts.getData( $header[0], col, 'parser' ) === 'false';
3389
3388
 
3390
- if ( buildSelect ) {
3389
+ if ( makeSelect ) {
3391
3390
  buildFilter = $( '<select>' ).appendTo( c.$filters.eq( column ) );
3392
3391
  } else {
3393
3392
  ffxn = ts.getColumnData( table, wo.filter_formatter, column );
@@ -3489,10 +3488,10 @@
3489
3488
  },
3490
3489
  searching: function( table, filter, skipFirst ) {
3491
3490
  var wo = table.config.widgetOptions;
3492
- clearTimeout( wo.searchTimer );
3491
+ clearTimeout( wo.filter_searchTimer );
3493
3492
  if ( typeof filter === 'undefined' || filter === true ) {
3494
3493
  // delay filtering
3495
- wo.searchTimer = setTimeout( function() {
3494
+ wo.filter_searchTimer = setTimeout( function() {
3496
3495
  tsf.checkFilters( table, filter, skipFirst );
3497
3496
  }, wo.filter_liveSearch ? wo.filter_searchDelay : 10 );
3498
3497
  } else {
@@ -3550,7 +3549,7 @@
3550
3549
  return false;
3551
3550
  }
3552
3551
  },
3553
- hideFilters: function( table, c ) {
3552
+ hideFilters: function( c ) {
3554
3553
  var timer;
3555
3554
  c.$table
3556
3555
  .find( '.' + tscss.filterRow )
@@ -3627,7 +3626,7 @@
3627
3626
  targets = wo.filter_initialized || !$input.filter( wo.filter_anyColumnSelector ).length,
3628
3627
  columns = [],
3629
3628
  val = $.trim( tsf.getLatestSearch( $input ).attr( 'data-column' ) || '' );
3630
- if ( !/[,-]/.test(val) && val.length === 1 ) {
3629
+ if ( /^[0-9]+$/.test(val)) {
3631
3630
  return parseInt( val, 10 );
3632
3631
  }
3633
3632
  // process column range
@@ -3841,7 +3840,7 @@
3841
3840
  !table.config.widgetOptions.filter_initialized ) {
3842
3841
  return;
3843
3842
  }
3844
- var len, norm_rows, rowData, $rows, rowIndex, tbodyIndex, $tbody, columnIndex,
3843
+ var len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,
3845
3844
  isChild, childRow, lastSearch, showRow, time, val, indx,
3846
3845
  notFiltered, searchFiltered, query, injected, res, id, txt,
3847
3846
  storedFilters = $.extend( [], filters ),
@@ -4029,24 +4028,37 @@
4029
4028
  '';
4030
4029
  }
4031
4030
 
4032
- showRow = tsf.processRow( c, data, vars );
4031
+ showRow = false;
4032
+ val = tsf.processRow( c, data, vars );
4033
4033
  childRow = rowData.$row.filter( ':gt( 0 )' );
4034
-
4035
4034
  if ( wo.filter_childRows && childRow.length ) {
4035
+ if ( !wo.filter_childWithSibs ) {
4036
+ // hide all child rows
4037
+ childRow.addClass( wo.filter_filteredRow );
4038
+ }
4036
4039
  if ( wo.filter_childByColumn ) {
4037
4040
  // cycle through each child row
4038
4041
  for ( indx = 0; indx < childRow.length; indx++ ) {
4039
4042
  data.$row = childRow.eq( indx );
4040
4043
  data.cacheArray = rowData.child[ indx ];
4041
4044
  data.rawArray = data.cacheArray;
4045
+ val = tsf.processRow( c, data, vars );
4042
4046
  // use OR comparison on child rows
4043
- showRow = showRow || tsf.processRow( c, data, vars );
4047
+ showRow = showRow || val;
4048
+ if ( !wo.filter_childWithSibs && val ) {
4049
+ childRow.eq( indx ).removeClass( wo.filter_filteredRow );
4050
+ }
4044
4051
  }
4045
4052
  }
4046
- childRow.toggleClass( wo.filter_filteredRow, !showRow );
4053
+ } else {
4054
+ showRow = val;
4047
4055
  }
4048
-
4049
- rowData.$row
4056
+ $row = rowData.$row;
4057
+ // if only showing resulting child row, only include parent
4058
+ if ( !wo.filter_childWithSibs ) {
4059
+ $row = $row.eq( 0 );
4060
+ }
4061
+ $row
4050
4062
  .toggleClass( wo.filter_filteredRow, !showRow )[0]
4051
4063
  .display = showRow ? '' : 'none';
4052
4064
  }
@@ -4074,14 +4086,12 @@
4074
4086
  },
4075
4087
  getOptionSource: function( table, column, onlyAvail ) {
4076
4088
  table = $( table )[0];
4077
- var cts, txt, indx, len,
4078
- c = table.config,
4089
+ var c = table.config,
4079
4090
  wo = c.widgetOptions,
4080
- parsed = [],
4081
4091
  arry = false,
4082
4092
  source = wo.filter_selectSource,
4083
4093
  last = c.$table.data( 'lastSearch' ) || [],
4084
- fxn = $.isFunction( source ) ? true : ts.getColumnData( table, source, column );
4094
+ fxn = typeof source === 'function' ? true : ts.getColumnData( table, source, column );
4085
4095
 
4086
4096
  if ( onlyAvail && last[column] !== '' ) {
4087
4097
  onlyAvail = false;
@@ -4100,11 +4110,25 @@
4100
4110
  // custom select source function for a SPECIFIC COLUMN
4101
4111
  arry = fxn( table, column, onlyAvail );
4102
4112
  }
4113
+
4103
4114
  if ( arry === false ) {
4104
4115
  // fall back to original method
4105
4116
  arry = tsf.getOptions( table, column, onlyAvail );
4106
4117
  }
4107
4118
 
4119
+ return tsf.processOptions( table, column, arry );
4120
+
4121
+ },
4122
+ processOptions: function( table, column, arry ) {
4123
+ if ( !$.isArray( arry ) ) {
4124
+ return false;
4125
+ }
4126
+ table = $( table )[0];
4127
+ var cts, txt, indx, len,
4128
+ c = table.config,
4129
+ validColumn = typeof column !== 'undefined' && column !== null && column >= 0 && column < c.columns,
4130
+ parsed = [];
4131
+
4108
4132
  // get unique elements and sort the list
4109
4133
  // if $.tablesorter.sortText exists ( not in the original tablesorter ),
4110
4134
  // then natural sort the list otherwise use a basic sort
@@ -4112,7 +4136,7 @@
4112
4136
  return $.inArray( value, arry ) === indx;
4113
4137
  });
4114
4138
 
4115
- if ( c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {
4139
+ if ( validColumn && c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {
4116
4140
  // unsorted select options
4117
4141
  return arry;
4118
4142
  } else {
@@ -4125,7 +4149,8 @@
4125
4149
  parsed.push({
4126
4150
  t : txt,
4127
4151
  // check parser length - fixes #934
4128
- p : c.parsers && c.parsers.length && c.parsers[ column ].format( txt, table, [], column ) || txt
4152
+ p : validColumn && c.parsers && c.parsers.length &&
4153
+ c.parsers[ column ].format( txt, table, [], column ) || txt
4129
4154
  });
4130
4155
  }
4131
4156
 
@@ -4135,10 +4160,10 @@
4135
4160
  // sortNatural breaks if you don't pass it strings
4136
4161
  var x = a.p.toString(),
4137
4162
  y = b.p.toString();
4138
- if ( $.isFunction( cts ) ) {
4163
+ if ( validColumn && typeof cts === 'function' ) {
4139
4164
  // custom OVERALL text sorter
4140
4165
  return cts( x, y, true, column, table );
4141
- } else if ( typeof cts === 'object' && cts.hasOwnProperty( column ) ) {
4166
+ } else if ( validColumn && typeof cts === 'object' && cts.hasOwnProperty( column ) ) {
4142
4167
  // custom text sorter for a SPECIFIC COLUMN
4143
4168
  return cts[column]( x, y, true, column, table );
4144
4169
  } else if ( ts.sortNatural ) {
@@ -4196,6 +4221,7 @@
4196
4221
  if ( !table.config.cache || $.isEmptyObject( table.config.cache ) ) {
4197
4222
  return;
4198
4223
  }
4224
+
4199
4225
  var indx, val, txt, t, $filters, $filter,
4200
4226
  c = table.config,
4201
4227
  wo = c.widgetOptions,
@@ -4211,6 +4237,7 @@
4211
4237
  .find( 'thead' )
4212
4238
  .find( 'select.' + tscss.filter + '[data-column="' + column + '"]' )
4213
4239
  .val();
4240
+
4214
4241
  // nothing included in arry ( external source ), so get the options from
4215
4242
  // filter_selectSource or column data
4216
4243
  if ( typeof arry === 'undefined' || arry === '' ) {
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.23.3 *//*
1
+ /*! TableSorter (FORK) v2.23.4 *//*
2
2
  * Client-side table sorting with ease!
3
3
  * @requires jQuery v1.2.6+
4
4
  *
@@ -25,7 +25,7 @@
25
25
 
26
26
  var ts = this;
27
27
 
28
- ts.version = '2.23.3';
28
+ ts.version = '2.23.4';
29
29
 
30
30
  ts.parsers = [];
31
31
  ts.widgets = [];
@@ -1588,7 +1588,7 @@
1588
1588
 
1589
1589
  // *** sort functions ***
1590
1590
  // regex used in natural sort
1591
- ts.regex.chunk = /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi; // chunk/tokenize numbers & letters
1591
+ ts.regex.chunk = /(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi; // chunk/tokenize numbers & letters
1592
1592
  ts.regex.chunks = /(^\\0|\\0$)/; // replace chunks @ ends
1593
1593
  ts.regex.hex = /^0x[0-9a-f]+$/i; // hex
1594
1594
 
@@ -1792,13 +1792,12 @@
1792
1792
 
1793
1793
  ts.applyWidgetOptions = function( table, c ){
1794
1794
  var indx, widget,
1795
- len = c.widgets.length,
1796
- wo = c.widgetOptions;
1795
+ len = c.widgets.length;
1797
1796
  if (len) {
1798
1797
  for (indx = 0; indx < len; indx++) {
1799
1798
  widget = ts.getWidgetById( c.widgets[indx] );
1800
1799
  if ( widget && 'options' in widget ) {
1801
- wo = table.config.widgetOptions = $.extend( true, {}, widget.options, wo );
1800
+ c.widgetOptions = $.extend( true, {}, widget.options, c.widgetOptions );
1802
1801
  }
1803
1802
  }
1804
1803
  }
@@ -1808,7 +1807,6 @@
1808
1807
  table = $(table)[0]; // in case this is called externally
1809
1808
  var indx, len, names, widget, name, applied,
1810
1809
  c = table.config,
1811
- wo = c.widgetOptions,
1812
1810
  tableClass = ' ' + c.table.className + ' ',
1813
1811
  widgets = [],
1814
1812
  time, time2, w, wd;
@@ -1866,14 +1864,14 @@
1866
1864
  c.widgetInit[ name ] = true;
1867
1865
  if (table.hasInitialized) {
1868
1866
  // don't reapply widget options on tablesorter init
1869
- ts.applyWidgetOptions( table, c );
1867
+ ts.applyWidgetOptions( table, table.config );
1870
1868
  }
1871
1869
  if ( 'init' in widget ) {
1872
1870
  applied = true;
1873
1871
  if (c.debug) {
1874
1872
  console[ console.group ? 'group' : 'log' ]( 'Initializing ' + name + ' widget' );
1875
1873
  }
1876
- widget.init(table, widget, c, wo);
1874
+ widget.init(table, widget, table.config, table.config.widgetOptions);
1877
1875
  }
1878
1876
  }
1879
1877
  if ( !init && 'format' in widget ) {
@@ -1881,7 +1879,7 @@
1881
1879
  if (c.debug) {
1882
1880
  console[ console.group ? 'group' : 'log' ]( 'Updating ' + name + ' widget' );
1883
1881
  }
1884
- widget.format(table, c, wo, false);
1882
+ widget.format(table, table.config, table.config.widgetOptions, false);
1885
1883
  }
1886
1884
  if (c.debug) {
1887
1885
  if (applied) {
@@ -2091,7 +2089,7 @@
2091
2089
  });
2092
2090
 
2093
2091
  // set up debug logs
2094
- if ( !( console && console.log ) ) {
2092
+ if ( !( window.console && window.console.log ) ) {
2095
2093
  ts.logs = [];
2096
2094
  /*jshint -W020 */
2097
2095
  console = {};
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 09-01-2015 (v2.23.3)*/
7
+ /*! tablesorter (FORK) - updated 09-23-2015 (v2.23.4)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -372,7 +372,7 @@
372
372
 
373
373
  })(jQuery);
374
374
 
375
- /*! Widget: filter - updated 9/1/2015 (v2.23.3) *//*
375
+ /*! Widget: filter - updated 9/23/2015 (v2.23.4) *//*
376
376
  * Requires tablesorter v2.8+ and jQuery 1.7+
377
377
  * by Rob Garrison
378
378
  */
@@ -395,6 +395,7 @@
395
395
  options : {
396
396
  filter_childRows : false, // if true, filter includes child row content in the search
397
397
  filter_childByColumn : false, // ( filter_childRows must be true ) if true = search child rows by column; false = search all child row text grouped
398
+ filter_childWithSibs : true, // if true, include matching child row siblings
398
399
  filter_columnFilters : true, // if true, a filter will be added to the top of each table column
399
400
  filter_columnAnyMatch: true, // if true, allows using '#:{query}' in AnyMatch searches ( column:query )
400
401
  filter_cellFilter : '', // css class name added to the filter cell ( string or array )
@@ -731,7 +732,7 @@
731
732
  c.$table.addClass( 'hasFilters' );
732
733
 
733
734
  // define timers so using clearTimeout won't cause an undefined error
734
- wo.searchTimer = null;
735
+ wo.filter_searchTimer = null;
735
736
  wo.filter_initTimer = null;
736
737
  wo.filter_formatterCount = 0;
737
738
  wo.filter_formatterInit = [];
@@ -864,7 +865,7 @@
864
865
  .find( 'select.' + tscss.filter + '[data-column="' + column + '"]' )
865
866
  .append( options );
866
867
  txt = wo.filter_selectSource;
867
- fxn = $.isFunction( txt ) ? true : ts.getColumnData( table, txt, column );
868
+ fxn = typeof txt === 'function' ? true : ts.getColumnData( table, txt, column );
868
869
  if ( fxn ) {
869
870
  // updating so the extra options are appended
870
871
  tsf.buildSelect( c.table, column, '', true, $header.hasClass( wo.filter_onlyAvail ) );
@@ -883,7 +884,7 @@
883
884
  }
884
885
 
885
886
  if ( wo.filter_hideFilters ) {
886
- tsf.hideFilters( table, c );
887
+ tsf.hideFilters( c );
887
888
  }
888
889
 
889
890
  // show processing icon
@@ -1010,7 +1011,7 @@
1010
1011
  return parsed ? c.parsers[column].format( filter, c.table, [], column ) : filter;
1011
1012
  },
1012
1013
  buildRow: function( table, c, wo ) {
1013
- var col, column, $header, buildSelect, disabled, name, ffxn, tmp,
1014
+ var col, column, $header, makeSelect, disabled, name, ffxn, tmp,
1014
1015
  // c.columns defined in computeThIndexes()
1015
1016
  cellFilter = wo.filter_cellFilter,
1016
1017
  columns = c.columns,
@@ -1034,14 +1035,14 @@
1034
1035
  // assuming last cell of a column is the main column
1035
1036
  $header = c.$headerIndexed[ column ];
1036
1037
  ffxn = ts.getColumnData( table, wo.filter_functions, column );
1037
- buildSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||
1038
+ makeSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||
1038
1039
  $header.hasClass( 'filter-select' );
1039
1040
  // get data from jQuery data, metadata, headers option or header class name
1040
1041
  col = ts.getColumnData( table, c.headers, column );
1041
1042
  disabled = ts.getData( $header[0], col, 'filter' ) === 'false' ||
1042
1043
  ts.getData( $header[0], col, 'parser' ) === 'false';
1043
1044
 
1044
- if ( buildSelect ) {
1045
+ if ( makeSelect ) {
1045
1046
  buildFilter = $( '<select>' ).appendTo( c.$filters.eq( column ) );
1046
1047
  } else {
1047
1048
  ffxn = ts.getColumnData( table, wo.filter_formatter, column );
@@ -1143,10 +1144,10 @@
1143
1144
  },
1144
1145
  searching: function( table, filter, skipFirst ) {
1145
1146
  var wo = table.config.widgetOptions;
1146
- clearTimeout( wo.searchTimer );
1147
+ clearTimeout( wo.filter_searchTimer );
1147
1148
  if ( typeof filter === 'undefined' || filter === true ) {
1148
1149
  // delay filtering
1149
- wo.searchTimer = setTimeout( function() {
1150
+ wo.filter_searchTimer = setTimeout( function() {
1150
1151
  tsf.checkFilters( table, filter, skipFirst );
1151
1152
  }, wo.filter_liveSearch ? wo.filter_searchDelay : 10 );
1152
1153
  } else {
@@ -1204,7 +1205,7 @@
1204
1205
  return false;
1205
1206
  }
1206
1207
  },
1207
- hideFilters: function( table, c ) {
1208
+ hideFilters: function( c ) {
1208
1209
  var timer;
1209
1210
  c.$table
1210
1211
  .find( '.' + tscss.filterRow )
@@ -1281,7 +1282,7 @@
1281
1282
  targets = wo.filter_initialized || !$input.filter( wo.filter_anyColumnSelector ).length,
1282
1283
  columns = [],
1283
1284
  val = $.trim( tsf.getLatestSearch( $input ).attr( 'data-column' ) || '' );
1284
- if ( !/[,-]/.test(val) && val.length === 1 ) {
1285
+ if ( /^[0-9]+$/.test(val)) {
1285
1286
  return parseInt( val, 10 );
1286
1287
  }
1287
1288
  // process column range
@@ -1495,7 +1496,7 @@
1495
1496
  !table.config.widgetOptions.filter_initialized ) {
1496
1497
  return;
1497
1498
  }
1498
- var len, norm_rows, rowData, $rows, rowIndex, tbodyIndex, $tbody, columnIndex,
1499
+ var len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,
1499
1500
  isChild, childRow, lastSearch, showRow, time, val, indx,
1500
1501
  notFiltered, searchFiltered, query, injected, res, id, txt,
1501
1502
  storedFilters = $.extend( [], filters ),
@@ -1683,24 +1684,37 @@
1683
1684
  '';
1684
1685
  }
1685
1686
 
1686
- showRow = tsf.processRow( c, data, vars );
1687
+ showRow = false;
1688
+ val = tsf.processRow( c, data, vars );
1687
1689
  childRow = rowData.$row.filter( ':gt( 0 )' );
1688
-
1689
1690
  if ( wo.filter_childRows && childRow.length ) {
1691
+ if ( !wo.filter_childWithSibs ) {
1692
+ // hide all child rows
1693
+ childRow.addClass( wo.filter_filteredRow );
1694
+ }
1690
1695
  if ( wo.filter_childByColumn ) {
1691
1696
  // cycle through each child row
1692
1697
  for ( indx = 0; indx < childRow.length; indx++ ) {
1693
1698
  data.$row = childRow.eq( indx );
1694
1699
  data.cacheArray = rowData.child[ indx ];
1695
1700
  data.rawArray = data.cacheArray;
1701
+ val = tsf.processRow( c, data, vars );
1696
1702
  // use OR comparison on child rows
1697
- showRow = showRow || tsf.processRow( c, data, vars );
1703
+ showRow = showRow || val;
1704
+ if ( !wo.filter_childWithSibs && val ) {
1705
+ childRow.eq( indx ).removeClass( wo.filter_filteredRow );
1706
+ }
1698
1707
  }
1699
1708
  }
1700
- childRow.toggleClass( wo.filter_filteredRow, !showRow );
1709
+ } else {
1710
+ showRow = val;
1701
1711
  }
1702
-
1703
- rowData.$row
1712
+ $row = rowData.$row;
1713
+ // if only showing resulting child row, only include parent
1714
+ if ( !wo.filter_childWithSibs ) {
1715
+ $row = $row.eq( 0 );
1716
+ }
1717
+ $row
1704
1718
  .toggleClass( wo.filter_filteredRow, !showRow )[0]
1705
1719
  .display = showRow ? '' : 'none';
1706
1720
  }
@@ -1728,14 +1742,12 @@
1728
1742
  },
1729
1743
  getOptionSource: function( table, column, onlyAvail ) {
1730
1744
  table = $( table )[0];
1731
- var cts, txt, indx, len,
1732
- c = table.config,
1745
+ var c = table.config,
1733
1746
  wo = c.widgetOptions,
1734
- parsed = [],
1735
1747
  arry = false,
1736
1748
  source = wo.filter_selectSource,
1737
1749
  last = c.$table.data( 'lastSearch' ) || [],
1738
- fxn = $.isFunction( source ) ? true : ts.getColumnData( table, source, column );
1750
+ fxn = typeof source === 'function' ? true : ts.getColumnData( table, source, column );
1739
1751
 
1740
1752
  if ( onlyAvail && last[column] !== '' ) {
1741
1753
  onlyAvail = false;
@@ -1754,11 +1766,25 @@
1754
1766
  // custom select source function for a SPECIFIC COLUMN
1755
1767
  arry = fxn( table, column, onlyAvail );
1756
1768
  }
1769
+
1757
1770
  if ( arry === false ) {
1758
1771
  // fall back to original method
1759
1772
  arry = tsf.getOptions( table, column, onlyAvail );
1760
1773
  }
1761
1774
 
1775
+ return tsf.processOptions( table, column, arry );
1776
+
1777
+ },
1778
+ processOptions: function( table, column, arry ) {
1779
+ if ( !$.isArray( arry ) ) {
1780
+ return false;
1781
+ }
1782
+ table = $( table )[0];
1783
+ var cts, txt, indx, len,
1784
+ c = table.config,
1785
+ validColumn = typeof column !== 'undefined' && column !== null && column >= 0 && column < c.columns,
1786
+ parsed = [];
1787
+
1762
1788
  // get unique elements and sort the list
1763
1789
  // if $.tablesorter.sortText exists ( not in the original tablesorter ),
1764
1790
  // then natural sort the list otherwise use a basic sort
@@ -1766,7 +1792,7 @@
1766
1792
  return $.inArray( value, arry ) === indx;
1767
1793
  });
1768
1794
 
1769
- if ( c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {
1795
+ if ( validColumn && c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {
1770
1796
  // unsorted select options
1771
1797
  return arry;
1772
1798
  } else {
@@ -1779,7 +1805,8 @@
1779
1805
  parsed.push({
1780
1806
  t : txt,
1781
1807
  // check parser length - fixes #934
1782
- p : c.parsers && c.parsers.length && c.parsers[ column ].format( txt, table, [], column ) || txt
1808
+ p : validColumn && c.parsers && c.parsers.length &&
1809
+ c.parsers[ column ].format( txt, table, [], column ) || txt
1783
1810
  });
1784
1811
  }
1785
1812
 
@@ -1789,10 +1816,10 @@
1789
1816
  // sortNatural breaks if you don't pass it strings
1790
1817
  var x = a.p.toString(),
1791
1818
  y = b.p.toString();
1792
- if ( $.isFunction( cts ) ) {
1819
+ if ( validColumn && typeof cts === 'function' ) {
1793
1820
  // custom OVERALL text sorter
1794
1821
  return cts( x, y, true, column, table );
1795
- } else if ( typeof cts === 'object' && cts.hasOwnProperty( column ) ) {
1822
+ } else if ( validColumn && typeof cts === 'object' && cts.hasOwnProperty( column ) ) {
1796
1823
  // custom text sorter for a SPECIFIC COLUMN
1797
1824
  return cts[column]( x, y, true, column, table );
1798
1825
  } else if ( ts.sortNatural ) {
@@ -1850,6 +1877,7 @@
1850
1877
  if ( !table.config.cache || $.isEmptyObject( table.config.cache ) ) {
1851
1878
  return;
1852
1879
  }
1880
+
1853
1881
  var indx, val, txt, t, $filters, $filter,
1854
1882
  c = table.config,
1855
1883
  wo = c.widgetOptions,
@@ -1865,6 +1893,7 @@
1865
1893
  .find( 'thead' )
1866
1894
  .find( 'select.' + tscss.filter + '[data-column="' + column + '"]' )
1867
1895
  .val();
1896
+
1868
1897
  // nothing included in arry ( external source ), so get the options from
1869
1898
  // filter_selectSource or column data
1870
1899
  if ( typeof arry === 'undefined' || arry === '' ) {
@@ -1,4 +1,4 @@
1
- /*! Widget: filter - updated 9/1/2015 (v2.23.3) *//*
1
+ /*! Widget: filter - updated 9/23/2015 (v2.23.4) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -21,6 +21,7 @@
21
21
  options : {
22
22
  filter_childRows : false, // if true, filter includes child row content in the search
23
23
  filter_childByColumn : false, // ( filter_childRows must be true ) if true = search child rows by column; false = search all child row text grouped
24
+ filter_childWithSibs : true, // if true, include matching child row siblings
24
25
  filter_columnFilters : true, // if true, a filter will be added to the top of each table column
25
26
  filter_columnAnyMatch: true, // if true, allows using '#:{query}' in AnyMatch searches ( column:query )
26
27
  filter_cellFilter : '', // css class name added to the filter cell ( string or array )
@@ -357,7 +358,7 @@
357
358
  c.$table.addClass( 'hasFilters' );
358
359
 
359
360
  // define timers so using clearTimeout won't cause an undefined error
360
- wo.searchTimer = null;
361
+ wo.filter_searchTimer = null;
361
362
  wo.filter_initTimer = null;
362
363
  wo.filter_formatterCount = 0;
363
364
  wo.filter_formatterInit = [];
@@ -490,7 +491,7 @@
490
491
  .find( 'select.' + tscss.filter + '[data-column="' + column + '"]' )
491
492
  .append( options );
492
493
  txt = wo.filter_selectSource;
493
- fxn = $.isFunction( txt ) ? true : ts.getColumnData( table, txt, column );
494
+ fxn = typeof txt === 'function' ? true : ts.getColumnData( table, txt, column );
494
495
  if ( fxn ) {
495
496
  // updating so the extra options are appended
496
497
  tsf.buildSelect( c.table, column, '', true, $header.hasClass( wo.filter_onlyAvail ) );
@@ -509,7 +510,7 @@
509
510
  }
510
511
 
511
512
  if ( wo.filter_hideFilters ) {
512
- tsf.hideFilters( table, c );
513
+ tsf.hideFilters( c );
513
514
  }
514
515
 
515
516
  // show processing icon
@@ -636,7 +637,7 @@
636
637
  return parsed ? c.parsers[column].format( filter, c.table, [], column ) : filter;
637
638
  },
638
639
  buildRow: function( table, c, wo ) {
639
- var col, column, $header, buildSelect, disabled, name, ffxn, tmp,
640
+ var col, column, $header, makeSelect, disabled, name, ffxn, tmp,
640
641
  // c.columns defined in computeThIndexes()
641
642
  cellFilter = wo.filter_cellFilter,
642
643
  columns = c.columns,
@@ -660,14 +661,14 @@
660
661
  // assuming last cell of a column is the main column
661
662
  $header = c.$headerIndexed[ column ];
662
663
  ffxn = ts.getColumnData( table, wo.filter_functions, column );
663
- buildSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||
664
+ makeSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||
664
665
  $header.hasClass( 'filter-select' );
665
666
  // get data from jQuery data, metadata, headers option or header class name
666
667
  col = ts.getColumnData( table, c.headers, column );
667
668
  disabled = ts.getData( $header[0], col, 'filter' ) === 'false' ||
668
669
  ts.getData( $header[0], col, 'parser' ) === 'false';
669
670
 
670
- if ( buildSelect ) {
671
+ if ( makeSelect ) {
671
672
  buildFilter = $( '<select>' ).appendTo( c.$filters.eq( column ) );
672
673
  } else {
673
674
  ffxn = ts.getColumnData( table, wo.filter_formatter, column );
@@ -769,10 +770,10 @@
769
770
  },
770
771
  searching: function( table, filter, skipFirst ) {
771
772
  var wo = table.config.widgetOptions;
772
- clearTimeout( wo.searchTimer );
773
+ clearTimeout( wo.filter_searchTimer );
773
774
  if ( typeof filter === 'undefined' || filter === true ) {
774
775
  // delay filtering
775
- wo.searchTimer = setTimeout( function() {
776
+ wo.filter_searchTimer = setTimeout( function() {
776
777
  tsf.checkFilters( table, filter, skipFirst );
777
778
  }, wo.filter_liveSearch ? wo.filter_searchDelay : 10 );
778
779
  } else {
@@ -830,7 +831,7 @@
830
831
  return false;
831
832
  }
832
833
  },
833
- hideFilters: function( table, c ) {
834
+ hideFilters: function( c ) {
834
835
  var timer;
835
836
  c.$table
836
837
  .find( '.' + tscss.filterRow )
@@ -907,7 +908,7 @@
907
908
  targets = wo.filter_initialized || !$input.filter( wo.filter_anyColumnSelector ).length,
908
909
  columns = [],
909
910
  val = $.trim( tsf.getLatestSearch( $input ).attr( 'data-column' ) || '' );
910
- if ( !/[,-]/.test(val) && val.length === 1 ) {
911
+ if ( /^[0-9]+$/.test(val)) {
911
912
  return parseInt( val, 10 );
912
913
  }
913
914
  // process column range
@@ -1121,7 +1122,7 @@
1121
1122
  !table.config.widgetOptions.filter_initialized ) {
1122
1123
  return;
1123
1124
  }
1124
- var len, norm_rows, rowData, $rows, rowIndex, tbodyIndex, $tbody, columnIndex,
1125
+ var len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,
1125
1126
  isChild, childRow, lastSearch, showRow, time, val, indx,
1126
1127
  notFiltered, searchFiltered, query, injected, res, id, txt,
1127
1128
  storedFilters = $.extend( [], filters ),
@@ -1309,24 +1310,37 @@
1309
1310
  '';
1310
1311
  }
1311
1312
 
1312
- showRow = tsf.processRow( c, data, vars );
1313
+ showRow = false;
1314
+ val = tsf.processRow( c, data, vars );
1313
1315
  childRow = rowData.$row.filter( ':gt( 0 )' );
1314
-
1315
1316
  if ( wo.filter_childRows && childRow.length ) {
1317
+ if ( !wo.filter_childWithSibs ) {
1318
+ // hide all child rows
1319
+ childRow.addClass( wo.filter_filteredRow );
1320
+ }
1316
1321
  if ( wo.filter_childByColumn ) {
1317
1322
  // cycle through each child row
1318
1323
  for ( indx = 0; indx < childRow.length; indx++ ) {
1319
1324
  data.$row = childRow.eq( indx );
1320
1325
  data.cacheArray = rowData.child[ indx ];
1321
1326
  data.rawArray = data.cacheArray;
1327
+ val = tsf.processRow( c, data, vars );
1322
1328
  // use OR comparison on child rows
1323
- showRow = showRow || tsf.processRow( c, data, vars );
1329
+ showRow = showRow || val;
1330
+ if ( !wo.filter_childWithSibs && val ) {
1331
+ childRow.eq( indx ).removeClass( wo.filter_filteredRow );
1332
+ }
1324
1333
  }
1325
1334
  }
1326
- childRow.toggleClass( wo.filter_filteredRow, !showRow );
1335
+ } else {
1336
+ showRow = val;
1327
1337
  }
1328
-
1329
- rowData.$row
1338
+ $row = rowData.$row;
1339
+ // if only showing resulting child row, only include parent
1340
+ if ( !wo.filter_childWithSibs ) {
1341
+ $row = $row.eq( 0 );
1342
+ }
1343
+ $row
1330
1344
  .toggleClass( wo.filter_filteredRow, !showRow )[0]
1331
1345
  .display = showRow ? '' : 'none';
1332
1346
  }
@@ -1354,14 +1368,12 @@
1354
1368
  },
1355
1369
  getOptionSource: function( table, column, onlyAvail ) {
1356
1370
  table = $( table )[0];
1357
- var cts, txt, indx, len,
1358
- c = table.config,
1371
+ var c = table.config,
1359
1372
  wo = c.widgetOptions,
1360
- parsed = [],
1361
1373
  arry = false,
1362
1374
  source = wo.filter_selectSource,
1363
1375
  last = c.$table.data( 'lastSearch' ) || [],
1364
- fxn = $.isFunction( source ) ? true : ts.getColumnData( table, source, column );
1376
+ fxn = typeof source === 'function' ? true : ts.getColumnData( table, source, column );
1365
1377
 
1366
1378
  if ( onlyAvail && last[column] !== '' ) {
1367
1379
  onlyAvail = false;
@@ -1380,11 +1392,25 @@
1380
1392
  // custom select source function for a SPECIFIC COLUMN
1381
1393
  arry = fxn( table, column, onlyAvail );
1382
1394
  }
1395
+
1383
1396
  if ( arry === false ) {
1384
1397
  // fall back to original method
1385
1398
  arry = tsf.getOptions( table, column, onlyAvail );
1386
1399
  }
1387
1400
 
1401
+ return tsf.processOptions( table, column, arry );
1402
+
1403
+ },
1404
+ processOptions: function( table, column, arry ) {
1405
+ if ( !$.isArray( arry ) ) {
1406
+ return false;
1407
+ }
1408
+ table = $( table )[0];
1409
+ var cts, txt, indx, len,
1410
+ c = table.config,
1411
+ validColumn = typeof column !== 'undefined' && column !== null && column >= 0 && column < c.columns,
1412
+ parsed = [];
1413
+
1388
1414
  // get unique elements and sort the list
1389
1415
  // if $.tablesorter.sortText exists ( not in the original tablesorter ),
1390
1416
  // then natural sort the list otherwise use a basic sort
@@ -1392,7 +1418,7 @@
1392
1418
  return $.inArray( value, arry ) === indx;
1393
1419
  });
1394
1420
 
1395
- if ( c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {
1421
+ if ( validColumn && c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {
1396
1422
  // unsorted select options
1397
1423
  return arry;
1398
1424
  } else {
@@ -1405,7 +1431,8 @@
1405
1431
  parsed.push({
1406
1432
  t : txt,
1407
1433
  // check parser length - fixes #934
1408
- p : c.parsers && c.parsers.length && c.parsers[ column ].format( txt, table, [], column ) || txt
1434
+ p : validColumn && c.parsers && c.parsers.length &&
1435
+ c.parsers[ column ].format( txt, table, [], column ) || txt
1409
1436
  });
1410
1437
  }
1411
1438
 
@@ -1415,10 +1442,10 @@
1415
1442
  // sortNatural breaks if you don't pass it strings
1416
1443
  var x = a.p.toString(),
1417
1444
  y = b.p.toString();
1418
- if ( $.isFunction( cts ) ) {
1445
+ if ( validColumn && typeof cts === 'function' ) {
1419
1446
  // custom OVERALL text sorter
1420
1447
  return cts( x, y, true, column, table );
1421
- } else if ( typeof cts === 'object' && cts.hasOwnProperty( column ) ) {
1448
+ } else if ( validColumn && typeof cts === 'object' && cts.hasOwnProperty( column ) ) {
1422
1449
  // custom text sorter for a SPECIFIC COLUMN
1423
1450
  return cts[column]( x, y, true, column, table );
1424
1451
  } else if ( ts.sortNatural ) {
@@ -1476,6 +1503,7 @@
1476
1503
  if ( !table.config.cache || $.isEmptyObject( table.config.cache ) ) {
1477
1504
  return;
1478
1505
  }
1506
+
1479
1507
  var indx, val, txt, t, $filters, $filter,
1480
1508
  c = table.config,
1481
1509
  wo = c.widgetOptions,
@@ -1491,6 +1519,7 @@
1491
1519
  .find( 'thead' )
1492
1520
  .find( 'select.' + tscss.filter + '[data-column="' + column + '"]' )
1493
1521
  .val();
1522
+
1494
1523
  // nothing included in arry ( external source ), so get the options from
1495
1524
  // filter_selectSource or column data
1496
1525
  if ( typeof arry === 'undefined' || arry === '' ) {
@@ -465,6 +465,10 @@
465
465
  }, 40 );
466
466
  });
467
467
  wo.math_isUpdating = false;
468
+ // math widget initialized after table - see #946
469
+ if ( table.hasInitialized ) {
470
+ math.recalculate( c, wo, true );
471
+ }
468
472
  },
469
473
  // this remove function is called when using the refreshWidgets method or when destroying the tablesorter plugin
470
474
  // this function only applies to tablesorter v2.4+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jquery-tablesorter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.3
4
+ version: 1.18.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jun Lin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-09-01 00:00:00.000000000 Z
12
+ date: 2015-09-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties