sorter.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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: {
  13. sorter: 'fancyNumber'
  14. },
  15. 2: {
  16. sorter: 'fancyNumber'
  17. }
  18. }
  19. };
  20. break;
  21. }
  22. $table.tablesorter(opts);
  23. $table.find('tr').first().find('th').append('<div class="sorticon"></div>');
  24. }
  25. $(function () {
  26. $.tablesorter.addParser({
  27. id: 'fancyNumber',
  28. is: function (s) {
  29. return /^[0-9]?[0-9,\\.]*\s?(k|M|G|T|%)?$/.test(s);
  30. },
  31. format: function (s) {
  32. var num = jQuery.tablesorter.formatFloat(s.replace(Messages.strThousandsSeparator, '').replace(Messages.strDecimalSeparator, '.'));
  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. });