jquery-tablesorter 1.0.0 → 1.0.1
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.
- data/README.markdown +3 -1
- data/lib/jquery-tablesorter/version.rb +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +120 -90
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +212 -78
- data/vendor/assets/stylesheets/jquery-tablesorter/blue/style.css +8 -2
- data/vendor/assets/stylesheets/jquery-tablesorter/ui/style.css +9 -2
- metadata +4 -4
data/README.markdown
CHANGED
@@ -3,7 +3,9 @@ jQuery Table Sorter plugin for Rails
|
|
3
3
|
|
4
4
|
Simple integration of jquery-tablesorter into the asset pipeline.
|
5
5
|
|
6
|
-
Current version: 2.3.
|
6
|
+
Current version: 2.3.7(6/3/2012)
|
7
|
+
|
8
|
+
Any issue associate with the js/css files, please report to [Mottie's fork].
|
7
9
|
|
8
10
|
NOTICE:
|
9
11
|
---
|
@@ -1,5 +1,5 @@
|
|
1
|
-
/*!
|
2
|
-
* TableSorter 2.3.
|
1
|
+
/*!
|
2
|
+
* TableSorter 2.3.7 - Client-side table sorting with ease!
|
3
3
|
* @requires jQuery v1.2.6+
|
4
4
|
*
|
5
5
|
* Copyright (c) 2007 Christian Bach
|
@@ -18,13 +18,13 @@
|
|
18
18
|
$.extend({
|
19
19
|
tablesorter: new function() {
|
20
20
|
|
21
|
-
this.version = "2.3.
|
21
|
+
this.version = "2.3.7";
|
22
22
|
|
23
23
|
var parsers = [], widgets = [];
|
24
24
|
this.defaults = {
|
25
25
|
|
26
26
|
// appearance
|
27
|
-
widthFixed : false,
|
27
|
+
widthFixed : false, // adds colgroup to fix widths of columns
|
28
28
|
|
29
29
|
// functionality
|
30
30
|
cancelSelection : true, // prevent text selection in the header
|
@@ -51,9 +51,11 @@
|
|
51
51
|
textSorter : null, // use custom text sorter - function(a,b){ return a.sort(b); } // basic sort
|
52
52
|
|
53
53
|
// widget options
|
54
|
+
widgets: [], // method to add widgets, e.g. widgets: ['zebra']
|
54
55
|
widgetOptions : {
|
55
56
|
zebra : [ "even", "odd" ] // zebra widget alternating row class names
|
56
57
|
},
|
58
|
+
initWidgets : true, // apply widgets on tablesorter initialization
|
57
59
|
|
58
60
|
// callbacks
|
59
61
|
initialized : null, // function(table){},
|
@@ -78,8 +80,7 @@
|
|
78
80
|
headerList: [],
|
79
81
|
empties: {},
|
80
82
|
strings: {},
|
81
|
-
parsers: []
|
82
|
-
widgets: []
|
83
|
+
parsers: []
|
83
84
|
|
84
85
|
// deprecated; but retained for backwards compatibility
|
85
86
|
// widgetZebra: { css: ["even", "odd"] }
|
@@ -103,17 +104,26 @@
|
|
103
104
|
this.hasInitialized = false;
|
104
105
|
|
105
106
|
function getElementText(table, node, cellIndex) {
|
106
|
-
var text = "", t = table.config.textExtraction;
|
107
107
|
if (!node) { return ""; }
|
108
|
+
var c = table.config,
|
109
|
+
t = c.textExtraction, text = "";
|
108
110
|
if (t === "simple") {
|
109
|
-
|
111
|
+
if (c.supportsTextContent) {
|
112
|
+
text = node.textContent; // newer browsers support this
|
113
|
+
} else {
|
114
|
+
if (node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
|
115
|
+
text = node.childNodes[0].innerHTML;
|
116
|
+
} else {
|
117
|
+
text = node.innerHTML;
|
118
|
+
}
|
119
|
+
}
|
110
120
|
} else {
|
111
121
|
if (typeof(t) === "function") {
|
112
122
|
text = t(node, table, cellIndex);
|
113
123
|
} else if (typeof(t) === "object" && t.hasOwnProperty(cellIndex)) {
|
114
124
|
text = t[cellIndex](node, table, cellIndex);
|
115
125
|
} else {
|
116
|
-
text = $(node).text();
|
126
|
+
text = c.supportsTextContent ? node.textContent : $(node).text();
|
117
127
|
}
|
118
128
|
}
|
119
129
|
return $.trim(text);
|
@@ -141,7 +151,7 @@
|
|
141
151
|
node = rows[rowIndex].cells[cellIndex];
|
142
152
|
nodeValue = getElementText(table, node, cellIndex);
|
143
153
|
if (table.config.debug) {
|
144
|
-
log('Checking if value was empty on row ' + rowIndex + ', column:' + cellIndex +
|
154
|
+
log('Checking if value was empty on row ' + rowIndex + ', column: ' + cellIndex + ': ' + nodeValue);
|
145
155
|
}
|
146
156
|
} else {
|
147
157
|
keepLooking = false;
|
@@ -157,8 +167,9 @@
|
|
157
167
|
}
|
158
168
|
|
159
169
|
function buildParserCache(table, $headers) {
|
160
|
-
|
161
|
-
|
170
|
+
var c = table.config,
|
171
|
+
tb = $(table.tBodies).filter(':not(.' + c.cssInfoBlock + ')'),
|
172
|
+
ts = $.tablesorter, rows, list, l, i, h, m, ch, cl, p, parsersDebug = "";
|
162
173
|
if ( tb.length === 0) { return; } // In the case of empty tables
|
163
174
|
rows = tb[0].rows;
|
164
175
|
if (rows[0]) {
|
@@ -190,19 +201,6 @@
|
|
190
201
|
}
|
191
202
|
|
192
203
|
/* utils */
|
193
|
-
function buildRegex(){
|
194
|
-
var a, acc = '[', t = $.tablesorter,
|
195
|
-
reg = t.characterEquivalents;
|
196
|
-
t.characterRegexArray = {};
|
197
|
-
for (a in reg) {
|
198
|
-
if (typeof a === 'string') {
|
199
|
-
acc += reg[a];
|
200
|
-
t.characterRegexArray[a] = new RegExp('[' + reg[a] + ']', 'g');
|
201
|
-
}
|
202
|
-
}
|
203
|
-
t.characterRegex = new RegExp(acc + ']');
|
204
|
-
}
|
205
|
-
|
206
204
|
function buildCache(table) {
|
207
205
|
var b = table.tBodies,
|
208
206
|
tc = table.config,
|
@@ -218,6 +216,7 @@
|
|
218
216
|
tc.cache[k] = { row: [], normalized: [] };
|
219
217
|
// ignore tbodies with class name from css.cssInfoBlock
|
220
218
|
if (!$(b[k]).hasClass(tc.cssInfoBlock)) {
|
219
|
+
$(b[k]).addClass('tablesorter-hidden');
|
221
220
|
totalRows = (b[k] && b[k].rows.length) || 0;
|
222
221
|
totalCells = (b[k].rows[0] && b[k].rows[0].cells.length) || 0;
|
223
222
|
for (i = 0; i < totalRows; ++i) {
|
@@ -240,6 +239,7 @@
|
|
240
239
|
cols.push(tc.cache[k].normalized.length); // add position for rowCache
|
241
240
|
tc.cache[k].normalized.push(cols);
|
242
241
|
}
|
242
|
+
$(b[k]).removeClass('tablesorter-hidden');
|
243
243
|
}
|
244
244
|
}
|
245
245
|
if (tc.debug) {
|
@@ -258,21 +258,28 @@
|
|
258
258
|
}
|
259
259
|
|
260
260
|
function applyWidget(table, init) {
|
261
|
-
var
|
262
|
-
i, w, l = c.length;
|
261
|
+
var tc = table.config, c = tc.widgets,
|
262
|
+
time, i, w, l = c.length;
|
263
|
+
if (tc.debug) {
|
264
|
+
time = new Date();
|
265
|
+
}
|
263
266
|
for (i = 0; i < l; i++) {
|
264
267
|
w = getWidgetById(c[i]);
|
265
268
|
if ( w ) {
|
266
|
-
if (init && w.hasOwnProperty('init')) {
|
269
|
+
if (init === true && w.hasOwnProperty('init')) {
|
267
270
|
w.init(table, widgets, w);
|
268
271
|
} else if (!init && w.hasOwnProperty('format')) {
|
269
272
|
w.format(table);
|
270
273
|
}
|
271
274
|
}
|
272
275
|
}
|
276
|
+
if (tc.debug) {
|
277
|
+
benchmark("Completed " + (init === true ? "initializing" : "applying") + " widgets", time);
|
278
|
+
}
|
273
279
|
}
|
274
280
|
|
275
|
-
|
281
|
+
// init flag (true) used by pager plugin to prevent widget application
|
282
|
+
function appendToTable(table, init) {
|
276
283
|
var c = table.config,
|
277
284
|
b = table.tBodies,
|
278
285
|
rows = [],
|
@@ -283,6 +290,7 @@
|
|
283
290
|
}
|
284
291
|
for (k = 0; k < b.length; k++) {
|
285
292
|
if (!$(b[k]).hasClass(c.cssInfoBlock)){
|
293
|
+
$(b[k]).addClass('tablesorter-hidden');
|
286
294
|
f = document.createDocumentFragment();
|
287
295
|
r = c2[k].row;
|
288
296
|
n = c2[k].normalized;
|
@@ -300,6 +308,7 @@
|
|
300
308
|
}
|
301
309
|
}
|
302
310
|
table.tBodies[k].appendChild(f);
|
311
|
+
$(b[k]).removeClass('tablesorter-hidden');
|
303
312
|
}
|
304
313
|
}
|
305
314
|
if (c.appender) {
|
@@ -309,15 +318,15 @@
|
|
309
318
|
benchmark("Rebuilt table", appendTime);
|
310
319
|
}
|
311
320
|
// apply table widgets
|
312
|
-
applyWidget(table);
|
321
|
+
if (!init) { applyWidget(table); }
|
313
322
|
// trigger sortend
|
314
323
|
$(table).trigger("sortEnd", table);
|
315
324
|
}
|
316
325
|
|
317
|
-
// from:
|
326
|
+
// computeTableHeaderCellIndexes from:
|
318
327
|
// http://www.javascripttoolbox.com/lib/table/examples.php
|
319
328
|
// http://www.javascripttoolbox.com/temp/table_cellindex.html
|
320
|
-
function
|
329
|
+
function computeThIndexes(t) {
|
321
330
|
var matrix = [],
|
322
331
|
lookup = {},
|
323
332
|
trs = $(t).find('thead:eq(0) tr'),
|
@@ -362,19 +371,20 @@
|
|
362
371
|
return (/^d/i.test(v) || v === 1);
|
363
372
|
}
|
364
373
|
|
374
|
+
|
365
375
|
function buildHeaders(table) {
|
366
|
-
var
|
367
|
-
|
368
|
-
|
369
|
-
c.headerList = [];
|
376
|
+
var header_index = computeThIndexes(table), ch, $t,
|
377
|
+
$th, lock, time, $tableHeaders, c = table.config, ts = $.tablesorter;
|
378
|
+
c.headerList = [];
|
370
379
|
if (c.debug) {
|
371
380
|
time = new Date();
|
372
381
|
}
|
373
|
-
$tableHeaders = $(c.selectorHeaders
|
374
|
-
.wrapInner("<div class='tablesorter-header-inner' />")
|
382
|
+
$tableHeaders = $(table).find(c.selectorHeaders)
|
375
383
|
.each(function(index) {
|
376
384
|
$t = $(this);
|
377
385
|
ch = c.headers[index];
|
386
|
+
this.innerHTML = '<div class="tablesorter-header-inner">' + this.innerHTML + '</div>'; // faster than wrapInner
|
387
|
+
if (c.onRenderHeader) { c.onRenderHeader.apply($th, [index]); }
|
378
388
|
this.column = header_index[this.parentNode.rowIndex + "-" + this.cellIndex];
|
379
389
|
this.order = formatSortingOrder( ts.getData($t, ch, 'sortInitialOrder') || c.sortInitialOrder ) ? [1,0,2] : [0,1,2];
|
380
390
|
this.count = -1; // set to -1 because clicking on the header automatically adds one
|
@@ -386,15 +396,14 @@
|
|
386
396
|
}
|
387
397
|
if (!this.sortDisabled) {
|
388
398
|
$th = $t.addClass(c.cssHeader);
|
389
|
-
if (c.onRenderHeader) { c.onRenderHeader.apply($th, [index]); }
|
390
399
|
}
|
391
400
|
// add cell to headerList
|
392
401
|
c.headerList[index] = this;
|
393
402
|
// add to parent in case there are multiple rows
|
394
403
|
$t.parent().addClass(c.cssHeader);
|
395
404
|
});
|
396
|
-
if (
|
397
|
-
benchmark("Built headers", time);
|
405
|
+
if (table.config.debug) {
|
406
|
+
benchmark("Built headers:", time);
|
398
407
|
log($tableHeaders);
|
399
408
|
}
|
400
409
|
return $tableHeaders;
|
@@ -423,7 +432,10 @@
|
|
423
432
|
l = list.length;
|
424
433
|
for (i = 0; i < l; i++) {
|
425
434
|
if (list[i][1] === 2) { continue; } // direction = 2 means reset!
|
426
|
-
h[list[i][0]]
|
435
|
+
if (h[list[i][0]]) {
|
436
|
+
// add class if cell exists - fix for issue #78
|
437
|
+
h[list[i][0]].addClass(css[list[i][1]]);
|
438
|
+
}
|
427
439
|
// multicolumn sorting updating
|
428
440
|
f = $headers.filter('[data-column="' + list[i][0] + '"]');
|
429
441
|
if (l > 1 && f.length) {
|
@@ -457,7 +469,7 @@
|
|
457
469
|
}
|
458
470
|
|
459
471
|
function getCachedSortType(parsers, i) {
|
460
|
-
return (parsers) ? parsers[i].type : '';
|
472
|
+
return (parsers && parsers[i]) ? parsers[i].type || '' : '';
|
461
473
|
}
|
462
474
|
|
463
475
|
/* sorting methods - reverted sorting method back to version 2.0.3 */
|
@@ -490,7 +502,7 @@
|
|
490
502
|
dir = (tc.strings[c]) ? tc.string[tc.strings[c]] || 0 : 0;
|
491
503
|
}
|
492
504
|
}
|
493
|
-
dynamicExp += "var " + e + " = sort" + s + "(table,
|
505
|
+
dynamicExp += "var " + e + " = sort" + s + "(table,a[" + c + "],b[" + c + "]," + c + "," + mx + "," + dir + "); ";
|
494
506
|
dynamicExp += "if (" + e + ") { return " + e + "; } ";
|
495
507
|
dynamicExp += "else { ";
|
496
508
|
}
|
@@ -596,8 +608,8 @@
|
|
596
608
|
// if no thead or tbody quit.
|
597
609
|
if (!this.tHead || this.tBodies.length === 0) { return; }
|
598
610
|
// declare
|
599
|
-
var $headers, $cell,
|
600
|
-
config, c, i, j, k, a, s, o,
|
611
|
+
var $headers, $cell, $this,
|
612
|
+
config, c, i, j, k, a, s, o, downTime,
|
601
613
|
m = $.metadata;
|
602
614
|
// new blank config object
|
603
615
|
this.config = {};
|
@@ -609,8 +621,7 @@
|
|
609
621
|
$this = $(this).addClass(c.tableClass);
|
610
622
|
// save the settings where they read
|
611
623
|
$.data(this, "tablesorter", c);
|
612
|
-
|
613
|
-
buildRegex();
|
624
|
+
c.supportsTextContent = $('<span>x</span>')[0].textContent === 'x';
|
614
625
|
// digit sort text location; keeping max+/- for backwards compatibility
|
615
626
|
c.string = { 'max': 1, 'min': -1, 'max+': 1, 'max-': -1, 'zero': 0, 'none': 0, 'null': 0, 'top': true, 'bottom': false };
|
616
627
|
// build headers
|
@@ -624,8 +635,14 @@
|
|
624
635
|
fixColumnWidth(this);
|
625
636
|
// apply event handling to headers
|
626
637
|
// this is to big, perhaps break it out?
|
627
|
-
$headers
|
628
|
-
|
638
|
+
$headers.bind('mousedown.tablesorter mouseup.tablesorter', function(e, external) {
|
639
|
+
if (e.type === 'mousedown') {
|
640
|
+
downTime = new Date().getTime();
|
641
|
+
return !c.cancelSelection;
|
642
|
+
}
|
643
|
+
|
644
|
+
// prevent resizable widget from initializing a sort (long clicks are ignored)
|
645
|
+
if (external !== true && (new Date().getTime() - downTime > 500)) { return false; }
|
629
646
|
if (c.delayInit && !c.cache) { buildCache($this[0]); }
|
630
647
|
if (!this.sortDisabled) {
|
631
648
|
// Only call sortStart if sorting is enabled.
|
@@ -712,20 +729,20 @@
|
|
712
729
|
$this.trigger("sortBegin", $this[0]);
|
713
730
|
// set css for headers
|
714
731
|
setHeadersCss($this[0], $headers, c.sortList);
|
715
|
-
|
732
|
+
multisort($this[0], c.sortList);
|
733
|
+
appendToTable($this[0]);
|
716
734
|
// stop normal event by returning false
|
717
735
|
return false;
|
718
736
|
}
|
737
|
+
});
|
738
|
+
if (c.cancelSelection) {
|
719
739
|
// cancel selection
|
720
|
-
|
721
|
-
.mousedown(function() {
|
722
|
-
if (c.cancelSelection) {
|
740
|
+
$headers.each(function() {
|
723
741
|
this.onselectstart = function() {
|
724
742
|
return false;
|
725
743
|
};
|
726
|
-
|
727
|
-
|
728
|
-
});
|
744
|
+
});
|
745
|
+
}
|
729
746
|
// apply easy methods that trigger binded events
|
730
747
|
$this
|
731
748
|
.bind("update", function(e, resort) {
|
@@ -739,9 +756,11 @@
|
|
739
756
|
})
|
740
757
|
.bind("updateCell", function(e, cell, resort) {
|
741
758
|
// get position from the dom.
|
742
|
-
var t = this,
|
759
|
+
var t = this, $tb = $(this).find('tbody'), row, pos,
|
743
760
|
// update cache - format: function(s, table, cell, cellIndex)
|
744
|
-
tbdy = $
|
761
|
+
tbdy = $tb.index( $(cell).closest('tbody') );
|
762
|
+
row = $tb.eq(tbdy).find('tr').index( $(cell).closest('tr') );
|
763
|
+
pos = [ row, cell.cellIndex];
|
745
764
|
t.config.cache[tbdy].normalized[pos[0]][pos[1]] = c.parsers[pos[1]].format( getElementText(t, cell, pos[1]), t, cell, pos[1] );
|
746
765
|
if (resort !== false) { $(this).trigger("sorton", [c.sortList]); }
|
747
766
|
})
|
@@ -765,7 +784,7 @@
|
|
765
784
|
// resort using current settings
|
766
785
|
if (resort !== false) { $(this).trigger("sorton", [c.sortList]); }
|
767
786
|
})
|
768
|
-
.bind("sorton", function(e, list) {
|
787
|
+
.bind("sorton", function(e, list, init) {
|
769
788
|
$(this).trigger("sortStart", this);
|
770
789
|
// update and store the sortlist
|
771
790
|
c.sortList = list;
|
@@ -774,17 +793,18 @@
|
|
774
793
|
// set css for headers
|
775
794
|
setHeadersCss(this, $headers, c.sortList);
|
776
795
|
// sort the table and append it to the dom
|
777
|
-
|
796
|
+
multisort(this, c.sortList);
|
797
|
+
appendToTable(this, init);
|
778
798
|
})
|
779
|
-
.bind("appendCache", function() {
|
780
|
-
appendToTable(this);
|
799
|
+
.bind("appendCache", function(e, init) {
|
800
|
+
appendToTable(this, init);
|
781
801
|
})
|
782
802
|
.bind("applyWidgetId", function(e, id) {
|
783
803
|
getWidgetById(id).format(this);
|
784
804
|
})
|
785
|
-
.bind("applyWidgets", function() {
|
805
|
+
.bind("applyWidgets", function(e, init) {
|
786
806
|
// apply widgets
|
787
|
-
applyWidget(this);
|
807
|
+
applyWidget(this, init);
|
788
808
|
})
|
789
809
|
.bind("destroy", function(e,c){
|
790
810
|
$.tablesorter.destroy(this, c);
|
@@ -800,8 +820,8 @@
|
|
800
820
|
applyWidget(this, true);
|
801
821
|
// if user has supplied a sort list to constructor.
|
802
822
|
if (c.sortList.length > 0) {
|
803
|
-
$this.trigger("sorton", [c.sortList]);
|
804
|
-
} else {
|
823
|
+
$this.trigger("sorton", [c.sortList, !c.initWidgets]);
|
824
|
+
} else if (c.initWidgets) {
|
805
825
|
// apply widget format
|
806
826
|
applyWidget(this);
|
807
827
|
}
|
@@ -894,8 +914,18 @@
|
|
894
914
|
"U" : "\u00da\u00d9\u00db\u00dc" // ÚÙÛÜ
|
895
915
|
};
|
896
916
|
this.replaceAccents = function(s) {
|
917
|
+
var a, acc = '[', eq = this.characterEquivalents;
|
918
|
+
if (!this.characterRegex) {
|
919
|
+
this.characterRegexArray = {};
|
920
|
+
for (a in eq) {
|
921
|
+
if (typeof a === 'string') {
|
922
|
+
acc += eq[a];
|
923
|
+
this.characterRegexArray[a] = new RegExp('[' + eq[a] + ']', 'g');
|
924
|
+
}
|
925
|
+
}
|
926
|
+
this.characterRegex = new RegExp(acc + ']');
|
927
|
+
}
|
897
928
|
if (this.characterRegex.test(s)) {
|
898
|
-
var a, eq = this.characterEquivalents;
|
899
929
|
for (a in eq) {
|
900
930
|
if (typeof a === 'string') {
|
901
931
|
s = s.replace( this.characterRegexArray[a], a );
|
@@ -906,13 +936,14 @@
|
|
906
936
|
};
|
907
937
|
|
908
938
|
// get sorter, string, empty, etc options for each column from
|
909
|
-
// metadata, header option or header class name ("sorter-false")
|
939
|
+
// jQuery data, metadata, header option or header class name ("sorter-false")
|
910
940
|
// priority = jQuery data > meta > headers option > header class name
|
911
941
|
this.getData = function(h, ch, key) {
|
912
|
-
var val = '', $h = $(h),
|
913
|
-
|
914
|
-
|
915
|
-
|
942
|
+
var val = '', $h = $(h), m, cl;
|
943
|
+
if (!$h.length) { return ''; }
|
944
|
+
m = $.metadata ? $h.metadata() : false;
|
945
|
+
cl = ' ' + ($h.attr('class') || '');
|
946
|
+
if ($h.data() && ( typeof $h.data(key) !== 'undefined' || typeof $h.data(key.toLowerCase()) !== 'undefined') ){
|
916
947
|
// "data-lockedOrder" is assigned to "lockedorder"; but "data-locked-order" is assigned to "lockedOrder"
|
917
948
|
// "data-sort-initial-order" is assigned to "sortInitialOrder"
|
918
949
|
val += $h.data(key) || $h.data(key.toLowerCase());
|
@@ -992,7 +1023,7 @@
|
|
992
1023
|
ts.addParser({
|
993
1024
|
id: "url",
|
994
1025
|
is: function(s) {
|
995
|
-
return (/^(https?|ftp|file)
|
1026
|
+
return (/^(https?|ftp|file):\/\//).test(s);
|
996
1027
|
},
|
997
1028
|
format: function(s) {
|
998
1029
|
return $.trim(s.replace(/(https?|ftp|file):\/\//, ''));
|
@@ -1036,8 +1067,8 @@
|
|
1036
1067
|
ts.addParser({
|
1037
1068
|
id: "shortDate", // "mmddyyyy", "ddmmyyyy" or "yyyymmdd"
|
1038
1069
|
is: function(s) {
|
1039
|
-
// testing for
|
1040
|
-
return (
|
1070
|
+
// testing for ####-##-#### - so it's not perfect
|
1071
|
+
return (/^(\d{2}|\d{4})[\/\-\,\.\s+]\d{2}[\/\-\.\,\s+](\d{2}|\d{4})$/).test(s);
|
1041
1072
|
},
|
1042
1073
|
format: function(s, table, cell, cellIndex) {
|
1043
1074
|
var c = table.config, ci = c.headerList[cellIndex],
|
@@ -1098,7 +1129,7 @@
|
|
1098
1129
|
ts.addWidget({
|
1099
1130
|
id: "zebra",
|
1100
1131
|
format: function(table) {
|
1101
|
-
var $tb, $
|
1132
|
+
var $tb, $tv, $tr, row, even, time, k, l,
|
1102
1133
|
c = table.config,
|
1103
1134
|
child = new RegExp(c.cssChildRow, 'i'),
|
1104
1135
|
b = $(table).children('tbody:not(.' + c.cssInfoBlock + ')'),
|
@@ -1110,24 +1141,23 @@
|
|
1110
1141
|
time = new Date();
|
1111
1142
|
}
|
1112
1143
|
for (k = 0; k < b.length; k++ ) {
|
1113
|
-
row = 0;
|
1114
1144
|
// loop through the visible rows
|
1115
1145
|
$tb = $(b[k]);
|
1116
1146
|
l = $tb.children('tr').length;
|
1117
1147
|
if (l > 1) {
|
1118
|
-
|
1119
|
-
$
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
}
|
1148
|
+
row = 0;
|
1149
|
+
$tv = $tb.find('tr:visible');
|
1150
|
+
$tb.addClass('tablesorter-hidden');
|
1151
|
+
// revered back to using jQuery each - strangely it's the fastest method
|
1152
|
+
$tv.each(function(){
|
1153
|
+
$tr = $(this);
|
1154
|
+
// style children rows the same way the parent row was styled
|
1155
|
+
if (!child.test(this.className)) { row++; }
|
1156
|
+
even = (row % 2 === 0);
|
1157
|
+
$tr.removeClass(css[even ? 1 : 0]).addClass(css[even ? 0 : 1]);
|
1158
|
+
});
|
1159
|
+
$tb.removeClass('tablesorter-hidden');
|
1129
1160
|
}
|
1130
|
-
$tb.append($tr);
|
1131
1161
|
}
|
1132
1162
|
if (c.debug) {
|
1133
1163
|
ts.benchmark("Applying Zebra widget", time);
|
@@ -1,8 +1,8 @@
|
|
1
|
-
/*! tableSorter 2.3 widgets - updated
|
1
|
+
/*! tableSorter 2.3 widgets - updated 6/1/2012
|
2
2
|
*
|
3
3
|
* jQuery UI Theme
|
4
4
|
* Column Styles
|
5
|
-
* Column Filters
|
5
|
+
* Column Filters
|
6
6
|
* Sticky Header
|
7
7
|
* Column Resizing
|
8
8
|
* Save Sort
|
@@ -125,7 +125,7 @@ $.tablesorter.addWidget({
|
|
125
125
|
$.tablesorter.addWidget({
|
126
126
|
id: "columns",
|
127
127
|
format: function(table) {
|
128
|
-
var $tb, $tr, $td, $
|
128
|
+
var $tb, $tr, $td, $t, time, last, rmv, i, k, l,
|
129
129
|
c = table.config,
|
130
130
|
b = $(table).children('tbody:not(.' + c.cssInfoBlock + ')'),
|
131
131
|
list = c.sortList,
|
@@ -140,35 +140,30 @@ $.tablesorter.addWidget({
|
|
140
140
|
time = new Date();
|
141
141
|
}
|
142
142
|
// check if there is a sort (on initialization there may not be one)
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
if (
|
155
|
-
|
156
|
-
|
157
|
-
|
143
|
+
for (k = 0; k < b.length; k++ ) {
|
144
|
+
$tb = $(b[k]);
|
145
|
+
$tr = $tb.addClass('tablesorter-hidden').children('tr');
|
146
|
+
l = $tr.length;
|
147
|
+
// loop through the visible rows
|
148
|
+
$tr.each(function(){
|
149
|
+
$t = $(this);
|
150
|
+
if (this.style.display !== 'none') {
|
151
|
+
// remove all columns class names
|
152
|
+
$td = $t.children().removeClass(rmv);
|
153
|
+
// add appropriate column class names
|
154
|
+
if (list && list[0]) {
|
155
|
+
// primary sort column class
|
156
|
+
$td.eq(list[0][0]).addClass(css[0]);
|
157
|
+
if (len > 1) {
|
158
|
+
for (i = 1; i < len; i++){
|
159
|
+
// secondary, tertiary, etc sort column classes
|
160
|
+
$td.eq(list[i][0]).addClass( css[i] || css[last] );
|
161
|
+
}
|
158
162
|
}
|
159
163
|
}
|
160
164
|
}
|
161
|
-
|
162
|
-
|
163
|
-
} else {
|
164
|
-
// remove all column classes if sort is cleared (sortReset)
|
165
|
-
// $(table).find('td').removeClass(rmv); slow
|
166
|
-
$td = $(table).find('td');
|
167
|
-
len = $td.length;
|
168
|
-
rmv = new RegExp('(' + css.join('|') + ')');
|
169
|
-
for (i = 0; i < len; i++){
|
170
|
-
$td[i].className = $td[i].className.replace(rmv, '');
|
171
|
-
}
|
165
|
+
});
|
166
|
+
$tb.removeClass('tablesorter-hidden');
|
172
167
|
}
|
173
168
|
if (c.debug) {
|
174
169
|
$.tablesorter.benchmark("Applying Columns widget", time);
|
@@ -177,65 +172,192 @@ $.tablesorter.addWidget({
|
|
177
172
|
});
|
178
173
|
|
179
174
|
// Widget: Filter
|
180
|
-
// "filter_startsWith"
|
175
|
+
// "filter_startsWith", "filter_childRows", "filter_ignoreCase",
|
176
|
+
// "filter_searchDelay" & "filter_functions" options in "widgetOptions"
|
181
177
|
// **************************
|
182
178
|
$.tablesorter.addWidget({
|
183
179
|
id: "filter",
|
184
180
|
format: function(table) {
|
185
181
|
if (!$(table).hasClass('hasFilters')) {
|
186
|
-
var i, v, r, t, x,
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
182
|
+
var i, j, k, l, cv, v, val, r, ff, t, x, xi, cr,
|
183
|
+
sel, $tb, $tr, $td, reg2,
|
184
|
+
c = table.config,
|
185
|
+
wo = c.widgetOptions,
|
186
|
+
css = wo.filter_cssFilter || 'tablesorter-filter',
|
187
|
+
$t = $(table).addClass('hasFilters'),
|
188
|
+
b = $t.children('tbody:not(.' + c.cssInfoBlock + ')'),
|
189
|
+
cols = c.parsers.length,
|
190
|
+
fr = '<tr class="' + css + '">',
|
191
|
+
regexp = /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,
|
192
|
+
reg1 = new RegExp(c.cssChildRow),
|
193
|
+
time, timer,
|
194
|
+
findRows = function(){
|
195
|
+
if (c.debug) { time = new Date(); }
|
196
|
+
v = $t.find('thead').eq(0).children('tr').find('select.' + css + ', input.' + css).map(function(){
|
197
|
+
return $(this).val() || '';
|
198
|
+
}).get();
|
199
|
+
cv = v.join('');
|
200
|
+
for (k = 0; k < b.length; k++ ) {
|
201
|
+
$tb = $(b[k]);
|
202
|
+
$tr = $tb.addClass('tablesorter-hidden').children('tr');
|
203
|
+
l = $tr.length;
|
204
|
+
// loop through the rows
|
205
|
+
for (j = 0; j < l; j++) {
|
206
|
+
// skip child rows
|
207
|
+
if (reg1.test($tr[j].className)) { continue; }
|
208
|
+
if (cv === '') {
|
209
|
+
$tr[j].style.display = '';
|
210
|
+
} else {
|
211
|
+
r = true;
|
212
|
+
cr = $tr.eq(j).nextUntil('tr:not(.' + c.cssChildRow + ')');
|
213
|
+
// so, if "table.config.widgetOptions.filter_childRows" is true and there is
|
214
|
+
// a match anywhere in the child row, then it will make the row visible
|
215
|
+
// checked here so the option can be changed dynamically
|
216
|
+
t = (cr.length && (wo && wo.hasOwnProperty('filter_childRows') &&
|
217
|
+
typeof wo.filter_childRows !== 'undefined' ? wo.filter_childRows : true)) ? cr.text() : '';
|
218
|
+
$td = $tr.eq(j).children('td');
|
219
|
+
for (i = 0; i < cols; i++) {
|
220
|
+
x = $.trim($td.eq(i).text());
|
221
|
+
xi = wo.filter_ignoreCase ? x.toLocaleLowerCase() : x;
|
222
|
+
// ignore if filter is empty
|
223
|
+
if (v[i] !== '') {
|
224
|
+
ff = r; // if r is true, show that row
|
225
|
+
// val = case insensitive, v[i] = case sensitive
|
226
|
+
val = wo.filter_ignoreCase ? v[i].toLocaleLowerCase() : v[i];
|
227
|
+
if (wo.filter_functions && wo.filter_functions[i]) {
|
228
|
+
if (wo.filter_functions[i] === true) {
|
229
|
+
// default selector; no "filter-select" class
|
230
|
+
ff = wo.filter_ignoreCase ? val === xi : v[i] === x;
|
231
|
+
} else if (typeof wo.filter_functions[i] === 'function') {
|
232
|
+
// filter callback( exact cell content, parser normalized content, filter input value, column index )
|
233
|
+
ff = wo.filter_functions[i](x, c.cache[k].normalized[j][i], v[i], i);
|
234
|
+
} else if (typeof wo.filter_functions[i][v[i]] === 'function'){
|
235
|
+
// selector option function
|
236
|
+
ff = wo.filter_functions[i][v[i]](x, c.cache[k].normalized[j][i], v[i], i);
|
237
|
+
}
|
238
|
+
// Look for regex
|
239
|
+
} else if (regexp.test(val)) {
|
240
|
+
reg2 = regexp.exec(val);
|
241
|
+
ff = new RegExp(reg2[1], reg2[2]).test(xi);
|
242
|
+
// Look for quotes to get an exact match
|
243
|
+
} else if (/[\"|\']$/.test(val) && xi === val.replace(/(\"|\')/g,'')) {
|
244
|
+
r = (r) ? true : false;
|
245
|
+
// Look for wild card: ? = single, or * = multiple
|
246
|
+
} else if (/[\?|\*]/.test(val)) {
|
247
|
+
ff = new RegExp( val.replace(/\?/g, '\\S{1}').replace(/\*/g, '\\S*') ).test(xi);
|
248
|
+
// Look for match, and add child row data for matching
|
249
|
+
} else {
|
250
|
+
x = (xi + t).indexOf(val);
|
251
|
+
if ( (!wo.filter_startsWith && x >= 0) || (wo.filter_startsWith && x === 0) ) {
|
252
|
+
r = (r) ? true : false;
|
253
|
+
} else {
|
254
|
+
r = false;
|
255
|
+
}
|
256
|
+
}
|
257
|
+
r = (ff) ? (r ? true : false) : false;
|
258
|
+
}
|
259
|
+
}
|
260
|
+
$tr[j].style.display = (r ? '' : 'none');
|
261
|
+
if (cr.length) { cr[r ? 'show' : 'hide'](); }
|
262
|
+
}
|
263
|
+
}
|
264
|
+
$tb.removeClass('tablesorter-hidden');
|
265
|
+
}
|
266
|
+
if (c.debug) {
|
267
|
+
$.tablesorter.benchmark("Completed filter widget search", time);
|
268
|
+
}
|
269
|
+
$t.trigger('applyWidgets'); // make sure zebra widget is applied
|
270
|
+
},
|
271
|
+
buildSelect = function(i){
|
272
|
+
var o, arry = [];
|
273
|
+
i = parseInt(i, 10);
|
274
|
+
o = '<option value="">' + ($(c.headerList[i]).attr('data-placeholder') || '') + '</option>';
|
275
|
+
for (k = 0; k < b.length; k++ ) {
|
276
|
+
l = c.cache[k].row.length;
|
277
|
+
// loop through the rows
|
278
|
+
for (j = 0; j < l; j++) {
|
279
|
+
// get non-normalized cell content
|
280
|
+
t = c.cache[k].row[j][0].cells[i];
|
281
|
+
arry.push( c.supportsTextContent ? t.textContent : $(t).text() );
|
282
|
+
}
|
283
|
+
}
|
284
|
+
// get unique elements and sort the list
|
285
|
+
arry = arry.getUnique(true);
|
286
|
+
// build option list
|
287
|
+
for (k = 0; k < arry.length; k++) {
|
288
|
+
o += '<option value="' + arry[k] + '">' + arry[k] + '</option>';
|
289
|
+
}
|
290
|
+
$t.find('thead').find('select.' + css + '[data-col="' + i + '"]').append(o);
|
291
|
+
};
|
193
292
|
if (c.debug) {
|
194
293
|
time = new Date();
|
195
294
|
}
|
196
295
|
for (i=0; i < cols; i++){
|
197
|
-
|
296
|
+
sel = (wo.filter_functions && wo.filter_functions[i] && typeof wo.filter_functions[i] !== 'function') || $(c.headerList[i]).hasClass('filter-select');
|
297
|
+
fr += '<td>';
|
298
|
+
if (sel){
|
299
|
+
fr += '<select data-col="' + i + '" class="' + css;
|
300
|
+
} else {
|
301
|
+
fr += '<input type="search" placeholder="' + ($(c.headerList[i]).attr('data-placeholder') || "") + '" data-col="' + i + '" class="' + css;
|
302
|
+
}
|
198
303
|
// use header option - headers: { 1: { filter: false } } OR add class="filter-false"
|
199
304
|
if ($.tablesorter.getData) {
|
200
305
|
// get data from jQuery data, metadata, headers option or header class name
|
201
306
|
fr += $.tablesorter.getData(c.headerList[i], c.headers[i], 'filter') === 'false' ? ' disabled" disabled' : '"';
|
202
307
|
} else {
|
203
308
|
// only class names and header options - keep this for compatibility with tablesorter v2.0.5
|
204
|
-
fr += ((c.headers[i] && c.headers[i].hasOwnProperty('filter') && c.headers[i].filter === false) || $(c.headerList[i]).
|
309
|
+
fr += ((c.headers[i] && c.headers[i].hasOwnProperty('filter') && c.headers[i].filter === false) || $(c.headerList[i]).hasClass('filter-false') ) ? ' disabled" disabled' : '"';
|
205
310
|
}
|
206
|
-
fr += '></td>';
|
311
|
+
fr += (sel ? '></select>' : '>') + '</td>';
|
207
312
|
}
|
208
313
|
$t
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
314
|
+
.find('thead').eq(0).append(fr += '</tr>')
|
315
|
+
.find('input.' + css).bind('keyup search', function(e, delay){
|
316
|
+
// ignore arrow and meta keys; allow backspace
|
317
|
+
if ((e.which < 32 && e.which !== 8) || (e.which >= 37 && e.which <=40)) { return; }
|
318
|
+
// skip delay
|
319
|
+
if (delay === false) {
|
320
|
+
findRows();
|
321
|
+
return;
|
322
|
+
}
|
323
|
+
// delay filtering
|
324
|
+
clearTimeout(timer);
|
325
|
+
timer = setTimeout(function(){
|
326
|
+
findRows();
|
327
|
+
}, wo.filter_searchDelay || 300);
|
328
|
+
});
|
329
|
+
if (wo.filter_functions) {
|
330
|
+
// i = column # (string)
|
331
|
+
for (i in wo.filter_functions) {
|
332
|
+
t = $(c.headerList[i]);
|
333
|
+
fr = '';
|
334
|
+
if (typeof i === 'string' && wo.filter_functions[i] === true && !t.hasClass('filter-false')) {
|
335
|
+
buildSelect(i);
|
336
|
+
} else if (typeof i === 'string' && !t.hasClass('filter-false')) {
|
337
|
+
// add custom drop down list
|
338
|
+
for (j in wo.filter_functions[i]) {
|
339
|
+
if (typeof j === 'string') {
|
340
|
+
fr += fr === '' ? '<option>' + (t.attr('data-placeholder') || '') + '</option>' : '';
|
341
|
+
fr += '<option>' + j + '</option>';
|
232
342
|
}
|
233
|
-
|
234
|
-
|
235
|
-
});
|
343
|
+
}
|
344
|
+
$t.find('thead').find('select.' + css + '[data-col="' + i + '"]').append(fr);
|
236
345
|
}
|
237
|
-
|
238
|
-
|
346
|
+
}
|
347
|
+
}
|
348
|
+
// build default select dropdown
|
349
|
+
for (i = 0; i < c.headerList.length; i++) {
|
350
|
+
t = $(c.headerList[i]);
|
351
|
+
// look for the filter-select class, but don't build it twice.
|
352
|
+
if (t.hasClass('filter-select') && !t.hasClass('filter-false') && !(wo.filter_functions && wo.filter_functions[i] === true)){
|
353
|
+
buildSelect(i);
|
354
|
+
}
|
355
|
+
}
|
356
|
+
|
357
|
+
$t.find('select.' + css).bind('change', function(){
|
358
|
+
findRows();
|
359
|
+
});
|
360
|
+
|
239
361
|
if (c.debug) {
|
240
362
|
$.tablesorter.benchmark("Applying Filter widget", time);
|
241
363
|
}
|
@@ -286,11 +408,11 @@ $.tablesorter.addWidget({
|
|
286
408
|
});
|
287
409
|
// set sticky header cell width and link clicks to real header
|
288
410
|
hdrCells.each(function(i){
|
289
|
-
var t = $(this)
|
290
|
-
|
411
|
+
var t = $(this);
|
412
|
+
stkyCells.eq(i)
|
291
413
|
// clicking on sticky will trigger sort
|
292
|
-
.bind('
|
293
|
-
t.trigger(e);
|
414
|
+
.bind('mouseup', function(e){
|
415
|
+
t.trigger(e, true); // external mouseup flag (click timer is ignored)
|
294
416
|
})
|
295
417
|
// prevent sticky header text selection
|
296
418
|
.bind('mousedown', function(){
|
@@ -343,12 +465,11 @@ $.tablesorter.addWidget({
|
|
343
465
|
format: function(table) {
|
344
466
|
if ($(table).hasClass('hasResizable')) { return; }
|
345
467
|
$(table).addClass('hasResizable');
|
346
|
-
var
|
468
|
+
var j, s, c = table.config,
|
347
469
|
$cols = $(c.headerList).filter(':gt(0)'),
|
348
470
|
position = 0,
|
349
471
|
$target = null,
|
350
472
|
$prev = null,
|
351
|
-
len = $cols.length,
|
352
473
|
stopResize = function(){
|
353
474
|
position = 0;
|
354
475
|
$target = $prev = null;
|
@@ -372,8 +493,7 @@ $.tablesorter.addWidget({
|
|
372
493
|
.bind('mousemove', function(e){
|
373
494
|
// ignore mousemove if no mousedown
|
374
495
|
if (position === 0 || !$target) { return; }
|
375
|
-
var w = e.pageX - position
|
376
|
-
n = $prev;
|
496
|
+
var w = e.pageX - position;
|
377
497
|
// make sure
|
378
498
|
if ( $target.width() < -w || ( $prev && $prev.width() <= w )) { return; }
|
379
499
|
// resize current column
|
@@ -394,6 +514,7 @@ $.tablesorter.addWidget({
|
|
394
514
|
$target = $(e.target).closest('th');
|
395
515
|
$prev = $target.prev();
|
396
516
|
position = e.pageX;
|
517
|
+
return false;
|
397
518
|
});
|
398
519
|
$(table).find('thead').bind('mouseup mouseleave', function(){
|
399
520
|
stopResize();
|
@@ -412,7 +533,7 @@ $.tablesorter.addWidget({
|
|
412
533
|
thisWidget.format(table, true);
|
413
534
|
},
|
414
535
|
format: function(table, init) {
|
415
|
-
var
|
536
|
+
var sl, time, c = table.config, sortList = { "sortList" : c.sortList };
|
416
537
|
if (c.debug) {
|
417
538
|
time = new Date();
|
418
539
|
}
|
@@ -447,4 +568,17 @@ $.tablesorter.addWidget({
|
|
447
568
|
}
|
448
569
|
});
|
449
570
|
|
450
|
-
})(jQuery);
|
571
|
+
})(jQuery);
|
572
|
+
|
573
|
+
// return an array with unique values https://gist.github.com/461516
|
574
|
+
Array.prototype.getUnique = function(s){
|
575
|
+
var c, a = [], o = {}, i, j = 0, l = this.length;
|
576
|
+
for(i=0; i < l; ++i) {
|
577
|
+
c = this[i];
|
578
|
+
if (!o[c]) {
|
579
|
+
o[c] = {};
|
580
|
+
a[j++] = c;
|
581
|
+
}
|
582
|
+
}
|
583
|
+
return (s) ? a.sort() : a;
|
584
|
+
};
|
@@ -59,6 +59,10 @@ table.tablesorter th.tablesorter-headerSortDown {
|
|
59
59
|
/* image */
|
60
60
|
/* background-image: url(black-desc.gif); */
|
61
61
|
}
|
62
|
+
/* used to hide a tbody while rebuilding to speed it up */
|
63
|
+
table.tablesorter .tablesorter-hidden {
|
64
|
+
display: none;
|
65
|
+
}
|
62
66
|
|
63
67
|
/* Zebra Widget - row alternating colors */
|
64
68
|
table.tablesorter tr.odd td {
|
@@ -91,7 +95,8 @@ table.tablesorter tr.even td.tertiary {
|
|
91
95
|
}
|
92
96
|
|
93
97
|
/* filter widget */
|
94
|
-
table.tablesorter input.tablesorter-filter
|
98
|
+
table.tablesorter input.tablesorter-filter,
|
99
|
+
table.tablesorter select.tablesorter-filter {
|
95
100
|
width: 95%;
|
96
101
|
height: inherit;
|
97
102
|
-webkit-box-sizing: border-box;
|
@@ -104,7 +109,8 @@ table.tablesorter tr.tablesorter-filter td {
|
|
104
109
|
background: #fff;
|
105
110
|
}
|
106
111
|
/* optional disabled input styling */
|
107
|
-
table.tablesorter input.tablesorter-filter.disabled
|
112
|
+
table.tablesorter input.tablesorter-filter.disabled,
|
113
|
+
table.tablesorter select.tablesorter-filter.disabled {
|
108
114
|
opacity: 0.5;
|
109
115
|
filter: alpha(opacity=50);
|
110
116
|
}
|
@@ -39,10 +39,16 @@ table.tablesorter tbody td {
|
|
39
39
|
/* This allows you to use ui-state-default as the zebra stripe color */
|
40
40
|
table.tablesorter tr.ui-state-default {
|
41
41
|
background-image: url();
|
42
|
+
font-weight: normal;
|
43
|
+
}
|
44
|
+
/* used to hide a tbody while rebuilding to speed it up */
|
45
|
+
table.tablesorter .tablesorter-hidden {
|
46
|
+
display: none;
|
42
47
|
}
|
43
48
|
|
44
49
|
/* filter widget */
|
45
|
-
table.tablesorter thead tr.tablesorter-filter input.tablesorter-filter
|
50
|
+
table.tablesorter thead tr.tablesorter-filter input.tablesorter-filter,
|
51
|
+
table.tablesorter thead tr.tablesorter-filter select.tablesorter-filter {
|
46
52
|
width: 95%;
|
47
53
|
height: inherit;
|
48
54
|
-webkit-box-sizing: border-box;
|
@@ -54,7 +60,8 @@ table.tablesorter thead tr.tablesorter-filter td {
|
|
54
60
|
text-align: center;
|
55
61
|
}
|
56
62
|
/* optional disabled input styling */
|
57
|
-
table.tablesorter thead tr.tablesorter-filter input.tablesorter-filter.disabled
|
63
|
+
table.tablesorter thead tr.tablesorter-filter input.tablesorter-filter.disabled,
|
64
|
+
table.tablesorter thead tr.tablesorter-filter select.tablesorter-filter.disabled {
|
58
65
|
opacity: 0.5;
|
59
66
|
filter: alpha(opacity=50);
|
60
67
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery-tablesorter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -63,7 +63,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
63
|
version: '0'
|
64
64
|
segments:
|
65
65
|
- 0
|
66
|
-
hash:
|
66
|
+
hash: 1964242122684658673
|
67
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
68
|
none: false
|
69
69
|
requirements:
|
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
72
|
version: '0'
|
73
73
|
segments:
|
74
74
|
- 0
|
75
|
-
hash:
|
75
|
+
hash: 1964242122684658673
|
76
76
|
requirements: []
|
77
77
|
rubyforge_project:
|
78
78
|
rubygems_version: 1.8.23
|