server_status_sorter.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 '%': factor = -2; break;
  45. // Todo: Complete this list (as well as in the regexp a few lines up)
  46. case 'k': factor = 3; break;
  47. case 'M': factor = 6; break;
  48. case 'G': factor = 9; break;
  49. case 'T': factor = 12; break;
  50. }
  51. return num * Math.pow(10, factor);
  52. },
  53. type: "numeric"
  54. });
  55. $.tablesorter.addParser({
  56. id: "withinSpanNumber",
  57. is: function(s) {
  58. return /<span class="original"/.test(s);
  59. },
  60. format: function(s, table, html) {
  61. var res = html.innerHTML.match(/<span(\s*style="display:none;"\s*)?\s*class="original">(.*)?<\/span>/);
  62. return (res && res.length >= 3) ? res[2] : 0;
  63. },
  64. type: "numeric"
  65. });
  66. // faster zebra widget: no row visibility check, faster css class switching, no cssChildRow check
  67. $.tablesorter.addWidget({
  68. id: "fast-zebra",
  69. format: function (table) {
  70. if (table.config.debug) {
  71. var time = new Date();
  72. }
  73. $("tr:even", table.tBodies[0])
  74. .removeClass(table.config.widgetZebra.css[0])
  75. .addClass(table.config.widgetZebra.css[1]);
  76. $("tr:odd", table.tBodies[0])
  77. .removeClass(table.config.widgetZebra.css[1])
  78. .addClass(table.config.widgetZebra.css[0]);
  79. if (table.config.debug) {
  80. $.tablesorter.benchmark("Applying Fast-Zebra widget", time);
  81. }
  82. }
  83. });
  84. });