fixes in contrast and audio confirm logif
All checks were successful
CI for csaxs_bec / test (push) Successful in 1m55s

This commit is contained in:
x12sa
2026-03-25 20:20:26 +01:00
parent 360fd03a73
commit 6f919ecfdf

View File

@@ -568,6 +568,7 @@ class FlomniWebpageGenerator(WebpageGeneratorBase):
"Exposure time": _gvar(g, "tomo_countingtime", ".3f", " s"),
"Angle step": _gvar(g, "tomo_angle_stepsize", ".2f", "\u00b0"),
"Stitch x / y": f"{_fmt2(stx)} / {_fmt2(sty)} \u00b5m",
"Corridor size": str(g.get_global_var("corridor_size") or "N/A"),
}
return {
@@ -768,7 +769,7 @@ def _render_html(phone_numbers: list) -> str:
.theme-btn:hover {{ background: var(--border); color: var(--text); }}
.theme-btn.active {{
background: var(--status-color); border-color: var(--status-color);
color: var(--bg);
color: #1a1d2e;
}}
/* ── Cards ── */
@@ -792,7 +793,7 @@ def _render_html(phone_numbers: list) -> str:
.status-pill {{
font-family: var(--mono); font-size: 0.75rem; font-weight: 700;
letter-spacing: 0.12em; text-transform: uppercase;
color: var(--bg); background: var(--status-color);
color: #1a1d2e; background: var(--status-color);
padding: 0.35rem 1rem; border-radius: 100px;
white-space: nowrap; transition: background 0.6s; flex-shrink: 0;
}}
@@ -898,6 +899,7 @@ def _render_html(phone_numbers: list) -> str:
transition: background 0.3s; flex-shrink: 0;
}}
.audio-dot.active {{ background: var(--c-scanning); box-shadow: 0 0 6px var(--c-scanning); }}
.audio-dot.confirmed {{ background: var(--c-idle-short); }}
.audio-text {{ font-size: 0.85rem; color: var(--text-dim); }}
.audio-controls {{ display: flex; gap: 0.6rem; flex-wrap: wrap; }}
@@ -910,7 +912,7 @@ def _render_html(phone_numbers: list) -> str:
min-height: 44px;
}}
button:hover {{ background: var(--border); }}
button.active {{ background: var(--status-color); border-color: var(--status-color); color: var(--bg); }}
button.active {{ background: var(--status-color); border-color: var(--status-color); color: #1a1d2e; }}
button.confirm-btn {{
background: color-mix(in srgb, var(--c-idle-long) 20%, var(--surface2));
border-color: var(--c-idle-long); color: var(--c-idle-long); display: none;
@@ -1108,8 +1110,13 @@ function toggleAudio(){{
updateAudioUI(); if(!audioEnabled) stopWarning();
}}
function confirmWarning(){{
warningConfirmed=true; stopWarning();
warningConfirmed=true;
stopWarning();
// hide button, dim LED — audio stops but visual warning remains
document.getElementById('btn-confirm').style.display='none';
const dot=document.getElementById('audio-dot');
dot.classList.remove('active');
dot.classList.add('confirmed');
}}
function updateAudioUI(){{
const btn=document.getElementById('btn-toggle'),
@@ -1117,17 +1124,24 @@ function updateAudioUI(){{
txt=document.getElementById('audio-text');
if(audioEnabled){{
btn.textContent='Disable'; btn.classList.add('active');
dot.classList.add('active'); txt.textContent='Audio warnings: enabled';
if(!warningConfirmed) dot.classList.add('active');
txt.textContent='Audio warnings: enabled';
}}else{{
btn.textContent='Enable'; btn.classList.remove('active');
dot.classList.remove('active'); txt.textContent='Audio warnings: disabled';
dot.classList.remove('active');
txt.textContent='Audio warnings: disabled';
}}
}}
function startWarning(){{
if(warningTimer) return;
if(audioEnabled&&!warningConfirmed) warningChime();
warningTimer=setInterval(()=>{{if(audioEnabled&&!warningConfirmed) warningChime();}},30000);
document.getElementById('btn-confirm').style.display='inline-block';
// Start the audio timer only if not already running and not confirmed
if(!warningTimer && !warningConfirmed){{
if(audioEnabled) warningChime();
warningTimer=setInterval(()=>{{if(audioEnabled&&!warningConfirmed) warningChime();}},30000);
}}
// Show confirm button only if warning not yet acknowledged this episode
if(!warningConfirmed){{
document.getElementById('btn-confirm').style.display='inline-block';
}}
}}
function stopWarning(){{ if(warningTimer){{clearInterval(warningTimer);warningTimer=null;}} }}
@@ -1136,7 +1150,7 @@ const LABELS={{scanning:'SCANNING',running:'RUNNING',idle_short:'IDLE',idle_long
const DETAILS={{
scanning: d=>'Tomo scan in progress · projection '+(d.progress.projection||0)+' of '+(d.progress.total_projections||0)+' · '+(d.progress.tomo_type||''),
running: d=>'Queue active · outside tomo heartbeat window',
idle_short:d=>'Finished normally &middot; idle for <strong>'+d.idle_for_human+'</strong>',
idle_short:d=>'Idle for <strong>'+d.idle_for_human+'</strong>',
idle_long: d=>'Idle for <strong>'+d.idle_for_human+'</strong> &mdash; no tomo scan running',
error: d=>'Queue stopped unexpectedly &middot; idle for <strong>'+(d.idle_for_human||'?')+'</strong>',
unknown: d=>'Status unknown &middot; waiting for first data&hellip;',
@@ -1170,7 +1184,13 @@ function renderInstrument(setup){{
function render(d){{
const s=d.experiment_status||'unknown',p=d.progress||{{}};
if(lastWarnStatus!==null&&WARN_STATUSES.has(lastWarnStatus)&&!WARN_STATUSES.has(s)) warningConfirmed=false;
if(lastWarnStatus!==null&&WARN_STATUSES.has(lastWarnStatus)&&!WARN_STATUSES.has(s)){{
// Status recovered from warning — re-arm for next idle episode
warningConfirmed=false;
const dot=document.getElementById('audio-dot');
dot.classList.remove('confirmed');
if(audioEnabled) dot.classList.add('active');
}}
lastWarnStatus=s;
document.body.className=s;
document.getElementById('status-pill').textContent=LABELS[s]||s.toUpperCase();