v0.20.0 -- Full s3 event parse and PDF creation. #28
+12
-2
@@ -356,6 +356,16 @@ function _psiToDbl(psi) {
|
|||||||
return 20 * Math.log10(psi / DBL_REF);
|
return 20 * Math.log10(psi / DBL_REF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Format an ISO timestamp in the browser's local timezone — UTC values
|
||||||
|
// (with 'Z' suffix) convert; naive values are interpreted as local clock.
|
||||||
|
// Returns '—' for null/empty/unparseable.
|
||||||
|
function _fmtTsLocal(iso) {
|
||||||
|
if (!iso) return '—';
|
||||||
|
const d = new Date(iso);
|
||||||
|
if (isNaN(d)) return iso;
|
||||||
|
return d.toLocaleString();
|
||||||
|
}
|
||||||
|
|
||||||
// Adaptive decimal formatter — scientific notation only for truly extreme
|
// Adaptive decimal formatter — scientific notation only for truly extreme
|
||||||
// values. Normal-range peaks render as plain decimals with sensible
|
// values. Normal-range peaks render as plain decimals with sensible
|
||||||
// precision (was previously forcing toExponential(3) which produced ugly
|
// precision (was previously forcing toExponential(3) which produced ugly
|
||||||
@@ -458,7 +468,7 @@ function renderEventList() {
|
|||||||
const row = document.createElement('div');
|
const row = document.createElement('div');
|
||||||
row.className = 'event-row' + (ev.false_trigger ? ' false_trigger' : '');
|
row.className = 'event-row' + (ev.false_trigger ? ' false_trigger' : '');
|
||||||
if (ev.id === currentEventId) row.className += ' active';
|
if (ev.id === currentEventId) row.className += ' active';
|
||||||
const ts = (ev.timestamp || '').replace('T', ' ').replace('Z', '');
|
const ts = _fmtTsLocal(ev.timestamp);
|
||||||
const pvs = ev.peak_vector_sum != null ? `${ev.peak_vector_sum.toFixed(3)} in/s` : '—';
|
const pvs = ev.peak_vector_sum != null ? `${ev.peak_vector_sum.toFixed(3)} in/s` : '—';
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
<div class="er-top">
|
<div class="er-top">
|
||||||
@@ -510,7 +520,7 @@ function renderMeta(data, ev) {
|
|||||||
const metaDiv = document.getElementById('event-meta');
|
const metaDiv = document.getElementById('event-meta');
|
||||||
const fields = [
|
const fields = [
|
||||||
['Serial', data.serial || ev?.serial || '—'],
|
['Serial', data.serial || ev?.serial || '—'],
|
||||||
['Timestamp', (data.timestamp || ev?.timestamp || '—').replace('T', ' ').replace('Z', '')],
|
['Timestamp', _fmtTsLocal(data.timestamp || ev?.timestamp)],
|
||||||
['Record', data.record_type || ev?.record_type || '—'],
|
['Record', data.record_type || ev?.record_type || '—'],
|
||||||
['Sample rate', data.sample_rate ? `${data.sample_rate} sps` : '—'],
|
['Sample rate', data.sample_rate ? `${data.sample_rate} sps` : '—'],
|
||||||
['Geo range', data.geo_range ? `${data.geo_range} (${data.geo_full_scale_ips} in/s FS)` : '—'],
|
['Geo range', data.geo_range ? `${data.geo_range} (${data.geo_full_scale_ips} in/s FS)` : '—'],
|
||||||
|
|||||||
+7
-2
@@ -2864,7 +2864,9 @@ function _renderSidecar(data) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
document.getElementById('sc-f-serial').textContent = ev.serial || '—';
|
document.getElementById('sc-f-serial').textContent = ev.serial || '—';
|
||||||
document.getElementById('sc-f-ts').textContent = ev.timestamp || '—';
|
// Route through _fmtTs so the unit-local naive timestamp shows as
|
||||||
|
// "5/27/2026, 6:00:13 AM" instead of "2026-05-27T06:00:13".
|
||||||
|
document.getElementById('sc-f-ts').textContent = _fmtTs(ev.timestamp);
|
||||||
document.getElementById('sc-f-rt').textContent = ev.record_type || '—';
|
document.getElementById('sc-f-rt').textContent = ev.record_type || '—';
|
||||||
document.getElementById('sc-f-sr').textContent = (ev.sample_rate ?? '—') + (ev.sample_rate ? ' sps' : '');
|
document.getElementById('sc-f-sr').textContent = (ev.sample_rate ?? '—') + (ev.sample_rate ? ' sps' : '');
|
||||||
document.getElementById('sc-f-key').textContent = ev.waveform_key || '—';
|
document.getElementById('sc-f-key').textContent = ev.waveform_key || '—';
|
||||||
@@ -2884,7 +2886,10 @@ function _renderSidecar(data) {
|
|||||||
document.getElementById('sc-f-bwsize').textContent = bw.filesize != null ? `${bw.filesize} bytes` : '—';
|
document.getElementById('sc-f-bwsize').textContent = bw.filesize != null ? `${bw.filesize} bytes` : '—';
|
||||||
document.getElementById('sc-f-sha').textContent = bw.sha256 || '—';
|
document.getElementById('sc-f-sha').textContent = bw.sha256 || '—';
|
||||||
document.getElementById('sc-f-src').textContent = src.kind || '—';
|
document.getElementById('sc-f-src').textContent = src.kind || '—';
|
||||||
document.getElementById('sc-f-cap').textContent = src.captured_at || '—';
|
// captured_at has a "Z" suffix (UTC); _fmtTs converts to browser local
|
||||||
|
// — matches the BW-reported recorded-at, no more "21:59:57 vs it's 6 PM"
|
||||||
|
// confusion from operators reading the raw UTC value.
|
||||||
|
document.getElementById('sc-f-cap').textContent = _fmtTs(src.captured_at);
|
||||||
|
|
||||||
document.getElementById('sc-edit-ft').checked = !!rev.false_trigger;
|
document.getElementById('sc-edit-ft').checked = !!rev.false_trigger;
|
||||||
document.getElementById('sc-edit-reviewer').value = rev.reviewer || '';
|
document.getElementById('sc-edit-reviewer').value = rev.reviewer || '';
|
||||||
|
|||||||
Reference in New Issue
Block a user