server_status_sorter.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // TODO: tablesorter shouldn't sort already sorted columns
  2. function initTableSorter(tabid) {
  3. var $table, opts;
  4. switch (tabid) {
  5. case 'statustabs_queries':
  6. $table = $('#serverstatusqueriesdetails');
  7. opts = {
  8. sortList: [[3, 1]],
  9. widgets: ['fast-zebra'],
  10. headers: {
  11. 1: { sorter: 'fancyNumber' },
  12. 2: { sorter: 'fancyNumber' }
  13. }
  14. };
  15. break;
  16. case 'statustabs_allvars':
  17. $table = $('#serverstatusvariables');
  18. opts = {
  19. sortList: [[0, 0]],
  20. widgets: ['fast-zebra'],
  21. headers: {
  22. 1: { sorter: 'withinSpanNumber' }
  23. }
  24. };
  25. break;
  26. }
  27. $table.tablesorter(opts);
  28. $table.find('tr:first th')
  29. .append('<img class="icon sortableIcon" src="themes/dot.gif" alt="">');
  30. }
  31. $(function () {
  32. $.tablesorter.addParser({
  33. id: "fancyNumber",
  34. is: function (s) {
  35. return (/^[0-9]?[0-9,\.]*\s?(k|M|G|T|%)?$/).test(s);
  36. },
  37. format: function (s) {
  38. var num = jQuery.tablesorter.formatFloat(
  39. s.replace(PMA_messages.strThousandsSeparator, '')
  40. .replace(PMA_messages.strDecimalSeparator, '.')
  41. );
  42. var factor = 1;
  43. switch (s.charAt(s.length - 1)) {
  44. case '%':
  45. factor = -2;
  46. break;
  47. // Todo: Complete this list (as well as in the regexp a few lines up)
  48. case 'k':
  49. factor = 3;
  50. break;
  51. case 'M':
  52. factor = 6;
  53. break;
  54. case 'G':
  55. factor = 9;
  56. break;
  57. case 'T':
  58. factor = 12;
  59. break;
  60. }
  61. return num * Math.pow(10, factor);
  62. },
  63. type: "numeric"
  64. });
  65. $.tablesorter.addParser({
  66. id: "withinSpanNumber",
  67. is: function (s) {
  68. return (/<span class="original"/).test(s);
  69. },
  70. format: function (s, table, html) {
  71. var res = html.innerHTML.match(/<span(\s*style="display:none;"\s*)?\s*class="original">(.*)?<\/span>/);
  72. return (res && res.length >= 3) ? res[2] : 0;
  73. },
  74. type: "numeric"
  75. });
  76. // faster zebra widget: no row visibility check, faster css class switching, no cssChildRow check
  77. $.tablesorter.addWidget({
  78. id: "fast-zebra",
  79. format: function (table) {
  80. if (table.config.debug) {
  81. var time = new Date();
  82. }
  83. $("tr:even", table.tBodies[0])
  84. .removeClass(table.config.widgetZebra.css[0])
  85. .addClass(table.config.widgetZebra.css[1]);
  86. $("tr:odd", table.tBodies[0])
  87. .removeClass(table.config.widgetZebra.css[1])
  88. .addClass(table.config.widgetZebra.css[0]);
  89. if (table.config.debug) {
  90. $.tablesorter.benchmark("Applying Fast-Zebra widget", time);
  91. }
  92. }
  93. });
  94. });