sorter.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // TODO: tablesorter shouldn't sort already sorted columns
  2. // eslint-disable-next-line no-unused-vars
  3. function initTableSorter (tabid) {
  4. var $table;
  5. var opts;
  6. switch (tabid) {
  7. case 'statustabs_queries':
  8. $table = $('#serverstatusqueriesdetails');
  9. opts = {
  10. sortList: [[3, 1]],
  11. headers: {
  12. 1: { sorter: 'fancyNumber' },
  13. 2: { sorter: 'fancyNumber' }
  14. }
  15. };
  16. break;
  17. }
  18. $table.tablesorter(opts);
  19. $table.find('tr:first th')
  20. .append('<div class="sorticon"></div>');
  21. }
  22. $(function () {
  23. $.tablesorter.addParser({
  24. id: 'fancyNumber',
  25. is: function (s) {
  26. return (/^[0-9]?[0-9,\\.]*\s?(k|M|G|T|%)?$/).test(s);
  27. },
  28. format: function (s) {
  29. var num = jQuery.tablesorter.formatFloat(
  30. s.replace(Messages.strThousandsSeparator, '')
  31. .replace(Messages.strDecimalSeparator, '.')
  32. );
  33. var factor = 1;
  34. switch (s.charAt(s.length - 1)) {
  35. case '%':
  36. factor = -2;
  37. break;
  38. // Todo: Complete this list (as well as in the regexp a few lines up)
  39. case 'k':
  40. factor = 3;
  41. break;
  42. case 'M':
  43. factor = 6;
  44. break;
  45. case 'G':
  46. factor = 9;
  47. break;
  48. case 'T':
  49. factor = 12;
  50. break;
  51. }
  52. return num * Math.pow(10, factor);
  53. },
  54. type: 'numeric'
  55. });
  56. $.tablesorter.addParser({
  57. id: 'withinSpanNumber',
  58. is: function (s) {
  59. return (/<span class="original"/).test(s);
  60. },
  61. format: function (s, table, html) {
  62. var res = html.innerHTML.match(/<span(\s*style="display:none;"\s*)?\s*class="original">(.*)?<\/span>/);
  63. return (res && res.length >= 3) ? res[2] : 0;
  64. },
  65. type: 'numeric'
  66. });
  67. });