jquery-tablesorter 1.19.3 → 1.19.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d149c977d4eef786b52e3303d1fcd2318bafbc11
4
- data.tar.gz: 7f46140dd3ef77f0fe4205020f420906e7214318
3
+ metadata.gz: 62741a2df0ebdcde5ec17b1d93db4b19e86f6264
4
+ data.tar.gz: d1c841c3f0905a99e159fb6727be8dd238617ab7
5
5
  SHA512:
6
- metadata.gz: 1dfd69020e71883e894a7a2bcb3c7bcd1d9a2f5da11d2b995fb372a150a2288894fc950cdc5b152c599654f1a6acc8e3a9179e9c6a94ce02b97a6af721d66642
7
- data.tar.gz: 464dc10ac61645a0ded0ef86d9246f7ff0a1a2d6ecf44d4a55c19f1166721a8d732eb4df82e06dd6392153c248c4393ed166769fe27787b8e2d5e84463abdcd8
6
+ metadata.gz: 1807a2f47eb7238a2d388c3295619cc2ec975caeec0cdf9203cf520f79417916fe161e06f5acc3dfe684afa0f2071d2f577e8544c06ae2b10d83e6cf8a95dcd0
7
+ data.tar.gz: 8b5958478a5222a04a117ab2fafdb613372851d8f8e3c7ad913fe2c29f514a95218808f2ddb46bef105c175c70954b22053102c5f6ce4c183c8ae886068c1a76
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.24.5 (11/10/2015), [documentation]
7
+ Current tablesorter version: 2.24.6 (11/22/2015), [documentation]
8
8
 
9
9
  Any issue associated with the js/css files, please report to [Mottie's fork].
10
10
 
@@ -1,7 +1,7 @@
1
1
  module JqueryTablesorter
2
2
  MAJOR = 1
3
3
  MINOR = 19
4
- TINY = 3
4
+ TINY = 4
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].compact.join('.')
7
7
  end
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * tablesorter (FORK) pager plugin
3
- * updated 11/10/2015 (v2.24.5)
3
+ * updated 11/22/2015 (v2.24.6)
4
4
  */
5
5
  /*jshint browser:true, jquery:true, unused:false */
6
6
  ;(function($) {
@@ -126,13 +126,13 @@
126
126
  $this = this,
127
127
 
128
128
  // hide arrows at extremes
129
- pagerArrows = function(p, disable) {
129
+ pagerArrows = function( table, p, disable ) {
130
130
  var a = 'addClass',
131
131
  r = 'removeClass',
132
132
  d = p.cssDisabled,
133
133
  dis = !!disable,
134
134
  first = ( dis || p.page === 0 ),
135
- tp = Math.min( p.totalPages, p.filteredPages ),
135
+ tp = getTotalPages( table, p ),
136
136
  last = ( dis || (p.page === tp - 1) || tp === 0 );
137
137
  if ( p.updateArrows ) {
138
138
  p.$container.find(p.cssFirst + ',' + p.cssPrev)[ first ? a : r ](d).attr('aria-disabled', first);
@@ -170,11 +170,11 @@
170
170
  if (p.countChildRows) { t.push(c.cssChildRow); }
171
171
  p.totalPages = Math.ceil( p.totalRows / sz ); // needed for "pageSize" method
172
172
  c.totalRows = p.totalRows;
173
- parsePageNumber( p );
173
+ parsePageNumber( table, p );
174
174
  calcFilters(table, p);
175
175
  c.filteredRows = p.filteredRows;
176
176
  p.filteredPages = Math.ceil( p.filteredRows / sz ) || 0;
177
- if ( Math.min( p.totalPages, p.filteredPages ) >= 0 ) {
177
+ if ( getTotalPages( table, p ) >= 0 ) {
178
178
  t = (p.size * p.page > p.filteredRows) && completed;
179
179
  p.page = (t) ? p.pageReset || 0 : p.page;
180
180
  p.startRow = (t) ? p.size * p.page + 1 : (p.filteredRows === 0 ? 0 : p.size * p.page + 1);
@@ -203,7 +203,7 @@
203
203
  });
204
204
  if ( p.$goto.length ) {
205
205
  t = '';
206
- options = buildPageSelect(p);
206
+ options = buildPageSelect( table, p );
207
207
  len = options.length;
208
208
  for (indx = 0; indx < len; indx++) {
209
209
  t += '<option value="' + options[indx] + '">' + options[indx] + '</option>';
@@ -221,7 +221,7 @@
221
221
  });
222
222
  }
223
223
  }
224
- pagerArrows(p);
224
+ pagerArrows( table, p );
225
225
  fixHeight(table, p);
226
226
  if (p.initialized && completed !== false) {
227
227
  if (c.debug) {
@@ -238,11 +238,11 @@
238
238
  }
239
239
  },
240
240
 
241
- buildPageSelect = function(p) {
241
+ buildPageSelect = function( table, p ) {
242
242
  // Filter the options page number link array if it's larger than 'maxOptionSize'
243
243
  // as large page set links will slow the browser on large dom inserts
244
244
  var i, central_focus_size, focus_option_pages, insert_index, option_length, focus_length,
245
- pg = Math.min( p.totalPages, p.filteredPages ) || 1,
245
+ pg = getTotalPages( table, p ) || 1,
246
246
  // make skip set size multiples of 5
247
247
  skip_set_size = Math.ceil( ( pg / p.maxOptionSize ) / 5 ) * 5,
248
248
  large_collection = pg > p.maxOptionSize,
@@ -373,7 +373,7 @@
373
373
  p.size = parsePageSize( p, p.$size.val(), 'get' );
374
374
  p.$size.val( parsePageSize( p, p.size, 'set' ) );
375
375
  $.data(table, 'pagerLastSize', p.size);
376
- pagerArrows(p);
376
+ pagerArrows( table, p );
377
377
  if ( !p.removeRows ) {
378
378
  hideRows(table, p);
379
379
  $(table).bind('sortEnd filterEnd '.split(' ').join(table.config.namespace + 'pager '), function(){
@@ -661,7 +661,7 @@
661
661
  showAllRows = function(table, p) {
662
662
  var index, $controls, len;
663
663
  if ( p.ajax ) {
664
- pagerArrows(p, true);
664
+ pagerArrows( table, p, true );
665
665
  } else {
666
666
  $.data(table, 'pagerLastPage', p.page);
667
667
  $.data(table, 'pagerLastSize', p.size);
@@ -719,8 +719,7 @@
719
719
  }
720
720
  // abort page move if the table has filters and has not been initialized
721
721
  if (p.ajax && ts.hasWidget(table, 'filter') && !c.widgetOptions.filter_initialized) { return; }
722
-
723
- parsePageNumber( p );
722
+ parsePageNumber( table, p );
724
723
  calcFilters(table, p);
725
724
  // fixes issue where one currentFilter is [] and the other is ['','',''],
726
725
  // making the next if comparison think the filters are different (joined by commas). Fixes #202.
@@ -768,29 +767,33 @@
768
767
  }
769
768
  },
770
769
 
770
+ getTotalPages = function( table, p ) {
771
+ return ts.hasWidget( table, 'filter' ) ? Math.min( p.totalPages, p.filteredPages ) : p.totalPages;
772
+ },
773
+
771
774
  // set to either set or get value
772
775
  parsePageSize = function( p, size, mode ) {
773
776
  var s = parseInt( size, 10 ) || p.size || p.settings.size || 10,
774
777
  // if select does not contain an "all" option, use size
775
778
  setAll = p.$size.find( 'option[value="all"]' ).length ? 'all' : p.totalRows;
776
779
  return /all/i.test( size ) || s === p.totalRows ?
777
- // "get" to set `p.size` or "set" to set `p.$size.val()`
780
+ // "get" to get `p.size` or "set" to set `p.$size.val()`
778
781
  ( mode === 'get' ? p.totalRows : setAll ) :
779
782
  ( mode === 'get' ? s : p.size );
780
783
  },
781
784
 
782
- parsePageNumber = function( p ) {
783
- var min = Math.min( p.totalPages, p.filteredPages ) - 1;
785
+ parsePageNumber = function( table, p ) {
786
+ var min = getTotalPages( table, p ) - 1;
784
787
  p.page = parseInt( p.page, 10 );
785
788
  if ( p.page < 0 || isNaN( p.page ) ) { p.page = 0; }
786
- if ( p.page > min && p.page !== 0 ) { p.page = min; }
789
+ if ( p.page > min && min >= 0 ) { p.page = min; }
787
790
  return p.page;
788
791
  },
789
792
 
790
793
  setPageSize = function(table, size, p) {
791
794
  p.size = parsePageSize( p, size, 'get' );
792
795
  p.$size.val( parsePageSize( p, p.size, 'set' ) );
793
- $.data(table, 'pagerLastPage', parsePageNumber( p ) );
796
+ $.data(table, 'pagerLastPage', parsePageNumber( table, p ) );
794
797
  $.data(table, 'pagerLastSize', p.size);
795
798
  p.totalPages = Math.ceil( p.totalRows / p.size );
796
799
  p.filteredPages = Math.ceil( p.filteredRows / p.size );
@@ -803,14 +806,15 @@
803
806
  },
804
807
 
805
808
  moveToLastPage = function(table, p) {
806
- p.page = ( Math.min( p.totalPages, p.filteredPages ) - 1 );
809
+ p.page = getTotalPages( table, p ) - 1;
807
810
  moveToPage(table, p);
808
811
  },
809
812
 
810
813
  moveToNextPage = function(table, p) {
811
814
  p.page++;
812
- if ( p.page >= ( Math.min( p.totalPages, p.filteredPages ) - 1 ) ) {
813
- p.page = ( Math.min( p.totalPages, p.filteredPages ) - 1 );
815
+ var last = getTotalPages( table, p ) - 1;
816
+ if ( p.page >= last ) {
817
+ p.page = last;
814
818
  }
815
819
  moveToPage(table, p);
816
820
  },
@@ -855,7 +859,7 @@
855
859
  size = p.$size.find('option[selected]').val();
856
860
  p.size = $.data(table, 'pagerLastSize') || parsePageSize( p, p.size, 'get' );
857
861
  p.$size.val( parsePageSize( p, p.size, 'set' ) ); // set page size
858
- p.totalPages = Math.ceil( Math.min( p.totalRows, p.filteredRows ) / p.size );
862
+ p.totalPages = Math.ceil( getTotalPages( table, p ) / p.size );
859
863
  // if table id exists, include page display with aria info
860
864
  if ( table.id ) {
861
865
  info = table.id + '_pager_info';
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 11-10-2015 (v2.24.5)*/
7
+ /*! tablesorter (FORK) - updated 11-22-2015 (v2.24.6)*/
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.24.5 *//*
19
+ /*! TableSorter (FORK) v2.24.6 *//*
20
20
  * Client-side table sorting with ease!
21
21
  * @requires jQuery v1.2.6+
22
22
  *
@@ -39,7 +39,7 @@
39
39
  'use strict';
40
40
  var ts = $.tablesorter = {
41
41
 
42
- version : '2.24.5',
42
+ version : '2.24.6',
43
43
 
44
44
  parsers : [],
45
45
  widgets : [],
@@ -207,6 +207,9 @@
207
207
  bottom : false
208
208
  },
209
209
 
210
+ // placeholder date parser data (globalize)
211
+ dates : {},
212
+
210
213
  // These methods can be applied on table.config instance
211
214
  instanceMethods : {},
212
215
 
@@ -330,10 +333,10 @@
330
333
  $table
331
334
  .unbind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace )
332
335
  .bind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace, function( e ) {
333
- clearTimeout( c.processTimer );
336
+ clearTimeout( c.timerProcessing );
334
337
  ts.isProcessing( table );
335
338
  if ( e.type === 'sortBegin' ) {
336
- c.processTimer = setTimeout( function() {
339
+ c.timerProcessing = setTimeout( function() {
337
340
  ts.isProcessing( table, true );
338
341
  }, 500 );
339
342
  }
@@ -750,20 +753,24 @@
750
753
  },
751
754
 
752
755
  detectParserForColumn : function( c, rows, rowIndex, cellIndex ) {
753
- var cur, $node,
756
+ var cur, $node, row,
754
757
  indx = ts.parsers.length,
755
758
  node = false,
756
759
  nodeValue = '',
757
760
  keepLooking = true;
758
761
  while ( nodeValue === '' && keepLooking ) {
759
762
  rowIndex++;
760
- if ( rows[ rowIndex ] ) {
761
- node = rows[ rowIndex ].cells[ cellIndex ];
762
- nodeValue = ts.getElementText( c, node, cellIndex );
763
- $node = $( node );
764
- if ( c.debug ) {
765
- console.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +
766
- cellIndex + ': "' + nodeValue + '"' );
763
+ row = rows[ rowIndex ];
764
+ // stop looking after 50 empty rows
765
+ if ( row && rowIndex < 50 ) {
766
+ if ( row.className.indexOf( ts.cssIgnoreRow ) < 0 ) {
767
+ node = rows[ rowIndex ].cells[ cellIndex ];
768
+ nodeValue = ts.getElementText( c, node, cellIndex );
769
+ $node = $( node );
770
+ if ( c.debug ) {
771
+ console.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +
772
+ cellIndex + ': "' + nodeValue + '"' );
773
+ }
767
774
  }
768
775
  } else {
769
776
  keepLooking = false;
@@ -1858,6 +1865,8 @@
1858
1865
  }
1859
1866
  if ( c.debug ) { time = new Date(); }
1860
1867
  ts.addWidgetFromClass( table );
1868
+ // prevent "tablesorter-ready" from firing multiple times in a row
1869
+ clearTimeout( c.timerReady );
1861
1870
  if ( c.widgets.length ) {
1862
1871
  table.isApplyingWidgets = true;
1863
1872
  // ensure unique widget ids
@@ -1927,11 +1936,11 @@
1927
1936
  callback( table );
1928
1937
  }
1929
1938
  }
1930
- setTimeout( function() {
1939
+ c.timerReady = setTimeout( function() {
1931
1940
  table.isApplyingWidgets = false;
1932
1941
  $.data( table, 'lastWidgetApplication', new Date() );
1933
- c.$table.trigger('tablesorter-ready');
1934
- }, 0 );
1942
+ c.$table.trigger( 'tablesorter-ready' );
1943
+ }, 10 );
1935
1944
  if ( c.debug ) {
1936
1945
  widget = c.widgets.length;
1937
1946
  console.log( 'Completed ' +
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.24.5 *//*
1
+ /*! TableSorter (FORK) v2.24.6 *//*
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.24.5',
24
+ version : '2.24.6',
25
25
 
26
26
  parsers : [],
27
27
  widgets : [],
@@ -189,6 +189,9 @@
189
189
  bottom : false
190
190
  },
191
191
 
192
+ // placeholder date parser data (globalize)
193
+ dates : {},
194
+
192
195
  // These methods can be applied on table.config instance
193
196
  instanceMethods : {},
194
197
 
@@ -312,10 +315,10 @@
312
315
  $table
313
316
  .unbind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace )
314
317
  .bind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace, function( e ) {
315
- clearTimeout( c.processTimer );
318
+ clearTimeout( c.timerProcessing );
316
319
  ts.isProcessing( table );
317
320
  if ( e.type === 'sortBegin' ) {
318
- c.processTimer = setTimeout( function() {
321
+ c.timerProcessing = setTimeout( function() {
319
322
  ts.isProcessing( table, true );
320
323
  }, 500 );
321
324
  }
@@ -732,20 +735,24 @@
732
735
  },
733
736
 
734
737
  detectParserForColumn : function( c, rows, rowIndex, cellIndex ) {
735
- var cur, $node,
738
+ var cur, $node, row,
736
739
  indx = ts.parsers.length,
737
740
  node = false,
738
741
  nodeValue = '',
739
742
  keepLooking = true;
740
743
  while ( nodeValue === '' && keepLooking ) {
741
744
  rowIndex++;
742
- if ( rows[ rowIndex ] ) {
743
- node = rows[ rowIndex ].cells[ cellIndex ];
744
- nodeValue = ts.getElementText( c, node, cellIndex );
745
- $node = $( node );
746
- if ( c.debug ) {
747
- console.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +
748
- cellIndex + ': "' + nodeValue + '"' );
745
+ row = rows[ rowIndex ];
746
+ // stop looking after 50 empty rows
747
+ if ( row && rowIndex < 50 ) {
748
+ if ( row.className.indexOf( ts.cssIgnoreRow ) < 0 ) {
749
+ node = rows[ rowIndex ].cells[ cellIndex ];
750
+ nodeValue = ts.getElementText( c, node, cellIndex );
751
+ $node = $( node );
752
+ if ( c.debug ) {
753
+ console.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +
754
+ cellIndex + ': "' + nodeValue + '"' );
755
+ }
749
756
  }
750
757
  } else {
751
758
  keepLooking = false;
@@ -1840,6 +1847,8 @@
1840
1847
  }
1841
1848
  if ( c.debug ) { time = new Date(); }
1842
1849
  ts.addWidgetFromClass( table );
1850
+ // prevent "tablesorter-ready" from firing multiple times in a row
1851
+ clearTimeout( c.timerReady );
1843
1852
  if ( c.widgets.length ) {
1844
1853
  table.isApplyingWidgets = true;
1845
1854
  // ensure unique widget ids
@@ -1909,11 +1918,11 @@
1909
1918
  callback( table );
1910
1919
  }
1911
1920
  }
1912
- setTimeout( function() {
1921
+ c.timerReady = setTimeout( function() {
1913
1922
  table.isApplyingWidgets = false;
1914
1923
  $.data( table, 'lastWidgetApplication', new Date() );
1915
- c.$table.trigger('tablesorter-ready');
1916
- }, 0 );
1924
+ c.$table.trigger( 'tablesorter-ready' );
1925
+ }, 10 );
1917
1926
  if ( c.debug ) {
1918
1927
  widget = c.widgets.length;
1919
1928
  console.log( 'Completed ' +
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 11-10-2015 (v2.24.5)*/
7
+ /*! tablesorter (FORK) - updated 11-22-2015 (v2.24.6)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -1,31 +1,30 @@
1
- /*! Parser: Month - updated 11/2/2015 (v2.24.1) */
1
+ /*! Parser: Month - updated 11/22/2015 (v2.24.6) */
2
2
  /* Demo: http://jsfiddle.net/Mottie/abkNM/4169/ */
3
3
  /*jshint jquery:true */
4
4
  ;(function($){
5
5
  'use strict';
6
6
 
7
7
  var ts = $.tablesorter;
8
- ts.dates = $.extend( {}, {
8
+
9
+ if ( !ts.dates ) { ts.dates = {}; }
10
+ if ( !ts.dates.months ) { ts.dates.months = {}; }
11
+ ts.dates.months.en = {
9
12
  // See http://mottie.github.io/tablesorter/docs/example-widget-grouping.html
10
13
  // for details on how to use CLDR data for a locale to add data for this parser
11
14
  // CLDR returns an object { 1: "Jan", 2: "Feb", 3: "Mar", ..., 12: "Dec" }
12
- months : {
13
- 'en' : {
14
- 1 : 'Jan',
15
- 2 : 'Feb',
16
- 3 : 'Mar',
17
- 4 : 'Apr',
18
- 5 : 'May',
19
- 6 : 'Jun',
20
- 7 : 'Jul',
21
- 8 : 'Aug',
22
- 9 : 'Sep',
23
- 10: 'Oct',
24
- 11: 'Nov',
25
- 12: 'Dec'
26
- }
27
- }
28
- }, ts.dates );
15
+ 1 : 'Jan',
16
+ 2 : 'Feb',
17
+ 3 : 'Mar',
18
+ 4 : 'Apr',
19
+ 5 : 'May',
20
+ 6 : 'Jun',
21
+ 7 : 'Jul',
22
+ 8 : 'Aug',
23
+ 9 : 'Sep',
24
+ 10: 'Oct',
25
+ 11: 'Nov',
26
+ 12: 'Dec'
27
+ };
29
28
 
30
29
  ts.addParser({
31
30
  id: 'month',
@@ -1,17 +1,25 @@
1
- /*! Parser: date ranges - updated 2/23/2015 (v2.21.0) */
1
+ /*! Parser: date ranges -updated 11/22/2015 (v2.24.6) */
2
2
  /* Include the 'widget-filter-type-insideRange.js' to filter ranges */
3
3
  /*jshint jquery:true */
4
4
  ;(function($){
5
5
  'use strict';
6
6
 
7
- var regex = {
7
+ var ts = $.tablesorter,
8
+ getMonthVal,
9
+
10
+ regex = {
8
11
  mdy : /(\d{1,2}[-\s]\d{1,2}[-\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,
9
12
 
10
13
  dmy : /(\d{1,2}[-\s]\d{1,2}[-\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,
11
14
  dmyreplace : /(\d{1,2})[-\s](\d{1,2})[-\s](\d{4})/,
12
15
 
13
16
  ymd : /(\d{4}[-\s]\d{1,2}[-\s]\d{1,2}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,
14
- ymdreplace : /(\d{4})[-\s](\d{1,2})[-\s](\d{1,2})/
17
+ ymdreplace : /(\d{4})[-\s](\d{1,2})[-\s](\d{1,2})/,
18
+
19
+ // extract out date format (dd MMM yyyy hms) e.g. 13 March 2016 12:55 PM
20
+ overall_dMMMyyyy : /(\d{1,2}\s+\w+\s+\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s\w+)?)?)/g,
21
+ matches_dMMMyyyy : /(\d{1,2})\s+(\w+)\s+(\d{4})/
22
+
15
23
  };
16
24
 
17
25
  /*! date-range MMDDYYYY *//* (2/15/2000 - 5/18/2000) */
@@ -87,4 +95,80 @@
87
95
  type: 'text'
88
96
  });
89
97
 
98
+ if ( !ts.dates ) { ts.dates = {}; }
99
+ if ( !ts.dates.months ) { ts.dates.months = {}; }
100
+ ts.dates.months.en = {
101
+ // See http://mottie.github.io/tablesorter/docs/example-widget-grouping.html
102
+ // for details on how to use CLDR data for a locale to add data for this parser
103
+ // CLDR returns an object { 1: "Jan", 2: "Feb", 3: "Mar", ..., 12: "Dec" }
104
+ 1 : 'Jan',
105
+ 2 : 'Feb',
106
+ 3 : 'Mar',
107
+ 4 : 'Apr',
108
+ 5 : 'May',
109
+ 6 : 'Jun',
110
+ 7 : 'Jul',
111
+ 8 : 'Aug',
112
+ 9 : 'Sep',
113
+ 10: 'Oct',
114
+ 11: 'Nov',
115
+ 12: 'Dec'
116
+ };
117
+
118
+ getMonthVal = function( str, c, cellIndex ) {
119
+ var m, month,
120
+ // add options to 'config.globalize' for all columns --> globalize : { lang: 'en' }
121
+ // or per column by using the column index --> globalize : { 0 : { lang: 'fr' } }
122
+ options = c.globalize && ( c.globalize[ cellIndex ] || c.globalize ) || {},
123
+ months = ts.dates.months[ options.lang || 'en' ];
124
+ if ( c.ignoreCase ) {
125
+ str = str.toLowerCase();
126
+ }
127
+ for ( month in months ) {
128
+ if ( typeof month === 'string' ) {
129
+ m = months[ month ];
130
+ if ( c.ignoreCase ) {
131
+ m = m.toLowerCase();
132
+ }
133
+ if ( str.match( m ) ) {
134
+ return parseInt( month, 10 );
135
+ }
136
+ }
137
+ }
138
+ return str;
139
+ };
140
+
141
+ /*! date-range "dd MMM yyyy - dd MMM yyyy" *//* ( hms optional )*/
142
+ ts.addParser({
143
+ id: 'date-range-dMMMyyyy',
144
+ is: function () {
145
+ return false;
146
+ },
147
+ format: function( text, table, cell, cellIndex ) {
148
+ var date, month, matches, i,
149
+ parsed = [],
150
+ str = text.replace( /\s+/g, ' ' ).match( regex.overall_dMMMyyyy ),
151
+ len = str && str.length;
152
+ if ( len ) {
153
+ for ( i = 0; i < len; i++ ) {
154
+ date = '';
155
+ matches = str[ i ].match( regex.matches_dMMMyyyy );
156
+ if ( matches && matches.length >= 4 ) {
157
+ matches.shift();
158
+ month = getMonthVal( matches[1], table.config, cellIndex );
159
+ if ( !isNaN( month ) ) {
160
+ str[i] = str[i].replace( matches[1], month );
161
+ }
162
+ date = new Date( ( '' + str[ i ] ).replace( ts.regex.shortDateXXY, '$3/$2/$1' ) );
163
+ }
164
+ parsed.push( date instanceof Date && isFinite(date) ? date.getTime() : str[i] );
165
+ }
166
+ // sort from min to max
167
+ return parsed.sort().join( ' - ' );
168
+ }
169
+ return text;
170
+ },
171
+ type: 'text'
172
+ });
173
+
90
174
  })(jQuery);