jquery-tablesorter 1.20.4 → 1.20.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.25.4 *//*
1
+ /*! TableSorter (FORK) v2.25.5 *//*
2
2
  * Client-side table sorting with ease!
3
3
  * @requires jQuery v1.2.6+
4
4
  *
@@ -21,7 +21,7 @@
21
21
  'use strict';
22
22
  var ts = $.tablesorter = {
23
23
 
24
- version : '2.25.4',
24
+ version : '2.25.5',
25
25
 
26
26
  parsers : [],
27
27
  widgets : [],
@@ -733,7 +733,7 @@
733
733
  }
734
734
  }
735
735
  if ( add ) {
736
- ts.parsers.push( parser );
736
+ ts.parsers[ ts.parsers.length ] = parser;
737
737
  }
738
738
  },
739
739
 
@@ -953,7 +953,7 @@
953
953
  }
954
954
  // ensure rowData is always in the same location (after the last column)
955
955
  cols[ c.columns ] = rowData;
956
- cache.normalized.push( cols );
956
+ cache.normalized[ cache.normalized.length ] = cols;
957
957
  }
958
958
  cache.colMax = colMax;
959
959
  // total up rows, not including child rows
@@ -1022,9 +1022,9 @@
1022
1022
  });
1023
1023
  }
1024
1024
  if ( result !== false ) {
1025
- data.parsed.push( parsed );
1026
- data.raw.push( raw );
1027
- data.$cell.push( $cell );
1025
+ data.parsed[ data.parsed.length ] = parsed;
1026
+ data.raw[ data.raw.length ] = raw;
1027
+ data.$cell[ data.$cell.length ] = $cell;
1028
1028
  }
1029
1029
  }
1030
1030
  }
@@ -1213,7 +1213,7 @@
1213
1213
  }
1214
1214
  primary = indx === 0 ? dir : primary;
1215
1215
  group = [ col, parseInt( dir, 10 ) || 0 ];
1216
- c.sortList.push( group );
1216
+ c.sortList[ c.sortList.length ] = group;
1217
1217
  dir = $.inArray( group[ 1 ], order ); // fixes issue #167
1218
1218
  c.sortVars[ col ].count = dir >= 0 ? dir : group[ 1 ] % ( c.sortReset ? 3 : 2 );
1219
1219
  }
@@ -1312,7 +1312,7 @@
1312
1312
  },
1313
1313
 
1314
1314
  addRows : function( c, $row, resort, callback ) {
1315
- var txt, val, tbodyIndex, rowIndex, rows, cellIndex, len,
1315
+ var txt, val, tbodyIndex, rowIndex, rows, cellIndex, len, order,
1316
1316
  cacheIndex, rowData, cells, cell, span,
1317
1317
  // allow passing a row string if only one non-info tbody exists in the table
1318
1318
  valid = typeof $row === 'string' && c.$tbodies.length === 1 && /<tr/.test( $row || '' ),
@@ -1347,12 +1347,13 @@
1347
1347
  for ( rowIndex = 0; rowIndex < rows; rowIndex++ ) {
1348
1348
  cacheIndex = 0;
1349
1349
  len = $row[ rowIndex ].cells.length;
1350
+ order = c.cache[ tbodyIndex ].normalized.length;
1350
1351
  cells = [];
1351
1352
  rowData = {
1352
1353
  child : [],
1353
1354
  raw : [],
1354
1355
  $row : $row.eq( rowIndex ),
1355
- order : c.cache[ tbodyIndex ].normalized.length
1356
+ order : order
1356
1357
  };
1357
1358
  // add each cell
1358
1359
  for ( cellIndex = 0; cellIndex < len; cellIndex++ ) {
@@ -1375,7 +1376,7 @@
1375
1376
  // add the row data to the end
1376
1377
  cells[ c.columns ] = rowData;
1377
1378
  // update cache
1378
- c.cache[ tbodyIndex ].normalized.push( cells );
1379
+ c.cache[ tbodyIndex ].normalized[ order ] = cells;
1379
1380
  }
1380
1381
  // resort using current settings
1381
1382
  ts.checkResort( c, resort, callback );
@@ -1417,7 +1418,7 @@
1417
1418
  parsed = cache[ tbodyIndex ].normalized;
1418
1419
  totalRows = parsed.length;
1419
1420
  for ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {
1420
- rows.push( parsed[ rowIndex ][ c.columns ].$row );
1421
+ rows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;
1421
1422
  // removeRows used by the pager plugin; don't render if using ajax - fixes #411
1422
1423
  if ( !c.appender || ( c.pager && ( !c.pager.removeRows || !wo.pager_removeRows ) && !c.pager.ajax ) ) {
1423
1424
  $curTbody.append( parsed[ rowIndex ][ c.columns ].$row );
@@ -1499,18 +1500,18 @@
1499
1500
  arry = c.sortForce;
1500
1501
  for ( indx = 0; indx < arry.length; indx++ ) {
1501
1502
  if ( arry[ indx ][ 0 ] !== col ) {
1502
- c.sortList.push( arry[ indx ] );
1503
+ c.sortList[ c.sortList.length ] = arry[ indx ];
1503
1504
  }
1504
1505
  }
1505
1506
  }
1506
1507
  // add column to sort list
1507
1508
  dir = order[ c.sortVars[ col ].count ];
1508
1509
  if ( dir < 2 ) {
1509
- c.sortList.push( [ col, dir ] );
1510
+ c.sortList[ c.sortList.length ] = [ col, dir ];
1510
1511
  // add other columns if header spans across multiple
1511
1512
  if ( cell.colSpan > 1 ) {
1512
1513
  for ( indx = 1; indx < cell.colSpan; indx++ ) {
1513
- c.sortList.push( [ col + indx, dir ] );
1514
+ c.sortList[ c.sortList.length ] = [ col + indx, dir ];
1514
1515
  // update count on columns in colSpan
1515
1516
  c.sortVars[ col + indx ].count = $.inArray( dir, order );
1516
1517
  }
@@ -1539,11 +1540,11 @@
1539
1540
  // add column to sort list array
1540
1541
  dir = order[ c.sortVars[ col ].count ];
1541
1542
  if ( dir < 2 ) {
1542
- c.sortList.push( [ col, dir ] );
1543
+ c.sortList[ c.sortList.length ] = [ col, dir ];
1543
1544
  // add other columns if header spans across multiple
1544
1545
  if ( cell.colSpan > 1 ) {
1545
1546
  for ( indx = 1; indx < cell.colSpan; indx++ ) {
1546
- c.sortList.push( [ col + indx, dir ] );
1547
+ c.sortList[ c.sortList.length ] = [ col + indx, dir ];
1547
1548
  // update count on columns in colSpan
1548
1549
  c.sortVars[ col + indx ].count = $.inArray( dir, order );
1549
1550
  }
@@ -1580,7 +1581,7 @@
1580
1581
  break;
1581
1582
  }
1582
1583
  }
1583
- c.sortList.push( [ arry[ indx ][ 0 ], dir ] );
1584
+ c.sortList[ c.sortList.length ] = [ arry[ indx ][ 0 ], dir ];
1584
1585
  }
1585
1586
  }
1586
1587
  }
@@ -1847,7 +1848,7 @@
1847
1848
  ███████▀ ██ █████▀ ▀████▀ ██████ ██ █████▀
1848
1849
  */
1849
1850
  addWidget : function( widget ) {
1850
- ts.widgets.push( widget );
1851
+ ts.widgets[ ts.widgets.length ] = widget;
1851
1852
  },
1852
1853
 
1853
1854
  hasWidget : function( $table, name ) {
@@ -1895,7 +1896,7 @@
1895
1896
  len = widgets.length;
1896
1897
  for ( indx = 0; indx < len; indx++ ) {
1897
1898
  if ( widgets[ indx ].match( widgetClass ) ) {
1898
- c.widgets.push( widgets[ indx ].replace( widgetClass, '$1' ) );
1899
+ c.widgets[ c.widgets.length ] = widgets[ indx ].replace( widgetClass, '$1' );
1899
1900
  }
1900
1901
  }
1901
1902
  }
@@ -1912,7 +1913,7 @@
1912
1913
  applied = false;
1913
1914
  // add widget name to option list so it gets reapplied after sorting, filtering, etc
1914
1915
  if ( $.inArray( name, c.widgets ) < 0 ) {
1915
- c.widgets.push( name );
1916
+ c.widgets[ c.widgets.length ] = name;
1916
1917
  }
1917
1918
  if ( c.debug ) { time = new Date(); }
1918
1919
 
@@ -2022,7 +2023,7 @@
2022
2023
  for ( indx = 0; indx < len; indx++ ) {
2023
2024
  widget = ts.widgets[ indx ];
2024
2025
  if ( widget && widget.id ) {
2025
- name.push( widget.id );
2026
+ name[ name.length ] = widget.id;
2026
2027
  }
2027
2028
  }
2028
2029
  } else {
@@ -2063,7 +2064,7 @@
2063
2064
  for ( indx = 0; indx < len; indx++ ) {
2064
2065
  widget = widgets[ indx ];
2065
2066
  if ( widget && widget.id && ( doAll || $.inArray( widget.id, curWidgets ) < 0 ) ) {
2066
- list.push( widget.id );
2067
+ list[ list.length ] = widget.id;
2067
2068
  }
2068
2069
  }
2069
2070
  ts.removeWidget( table, list.join( ',' ), true );
@@ -2450,7 +2451,7 @@
2450
2451
  console = {};
2451
2452
  console.log = console.warn = console.error = console.table = function() {
2452
2453
  var arg = arguments.length > 1 ? arguments : arguments[0];
2453
- ts.logs.push({ date: Date.now(), log: arg });
2454
+ ts.logs[ ts.logs.length ] = { date: Date.now(), log: arg };
2454
2455
  };
2455
2456
  }
2456
2457
 
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 02-15-2016 (v2.25.4)*/
7
+ /*! tablesorter (FORK) - updated 03-01-2016 (v2.25.5)*/
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
- /*! Widget: storage - updated 3/26/2015 (v2.21.3) */
19
+ /*! Widget: storage - updated 3/1/2016 (v2.25.5) */
20
20
  /*global JSON:false */
21
21
  ;(function ($, window, document) {
22
22
  'use strict';
@@ -86,7 +86,7 @@
86
86
  }
87
87
  }
88
88
  // allow value to be an empty string too
89
- if ((value || value === '') && window.JSON && JSON.hasOwnProperty('stringify')) {
89
+ if (typeof value !== 'undefined' && window.JSON && JSON.hasOwnProperty('stringify')) {
90
90
  // add unique identifiers = url pathname > table ID/index on page > data
91
91
  if (!values[url]) {
92
92
  values[url] = {};
@@ -372,7 +372,7 @@
372
372
 
373
373
  })(jQuery);
374
374
 
375
- /*! Widget: filter - updated 2/15/2016 (v2.25.4) *//*
375
+ /*! Widget: filter - updated 3/1/2016 (v2.25.5) *//*
376
376
  * Requires tablesorter v2.8+ and jQuery 1.7+
377
377
  * by Rob Garrison
378
378
  */
@@ -419,6 +419,7 @@
419
419
  filter_hideFilters : false, // collapse filter row when mouse leaves the area
420
420
  filter_ignoreCase : true, // if true, make all searches case-insensitive
421
421
  filter_liveSearch : true, // if true, search column content while the user types ( with a delay )
422
+ filter_matchType : { 'input': 'exact', 'select': 'exact' }, // global query settings ('exact' or 'match'); overridden by "filter-match" or "filter-exact" class
422
423
  filter_onlyAvail : 'filter-onlyAvail', // a header with a select dropdown & this class name will only show available ( visible ) options within the drop down
423
424
  filter_placeholder : { search : '', select : '' }, // default placeholder text ( overridden by any header 'data-placeholder' setting )
424
425
  filter_reset : null, // jQuery selector string of an element used to reset the filters
@@ -1345,7 +1346,7 @@
1345
1346
  end = c.columns - 1;
1346
1347
  }
1347
1348
  for ( ; start <= end; start++ ) {
1348
- columns.push( start );
1349
+ columns[ columns.length ] = start;
1349
1350
  }
1350
1351
  // remove processed range from val
1351
1352
  val = val.replace( ranges[ indx ], '' );
@@ -1359,7 +1360,7 @@
1359
1360
  if ( singles[ i ] !== '' ) {
1360
1361
  indx = parseInt( singles[ i ], 10 );
1361
1362
  if ( indx < c.columns ) {
1362
- columns.push( indx );
1363
+ columns[ columns.length ] = indx;
1363
1364
  }
1364
1365
  }
1365
1366
  }
@@ -1367,7 +1368,7 @@
1367
1368
  // return all columns
1368
1369
  if ( !columns.length ) {
1369
1370
  for ( indx = 0; indx < c.columns; indx++ ) {
1370
- columns.push( indx );
1371
+ columns[ columns.length ] = indx;
1371
1372
  }
1372
1373
  }
1373
1374
  return columns;
@@ -1403,6 +1404,24 @@
1403
1404
  }
1404
1405
  return filterMatched;
1405
1406
  },
1407
+ matchType: function( c, columnIndex ) {
1408
+ var isMatch,
1409
+ $el = c.$headerIndexed[ columnIndex ];
1410
+ // filter-exact > filter-match > filter_matchType for type
1411
+ if ( $el.hasClass( 'filter-exact' ) ) {
1412
+ isMatch = false;
1413
+ } else if ( $el.hasClass( 'filter-match' ) ) {
1414
+ isMatch = true;
1415
+ } else {
1416
+ // filter-select is not applied when filter_functions are used, so look for a select
1417
+ $el = c.$filters.eq( columnIndex ).find( '.' + tscss.filter );
1418
+ isMatch = $el.length ?
1419
+ c.widgetOptions.filter_matchType[ ( $el[ 0 ].nodeName || '' ).toLowerCase() ] === 'match' :
1420
+ // default to exact, if no inputs found
1421
+ false;
1422
+ }
1423
+ return isMatch;
1424
+ },
1406
1425
  processRow: function( c, data, vars ) {
1407
1426
  var result, filterMatched,
1408
1427
  fxn, ffxn, txt,
@@ -1476,12 +1495,11 @@
1476
1495
  // ignore if filter is empty or disabled
1477
1496
  if ( data.filter ) {
1478
1497
  data.cache = data.cacheArray[ columnIndex ];
1479
- result = data.rawArray[ columnIndex ] || '';
1498
+ result = data.parsed[ columnIndex ] ? data.cache : data.rawArray[ columnIndex ] || '';
1480
1499
  data.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405
1481
1500
  data.iExact = !tsfRegex.type.test( typeof data.exact ) && wo.filter_ignoreCase ?
1482
1501
  data.exact.toLowerCase() : data.exact;
1483
-
1484
- data.isMatch = c.$headerIndexed[ data.index ].hasClass( 'filter-match' );
1502
+ data.isMatch = tsf.matchType( c, columnIndex );
1485
1503
 
1486
1504
  result = showRow; // if showRow is true, show that row
1487
1505
 
@@ -1676,7 +1694,7 @@
1676
1694
  !( tsfRegex.isNeg1.test( val ) || tsfRegex.isNeg2.test( val ) ) &&
1677
1695
  // if filtering using a select without a 'filter-match' class ( exact match ) - fixes #593
1678
1696
  !( val !== '' && c.$filters && c.$filters.filter( '[data-column="' + indx + '"]' ).find( 'select' ).length &&
1679
- !c.$headerIndexed[indx].hasClass( 'filter-match' ) );
1697
+ !tsf.matchType( c, indx ) );
1680
1698
  }
1681
1699
  }
1682
1700
  notFiltered = $rows.not( '.' + wo.filter_filteredRow ).length;
@@ -1865,13 +1883,13 @@
1865
1883
  // table cell to the parser format function
1866
1884
  if ( txt.text ) {
1867
1885
  txt.parsed = parsedTxt;
1868
- parsed.push( txt );
1886
+ parsed[ parsed.length ] = txt;
1869
1887
  } else {
1870
- parsed.push({
1888
+ parsed[ parsed.length ] = {
1871
1889
  text : txt,
1872
1890
  // check parser length - fixes #934
1873
1891
  parsed : parsedTxt
1874
- });
1892
+ };
1875
1893
  }
1876
1894
  }
1877
1895
  // sort parsed select options
@@ -1896,7 +1914,7 @@
1896
1914
  arry = [];
1897
1915
  len = parsed.length;
1898
1916
  for ( indx = 0; indx < len; indx++ ) {
1899
- arry.push( parsed[indx] );
1917
+ arry[ arry.length ] = parsed[indx];
1900
1918
  }
1901
1919
  return arry;
1902
1920
  }
@@ -1925,23 +1943,23 @@
1925
1943
  if ( wo.filter_useParsedData ||
1926
1944
  c.parsers[column].parsed ||
1927
1945
  c.$headerIndexed[column].hasClass( 'filter-parsed' ) ) {
1928
- arry.push( '' + cache.normalized[ rowIndex ][ column ] );
1946
+ arry[ arry.length ] = '' + cache.normalized[ rowIndex ][ column ];
1929
1947
  // child row parsed data
1930
1948
  if ( wo.filter_childRows && wo.filter_childByColumn ) {
1931
1949
  childLen = cache.normalized[ rowIndex ][ c.columns ].$row.length - 1;
1932
1950
  for ( indx = 0; indx < childLen; indx++ ) {
1933
- arry.push( '' + cache.normalized[ rowIndex ][ c.columns ].child[ indx ][ column ] );
1951
+ arry[ arry.length ] = '' + cache.normalized[ rowIndex ][ c.columns ].child[ indx ][ column ];
1934
1952
  }
1935
1953
  }
1936
1954
  } else {
1937
1955
  // get raw cached data instead of content directly from the cells
1938
- arry.push( cache.normalized[ rowIndex ][ c.columns ].raw[ column ] );
1956
+ arry[ arry.length ] = cache.normalized[ rowIndex ][ c.columns ].raw[ column ];
1939
1957
  // child row unparsed data
1940
1958
  if ( wo.filter_childRows && wo.filter_childByColumn ) {
1941
1959
  childLen = cache.normalized[ rowIndex ][ c.columns ].$row.length;
1942
1960
  for ( indx = 1; indx < childLen; indx++ ) {
1943
1961
  child = cache.normalized[ rowIndex ][ c.columns ].$row.eq( indx ).children().eq( column );
1944
- arry.push( '' + ts.getElementText( c, child, column ) );
1962
+ arry[ arry.length ] = '' + ts.getElementText( c, child, column );
1945
1963
  }
1946
1964
  }
1947
1965
  }
@@ -2161,7 +2179,7 @@
2161
2179
 
2162
2180
  })( jQuery );
2163
2181
 
2164
- /*! Widget: stickyHeaders - updated 10/31/2015 (v2.24.0) *//*
2182
+ /*! Widget: stickyHeaders - updated 3/1/2016 (v2.25.5) *//*
2165
2183
  * Requires tablesorter v2.8+ and jQuery 1.4.3+
2166
2184
  * by Rob Garrison
2167
2185
  */
@@ -2206,12 +2224,12 @@
2206
2224
  }
2207
2225
  wo.resize_flag = false;
2208
2226
  };
2209
- checkSizes( false );
2210
2227
  clearInterval(wo.resize_timer);
2211
2228
  if (disable) {
2212
2229
  wo.resize_flag = false;
2213
2230
  return false;
2214
2231
  }
2232
+ checkSizes( false );
2215
2233
  wo.resize_timer = setInterval(function() {
2216
2234
  if (wo.resize_flag) { return; }
2217
2235
  checkSizes();
@@ -2444,7 +2462,7 @@
2444
2462
  .add(wo.stickyHeaders_yScroll)
2445
2463
  .add(wo.stickyHeaders_attachTo)
2446
2464
  .unbind( ('scroll resize '.split(' ').join(namespace)).replace(/\s+/g, ' ') );
2447
- ts.addHeaderResizeEvent(table, false);
2465
+ ts.addHeaderResizeEvent(table, true);
2448
2466
  }
2449
2467
  });
2450
2468
 
@@ -0,0 +1,21 @@
1
+ /*! Parser: hugeNumbers - updated 3/1/2016 (v2.25.5) *//*
2
+ * See https://github.com/Mottie/tablesorter/issues/1161
3
+ */
4
+ /*jshint jquery:true */
5
+ ;( function( $ ) {
6
+ 'use strict';
7
+
8
+ $.tablesorter.addParser({
9
+ id: 'hugeNumbers',
10
+ is : function() {
11
+ return false;
12
+ },
13
+ format : function( str ) {
14
+ // add commas every 12 digits; Number.MAX_SAFE_INTEGER is 16 digits long
15
+ // regex modified from: http://stackoverflow.com/a/2901298/145346
16
+ return str.replace(/\B(?=(\d{12})+(?!\d))/g, ',');
17
+ },
18
+ type : 'text'
19
+ });
20
+
21
+ })( jQuery );
@@ -1,10 +1,10 @@
1
- /*! Widget: editable - updated 2/15/2016 (v2.25.4) *//*
1
+ /*! Widget: editable - updated 3/1/2016 (v2.25.5) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
5
5
  /*jshint browser:true, jquery:true, unused:false */
6
6
  /*global jQuery: false */
7
- ;( function( $ ){
7
+ ;( function( $ ) {
8
8
  'use strict';
9
9
 
10
10
  var tse = $.tablesorter.editable = {
@@ -45,7 +45,7 @@
45
45
  selection.addRange( range );
46
46
  }
47
47
  }
48
- // need delay of at least 100ms or last contenteditable will get refocused
48
+ // need delay of at least 100ms or last contenteditable will get refocused
49
49
  }, 100 );
50
50
  },
51
51
 
@@ -165,7 +165,7 @@
165
165
  // prevent enter from adding into the content
166
166
  $this
167
167
  .off( 'keydown' + namespace )
168
- .on( 'keydown' + namespace, function( e ){
168
+ .on( 'keydown' + namespace, function( e ) {
169
169
  if ( wo.editable_enterToAccept && e.which === 13 && !e.shiftKey ) {
170
170
  e.preventDefault();
171
171
  }
@@ -256,6 +256,18 @@
256
256
  // restore original content on blur
257
257
  $this.html( $this.data( 'original' ) );
258
258
  }
259
+ })
260
+ // paste plain text from Excel - fixes #994
261
+ .on('paste' + namespace, '[contenteditable]', function() {
262
+ var content,
263
+ $this = $(this);
264
+ // setTimeout needed to get pasted-in content
265
+ setTimeout(function() {
266
+ if ($this.is(':focus')) {
267
+ content = '<div>' + $this.html() + '</div>';
268
+ $this.html( $(content).text().trim() );
269
+ }
270
+ }, 0);
259
271
  });
260
272
  },
261
273
  destroy : function( c, wo ) {
@@ -265,7 +277,7 @@
265
277
  tmp = ( 'updateComplete pagerComplete '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' );
266
278
  c.$table.off( tmp );
267
279
 
268
- tmp = ( 'focus blur focusout keydown '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' );
280
+ tmp = ( 'focus blur focusout keydown paste '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' );
269
281
  c.$tbodies
270
282
  .off( tmp )
271
283
  .find( cols.join( ',' ) )
@@ -284,14 +296,14 @@
284
296
  editable_autoResort : false,
285
297
  editable_wrapContent : '<div>', // wrap the cell content... makes this widget work in IE, and with autocomplete
286
298
  editable_trimContent : true, // trim content inside of contenteditable ( remove tabs & carriage returns )
287
- editable_validate : null, // function( text, originalText ){ return text; }
299
+ editable_validate : null, // function( text, originalText ) { return text; }
288
300
  editable_focused : null, // function( text, columnIndex, $element ) {}
289
301
  editable_blur : null, // function( text, columnIndex, $element ) { }
290
302
  editable_selectAll : false, // true/false or function( text, columnIndex, $element ) { return true; }
291
303
  editable_noEdit : 'no-edit',
292
304
  editable_editComplete : 'editComplete'
293
305
  },
294
- init: function( table, thisWidget, c, wo ){
306
+ init: function( table, thisWidget, c, wo ) {
295
307
  if ( !wo.editable_columns.length ) { return; }
296
308
  tse.update( c, wo );
297
309
  tse.bindEvents( c, wo );