jquery.tablesorter.pager.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. function sprintf(format, etc) {
  2. var arg = arguments;
  3. var i = 1;
  4. return format.replace(/%((%)|s)/g, function (m) { return m[2] || arg[i++] })
  5. }
  6. (function($) {
  7. $.extend({
  8. tablesorterPager: new function() {
  9. function updatePageDisplay(c) {
  10. var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages);
  11. }
  12. function setPageSize(table,size) {
  13. var c = table.config;
  14. c.size = size;
  15. c.totalPages = Math.ceil(c.totalRows / c.size);
  16. c.pagerPositionSet = false;
  17. moveToPage(table);
  18. fixPosition(table);
  19. }
  20. function fixPosition(table) {
  21. var c = table.config;
  22. if(!c.pagerPositionSet && c.positionFixed) {
  23. var c = table.config, o = $(table);
  24. if(o.offset) {
  25. c.container.css({
  26. top: o.offset().top + o.height() + 'px',
  27. position: 'absolute'
  28. });
  29. }
  30. c.pagerPositionSet = true;
  31. }
  32. }
  33. function moveToFirstPage(table) {
  34. var c = table.config;
  35. c.page = 0;
  36. moveToPage(table);
  37. }
  38. function moveToLastPage(table) {
  39. var c = table.config;
  40. c.page = (c.totalPages-1);
  41. moveToPage(table);
  42. }
  43. function moveToNextPage(table) {
  44. var c = table.config;
  45. c.page++;
  46. if(c.page >= (c.totalPages-1)) {
  47. c.page = (c.totalPages-1);
  48. }
  49. moveToPage(table);
  50. }
  51. function moveToPrevPage(table) {
  52. var c = table.config;
  53. c.page--;
  54. if(c.page <= 0) {
  55. c.page = 0;
  56. }
  57. moveToPage(table);
  58. }
  59. function moveToPage(table) {
  60. var c = table.config;
  61. if(c.page < 0 || c.page > (c.totalPages-1)) {
  62. c.page = 0;
  63. }
  64. renderTable(table,c.rowsCopy);
  65. }
  66. function checkAll(table, pager, value)
  67. {
  68. // Mark all the displayed items as check or unchecked depending on the value
  69. $(table).find(':checkbox[name^=selectObj]').attr('checked', value);
  70. // Set the 'selectionMode' for the future objects to load
  71. if (value)
  72. {
  73. table.config.selectionMode = 'negative';
  74. }
  75. else
  76. {
  77. table.config.selectionMode = 'positive';
  78. }
  79. $(pager).find(':input[name=selectionMode]').val(table.config.selectionMode);
  80. // Reset the list of saved selection...
  81. resetStoredSelection(pager);
  82. updateCounter(table, pager);
  83. return true;
  84. }
  85. function resetStoredSelection(pager)
  86. {
  87. $(':input[name^=storedSelection]', pager).remove();
  88. }
  89. function updateSelection(table, pager, id, value)
  90. {
  91. var valueToStore = value;
  92. if (table.config.selectionMode == 'negative')
  93. {
  94. valueToStore = !(valueToStore);
  95. }
  96. if (valueToStore)
  97. {
  98. if (table.config.select_mode == 'single')
  99. {
  100. $(':input[name^=storedSelection]', pager).remove(); // Remove any previous selection
  101. }
  102. if ($('#'+id, pager).length ==0)
  103. {
  104. $(pager).append($('<input type="hidden" id="'+id+'" name="storedSelection[]" value="'+id+'"></input>'));
  105. }
  106. }
  107. else
  108. {
  109. if ($('#'+id, pager).length !=0)
  110. {
  111. $('#'+id, pager).remove();
  112. }
  113. }
  114. updateCounter(table, pager);
  115. }
  116. function updateCounter(table, pager)
  117. {
  118. var ex = $(':input[name^=storedSelection]', pager).length;
  119. var s = ex;
  120. if (table.config.selectionMode == 'negative')
  121. {
  122. s = table.config.totalRows - ex;
  123. }
  124. $('.selectedCount',pager).text(s);
  125. if (table.config.cssCount != '')
  126. {
  127. $(table.config.cssCount).val(s);
  128. $(table.config.cssCount).trigger('change');
  129. }
  130. }
  131. function getData(table, start, end)
  132. {
  133. if (table.ajax_request)
  134. {
  135. table.ajax_request.abort();
  136. table.ajax_request = null;
  137. }
  138. var c = table.config;
  139. var s = c.sortList[0];
  140. var s_col = null;
  141. var s_order = null;
  142. if (s != undefined)
  143. {
  144. s_col = s[0];
  145. s_order = (s[1] == 0) ? 'asc' : 'desc';
  146. }
  147. $('#loading', table.config.container).html('<img src="../images/indicator.gif" />');
  148. table.ajax_request = $.post(GetAbsoluteUrlAppRoot()+"pages/ajax.render.php",
  149. { operation: 'pagination',
  150. filter: c.filter,
  151. extra_param: c.extra_params,
  152. start: start,
  153. end: end,
  154. sort_col: s_col,
  155. sort_order: s_order,
  156. select_mode: c.select_mode,
  157. display_key: c.displayKey,
  158. display_list: c.displayList
  159. },
  160. function(data)
  161. {
  162. table.ajax_request = null; // Ajax request completed
  163. oData = $(data);
  164. var tableBody = $(table.tBodies[0]);
  165. // clear the table body
  166. $.tablesorter.clearTableBody(table);
  167. for(var i = 0; i < end-start; i++) {
  168. //tableBody.append(rows[i]);
  169. //var o = rows[i];
  170. var r = $(oData[i]);
  171. var l = r.length;
  172. for(var j=0; j < l; j++) {
  173. //tableBody[0].appendChild(r);
  174. tableBody[0].appendChild(r[j]);
  175. }
  176. }
  177. fixPosition(table,tableBody);
  178. if (c.selectionMode == 'negative')
  179. {
  180. $(table).find(':checkbox[name^=selectObj]').attr('checked', true);
  181. }
  182. if (table.config.select_mode == 'multiple')
  183. {
  184. $(table).find(':checkbox[name^=selectObj]').each(function() {
  185. var id = parseInt(this.value, 10);
  186. if ($('#'+id, table.config.container).length > 0)
  187. {
  188. if (c.selectionMode == 'positive')
  189. {
  190. $(this).attr('checked', true);
  191. }
  192. else
  193. {
  194. $(this).attr('checked', false);
  195. }
  196. }
  197. });
  198. $(table).find(':checkbox[name^=selectObj]').change(function() {
  199. updateSelection(table, table.config.container, this.value, this.checked);
  200. });
  201. }
  202. else if (table.config.select_mode == 'single')
  203. {
  204. $(table).find('input[name^=selectObject]:radio').each(function() {
  205. var id = parseInt(this.value, 10);
  206. if ($('#'+id, table.config.container).length > 0)
  207. {
  208. if (c.selectionMode == 'positive')
  209. {
  210. $(this).attr('checked', true);
  211. }
  212. else
  213. {
  214. $(this).attr('checked', false);
  215. }
  216. }
  217. });
  218. $(table).find('input[name^=selectObject]:radio').change(function() {
  219. updateSelection(table, table.config.container, this.value, this.checked);
  220. });
  221. }
  222. $(table).trigger("applyWidgets");
  223. if( c.page >= c.totalPages ) {
  224. moveToLastPage(table);
  225. }
  226. updatePageDisplay(c);
  227. updateCounter(table, table.config.container);
  228. renderPager(table, table.config.container);
  229. $(table).tableHover();
  230. $('#loading', table.config.container).empty();
  231. });
  232. }
  233. function renderPager(table, pager)
  234. {
  235. var c = table.config;
  236. var s = c.page - 2;
  237. var nb = Math.ceil(c.totalRows / c.size);
  238. if (s < 0)
  239. {
  240. s = 0;
  241. }
  242. var e = s +5;
  243. if (e > nb)
  244. {
  245. e = nb;
  246. s = e - 5;
  247. if (s < 0) s = 0;
  248. }
  249. txt = '';
  250. for(var i=s; i<e; i++)
  251. {
  252. var page = 1+i;
  253. var link = ' '+page+' ';
  254. if (i != c.page)
  255. {
  256. link = ' <a href="#" class="no-arrow" page="'+i+'" id="gotopage_'+i+'">'+page+'</a> ';
  257. }
  258. else
  259. {
  260. link = ' <a href="#" class="no-arrow curr_page" page="'+i+'">'+page+'</a> ';
  261. }
  262. txt += link;
  263. }
  264. txt += '';
  265. $('#total', pager).text(c.totalRows);
  266. $('#index', pager).html(txt);
  267. for(var j=s; j<e; j++)
  268. {
  269. $('#gotopage_'+j, pager).click(function(){
  270. var idx = $(this).attr('page');
  271. table.config.page = idx;
  272. moveToPage(table);
  273. });
  274. }
  275. }
  276. function renderTable(table) {
  277. var c = table.config;
  278. //var l = rows.length;
  279. var s = (c.page * c.size);
  280. var e = (s + c.size);
  281. if(e > c.totalRows ) {
  282. e = c.totalRows;
  283. }
  284. getData(table, s, e);
  285. }
  286. this.appender = function(table,rows) {
  287. var c = table.config;
  288. if (c.totalRows == 0)
  289. {
  290. c.totalRows = rows.length;
  291. }
  292. c.totalPages = Math.ceil(c.totalRows / c.size);
  293. renderTable(table,rows);
  294. };
  295. this.defaults = {
  296. size: 10,
  297. offset: 0,
  298. page: 0,
  299. totalRows: 0,
  300. totalPages: 0,
  301. container: null,
  302. cssNext: '.next',
  303. cssPrev: '.prev',
  304. cssFirst: '.first',
  305. cssLast: '.last',
  306. cssPageDisplay: '.pagedisplay',
  307. cssPageSize: '.pagesize',
  308. cssCount: '',
  309. seperator: "/",
  310. positionFixed: false,
  311. appender: this.appender,
  312. filter: '',
  313. extra_params: '',
  314. select_mode: '',
  315. totalSelected: 0,
  316. selectionMode: 'positive',
  317. displayKey: true,
  318. displayList: []
  319. };
  320. this.construct = function(settings) {
  321. return this.each(function() {
  322. config = $.extend(this.config, $.tablesorterPager.defaults, settings);
  323. var table = this, pager = config.container;
  324. this.ajax_request = null;
  325. $(this).trigger("appendCache");
  326. config.size = parseInt($(".pagesize",pager).val());
  327. $(config.cssFirst,pager).click(function() {
  328. moveToFirstPage(table);
  329. return false;
  330. });
  331. $(config.cssNext,pager).click(function() {
  332. moveToNextPage(table);
  333. return false;
  334. });
  335. $(config.cssPrev,pager).click(function() {
  336. moveToPrevPage(table);
  337. return false;
  338. });
  339. $(config.cssLast,pager).click(function() {
  340. moveToLastPage(table);
  341. return false;
  342. });
  343. $(config.cssPageSize,pager).change(function() {
  344. setPageSize(table,parseInt($(this).val()));
  345. return false;
  346. });
  347. $(table).find(':checkbox.checkAll').removeAttr('onclick').click(function() {
  348. return checkAll(table, pager, this.checked);
  349. });
  350. });
  351. };
  352. }
  353. });
  354. // extend plugin scope
  355. $.fn.extend({
  356. tablesorterPager: $.tablesorterPager.construct
  357. });
  358. })(jQuery);