diff --git a/package.json b/package.json
index ab69b57..a44aad0 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "site-gateway",
- "version": "0.11.112",
+ "version": "0.11.113",
"private": true,
"description": "Site Gateway: simple self-hosted website publishing, reverse proxying, and automatic HTTPS.",
"type": "module",
diff --git a/src/public/app.js b/src/public/app.js
index 912e5e5..571d000 100644
--- a/src/public/app.js
+++ b/src/public/app.js
@@ -338,7 +338,7 @@ function renderPerformance() {
$("#performance-sparkline").innerHTML = points.length ? `${gridLines}` : "";
if (!points.length) $("#performance-sparkline-labels").innerHTML = 'No request data for this window yet.';
const routes = data.routes || [];
- const countCell = (count, errors, breakdown) => { const title = breakdown?.length ? ` title="${escapeHtml(breakdown.map(item => `${item.status}: ${item.count.toLocaleString()}`).join(" · "))}"` : ""; return `${count.toLocaleString()}${errors ? ` · ${errors.toLocaleString()}` : ""}`; };
+ const countCell = (count, errors, breakdown) => { if (!errors) return `${count.toLocaleString()}`; if (!breakdown?.length) return `${count.toLocaleString()} · ${errors.toLocaleString()}`; const rows = breakdown.map(item => `
${escapeHtml(item.status)}${item.count.toLocaleString()}
`).join(""); return `${count.toLocaleString()} · ${errors.toLocaleString()}
${rows}
`; };
$("#performance-rows").innerHTML = routes.length ? routes.map(route => `| ${escapeHtml(route.host)} | ${countCell(route.hourRequests, route.hourErrors)} | ${countCell(route.dayRequests, route.dayErrors, route.errorBreakdown)} | ${route.dayAvgMs == null ? "—" : `${route.dayAvgMs} ms`} |
`).join("") : '| No requests have been logged yet. |
';
if (selected) $(`#performance-rows tr.row-highlight`)?.scrollIntoView({ block: "nearest" });
}
diff --git a/src/public/index.html b/src/public/index.html
index 1acffcd..b623e9a 100644
--- a/src/public/index.html
+++ b/src/public/index.html
@@ -7,7 +7,7 @@
Site Gateway
-
+
-
+