jquery-tablesorter 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +1 -1
- data/README.markdown +3 -3
- data/lib/jquery-tablesorter/version.rb +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.js +177 -115
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.metadata.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +461 -376
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets-filter-formatter.js +924 -0
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +499 -270
- data/vendor/assets/stylesheets/jquery-tablesorter/filter.formatter.css +183 -0
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.black-ice.css +12 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.blue.css +12 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap.css +17 -2
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.dark.css +12 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.default.css +14 -2
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.dropbox.css +19 -9
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.green.css +12 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.grey.css +12 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.ice.css +12 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.jui.css +12 -1
- metadata +55 -56
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4f5f04bd46d8e9001eaed1fd11168abaf1dc01d3
|
4
|
+
data.tar.gz: 94b839457b16ae09027b6b31f1aae45900a02f95
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e7b986e9531e83e42da0a5a991441a87cc762df6cd9d6f5a2397e47040b8462ac1a8d0a875be2376d36a104c901276533e2de1fd6e660800bac19c2e058388e0
|
7
|
+
data.tar.gz: fd625bcab3d94d00687e797837a124e97c364c94a6c7509e5d44bc2992ccdc85f89d32529b19620c9523647764ed95f0411d17100421d0ab6bf28e0fb2b1d462
|
data/MIT-LICENSE
CHANGED
data/README.markdown
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# jQuery Table Sorter plugin for Rails
|
2
2
|
|
3
|
-
[![
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/jquery-tablesorter.png)](http://badge.fury.io/rb/jquery-tablesorter)
|
4
4
|
|
5
5
|
Simple integration of jquery-tablesorter into the asset pipeline.
|
6
6
|
|
7
|
-
Current tablesorter version: 2.
|
7
|
+
Current tablesorter version: 2.10.8 (6/3/2013), [documentation]
|
8
8
|
|
9
9
|
Any issue associate with the js/css files, please report to [Mottie's fork].
|
10
10
|
|
@@ -92,7 +92,7 @@ pager theme:
|
|
92
92
|
2. Run `rake jquery_tablesorter:update`
|
93
93
|
3. Run `rake jquery_tablesorter:sanitize_image_paths`
|
94
94
|
4. Update `README.md` and `CHANGELOG.md`
|
95
|
-
|
95
|
+
|
96
96
|
|
97
97
|
[Mottie's fork]: https://github.com/Mottie/tablesorter
|
98
98
|
[documentation]: http://mottie.github.com/tablesorter/docs/index.html
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
2
|
* tablesorter pager plugin
|
3
|
-
* updated
|
3
|
+
* updated 5/27/2013
|
4
4
|
*/
|
5
5
|
/*jshint browser:true, jquery:true, unused:false */
|
6
6
|
;(function($) {
|
@@ -20,6 +20,14 @@
|
|
20
20
|
// and a filterList = [[2,Blue],[3,13]] becomes "&fcol[2]=Blue&fcol[3]=13" in the url
|
21
21
|
ajaxUrl: null,
|
22
22
|
|
23
|
+
// modify the url after all processing has been applied
|
24
|
+
customAjaxUrl: function(table, url) { return url; },
|
25
|
+
|
26
|
+
// modify the $.ajax object to allow complete control over your ajax requests
|
27
|
+
ajaxObject: {
|
28
|
+
dataType: 'json'
|
29
|
+
},
|
30
|
+
|
23
31
|
// process ajax so that the following information is returned:
|
24
32
|
// [ total_rows (number), rows (array of arrays), headers (array; optional) ]
|
25
33
|
// example:
|
@@ -87,21 +95,24 @@
|
|
87
95
|
dis = !!disable,
|
88
96
|
tp = Math.min( c.totalPages, c.filteredPages );
|
89
97
|
if ( c.updateArrows ) {
|
90
|
-
|
91
|
-
|
98
|
+
c.$container.find(c.cssFirst + ',' + c.cssPrev)[ ( dis || c.page === 0 ) ? a : r ](d);
|
99
|
+
c.$container.find(c.cssNext + ',' + c.cssLast)[ ( dis || c.page === tp - 1 ) ? a : r ](d);
|
92
100
|
}
|
93
101
|
},
|
94
102
|
|
95
|
-
updatePageDisplay = function(table, c) {
|
96
|
-
var i, p, s, t, out,
|
97
|
-
|
98
|
-
|
99
|
-
|
103
|
+
updatePageDisplay = function(table, c, flag) {
|
104
|
+
var i, p, s, t, out,
|
105
|
+
tc = table.config,
|
106
|
+
f = $(table).hasClass('hasFilters') && !c.ajaxUrl;
|
107
|
+
c.totalPages = Math.ceil( c.totalRows / c.size ); // needed for "pageSize" method
|
108
|
+
c.filteredRows = (f) ? tc.$tbodies.eq(0).children('tr:not(.' + (tc.widgetOptions && tc.widgetOptions.filter_filteredRow || 'filtered') + ',' + tc.selectorRemove + ')').length : c.totalRows;
|
109
|
+
c.filteredPages = (f) ? Math.ceil( c.filteredRows / c.size ) || 1 : c.totalPages;
|
110
|
+
if ( Math.min( c.totalPages, c.filteredPages ) >= 0 ) {
|
100
111
|
t = (c.size * c.page > c.filteredRows);
|
101
|
-
c.startRow = (t) ? 1 : ( c.size * c.page
|
112
|
+
c.startRow = (t) ? 1 : (c.filteredRows === 0 ? 0 : c.size * c.page + 1);
|
102
113
|
c.page = (t) ? 0 : c.page;
|
103
114
|
c.endRow = Math.min( c.filteredRows, c.totalRows, c.size * ( c.page + 1 ) );
|
104
|
-
out =
|
115
|
+
out = c.$container.find(c.cssPageDisplay);
|
105
116
|
// form the output string
|
106
117
|
s = c.output.replace(/\{(page|filteredRows|filteredPages|totalPages|startRow|endRow|totalRows)\}/gi, function(m){
|
107
118
|
return {
|
@@ -114,24 +125,24 @@
|
|
114
125
|
'{totalRows}' : c.totalRows
|
115
126
|
}[m];
|
116
127
|
});
|
117
|
-
if (out
|
128
|
+
if (out.length) {
|
118
129
|
out[ (out[0].tagName === 'INPUT') ? 'val' : 'html' ](s);
|
119
|
-
if (
|
130
|
+
if ( c.$goto.length ) {
|
120
131
|
t = '';
|
121
132
|
p = Math.min( c.totalPages, c.filteredPages );
|
122
133
|
for ( i = 1; i <= p; i++ ) {
|
123
134
|
t += '<option>' + i + '</option>';
|
124
135
|
}
|
125
|
-
|
136
|
+
c.$goto.html(t).val( c.page + 1 );
|
126
137
|
}
|
127
138
|
}
|
128
139
|
}
|
129
140
|
pagerArrows(c);
|
130
|
-
if (c.initialized) { $(table).trigger('pagerComplete', c); }
|
141
|
+
if (c.initialized && flag !== false) { $(table).trigger('pagerComplete', c); }
|
131
142
|
},
|
132
143
|
|
133
144
|
fixHeight = function(table, c) {
|
134
|
-
var d, h, $b =
|
145
|
+
var d, h, $b = table.config.$tbodies.eq(0);
|
135
146
|
if (c.fixedHeight) {
|
136
147
|
$b.find('tr.pagerSavedHeightSpacer').remove();
|
137
148
|
h = $.data(table, 'pagerSavedHeight');
|
@@ -145,7 +156,7 @@
|
|
145
156
|
},
|
146
157
|
|
147
158
|
changeHeight = function(table, c) {
|
148
|
-
var $b =
|
159
|
+
var $b = table.config.$tbodies.eq(0);
|
149
160
|
$b.find('tr.pagerSavedHeightSpacer').remove();
|
150
161
|
$.data(table, 'pagerSavedHeight', $b.height());
|
151
162
|
fixHeight(table, c);
|
@@ -155,13 +166,15 @@
|
|
155
166
|
hideRows = function(table, c){
|
156
167
|
if (!c.ajaxUrl) {
|
157
168
|
var i,
|
158
|
-
|
169
|
+
tc = table.config,
|
170
|
+
rows = tc.$tbodies.eq(0).children('tr:not(.' + tc.cssChildRow + ')'),
|
159
171
|
l = rows.length,
|
160
172
|
s = ( c.page * c.size ),
|
161
173
|
e = s + c.size,
|
174
|
+
f = tc.widgetOptions && tc.widgetOptions.filter_filteredRow || 'filtered',
|
162
175
|
j = 0; // size counter
|
163
176
|
for ( i = 0; i < l; i++ ){
|
164
|
-
if (
|
177
|
+
if ( !rows[i].className.match(f) ) {
|
165
178
|
rows[i].style.display = ( j >= s && j < e ) ? '' : 'none';
|
166
179
|
j++;
|
167
180
|
}
|
@@ -170,7 +183,7 @@
|
|
170
183
|
},
|
171
184
|
|
172
185
|
hideRowsSetup = function(table, c){
|
173
|
-
c.size = parseInt(
|
186
|
+
c.size = parseInt( c.$size.val(), 10 ) || c.size;
|
174
187
|
$.data(table, 'pagerLastSize', c.size);
|
175
188
|
pagerArrows(c);
|
176
189
|
if ( !c.removeRows ) {
|
@@ -181,65 +194,87 @@
|
|
181
194
|
}
|
182
195
|
},
|
183
196
|
|
184
|
-
renderAjax = function(data, table, c, exception){
|
197
|
+
renderAjax = function(data, table, c, xhr, exception){
|
185
198
|
// process data
|
186
199
|
if ( typeof(c.ajaxProcessing) === "function" ) {
|
187
200
|
// ajaxProcessing result: [ total, rows, headers ]
|
188
|
-
var i, j, hsh, $f, $sh,
|
201
|
+
var i, j, hsh, $f, $sh, th, d, l, $err,
|
189
202
|
$t = $(table),
|
190
203
|
tc = table.config,
|
191
204
|
hl = $t.find('thead th').length, tds = '',
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
l = d.length,
|
197
|
-
th = result[2];
|
198
|
-
if ( l > 0 ) {
|
199
|
-
for ( i = 0; i < l; i++ ) {
|
200
|
-
tds += '<tr>';
|
201
|
-
for ( j = 0; j < d[i].length; j++ ) {
|
202
|
-
// build tbody cells
|
203
|
-
tds += '<td>' + d[i][j] + '</td>';
|
204
|
-
}
|
205
|
-
tds += '</tr>';
|
206
|
-
}
|
207
|
-
}
|
208
|
-
// only add new header text if the length matches
|
209
|
-
if ( th && th.length === hl ) {
|
210
|
-
hsh = $t.hasClass('hasStickyHeaders');
|
211
|
-
$sh = $t.find('.' + ((tc.widgetOptions && tc.widgetOptions.stickyHeaders) || 'tablesorter-stickyheader'));
|
212
|
-
$f = $t.find('tfoot tr:first').children();
|
213
|
-
$t.find('th.' + tc.cssHeader).each(function(j){
|
214
|
-
var $t = $(this), icn;
|
215
|
-
// add new test within the first span it finds, or just in the header
|
216
|
-
if ( $t.find('.' + tc.cssIcon).length ) {
|
217
|
-
icn = $t.find('.' + tc.cssIcon).clone(true);
|
218
|
-
$t.find('.tablesorter-header-inner').html( th[j] ).append(icn);
|
219
|
-
if ( hsh && $sh.length ) {
|
220
|
-
icn = $sh.find('th').eq(j).find('.' + tc.cssIcon).clone(true);
|
221
|
-
$sh.find('th').eq(j).find('.tablesorter-header-inner').html( th[j] ).append(icn);
|
222
|
-
}
|
223
|
-
} else {
|
224
|
-
$t.find('.tablesorter-header-inner').html( th[j] );
|
225
|
-
$sh.find('th').eq(j).find('.tablesorter-header-inner').html( th[j] );
|
226
|
-
}
|
227
|
-
$f.eq(j).html( th[j] );
|
228
|
-
});
|
229
|
-
}
|
230
|
-
|
205
|
+
result = c.ajaxProcessing(data, table) || [ 0, [] ],
|
206
|
+
// allow [ total, rows, headers ] or [ rows, total, headers ]
|
207
|
+
t = isNaN(result[0]) && !isNaN(result[1]);
|
208
|
+
|
231
209
|
$t.find('thead tr.' + c.cssErrorRow).remove(); // Clean up any previous error.
|
210
|
+
|
232
211
|
if ( exception ) {
|
212
|
+
$err = $('<tr class="' + c.cssErrorRow + '"><td style="text-align:center;" colspan="' + hl + '">' + (
|
213
|
+
xhr.status === 0 ? 'Not connected, verify Network' :
|
214
|
+
xhr.status === 404 ? 'Requested page not found [404]' :
|
215
|
+
xhr.status === 500 ? 'Internal Server Error [500]' :
|
216
|
+
exception === 'parsererror' ? 'Requested JSON parse failed' :
|
217
|
+
exception === 'timeout' ? 'Time out error' :
|
218
|
+
exception === 'abort' ? 'Ajax Request aborted' :
|
219
|
+
'Uncaught error: ' + xhr.statusText + ' [' + xhr.status + ']' ) + '</td></tr>')
|
220
|
+
.click(function(){
|
221
|
+
$(this).remove();
|
222
|
+
})
|
233
223
|
// add error row to thead instead of tbody, or clicking on the header will result in a parser error
|
234
|
-
$t.find('thead')
|
224
|
+
.appendTo( $t.find('thead:first') );
|
225
|
+
tc.$tbodies.eq(0).empty();
|
235
226
|
} else {
|
236
|
-
|
227
|
+
c.totalRows = result[t ? 1 : 0] || c.totalRows || 0;
|
228
|
+
d = result[t ? 0 : 1] || []; // row data
|
229
|
+
l = d.length;
|
230
|
+
th = result[2]; // headers
|
231
|
+
if (d instanceof jQuery) {
|
232
|
+
// append jQuery object
|
233
|
+
tc.$tbodies.eq(0).empty().append(d);
|
234
|
+
} else if (d.length) {
|
235
|
+
// build table from array
|
236
|
+
if ( l > 0 ) {
|
237
|
+
for ( i = 0; i < l; i++ ) {
|
238
|
+
tds += '<tr>';
|
239
|
+
for ( j = 0; j < d[i].length; j++ ) {
|
240
|
+
// build tbody cells
|
241
|
+
tds += '<td>' + d[i][j] + '</td>';
|
242
|
+
}
|
243
|
+
tds += '</tr>';
|
244
|
+
}
|
245
|
+
}
|
246
|
+
// add rows to first tbody
|
247
|
+
tc.$tbodies.eq(0).html( tds );
|
248
|
+
}
|
249
|
+
// only add new header text if the length matches
|
250
|
+
if ( th && th.length === hl ) {
|
251
|
+
hsh = $t.hasClass('hasStickyHeaders');
|
252
|
+
$sh = hsh ? tc.$sticky.children('thead:first').children().children() : '';
|
253
|
+
$f = $t.find('tfoot tr:first').children();
|
254
|
+
$t.find('th.' + tc.cssHeader).each(function(j){
|
255
|
+
var $t = $(this), icn;
|
256
|
+
// add new test within the first span it finds, or just in the header
|
257
|
+
if ( $t.find('.' + tc.cssIcon).length ) {
|
258
|
+
icn = $t.find('.' + tc.cssIcon).clone(true);
|
259
|
+
$t.find('.tablesorter-header-inner').html( th[j] ).append(icn);
|
260
|
+
if ( hsh && $sh.length ) {
|
261
|
+
icn = $sh.eq(j).find('.' + tc.cssIcon).clone(true);
|
262
|
+
$sh.eq(j).find('.tablesorter-header-inner').html( th[j] ).append(icn);
|
263
|
+
}
|
264
|
+
} else {
|
265
|
+
$t.find('.tablesorter-header-inner').html( th[j] );
|
266
|
+
if (hsh && $sh.length) {
|
267
|
+
$sh.eq(j).find('.tablesorter-header-inner').html( th[j] );
|
268
|
+
}
|
269
|
+
}
|
270
|
+
$f.eq(j).html( th[j] );
|
271
|
+
});
|
272
|
+
}
|
237
273
|
}
|
238
274
|
if (tc.showProcessing) {
|
239
275
|
$.tablesorter.isProcessing(table); // remove loading icon
|
240
276
|
}
|
241
277
|
$t.trigger('update');
|
242
|
-
c.totalRows = result[0] || 0;
|
243
278
|
c.totalPages = Math.ceil( c.totalRows / c.size );
|
244
279
|
updatePageDisplay(table, c);
|
245
280
|
fixHeight(table, c);
|
@@ -253,30 +288,39 @@
|
|
253
288
|
|
254
289
|
getAjax = function(table, c){
|
255
290
|
var url = getAjaxUrl(table, c),
|
291
|
+
$doc = $(document),
|
256
292
|
tc = table.config;
|
257
293
|
if ( url !== '' ) {
|
258
294
|
if (tc.showProcessing) {
|
259
295
|
$.tablesorter.isProcessing(table, true); // show loading icon
|
260
296
|
}
|
261
|
-
$
|
262
|
-
if (settings.url
|
263
|
-
renderAjax(null, table, c, exception);
|
264
|
-
$
|
297
|
+
$doc.bind('ajaxError.pager', function(e, xhr, settings, exception) {
|
298
|
+
if (url.match(settings.url)) {
|
299
|
+
renderAjax(null, table, c, xhr, exception);
|
300
|
+
$doc.unbind('ajaxError.pager');
|
265
301
|
}
|
266
302
|
});
|
267
|
-
|
303
|
+
c.ajaxObject.url = url; // from the ajaxUrl option and modified by customAjaxUrl
|
304
|
+
c.ajaxObject.success = function(data) {
|
268
305
|
renderAjax(data, table, c);
|
269
|
-
$
|
270
|
-
|
306
|
+
$doc.unbind('ajaxError.pager');
|
307
|
+
if (typeof c.oldAjaxSuccess === 'function') {
|
308
|
+
c.oldAjaxSuccess(data);
|
309
|
+
}
|
310
|
+
};
|
311
|
+
$.ajax(c.ajaxObject);
|
271
312
|
}
|
272
313
|
},
|
273
|
-
|
314
|
+
|
274
315
|
getAjaxUrl = function(table, c) {
|
275
|
-
var url = (c.ajaxUrl) ? c.ajaxUrl
|
316
|
+
var url = (c.ajaxUrl) ? c.ajaxUrl
|
317
|
+
// allow using "{page+1}" in the url string to switch to a non-zero based index
|
318
|
+
.replace(/\{page([\-+]\d+)?\}/, function(s,n){ return c.page + (n ? parseInt(n, 10) : 0); })
|
319
|
+
.replace(/\{size\}/g, c.size) : '',
|
276
320
|
sl = table.config.sortList,
|
277
321
|
fl = c.currentFilters || [],
|
278
|
-
sortCol = url.match(/\{
|
279
|
-
filterCol = url.match(/\{
|
322
|
+
sortCol = url.match(/\{\s*sort(?:List)?\s*:\s*(\w*)\s*\}/),
|
323
|
+
filterCol = url.match(/\{\s*filter(?:List)?\s*:\s*(\w*)\s*\}/),
|
280
324
|
arry = [];
|
281
325
|
if (sortCol) {
|
282
326
|
sortCol = sortCol[1];
|
@@ -284,7 +328,8 @@
|
|
284
328
|
arry.push(sortCol + '[' + v[0] + ']=' + v[1]);
|
285
329
|
});
|
286
330
|
// if the arry is empty, just add the col parameter... "&{sortList:col}" becomes "&col"
|
287
|
-
url = url.replace(/\{
|
331
|
+
url = url.replace(/\{\s*sort(?:List)?\s*:\s*(\w*)\s*\}/g, arry.length ? arry.join('&') : sortCol );
|
332
|
+
arry = [];
|
288
333
|
}
|
289
334
|
if (filterCol) {
|
290
335
|
filterCol = filterCol[1];
|
@@ -294,16 +339,17 @@
|
|
294
339
|
}
|
295
340
|
});
|
296
341
|
// if the arry is empty, just add the fcol parameter... "&{filterList:fcol}" becomes "&fcol"
|
297
|
-
url = url.replace(/\{
|
342
|
+
url = url.replace(/\{\s*filter(?:List)?\s*:\s*(\w*)\s*\}/g, arry.length ? arry.join('&') : filterCol );
|
343
|
+
}
|
344
|
+
if ( typeof(c.customAjaxUrl) === "function" ) {
|
345
|
+
url = c.customAjaxUrl(table, url);
|
298
346
|
}
|
299
|
-
|
300
347
|
return url;
|
301
348
|
},
|
302
349
|
|
303
350
|
renderTable = function(table, rows, c) {
|
304
351
|
c.isDisabled = false; // needed because sorting will change the page and re-enable the pager
|
305
|
-
var i, j, o,
|
306
|
-
f = document.createDocumentFragment(),
|
352
|
+
var i, j, o, $tb,
|
307
353
|
l = rows.length,
|
308
354
|
s = ( c.page * c.size ),
|
309
355
|
e = ( s + c.size );
|
@@ -315,17 +361,16 @@
|
|
315
361
|
if ( e > rows.length ) {
|
316
362
|
e = rows.length;
|
317
363
|
}
|
318
|
-
$(table.tBodies[0]).addClass('tablesorter-hidden');
|
319
364
|
$.tablesorter.clearTableBody(table);
|
365
|
+
$tb = $.tablesorter.processTbody(table, table.config.$tbodies.eq(0), true);
|
320
366
|
for ( i = s; i < e; i++ ) {
|
321
367
|
o = rows[i];
|
322
368
|
l = o.length;
|
323
369
|
for ( j = 0; j < l; j++ ) {
|
324
|
-
|
370
|
+
$tb.appendChild(o[j]);
|
325
371
|
}
|
326
372
|
}
|
327
|
-
|
328
|
-
$(table.tBodies[0]).removeClass('tablesorter-hidden');
|
373
|
+
$.tablesorter.processTbody(table, $tb, false);
|
329
374
|
}
|
330
375
|
if ( c.page >= c.totalPages ) {
|
331
376
|
moveToLastPage(table, c);
|
@@ -345,21 +390,20 @@
|
|
345
390
|
c.page = 0;
|
346
391
|
c.size = c.totalRows;
|
347
392
|
c.totalPages = 1;
|
348
|
-
$('tr.pagerSavedHeightSpacer'
|
393
|
+
$(table).find('tr.pagerSavedHeightSpacer').remove();
|
349
394
|
renderTable(table, table.config.rowsCopy, c);
|
350
395
|
}
|
351
396
|
// disable size selector
|
352
|
-
|
397
|
+
c.$size.add(c.$goto).each(function(){
|
353
398
|
$(this).addClass(c.cssDisabled)[0].disabled = true;
|
354
399
|
});
|
355
400
|
},
|
356
401
|
|
357
|
-
moveToPage = function(table, c) {
|
402
|
+
moveToPage = function(table, c, flag) {
|
358
403
|
if ( c.isDisabled ) { return; }
|
359
404
|
var p = Math.min( c.totalPages, c.filteredPages );
|
360
|
-
if ( c.page < 0
|
361
|
-
|
362
|
-
}
|
405
|
+
if ( c.page < 0 ) { c.page = 0; }
|
406
|
+
if ( c.page > ( p - 1 ) && p !== 0 ) { c.page = p - 1; }
|
363
407
|
if (c.ajax) {
|
364
408
|
getAjax(table, c);
|
365
409
|
} else if (!c.ajax) {
|
@@ -367,11 +411,14 @@
|
|
367
411
|
}
|
368
412
|
$.data(table, 'pagerLastPage', c.page);
|
369
413
|
$.data(table, 'pagerUpdateTriggered', true);
|
370
|
-
if (c.initialized
|
414
|
+
if (c.initialized && flag !== false) {
|
415
|
+
$(table).trigger('pageMoved', c);
|
416
|
+
}
|
371
417
|
},
|
372
418
|
|
373
419
|
setPageSize = function(table, size, c) {
|
374
420
|
c.size = size;
|
421
|
+
c.$size.val(size);
|
375
422
|
$.data(table, 'pagerLastPage', c.page);
|
376
423
|
$.data(table, 'pagerLastSize', c.size);
|
377
424
|
c.totalPages = Math.ceil( c.totalRows / c.size );
|
@@ -406,14 +453,14 @@
|
|
406
453
|
|
407
454
|
destroyPager = function(table, c){
|
408
455
|
showAllRows(table, c);
|
409
|
-
|
456
|
+
c.$container.hide(); // hide pager
|
410
457
|
table.config.appender = null; // remove pager appender function
|
411
458
|
$(table).unbind('destroy.pager sortEnd.pager filterEnd.pager enable.pager disable.pager');
|
412
459
|
},
|
413
460
|
|
414
461
|
enablePager = function(table, c, triggered){
|
415
|
-
var p =
|
416
|
-
|
462
|
+
var p = c.$size.removeClass(c.cssDisabled).removeAttr('disabled');
|
463
|
+
c.$goto.removeClass(c.cssDisabled).removeAttr('disabled');
|
417
464
|
c.isDisabled = false;
|
418
465
|
c.page = $.data(table, 'pagerLastPage') || c.page || 0;
|
419
466
|
c.size = $.data(table, 'pagerLastSize') || parseInt(p.find('option[selected]').val(), 10) || c.size;
|
@@ -448,7 +495,9 @@
|
|
448
495
|
table = this,
|
449
496
|
tc = table.config,
|
450
497
|
$t = $(table),
|
451
|
-
|
498
|
+
// added in case the pager is reinitialized after being destroyed.
|
499
|
+
pager = c.$container = $(c.container).addClass('tablesorter-pager').show();
|
500
|
+
c.oldAjaxSuccess = c.oldAjaxSuccess || c.ajaxObject.success;
|
452
501
|
config.appender = $this.appender;
|
453
502
|
|
454
503
|
$t
|
@@ -464,39 +513,51 @@
|
|
464
513
|
$.data(table, 'pagerUpdateTriggered', false);
|
465
514
|
return;
|
466
515
|
}
|
467
|
-
|
468
|
-
updatePageDisplay(table, c);
|
469
|
-
moveToPage(table, c);
|
516
|
+
moveToPage(table, c, false);
|
517
|
+
updatePageDisplay(table, c, false);
|
470
518
|
fixHeight(table, c);
|
471
519
|
})
|
472
|
-
.bind('disable.pager', function(){
|
520
|
+
.bind('disable.pager', function(e){
|
521
|
+
e.stopPropagation();
|
473
522
|
showAllRows(table, c);
|
474
523
|
})
|
475
|
-
.bind('enable.pager', function(){
|
524
|
+
.bind('enable.pager', function(e){
|
525
|
+
e.stopPropagation();
|
476
526
|
enablePager(table, c, true);
|
477
527
|
})
|
478
|
-
.bind('destroy.pager', function(){
|
528
|
+
.bind('destroy.pager', function(e){
|
529
|
+
e.stopPropagation();
|
479
530
|
destroyPager(table, c);
|
480
531
|
})
|
481
|
-
.bind('update.pager', function(){
|
532
|
+
.bind('update.pager', function(e){
|
533
|
+
e.stopPropagation();
|
482
534
|
hideRows(table, c);
|
483
535
|
})
|
484
536
|
.bind('pageSize.pager', function(e,v){
|
485
|
-
|
537
|
+
e.stopPropagation();
|
538
|
+
setPageSize(table, parseInt(v, 10) || 10, c);
|
486
539
|
hideRows(table, c);
|
487
|
-
updatePageDisplay(table, c);
|
540
|
+
updatePageDisplay(table, c, false);
|
541
|
+
if (c.$size.length) { c.$size.val(c.size); } // twice?
|
542
|
+
})
|
543
|
+
.bind('pageSet.pager', function(e,v){
|
544
|
+
e.stopPropagation();
|
545
|
+
c.page = (parseInt(v, 10) || 1) - 1;
|
546
|
+
if (c.$goto.length) { c.$goto.val(c.size); } // twice?
|
547
|
+
moveToPage(table, c);
|
548
|
+
updatePageDisplay(table, c, false);
|
488
549
|
});
|
489
550
|
|
490
551
|
// clicked controls
|
491
|
-
ctrls = [c.cssFirst, c.cssPrev, c.cssNext, c.cssLast];
|
552
|
+
ctrls = [ c.cssFirst, c.cssPrev, c.cssNext, c.cssLast ];
|
492
553
|
fxn = [ moveToFirstPage, moveToPrevPage, moveToNextPage, moveToLastPage ];
|
493
554
|
pager.find(ctrls.join(','))
|
494
555
|
.unbind('click.pager')
|
495
556
|
.bind('click.pager', function(e){
|
496
|
-
var i, $
|
497
|
-
if ( !$
|
557
|
+
var i, $t = $(this), l = ctrls.length;
|
558
|
+
if ( !$t.hasClass(c.cssDisabled) ) {
|
498
559
|
for (i = 0; i < l; i++) {
|
499
|
-
if ($
|
560
|
+
if ($t.is(ctrls[i])) {
|
500
561
|
fxn[i](table, c);
|
501
562
|
break;
|
502
563
|
}
|
@@ -506,21 +567,22 @@
|
|
506
567
|
});
|
507
568
|
|
508
569
|
// goto selector
|
509
|
-
|
510
|
-
|
570
|
+
c.$goto = pager.find(c.cssGoto);
|
571
|
+
if ( c.$goto.length ) {
|
572
|
+
c.$goto
|
511
573
|
.unbind('change')
|
512
574
|
.bind('change', function(){
|
513
575
|
c.page = $(this).val() - 1;
|
514
576
|
moveToPage(table, c);
|
515
577
|
});
|
516
|
-
updatePageDisplay(table, c);
|
578
|
+
updatePageDisplay(table, c, false);
|
517
579
|
}
|
518
580
|
|
519
581
|
// page size selector
|
520
|
-
|
521
|
-
if (
|
522
|
-
|
523
|
-
|
582
|
+
c.$size = pager.find(c.cssPageSize);
|
583
|
+
if ( c.$size.length ) {
|
584
|
+
c.$size.unbind('change.pager').bind('change.pager', function() {
|
585
|
+
c.$size.val( $(this).val() ); // in case there are more than one pagers
|
524
586
|
if ( !$(this).hasClass(c.cssDisabled) ) {
|
525
587
|
setPageSize(table, parseInt( $(this).val(), 10 ), c);
|
526
588
|
changeHeight(table, c);
|
@@ -551,7 +613,7 @@
|
|
551
613
|
}
|
552
614
|
|
553
615
|
changeHeight(table, c);
|
554
|
-
|
616
|
+
|
555
617
|
// pager initialized
|
556
618
|
if (!c.ajax) {
|
557
619
|
c.initialized = true;
|