boomack 0.15.11 → 0.15.12
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.
- package/dist/client-resources/tablesort.js +132 -0
- package/dist/index.mjs +18 -18
- package/package.json +5 -4
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/*
|
|
2
|
+
A simple, lightweight jQuery plugin for creating sortable tables.
|
|
3
|
+
https://github.com/kylefox/jquery-tablesort
|
|
4
|
+
Version 0.0.11
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
(function($) {
|
|
8
|
+
$.tablesort = function ($table, settings) {
|
|
9
|
+
var self = this;
|
|
10
|
+
this.$table = $table;
|
|
11
|
+
this.$thead = this.$table.find('thead');
|
|
12
|
+
this.settings = $.extend({}, $.tablesort.defaults, settings);
|
|
13
|
+
this.$sortCells = this.$thead.length > 0 ? this.$thead.find('th:not(.no-sort)') : this.$table.find('th:not(.no-sort)');
|
|
14
|
+
this.$sortCells.on('click.tablesort', function() {
|
|
15
|
+
self.sort($(this));
|
|
16
|
+
});
|
|
17
|
+
this.index = null;
|
|
18
|
+
this.$th = null;
|
|
19
|
+
this.direction = null;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
$.tablesort.prototype = {
|
|
23
|
+
|
|
24
|
+
sort: function(th, direction) {
|
|
25
|
+
var start = new Date(),
|
|
26
|
+
self = this,
|
|
27
|
+
table = this.$table,
|
|
28
|
+
rowsContainer = table.find('tbody').length > 0 ? table.find('tbody') : table,
|
|
29
|
+
rows = rowsContainer.find('tr').has('td, th'),
|
|
30
|
+
cells = rows.find(':nth-child(' + (th.index() + 1) + ')').filter('td, th'),
|
|
31
|
+
sortBy = th.data().sortBy,
|
|
32
|
+
sortedMap = [];
|
|
33
|
+
|
|
34
|
+
var unsortedValues = cells.map(function(idx, cell) {
|
|
35
|
+
if (sortBy)
|
|
36
|
+
return (typeof sortBy === 'function') ? sortBy($(th), $(cell), self) : sortBy;
|
|
37
|
+
return ($(this).data().sortValue != null ? $(this).data().sortValue : $(this).text());
|
|
38
|
+
});
|
|
39
|
+
if (unsortedValues.length === 0) return;
|
|
40
|
+
|
|
41
|
+
//click on a different column
|
|
42
|
+
if (this.index !== th.index()) {
|
|
43
|
+
this.direction = 'asc';
|
|
44
|
+
this.index = th.index();
|
|
45
|
+
}
|
|
46
|
+
else if (direction !== 'asc' && direction !== 'desc')
|
|
47
|
+
this.direction = this.direction === 'asc' ? 'desc' : 'asc';
|
|
48
|
+
else
|
|
49
|
+
this.direction = direction;
|
|
50
|
+
|
|
51
|
+
direction = this.direction == 'asc' ? 1 : -1;
|
|
52
|
+
|
|
53
|
+
self.$table.trigger('tablesort:start', [self]);
|
|
54
|
+
self.log("Sorting by " + this.index + ' ' + this.direction);
|
|
55
|
+
|
|
56
|
+
// Try to force a browser redraw
|
|
57
|
+
self.$table.css("display");
|
|
58
|
+
// Run sorting asynchronously on a timeout to force browser redraw after
|
|
59
|
+
// `tablesort:start` callback. Also avoids locking up the browser too much.
|
|
60
|
+
setTimeout(function() {
|
|
61
|
+
self.$sortCells.removeClass(self.settings.asc + ' ' + self.settings.desc);
|
|
62
|
+
for (var i = 0, length = unsortedValues.length; i < length; i++)
|
|
63
|
+
{
|
|
64
|
+
sortedMap.push({
|
|
65
|
+
index: i,
|
|
66
|
+
cell: cells[i],
|
|
67
|
+
row: rows[i],
|
|
68
|
+
value: unsortedValues[i]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
sortedMap.sort(function(a, b) {
|
|
73
|
+
return self.settings.compare(a.value, b.value) * direction;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
$.each(sortedMap, function(i, entry) {
|
|
77
|
+
rowsContainer.append(entry.row);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
th.addClass(self.settings[self.direction]);
|
|
81
|
+
|
|
82
|
+
self.log('Sort finished in ' + ((new Date()).getTime() - start.getTime()) + 'ms');
|
|
83
|
+
self.$table.trigger('tablesort:complete', [self]);
|
|
84
|
+
//Try to force a browser redraw
|
|
85
|
+
self.$table.css("display");
|
|
86
|
+
}, unsortedValues.length > 2000 ? 200 : 10);
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
log: function(msg) {
|
|
90
|
+
if(($.tablesort.DEBUG || this.settings.debug) && console && console.log) {
|
|
91
|
+
console.log('[tablesort] ' + msg);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
destroy: function() {
|
|
96
|
+
this.$sortCells.off('click.tablesort');
|
|
97
|
+
this.$table.data('tablesort', null);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
$.tablesort.DEBUG = false;
|
|
104
|
+
|
|
105
|
+
$.tablesort.defaults = {
|
|
106
|
+
debug: $.tablesort.DEBUG,
|
|
107
|
+
asc: 'sorted ascending',
|
|
108
|
+
desc: 'sorted descending',
|
|
109
|
+
compare: function(a, b) {
|
|
110
|
+
if (a > b) {
|
|
111
|
+
return 1;
|
|
112
|
+
} else if (a < b) {
|
|
113
|
+
return -1;
|
|
114
|
+
} else {
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
$.fn.tablesort = function(settings) {
|
|
121
|
+
var table, sortable, previous;
|
|
122
|
+
return this.each(function() {
|
|
123
|
+
table = $(this);
|
|
124
|
+
previous = table.data('tablesort');
|
|
125
|
+
if(previous) {
|
|
126
|
+
previous.destroy();
|
|
127
|
+
}
|
|
128
|
+
table.data('tablesort', new $.tablesort(table, settings));
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
})(window.Zepto || window.jQuery);
|