volume.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').filter('readableVolume', ['$filter', function ($filter) {
  4. var units = [ 'B', 'KB', 'MB', 'GB' ];
  5. var defaultFractionSize = 2;
  6. var getAutoFractionSize = function (value) {
  7. if (value < 1) {
  8. return 2;
  9. } else if (value < 10) {
  10. return 1;
  11. } else {
  12. return 0;
  13. }
  14. };
  15. return function (value, fractionSize) {
  16. var unit = units[0];
  17. var actualFractionSize = defaultFractionSize;
  18. var autoFractionSize = false;
  19. if (angular.isNumber(fractionSize)) {
  20. actualFractionSize = fractionSize;
  21. } else if (fractionSize === 'auto') {
  22. autoFractionSize = true;
  23. }
  24. if (!value) {
  25. value = 0;
  26. }
  27. if (!angular.isNumber(value)) {
  28. value = parseInt(value);
  29. }
  30. for (var i = 1; i < units.length; i++) {
  31. if (value >= 1024) {
  32. value = value / 1024;
  33. unit = units[i];
  34. } else {
  35. break;
  36. }
  37. }
  38. if (autoFractionSize) {
  39. actualFractionSize = getAutoFractionSize(value);
  40. }
  41. value = $filter('number')(value, actualFractionSize);
  42. return value + ' ' + unit;
  43. };
  44. }]);
  45. }());