jquery-tablesorter 1.21.4 → 1.22.0

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.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/jquery-tablesorter/version.rb +2 -2
  4. data/vendor/assets/images/jquery-tablesorter/bootstrap-black-unsorted.png +0 -0
  5. data/vendor/assets/images/jquery-tablesorter/metro-black-asc.png +0 -0
  6. data/vendor/assets/images/jquery-tablesorter/metro-black-desc.png +0 -0
  7. data/vendor/assets/images/jquery-tablesorter/metro-white-asc.png +0 -0
  8. data/vendor/assets/images/jquery-tablesorter/metro-white-desc.png +0 -0
  9. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.combined.js +63 -43
  10. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +33 -21
  11. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +30 -22
  12. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +62 -24
  13. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-currentSort.js +60 -0
  14. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +13 -10
  15. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +3 -3
  16. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-mark.js +135 -0
  17. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-math.js +24 -15
  18. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +4 -4
  19. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +4 -2
  20. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +10 -5
  21. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +4 -4
  22. data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap.css +2 -2
  23. data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap_2.css +2 -2
  24. data/vendor/assets/stylesheets/jquery-tablesorter/theme.materialize.css +176 -0
  25. metadata +5 -2
@@ -1,4 +1,4 @@
1
- /*! Widget: grouping - updated 7/11/2016 (v2.26.6) *//*
1
+ /*! Widget: grouping - updated 7/31/2016 (v2.27.0) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -144,7 +144,7 @@
144
144
  $label = $row.find( '.group-count' );
145
145
  if ( $label.length ) {
146
146
  if ( wo.group_count ) {
147
- $label.html( wo.group_count.replace( /\{num\}/g, $rows.length ) );
147
+ $label.html( wo.group_count.toString().replace( /\{num\}/g, $rows.length ) );
148
148
  }
149
149
  if ( $.isFunction( wo.group_callback ) ) {
150
150
  wo.group_callback( $row.find( 'td' ), $rows, data.column, c.table );
@@ -167,7 +167,7 @@
167
167
  },
168
168
 
169
169
  groupHeaderHTML : function( c, wo, data ) {
170
- var name = ( data.currentGroup || '' ).replace(/</g, '&lt;').replace(/>/g, '&gt;');
170
+ var name = ( data.currentGroup || '' ).toString().replace(/</g, '&lt;').replace(/>/g, '&gt;');
171
171
  return '<tr class="group-header ' + c.selectorRemove.slice(1) +
172
172
  '" unselectable="on" ' + ( c.tabIndex ? 'tabindex="0" ' : '' ) + 'data-group-index="' +
173
173
  data.groupIndex + '">' +
@@ -0,0 +1,135 @@
1
+ /*! Widget: mark.js - updated 7/31/2016 (v2.27.1) *//*
2
+ * Requires tablesorter v2.8+ and jQuery 1.7+
3
+ * by Rob Garrison
4
+ */
5
+ ;( function( $ ) {
6
+ 'use strict';
7
+ var ts = $.tablesorter;
8
+
9
+ ts.mark = {
10
+ init : function( c ) {
11
+ if ( typeof $.fn.mark === 'function' ) {
12
+ var tmp,
13
+ update = c.widgetOptions.mark_tsUpdate;
14
+ c.$table.on( 'filterEnd.tsmark' + ( update ? ' ' + update : '' ), function( e, filters ) {
15
+ // filterEnd passes "config" as the param
16
+ ts.mark.update( c, e.type === 'filterEnd' ? '' : filters );
17
+ });
18
+ // Regex to split up a query
19
+ tmp = '(?:<|=|>|\\||\"|' + "\\'|" +
20
+ '\\s+(?:&&|-|' +
21
+ ( ts.language.and || 'and' ) + '|' +
22
+ ( ts.language.or || 'or' ) + '|' +
23
+ ( ts.language.to || 'to' ) + ')\\s+)';
24
+ ts.mark.regex.filter = new RegExp(tmp, 'gim');
25
+ } else {
26
+ console.warn('Widget-mark not initialized: missing "jquery.mark.js"');
27
+ }
28
+ },
29
+ regex : {
30
+ mark : /^mark_(.+)$/,
31
+ // test for regex (e.g. "/(lorem|ipsum)/gi")
32
+ pure : /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/
33
+ },
34
+ checkRegex : function( regex ) {
35
+ if ( regex instanceof RegExp ) {
36
+ // prevent lock up of mark.js (see https://github.com/julmot/mark.js/issues/55)
37
+ var result = '\u0001\u0002\u0003\u0004\u0005'.match( regex );
38
+ return result === null || result.length < 5;
39
+ }
40
+ return false;
41
+ },
42
+ cleanMatches : function( matches ) {
43
+ var results = [],
44
+ indx = matches && matches.length || 0;
45
+ while ( indx-- ) {
46
+ if ( matches[indx] !== '' ) {
47
+ results[ results.length ] = matches[ indx ];
48
+ }
49
+ }
50
+ return results;
51
+ },
52
+ update : function( c, filters ) {
53
+ var options = {},
54
+ regex = ts.mark.regex,
55
+ $rows = c.$table
56
+ .find( 'tbody tr' )
57
+ .unmark()
58
+ .not( '.' + ( c.widgetOptions.filter_filteredRow || 'filtered' ) );
59
+ filters = filters || $.tablesorter.getFilters( c.$table );
60
+ // extract & save mark options from widgetOptions (prefixed with "mark_")
61
+ // update dynamically
62
+ $.each( filters, function( indx, filter ) {
63
+ if ( filter ) {
64
+ var testRegex = null,
65
+ matches = filter,
66
+ useRegex = false,
67
+ col = indx === c.columns ? '' : ':nth-child(' + ( indx + 1 ) + ')';
68
+ // regular expression entered
69
+ if ( regex.pure.test( filter ) ) {
70
+ matches = regex.pure.exec( filter );
71
+ // ignore "all" matches (i.e. /.*/)
72
+ if (matches[1] === '.*') {
73
+ matches[1] = '';
74
+ }
75
+ try {
76
+ // make sure to include global flag when testing regex
77
+ testRegex = new RegExp( matches[ 1 ], 'gim' );
78
+ matches = new RegExp( matches[ 1 ], matches[ 2 ] );
79
+ } catch (err) {
80
+ matches = null;
81
+ }
82
+ if ( ts.mark.checkRegex( testRegex ) ) {
83
+ $rows.children( col ).markRegExp( matches, options );
84
+ }
85
+ // matches is either null, invalid, or done my markRegExp
86
+ return;
87
+ }
88
+ // all special querys (or, and, wild cards & fuzzy)
89
+ // regex seems to not be consistent here; so use string indexOf
90
+ // fuzzy or wild card matches
91
+ if ( filter.indexOf( '~' ) === 0 ) {
92
+ useRegex = true;
93
+ // fuzzy search separate each letter
94
+ matches = filter.replace( /~/g, '' ).split( '' );
95
+ } else {
96
+ // wild card matching
97
+ if ( filter.indexOf( '?' ) > -1 ) {
98
+ useRegex = true;
99
+ filter = filter.replace( /\?/g, '\\S{1}' );
100
+ }
101
+ if ( filter.indexOf( '*' ) > -1 ) {
102
+ useRegex = true;
103
+ filter = filter.replace( /\*/g, '\\S*' );
104
+ }
105
+ matches = filter.split( regex.filter );
106
+ }
107
+ if ( useRegex && matches && matches.length ) {
108
+ matches = new RegExp( ts.mark.cleanMatches( matches ).join( '.*' ), 'gim' );
109
+ if ( ts.mark.checkRegex( matches ) ) {
110
+ $rows.children( col ).markRegExp( matches, options );
111
+ }
112
+ } else {
113
+ // pass an array of matches
114
+ $rows.children( col ).mark( ts.mark.cleanMatches( matches ), options );
115
+ }
116
+ }
117
+ });
118
+ }
119
+ };
120
+
121
+ ts.addWidget({
122
+ id: 'mark',
123
+ options: {
124
+ mark_tsUpdate : 'markUpdate'
125
+ },
126
+ init : function( table, thisWidget, c, wo ) {
127
+ ts.mark.init( c, wo );
128
+ },
129
+ remove : function( table, c ) {
130
+ var update = c.widgetOptions.mark_tsUpdate;
131
+ c.$table.off( 'filterEnd.tsmark' + ( update ? ' ' + update : '' ) );
132
+ }
133
+ });
134
+
135
+ })( jQuery );
@@ -1,4 +1,4 @@
1
- /*! Widget: math - updated 3/1/2016 (v2.25.5) *//*
1
+ /*! Widget: math - updated 7/31/2016 (v2.27.0) *//*
2
2
  * Requires tablesorter v2.16+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -216,7 +216,7 @@
216
216
  var undef, time, mathAttr, $mathCells, indx, len,
217
217
  changed = false,
218
218
  filters = {};
219
- if ( c.debug ) {
219
+ if ( c.debug || wo.math_debug ) {
220
220
  time = new Date();
221
221
  }
222
222
 
@@ -232,7 +232,6 @@
232
232
  mathAttr = wo.math_dataAttrib;
233
233
  $mathCells = c.$tbodies.children( 'tr' ).children( '[' + mathAttr + ']' );
234
234
  changed = math.mathType( c, $mathCells, wo.math_priority ) || changed;
235
-
236
235
  // only info tbody cells
237
236
  $mathCells = c.$table
238
237
  .children( '.' + c.cssInfoBlock + ', tfoot' )
@@ -257,17 +256,17 @@
257
256
  // trigger an update only if cells inside the tbody changed
258
257
  if ( changed ) {
259
258
  wo.math_isUpdating = true;
260
- if ( c.debug ) {
261
- console[ console.group ? 'group' : 'log' ]( 'Math widget triggering an update after recalculation' );
259
+ if ( c.debug || wo.math_debug ) {
260
+ console[ console.group ? 'group' : 'log' ]( 'Math widget updating the cache after recalculation' );
262
261
  }
263
262
 
264
- // update internal cache
265
- ts.update( c, undef, function(){
263
+ // update internal cache, but ignore "remove-me" rows and do not resort
264
+ ts.updateCache( c, function() {
266
265
  math.updateComplete( c );
267
266
  if ( !init && typeof wo.math_completed === 'function' ) {
268
267
  wo.math_completed( c );
269
268
  }
270
- if ( c.debug ) {
269
+ if ( c.debug || wo.math_debug ) {
271
270
  console.log( 'Math widget update completed' + ts.benchmark( time ) );
272
271
  }
273
272
  });
@@ -275,7 +274,7 @@
275
274
  if ( !init && typeof wo.math_completed === 'function' ) {
276
275
  wo.math_completed( c );
277
276
  }
278
- if ( c.debug ) {
277
+ if ( c.debug || wo.math_debug ) {
279
278
  console.log( 'Math widget found no changes in data' + ts.benchmark( time ) );
280
279
  }
281
280
  }
@@ -284,7 +283,9 @@
284
283
 
285
284
  updateComplete : function( c ) {
286
285
  var wo = c.widgetOptions;
287
- if ( wo.math_isUpdating && c.debug && console.groupEnd ) { console.groupEnd(); }
286
+ if ( wo.math_isUpdating && (c.debug || wo.math_debug ) && console.groupEnd ) {
287
+ console.groupEnd();
288
+ }
288
289
  wo.math_isUpdating = false;
289
290
  },
290
291
 
@@ -299,7 +300,7 @@
299
300
  // mathType is called multiple times if more than one "hasFilter" is used
300
301
  getAll = math.getAll( c, hasFilter );
301
302
  }
302
- if (c.debug) {
303
+ if (c.debug || wo.math_debug) {
303
304
  console[ console.group ? 'group' : 'log' ]( 'Tablesorter Math widget recalculation' );
304
305
  }
305
306
  // $.each is okay here... only 4 priorities
@@ -308,7 +309,7 @@
308
309
  $targetCells = $cells.filter( '[' + mathAttr + '^=' + type + ']' ),
309
310
  len = $targetCells.length;
310
311
  if ( len ) {
311
- if (c.debug) {
312
+ if (c.debug || wo.math_debug) {
312
313
  console[ console.group ? 'group' : 'log' ]( type );
313
314
  }
314
315
  for ( index = 0; index < len; index++ ) {
@@ -324,7 +325,7 @@
324
325
  if ( equations[ formula ] ) {
325
326
  if ( arry.length ) {
326
327
  result = equations[ formula ]( arry, c );
327
- if ( c.debug ) {
328
+ if ( c.debug || wo.math_debug ) {
328
329
  console.log( $el.attr( mathAttr ), hasFilter ? '("' + hasFilter + '")' : '', arry, '=', result );
329
330
  }
330
331
  } else {
@@ -334,10 +335,10 @@
334
335
  changed = math.output( $el, c, result, arry ) || changed;
335
336
  }
336
337
  }
337
- if ( c.debug && console.groupEnd ) { console.groupEnd(); }
338
+ if ( ( c.debug || wo.math_debug ) && console.groupEnd ) { console.groupEnd(); }
338
339
  }
339
340
  });
340
- if ( c.debug && console.groupEnd ) { console.groupEnd(); }
341
+ if ( ( c.debug || wo.math_debug ) && console.groupEnd ) { console.groupEnd(); }
341
342
  return changed;
342
343
  }
343
344
  return false;
@@ -350,7 +351,14 @@
350
351
  changed = false,
351
352
  prev = $cell.html(),
352
353
  mask = $cell.attr( 'data-' + wo.math_data + '-mask' ) || wo.math_mask,
354
+ target = $cell.attr( 'data-' + wo.math_data + '-target' ) || '',
353
355
  result = ts.formatMask( mask, value, wo.math_wrapPrefix, wo.math_wrapSuffix );
356
+ if (target) {
357
+ $el = $cell.find(target);
358
+ if ($el.length) {
359
+ $cell = $el;
360
+ }
361
+ }
354
362
  if ( typeof wo.math_complete === 'function' ) {
355
363
  result = wo.math_complete( $cell, wo, result, value, arry );
356
364
  }
@@ -583,6 +591,7 @@
583
591
  priority: 100,
584
592
  options: {
585
593
  math_data : 'math',
594
+ math_debug : false,
586
595
  // column index to ignore
587
596
  math_ignore : [],
588
597
  // mask info: https://code.google.com/p/javascript-number-formatter/
@@ -1,4 +1,4 @@
1
- /*! Widget: output - updated 1/15/2016 (v2.25.2) *//*
1
+ /*! Widget: output - updated 7/31/2016 (v2.27.0) *//*
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?)
@@ -145,8 +145,8 @@
145
145
  });
146
146
  headers = output.processRow(c, $this, true, outputJSON);
147
147
 
148
- // all tbody rows
149
- $rows = $el.children('tbody').children('tr');
148
+ // all tbody rows - do not include widget added rows (e.g. grouping widget headers)
149
+ $rows = $el.children('tbody').children('tr').not(c.selectorRemove);
150
150
 
151
151
  // check for a filter callback function first! because
152
152
  // /^f/.test(function(){ console.log('test'); }) is TRUE! (function is converted to a string)
@@ -193,7 +193,7 @@
193
193
 
194
194
  // callback; if true returned, continue processing
195
195
  if ($.isFunction(wo.output_callback)) {
196
- tmp = wo.output_callback(c, mydata);
196
+ tmp = wo.output_callback(c, mydata, c.pager && c.pager.ajaxObject.url || null);
197
197
  if ( tmp === false ) {
198
198
  return;
199
199
  } else if ( typeof tmp === 'string' ) {
@@ -1,4 +1,4 @@
1
- /*! Widget: scroller - updated 7/11/2016 (v2.26.6) *//*
1
+ /*! Widget: scroller - updated 7/31/2016 (v2.27.0) *//*
2
2
  Copyright (C) 2011 T. Connell & Associates, Inc.
3
3
 
4
4
  Dual-licensed under the MIT and GPL licenses
@@ -77,7 +77,9 @@
77
77
  scroller_barWidth : null
78
78
  },
79
79
  format : function( table, c, wo ) {
80
- if ( !c.isScrolling ) {
80
+ if ( c.isScrolling ) {
81
+ ts.scroller.resize( c, wo );
82
+ } else {
81
83
  // initialize here instead of in widget init to give the
82
84
  // filter widget time to finish building the filter row
83
85
  ts.scroller.setup( c, wo );
@@ -1,4 +1,4 @@
1
- /*! Widget: stickyHeaders - updated 5/1/2016 (v2.26.0) *//*
1
+ /*! Widget: stickyHeaders - updated 7/31/2016 (v2.27.0) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.4.3+
3
3
  * by Rob Garrison
4
4
  */
@@ -61,10 +61,11 @@
61
61
  // **************************
62
62
  ts.addWidget({
63
63
  id: 'stickyHeaders',
64
- priority: 60, // sticky widget must be initialized after the filter widget!
64
+ priority: 55, // sticky widget must be initialized after the filter widget!
65
65
  options: {
66
66
  stickyHeaders : '', // extra class name added to the sticky header row
67
- stickyHeaders_attachTo : null, // jQuery selector or object to attach sticky header to
67
+ stickyHeaders_appendTo : null, // jQuery selector or object to phycially attach the sticky headers
68
+ stickyHeaders_attachTo : null, // jQuery selector or object to attach scroll listener to (overridden by xScroll & yScroll settings)
68
69
  stickyHeaders_xScroll : null, // jQuery selector or object to monitor horizontal scroll position (defaults: xScroll > attachTo > window)
69
70
  stickyHeaders_yScroll : null, // jQuery selector or object to monitor vertical scroll position (defaults: yScroll > attachTo > window)
70
71
  stickyHeaders_offset : 0, // number or jquery selector targeting the position:fixed element
@@ -215,8 +216,12 @@
215
216
 
216
217
  ts.bindEvents(table, $stickyThead.children().children('.' + ts.css.header));
217
218
 
218
- // add stickyheaders AFTER the table. If the table is selected by ID, the original one (first) will be returned.
219
- $table.after( $stickyWrap );
219
+ if (wo.stickyHeaders_appendTo) {
220
+ $(wo.stickyHeaders_appendTo).append( $stickyWrap );
221
+ } else {
222
+ // add stickyheaders AFTER the table. If the table is selected by ID, the original one (first) will be returned.
223
+ $table.after( $stickyWrap );
224
+ }
220
225
 
221
226
  // onRenderHeader is defined, we need to do something about it (fixes #641)
222
227
  if (c.onRenderHeader) {
@@ -1,4 +1,4 @@
1
- /*! Widget: uitheme - updated 7/11/2016 (v2.26.6) */
1
+ /*! Widget: uitheme - updated 7/31/2016 (v2.27.0) */
2
2
  ;(function ($) {
3
3
  'use strict';
4
4
  var ts = $.tablesorter || {};
@@ -37,9 +37,9 @@
37
37
  hover : 'ui-state-hover', // hover class
38
38
  // icon class names
39
39
  icons : 'ui-icon', // icon class added to the <i> in the header
40
- iconSortNone : 'ui-icon-carat-2-n-s', // class name added to icon when column is not sorted
41
- iconSortAsc : 'ui-icon-carat-1-n', // class name added to icon when column has ascending sort
42
- iconSortDesc : 'ui-icon-carat-1-s', // class name added to icon when column has descending sort
40
+ iconSortNone : 'ui-icon-carat-2-n-s ui-icon-caret-2-n-s', // class name added to icon when column is not sorted
41
+ iconSortAsc : 'ui-icon-carat-1-n ui-icon-caret-1-n', // class name added to icon when column has ascending sort
42
+ iconSortDesc : 'ui-icon-carat-1-s ui-icon-caret-1-s', // class name added to icon when column has descending sort
43
43
  filterRow : '',
44
44
  footerRow : '',
45
45
  footerCells : '',
@@ -51,12 +51,12 @@
51
51
 
52
52
  /* black unsorted icon */
53
53
  .tablesorter-bootstrap .bootstrap-icon-unsorted {
54
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAMAAADOvxanAAAAVFBMVEUAAABCQkJZWVkZGRnJyckgICAZGRkZGRn8/PweHh4dHR0aGhoaGhpUVFQbGxvQ0NDc3NxMTExSUlIbGxvr6+s4ODhKSkogICAtLS00NDQzMzMnJydSEPrQAAAAGHRSTlMA1ssZRLgdAQbDyisqsZo8QdXUq0r9xPepSRwiAAAAX0lEQVQI13XHSQKAIAwEwQAKxn13Ev7/T2Pu9qmarJKPXIicI4PH4hxaKNrhm2S8bJK5h4YzKHrzJNtK6yYT/TdXzpS5zuYg4MSQYF6i4IHExdw1UVRi05HPrrvT53a+qyMFC9t04gcAAAAASUVORK5CYII=);
54
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAA20lEQVR4AWJABpKSkoxALCstLb0aUAsZaCAMhVEY6B0amx8YZWDDEDSBa2AGe7XeIiAAClYwVGBvsAcIllsf/mvcC9DgOOd8h90fxWvngVEUbZIkuWRZZlE8eQjcisgZMM9zi+LJ6ZfwegmWZflZDugdHMfxTcGqql7TNBlUB/QObtv2VBSFrev6OY7jngzFk9OT/fn73fWYpqnlXNyXDMWT0zuYx/Bvel9ej+LJ6R08DMOu67q7DkTkrSA5vYPneV71fX/QASdTkJwezhs0TfMARn0wMDDGXEPgF4oijqwM5YjNAAAAAElFTkSuQmCC);
55
55
  }
56
56
 
57
57
  /* white unsorted icon */
58
58
  .tablesorter-bootstrap .icon-white.bootstrap-icon-unsorted {
59
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOBAMAAAALT/umAAAAKlBMVEUAAAD///////////////////////////////////////////////////+Gu8ovAAAADXRSTlMA4EXKBtQqvR0+sxmalc142gAAAFdJREFUCNdjYGDoamAAAjZbMxCVfvd6AgMDd+3du9UMDKx3hWSvMjBwXZww8RYDGuC53NB8h4GB8a617UUGBs7Yu3cjGRhYVO9eVQFKOskKOQApFmUgBwBZ+xXRTttNdAAAAABJRU5ErkJggg==);
59
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAe0lEQVR4AbXQoRWDMBiF0Sh2QLAAQ8SxJGugWSA6A2STW1PxTsnB9cnkfuYvv8OGC1t5G3Y0QMP+Bm857keAdQIzWBP3+Bw4MADQE18B6/etRnCV/w9nnGuLezfAmXhABGtAGIkruvk6auIFRwQJDywllsEAjCecB20GP59BQQ+gtlRLAAAAAElFTkSuQmCC);
60
60
  }
61
61
 
62
62
  /* since bootstrap (table-striped) uses nth-child(), we just use this to add a zebra stripe color */
@@ -61,12 +61,12 @@
61
61
 
62
62
  /* black unsorted icon */
63
63
  .tablesorter-bootstrap .bootstrap-icon-unsorted {
64
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWVJREFUeNqUUL9Lw2AUTGP8mqGlpBQkNeCSRcckEBcHq1jImMElToKuDvpHFMGhU0BQcHBwLji6CE1B4uB/INQsDi4d2jQ/fPeZxo764OV6915f7lLJ81xot9tCURXqdVEUr7IsO6ffH9Q5BlEUCaLwWxWqTcbYnaIoh0Dw4gAvcWlxq1qt9hqNxg6hUGAP+uIPUrGs0qXLer2+v/pTX6QpxLtkc2U2m53ACb8sSdIDXerSEms2m6+DweAICA4d89KGbduf9MpEVdXQ9/2LVqv1CASHjjn3iq/x1xKFfxQPqGnada1W86bT6SiO42OS3qk3KPStLMvbk8nkfjwen/LLuq6blFymMB0KdUPSGhAcOualjX6/f0bCiC7NaWGPQr0BwaFjzn0gYJqmLAiCA8/zni3LmhuGkQPBoWPOPwQeaPIqD4fDruu6L6Zp5kBw6IudchmdJAkLw3DXcZwnIPjy/FuAAQCiqqWWCAFKcwAAAABJRU5ErkJggg==);
64
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAABGUlEQVR4AZWQAUfEYBzGC07fILfrbnfgqG1jmxliDitmYIaxb9Y3CEIEVHDaUGMfYF8gIyBqbd7eH7wWofB6/J7nN+x/IIRQbz6fH8p3slgsrkl4uv8QNU071XX9wTAMQcLTD6bi2WazubUsq3ddV5AwPftU1tbr9Z0UPhGDIHgjYXp2JS+Xy71t2wNCFEV113UxCdOzKznLshvf9z+SJHlp23ZHR8L07Er+6/u/LO96td1u3zmX/BmdjoTp2ZUchmHted4o/16sVqt7KR6TMD27kpumOc/z/EkOvWmaQp7rlYTp2ZU8juOsqqqLoij2UvhyHEeQMD27knl93x+VZXmZpukz9yVh+l+vMQzDrK7rXRzHjyQ83b8BlglBGLw1Kb4AAAAASUVORK5CYII=);
65
65
  }
66
66
 
67
67
  /* white unsorted icon */
68
68
  .tablesorter-bootstrap .icon-white.bootstrap-icon-unsorted {
69
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOBAMAAAALT/umAAAAKlBMVEUAAAD///////////////////////////////////////////////////+Gu8ovAAAADXRSTlMA4EXKBtQqvR0+sxmalc142gAAAFdJREFUCNdjYGDoamAAAjZbMxCVfvd6AgMDd+3du9UMDKx3hWSvMjBwXZww8RYDGuC53NB8h4GB8a617UUGBs7Yu3cjGRhYVO9eVQFKOskKOQApFmUgBwBZ+xXRTttNdAAAAABJRU5ErkJggg==);
69
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAe0lEQVR4AbXQoRWDMBiF0Sh2QLAAQ8SxJGugWSA6A2STW1PxTsnB9cnkfuYvv8OGC1t5G3Y0QMP+Bm857keAdQIzWBP3+Bw4MADQE18B6/etRnCV/w9nnGuLezfAmXhABGtAGIkruvk6auIFRwQJDywllsEAjCecB20GP59BQQ+gtlRLAAAAAElFTkSuQmCC);
70
70
  }
71
71
 
72
72
  /* since bootstrap (table-striped) uses nth-child(), we just use this to add a zebra stripe color */
@@ -0,0 +1,176 @@
1
+ /*************
2
+ Materialize theme (http://materializecss.com/)
3
+ *************/
4
+ /* jQuery materialize Theme */
5
+ .tablesorter-materialize {
6
+ width: 100%;
7
+ }
8
+ .tablesorter-materialize thead th,
9
+ .tablesorter-materialize thead td,
10
+ .tablesorter-materialize tfoot th,
11
+ .tablesorter-materialize tfoot td {
12
+ font: 14px/20px Arial, Sans-serif;
13
+ font-weight: bold;
14
+ padding: 4px;
15
+ margin: 0 0 18px;
16
+ background-color: #eee;
17
+ }
18
+
19
+ .tablesorter-materialize .tablesorter-header {
20
+ cursor: pointer;
21
+ }
22
+ .tablesorter-materialize .sorter-false {
23
+ cursor: default;
24
+ }
25
+
26
+ .tablesorter-materialize .tablesorter-header-inner {
27
+ position: relative;
28
+ padding: 4px 18px 4px 4px;
29
+ }
30
+
31
+ /* sort icons */
32
+ .tablesorter-materialize thead .tablesorter-header {
33
+ background-repeat: no-repeat;
34
+ background-position: center right;
35
+ padding: 4px 18px 4px 4px;
36
+ white-space: normal;
37
+ cursor: pointer;
38
+ }
39
+
40
+ /* black unsorted icon */
41
+ .tablesorter-materialize thead .tablesorter-headerUnSorted {
42
+ /* <svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 24 16"><path d="M15 8 1 8 8 0zM15 9 1 9 8 16z" fill="#222"/></svg> */
43
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDE2Ij48cGF0aCBkPSJNMTUgOCAxIDggOCAwek0xNSA5IDEgOSA4IDE2eiIgZmlsbD0iIzIyMiIvPjwvc3ZnPg==);
44
+ }
45
+ /* black asc icon */
46
+ .tablesorter-materialize thead .tablesorter-headerAsc {
47
+ /* <svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 24 16"><path d="M15 11 1 11 8 3z" fill="#222"/></svg> */
48
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDE2Ij48cGF0aCBkPSJNMTUgMTEgMSAxMSA4IDN6IiBmaWxsPSIjMjIyIi8+PC9zdmc+);
49
+ }
50
+ /* black desc icon */
51
+ .tablesorter-materialize thead .tablesorter-headerDesc {
52
+ /* <svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 24 16"><path d="M15 6 1 6 8 13z" fill="#222"/></svg> */
53
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDE2Ij48cGF0aCBkPSJNMTUgNiAxIDYgOCAxM3oiIGZpbGw9IiMyMjIiLz48L3N2Zz4=);
54
+ }
55
+
56
+ /* white unsorted icon */
57
+ .tablesorter-materialize-dark thead .tablesorter-headerUnSorted {
58
+ /* <svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 24 16"><path d="M15 8 1 8 8 0zM15 9 1 9 8 16z" fill="#fff"/></svg> */
59
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDE2Ij48cGF0aCBkPSJNMTUgOCAxIDggOCAwek0xNSA5IDEgOSA4IDE2eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==);
60
+ }
61
+ /* white asc icon */
62
+ .tablesorter-materialize-dark thead .tablesorter-headerAsc {
63
+ /* <svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 24 16"><path d="M15 11 1 11 8 3z" fill="#fff"/></svg> */
64
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDE2Ij48cGF0aCBkPSJNMTUgMTEgMSAxMSA4IDN6IiBmaWxsPSIjZmZmIi8+PC9zdmc+);
65
+ }
66
+ /* white desc icon */
67
+ .tablesorter-materialize-dark thead .tablesorter-headerDesc {
68
+ /* <svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 24 16"><path d="M15 6 1 6 8 13z" fill="#fff"/></svg> */
69
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDE2Ij48cGF0aCBkPSJNMTUgNiAxIDYgOCAxM3oiIGZpbGw9IiNmZmYiLz48L3N2Zz4=);
70
+ }
71
+
72
+ /* since materialize (table-striped) uses nth-child(), we just use this to add a zebra stripe color */
73
+ .tablesorter-materialize > tbody > tr.odd > td,
74
+ .tablesorter-materialize > tbody > tr.tablesorter-hasChildRow.odd:hover ~ tr.tablesorter-hasChildRow.odd ~ .tablesorter-childRow.odd > td {
75
+ background-color: #f9f9f9;
76
+ }
77
+ .tablesorter-materialize > tbody > tr.hover > td,
78
+ .tablesorter-materialize > tbody > tr.odd:hover > td,
79
+ .tablesorter-materialize > tbody > tr.even:hover > td,
80
+ .tablesorter-materialize > tbody > tr.tablesorter-hasChildRow.odd:hover ~ .tablesorter-childRow.odd > td,
81
+ .tablesorter-materialize > tbody > tr.tablesorter-hasChildRow.even:hover ~ .tablesorter-childRow.even > td {
82
+ background-color: #f5f5f5;
83
+ }
84
+ .tablesorter-materialize > tbody > tr.even > td,
85
+ .tablesorter-materialize > tbody > tr.tablesorter-hasChildRow.even:hover ~ tr.tablesorter-hasChildRow.even ~ .tablesorter-childRow.even > td {
86
+ background-color: #fff;
87
+ }
88
+
89
+ /* processing icon */
90
+ .tablesorter-materialize .tablesorter-processing {
91
+ background-image: url('data:image/gif;base64,R0lGODlhFAAUAKEAAO7u7lpaWgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgACACwAAAAAFAAUAAACQZRvoIDtu1wLQUAlqKTVxqwhXIiBnDg6Y4eyx4lKW5XK7wrLeK3vbq8J2W4T4e1nMhpWrZCTt3xKZ8kgsggdJmUFACH5BAEKAAIALAcAAAALAAcAAAIUVB6ii7jajgCAuUmtovxtXnmdUAAAIfkEAQoAAgAsDQACAAcACwAAAhRUIpmHy/3gUVQAQO9NetuugCFWAAAh+QQBCgACACwNAAcABwALAAACE5QVcZjKbVo6ck2AF95m5/6BSwEAIfkEAQoAAgAsBwANAAsABwAAAhOUH3kr6QaAcSrGWe1VQl+mMUIBACH5BAEKAAIALAIADQALAAcAAAIUlICmh7ncTAgqijkruDiv7n2YUAAAIfkEAQoAAgAsAAAHAAcACwAAAhQUIGmHyedehIoqFXLKfPOAaZdWAAAh+QQFCgACACwAAAIABwALAAACFJQFcJiXb15zLYRl7cla8OtlGGgUADs=');
92
+ background-position: center center !important;
93
+ background-repeat: no-repeat !important;
94
+ }
95
+
96
+ /* caption */
97
+ .caption {
98
+ background-color: #fff;
99
+ }
100
+
101
+ /* filter widget */
102
+ .tablesorter-materialize .tablesorter-filter-row input.tablesorter-filter,
103
+ .tablesorter-materialize .tablesorter-filter-row select.tablesorter-filter {
104
+ width: 98%;
105
+ margin: 0;
106
+ padding: 4px 6px;
107
+ color: #333;
108
+ -webkit-box-sizing: border-box;
109
+ -moz-box-sizing: border-box;
110
+ box-sizing: border-box;
111
+ -webkit-transition: height 0.1s ease;
112
+ -moz-transition: height 0.1s ease;
113
+ -o-transition: height 0.1s ease;
114
+ transition: height 0.1s ease;
115
+ }
116
+ .tablesorter-materialize .tablesorter-filter-row .tablesorter-filter.disabled {
117
+ background-color: #eee;
118
+ color: #555;
119
+ cursor: not-allowed;
120
+ border: 1px solid #ccc;
121
+ border-radius: 4px;
122
+ box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.075) inset;
123
+ box-sizing: border-box;
124
+ transition: height 0.1s ease;
125
+ }
126
+ .tablesorter-materialize .tablesorter-filter-row {
127
+ background-color: #efefef;
128
+ }
129
+ .tablesorter-materialize .tablesorter-filter-row td {
130
+ background-color: #efefef;
131
+ line-height: normal;
132
+ text-align: center;
133
+ padding: 4px 6px;
134
+ vertical-align: middle;
135
+ -webkit-transition: line-height 0.1s ease;
136
+ -moz-transition: line-height 0.1s ease;
137
+ -o-transition: line-height 0.1s ease;
138
+ transition: line-height 0.1s ease;
139
+ }
140
+ /* hidden filter row */
141
+ .tablesorter-materialize .tablesorter-filter-row.hideme td {
142
+ padding: 2px; /* change this to modify the thickness of the closed border row */
143
+ margin: 0;
144
+ line-height: 0;
145
+ }
146
+ .tablesorter-materialize .tablesorter-filter-row.hideme * {
147
+ height: 1px;
148
+ min-height: 0;
149
+ border: 0;
150
+ padding: 0;
151
+ margin: 0;
152
+ /* don't use visibility: hidden because it disables tabbing */
153
+ opacity: 0;
154
+ filter: alpha(opacity=0);
155
+ }
156
+ /* rows hidden by filtering (needed for child rows) */
157
+ .tablesorter .filtered {
158
+ display: none;
159
+ }
160
+
161
+ /* pager plugin */
162
+ .tablesorter-materialize .tablesorter-pager select {
163
+ padding: 4px 6px;
164
+ display: inline-block;
165
+ width: auto;
166
+ }
167
+ .tablesorter-materialize .tablesorter-pager .pagedisplay {
168
+ border: 0;
169
+ }
170
+
171
+ /* ajax error row */
172
+ .tablesorter .tablesorter-errorRow td {
173
+ text-align: center;
174
+ cursor: pointer;
175
+ background-color: #e6bf99;
176
+ }