diff --git a/web/public/index.html b/web/public/index.html
index 3df09c5..5169483 100644
--- a/web/public/index.html
+++ b/web/public/index.html
@@ -34,6 +34,7 @@
#chat { flex: 0 0 33%; max-width: 33%; height: 60vh; border: 1px solid #ddd; border-radius: 8px; overflow-y: auto; padding: 6px; font-size: 12px; }
.chat-entry-node { font-family: ui-monospace, Menlo, Consolas, monospace; color: #555 }
.chat-entry-msg { font-family: ui-monospace, Menlo, Consolas, monospace; }
+ .chat-entry-date { font-family: ui-monospace, Menlo, Consolas, monospace; font-weight: bold; }
.short-name { display:inline-block; border-radius:4px; padding:0 2px; }
.controls { display: flex; gap: 8px; align-items: center; }
button { padding: 6px 10px; border: 1px solid #ccc; background: #fff; border-radius: 6px; cursor: pointer; }
@@ -112,6 +113,7 @@
let allNodes = [];
const seenNodeIds = new Set();
const seenMessageIds = new Set();
+ let lastChatDate;
const NODE_LIMIT = 1000;
const CHAT_LIMIT = 1000;
const REFRESH_MS = 60000;
@@ -180,9 +182,25 @@
chatEl.scrollTop = chatEl.scrollHeight;
}
+ function maybeAddDateDivider(ts) {
+ if (!ts) return;
+ const d = new Date(ts * 1000);
+ const key = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
+ if (lastChatDate !== key) {
+ lastChatDate = key;
+ const midnight = new Date(d);
+ midnight.setHours(0, 0, 0, 0);
+ const div = document.createElement('div');
+ div.className = 'chat-entry-date';
+ div.textContent = `-- ${formatDate(midnight)} --`;
+ appendChatEntry(div);
+ }
+ }
+
function addNewNodeChatEntry(n) {
+ maybeAddDateDivider(n.first_heard);
const div = document.createElement('div');
- const ts = formatDate(new Date(n.first_heard * 1000));
+ const ts = formatTime(new Date(n.first_heard * 1000));
div.className = 'chat-entry-node';
const short = renderShortHtml(n.short_name, n.role);
const longName = escapeHtml(n.long_name || '');
@@ -191,8 +209,9 @@
}
function addNewMessageChatEntry(m) {
+ maybeAddDateDivider(m.rx_time);
const div = document.createElement('div');
- const ts = formatDate(new Date(m.rx_time * 1000));
+ const ts = formatTime(new Date(m.rx_time * 1000));
const short = renderShortHtml(m.node?.short_name, m.node?.role);
const text = escapeHtml(m.text || '');
div.className = 'chat-entry-msg';
@@ -202,13 +221,16 @@
function pad(n) { return String(n).padStart(2, "0"); }
+ function formatTime(d) {
+ return pad(d.getHours()) + ":" +
+ pad(d.getMinutes()) + ":" +
+ pad(d.getSeconds());
+ }
+
function formatDate(d) {
return d.getFullYear() + "-" +
pad(d.getMonth() + 1) + "-" +
- pad(d.getDate()) + " " +
- pad(d.getHours()) + ":" +
- pad(d.getMinutes()) + ":" +
- pad(d.getSeconds());
+ pad(d.getDate());
}
function fmtHw(v) {