/* global FooTable */
-define(["jquery", "app/common", "app/libft", "d3", "footable"],
- ($, common, libft, d3) => {
+define(["jquery", "app/common", "app/libft", "footable"],
+ ($, common, libft) => {
"use strict";
const ui = {};
let prevVersion = null;
title: "Message size",
breakpoints: "xs sm",
style: {width: 120, maxWidth: 120},
- formatter: d3.format(".3~s")
+ formatter: libft.formatBytesIEC
}, {
name: "scan_time",
title: "Scan time",
/* global FooTable */
-define(["jquery", "app/common", "d3", "footable"],
- ($, common, d3) => {
+define(["jquery", "app/common", "footable"],
+ ($, common) => {
"use strict";
const ui = {};
// Public functions
+ ui.formatBytesIEC = function (bytes) {
+ // FooTable represents data as text even column type is "number".
+ if (!Number.isInteger(Number(bytes)) || bytes < 0) return "NaN";
+
+ const base = 1024;
+ const exponent = Math.floor(Math.log(bytes) / Math.log(base));
+
+ if (exponent > 8) return "∞";
+
+ const value = parseFloat((bytes / (base ** exponent)).toPrecision(3));
+ let unit = "BKMGTPEZY"[exponent];
+ if (exponent) unit += "iB";
+
+ return value + " " + unit;
+ };
+
ui.columns_v2 = function (table) {
return [{
name: "id",
title: "Msg size",
breakpoints: "xs sm md",
style: {minwidth: 50},
- formatter: d3.format(".3~s")
+ formatter: ui.formatBytesIEC
}, {
name: "time_real",
title: "Scan time",