gui: Allow toggleable units for transfer rate (fixes #234)
Click the transfer rate to toggle between binary-exponent bytes (KiB/s, MiB/s) and metric based bits (kb/s, Mb/s). The setting is persisted in browser local storage (best effort). GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4074
This commit is contained in:
parent
cbdb036b69
commit
c3820fbbf2
@ -221,6 +221,13 @@ identicon {
|
|||||||
height: 1em;
|
height: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.toggler {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
a.toggler:hover {
|
||||||
|
border-bottom: 1px dashed;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Progress bars with centered text
|
* Progress bars with centered text
|
||||||
|
|||||||
@ -473,11 +473,23 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th><span class="fa fa-fw fa-cloud-download"></span> <span translate>Download Rate</span></th>
|
<th><span class="fa fa-fw fa-cloud-download"></span> <span translate>Download Rate</span></th>
|
||||||
<td class="text-right">{{connectionsTotal.inbps | binary}}B/s ({{connectionsTotal.inBytesTotal | binary}}B)</td>
|
<td class="text-right">
|
||||||
|
<a href="#" class="toggler" ng-click="toggleUnits()">
|
||||||
|
<span ng-if="!metricRates">{{connectionsTotal.inbps | binary}}B/s</span>
|
||||||
|
<span ng-if="metricRates">{{connectionsTotal.inbps*8 | metric}}bps</span>
|
||||||
|
({{connectionsTotal.inBytesTotal | binary}}B)</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th><span class="fa fa-fw fa-cloud-upload"></span> <span translate>Upload Rate</span></th>
|
<th><span class="fa fa-fw fa-cloud-upload"></span> <span translate>Upload Rate</span></th>
|
||||||
<td class="text-right">{{connectionsTotal.outbps | binary}}B/s ({{connectionsTotal.outBytesTotal | binary}}B)</td>
|
<td class="text-right">
|
||||||
|
<a href="#" class="toggler" ng-click="toggleUnits()">
|
||||||
|
<span ng-if="!metricRates">{{connectionsTotal.outbps | binary}}B/s</span>
|
||||||
|
<span ng-if="metricRates">{{connectionsTotal.outbps*8 | metric}}bps</span>
|
||||||
|
({{connectionsTotal.outBytesTotal | binary}}B)
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th><span class="fa fa-fw fa-home"></span> <span translate>Local State (Total)</span></th>
|
<th><span class="fa fa-fw fa-home"></span> <span translate>Local State (Total)</span></th>
|
||||||
@ -705,6 +717,7 @@
|
|||||||
<script src="syncthing/core/localeService.js"></script>
|
<script src="syncthing/core/localeService.js"></script>
|
||||||
<script src="syncthing/core/modalDirective.js"></script>
|
<script src="syncthing/core/modalDirective.js"></script>
|
||||||
<script src="syncthing/core/naturalFilter.js"></script>
|
<script src="syncthing/core/naturalFilter.js"></script>
|
||||||
|
<script src="syncthing/core/metricFilter.js"></script>
|
||||||
<script src="syncthing/core/notificationDirective.js"></script>
|
<script src="syncthing/core/notificationDirective.js"></script>
|
||||||
<script src="syncthing/core/pathIsSubDirDirective.js"></script>
|
<script src="syncthing/core/pathIsSubDirDirective.js"></script>
|
||||||
<script src="syncthing/core/popoverDirective.js"></script>
|
<script src="syncthing/core/popoverDirective.js"></script>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
angular.module('syncthing.core')
|
angular.module('syncthing.core')
|
||||||
.filter('binary', function () {
|
.filter('binary', function () {
|
||||||
return function (input) {
|
return function (input) {
|
||||||
if (input === undefined) {
|
if (input === undefined || isNaN(input)) {
|
||||||
return '0 ';
|
return '0 ';
|
||||||
}
|
}
|
||||||
if (input > 1024 * 1024 * 1024) {
|
if (input > 1024 * 1024 * 1024) {
|
||||||
|
|||||||
21
gui/default/syncthing/core/metricFilter.js
Normal file
21
gui/default/syncthing/core/metricFilter.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
angular.module('syncthing.core')
|
||||||
|
.filter('metric', function () {
|
||||||
|
return function (input) {
|
||||||
|
if (input === undefined || isNaN(input)) {
|
||||||
|
return '0 ';
|
||||||
|
}
|
||||||
|
if (input > 1000 * 1000 * 1000) {
|
||||||
|
input /= 1000 * 1000 * 1000;
|
||||||
|
return input.toFixed(decimals(input, 2)) + ' G';
|
||||||
|
}
|
||||||
|
if (input > 1000 * 1000) {
|
||||||
|
input /= 1000 * 1000;
|
||||||
|
return input.toFixed(decimals(input, 2)) + ' M';
|
||||||
|
}
|
||||||
|
if (input > 1000) {
|
||||||
|
input /= 1000;
|
||||||
|
return input.toFixed(decimals(input, 2)) + ' k';
|
||||||
|
}
|
||||||
|
return Math.round(input) + ' ';
|
||||||
|
};
|
||||||
|
});
|
||||||
@ -52,6 +52,11 @@ angular.module('syncthing.core')
|
|||||||
$scope.scanProgress = {};
|
$scope.scanProgress = {};
|
||||||
$scope.themes = [];
|
$scope.themes = [];
|
||||||
$scope.globalChangeEvents = {};
|
$scope.globalChangeEvents = {};
|
||||||
|
$scope.metricRates = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$scope.metricRates = (window.localStorage["metricRates"] == "true");
|
||||||
|
} catch (exception) { }
|
||||||
|
|
||||||
$scope.localStateTotal = {
|
$scope.localStateTotal = {
|
||||||
bytes: 0,
|
bytes: 0,
|
||||||
@ -1759,7 +1764,6 @@ angular.module('syncthing.core')
|
|||||||
};
|
};
|
||||||
|
|
||||||
$scope.modalLoaded = function () {
|
$scope.modalLoaded = function () {
|
||||||
|
|
||||||
// once all modal elements have been processed
|
// once all modal elements have been processed
|
||||||
if ($('modal').length === 0) {
|
if ($('modal').length === 0) {
|
||||||
|
|
||||||
@ -1768,4 +1772,10 @@ angular.module('syncthing.core')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.toggleUnits = function () {
|
||||||
|
$scope.metricRates = !$scope.metricRates;
|
||||||
|
try {
|
||||||
|
window.localStorage["metricRates"] = $scope.metricRates;
|
||||||
|
} catch (exception) { }
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user