This repository has been archived on 2022-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
AriaNg/src/scripts/filters/volume.js

56 lines
1.5 KiB
JavaScript
Raw Normal View History

2016-05-13 18:09:12 +02:00
(function () {
'use strict';
2017-03-19 08:43:41 +01:00
angular.module('ariaNg').filter('readableVolume', ['$filter', function ($filter) {
2016-05-13 18:09:12 +02:00
var units = [ 'B', 'KB', 'MB', 'GB' ];
var defaultFractionSize = 2;
2016-05-13 18:09:12 +02:00
2017-10-22 10:35:59 +02:00
var getAutoFractionSize = function (value) {
if (value < 1) {
return 2;
} else if (value < 10) {
return 1;
} else {
return 0;
}
};
return function (value, fractionSize) {
2016-05-13 18:09:12 +02:00
var unit = units[0];
2017-10-22 10:35:59 +02:00
var actualFractionSize = defaultFractionSize;
var autoFractionSize = false;
2016-05-13 18:09:12 +02:00
2017-10-22 10:35:59 +02:00
if (angular.isNumber(fractionSize)) {
actualFractionSize = fractionSize;
} else if (fractionSize === 'auto') {
autoFractionSize = true;
}
2016-06-18 16:32:23 +02:00
if (!value) {
value = 0;
}
if (!angular.isNumber(value)) {
value = parseInt(value);
}
2016-05-13 18:09:12 +02:00
for (var i = 1; i < units.length; i++) {
if (value >= 1024) {
value = value / 1024;
unit = units[i];
} else {
break;
}
2016-05-13 18:09:12 +02:00
}
2017-10-22 10:35:59 +02:00
if (autoFractionSize) {
actualFractionSize = getAutoFractionSize(value);
}
value = $filter('number')(value, actualFractionSize);
2016-05-13 18:09:12 +02:00
return value + ' ' + unit;
2016-12-10 18:50:25 +01:00
};
2016-05-13 18:09:12 +02:00
}]);
2016-08-01 16:49:16 +02:00
}());