[feat](trx-frontend-http): make the APRS list a log, and read the payloads
A frame was a card five lines tall — timestamp, a meta line, the information field as it arrived on the air, three buttons, and a Details panel repeating the four things already on the row — so five frames filled the panel and the payload was left to be decoded by eye. A frame is one line now: time, station, type, and what the frame says. It opens in place for the path, the CRC, the raw field, its bytes and the actions. Twenty-one frames fit where five did. And the information field is read rather than echoed. Weather reports give temperature, wind, humidity and pressure; telemetry gives its sequence and channels; a message gives its addressee and text; a position gives the fix, course and speed, and the comment the station wrote. Anything that cannot be summarised falls back to the raw field, which is in the expanded view either way. HF APRS had a copy of the same forty lines of markup, differing by one badge, so both now build their rows from one function in the shared module — the CSS is shared between them and this would have broken it otherwise. Both headers lose their three summary cards for a line of counts beside the filters, which frees another fifth of the panel. Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -2844,34 +2844,93 @@ body.map-fake-fullscreen-active {
|
||||
background: var(--input-bg);
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
}
|
||||
.aprs-packet { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.82rem; padding: 0.45rem 0.55rem; border-bottom: 1px solid var(--border); line-height: 1.35; }
|
||||
/* One line per frame, opening in place. A frame used to be a card five lines
|
||||
tall — timestamp, meta, raw information field, three buttons, a Details
|
||||
panel repeating the row — so five of them filled the panel. */
|
||||
.aprs-packet { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.82rem; border-bottom: 1px solid var(--border); line-height: 1.35; }
|
||||
.aprs-packet:last-child { border-bottom: none; }
|
||||
.aprs-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.28rem 0.55rem;
|
||||
cursor: pointer;
|
||||
list-style: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.aprs-line::-webkit-details-marker { display: none; }
|
||||
.aprs-line:hover {
|
||||
background: color-mix(in srgb, var(--btn-bg) 45%, transparent);
|
||||
}
|
||||
.aprs-packet[open] > .aprs-line {
|
||||
background: color-mix(in srgb, var(--accent-green) 8%, transparent);
|
||||
}
|
||||
/* The summary takes the leftover width and ellipsises: a frame is one line
|
||||
whatever its payload, so the column of times and callsigns stays readable. */
|
||||
.aprs-line-summary {
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: var(--text);
|
||||
}
|
||||
.aprs-line-distance {
|
||||
flex: 0 0 auto;
|
||||
color: var(--text-muted);
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.aprs-expanded {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.35rem;
|
||||
padding: 0.1rem 0.55rem 0.55rem 2.6rem;
|
||||
}
|
||||
.aprs-expanded-meta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.6rem;
|
||||
font-size: 0.75rem;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
.aprs-expanded-raw,
|
||||
.aprs-expanded-bytes {
|
||||
word-break: break-all;
|
||||
font-size: 0.78rem;
|
||||
color: var(--text);
|
||||
}
|
||||
.aprs-expanded-bytes {
|
||||
color: var(--text-muted);
|
||||
font-size: 0.72rem;
|
||||
}
|
||||
.aprs-packet-new {
|
||||
animation: aprs-row-flash 1.2s ease;
|
||||
}
|
||||
.aprs-packet-crc {
|
||||
opacity: 0.6;
|
||||
}
|
||||
.aprs-row-head,
|
||||
.aprs-row-meta,
|
||||
.aprs-row-detail,
|
||||
.aprs-row-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.aprs-row-head + .aprs-row-meta,
|
||||
.aprs-row-meta + .aprs-row-detail,
|
||||
.aprs-row-detail + .aprs-row-actions {
|
||||
margin-top: 0.2rem;
|
||||
}
|
||||
.aprs-row-detail {
|
||||
/* Counts sit with the filters rather than in three cards of their own: they
|
||||
are one short line of text, and they were taking a fifth of the panel. */
|
||||
.aprs-counts {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
margin-left: auto;
|
||||
font-size: 0.72rem;
|
||||
color: var(--text-muted);
|
||||
font-size: 0.78rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.aprs-row-actions {
|
||||
margin-top: 0.28rem;
|
||||
.aprs-filter-sep {
|
||||
width: 1px;
|
||||
align-self: stretch;
|
||||
min-height: 1.2rem;
|
||||
margin-inline: 0.15rem;
|
||||
background: color-mix(in srgb, var(--border-light) 65%, transparent);
|
||||
}
|
||||
.aprs-badge {
|
||||
display: inline-flex;
|
||||
|
||||
Reference in New Issue
Block a user