jquery-tablesorter 1.21.4 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }