jquery.flot.byte.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. (function ($) {
  2. "use strict";
  3. var options = {};
  4. //Round to nearby lower multiple of base
  5. function floorInBase(n, base) {
  6. return base * Math.floor(n / base);
  7. }
  8. function init(plot) {
  9. plot.hooks.processDatapoints.push(function (plot) {
  10. $.each(plot.getAxes(), function(axisName, axis) {
  11. var opts = axis.options;
  12. if (opts.mode === "byte" || opts.mode === "byteRate") {
  13. axis.tickGenerator = function (axis) {
  14. var returnTicks = [],
  15. tickSize = 2,
  16. delta = axis.delta,
  17. steps = 0,
  18. tickMin = 0,
  19. tickVal,
  20. tickCount = 0;
  21. //Set the reference for the formatter
  22. if (opts.mode === "byteRate") {
  23. axis.rate = true;
  24. }
  25. //Enforce maximum tick Decimals
  26. if (typeof opts.tickDecimals === "number") {
  27. axis.tickDecimals = opts.tickDecimals;
  28. } else {
  29. axis.tickDecimals = 2;
  30. }
  31. //Count the steps
  32. while (Math.abs(delta) >= 1024) {
  33. steps++;
  34. delta /= 1024;
  35. }
  36. //Set the tick size relative to the remaining delta
  37. while (tickSize <= 1024) {
  38. if (delta <= tickSize) {
  39. break;
  40. }
  41. tickSize *= 2;
  42. }
  43. //Tell flot the tickSize we've calculated
  44. if (typeof opts.minTickSize !== "undefined" && tickSize < opts.minTickSize) {
  45. axis.tickSize = opts.minTickSize;
  46. } else {
  47. axis.tickSize = tickSize * Math.pow(1024,steps);
  48. }
  49. //Calculate the new ticks
  50. tickMin = floorInBase(axis.min, axis.tickSize);
  51. do {
  52. tickVal = tickMin + (tickCount++) * axis.tickSize;
  53. returnTicks.push(tickVal);
  54. } while (tickVal < axis.max);
  55. return returnTicks;
  56. };
  57. axis.tickFormatter = function(size, axis) {
  58. var ext, steps = 0;
  59. while (Math.abs(size) >= 1024) {
  60. steps++;
  61. size /= 1024;
  62. }
  63. switch (steps) {
  64. case 0: ext = " B"; break;
  65. case 1: ext = " KiB"; break;
  66. case 2: ext = " MiB"; break;
  67. case 3: ext = " GiB"; break;
  68. case 4: ext = " TiB"; break;
  69. case 5: ext = " PiB"; break;
  70. case 6: ext = " EiB"; break;
  71. case 7: ext = " ZiB"; break;
  72. case 8: ext = " YiB"; break;
  73. }
  74. if (typeof axis.rate !== "undefined") {
  75. ext += "/s";
  76. }
  77. return (size.toFixed(axis.tickDecimals) + ext);
  78. };
  79. }
  80. });
  81. });
  82. }
  83. $.plot.plugins.push({
  84. init: init,
  85. options: options,
  86. name: "byte",
  87. version: "0.1"
  88. });
  89. })(jQuery);