Timer toggle: manual ON/OFF control, buttons auto-link when ON, never auto-uncheck

This commit is contained in:
2026-04-08 20:24:44 -05:00
parent 1a2dc295e1
commit 1ad1d96cb2

View File

@@ -94,7 +94,7 @@ function handle(msg){
break; break;
case 'round_closed': case 'round_closed':
room=msg.room; room=msg.room;
if(role==='mod'){renderMod();renderRoundButtons();document.getElementById('timer-tog').checked=false;toast('ROUND CLOSED','warn');} if(role==='mod'){renderMod();renderRoundButtons();toast('ROUND CLOSED','warn');}
else{renderPlayerBuzzer();stopPlayerTimer();} else{renderPlayerBuzzer();stopPlayerTimer();}
break; break;
case 'buzzer_reset': case 'buzzer_reset':
@@ -330,11 +330,13 @@ function modTimerToggle(){
if(modTimerRunning){ if(modTimerRunning){
clearInterval(modTimerInterval);modTimerRunning=false; clearInterval(modTimerInterval);modTimerRunning=false;
document.getElementById('btn-timer-ss').textContent='START'; document.getElementById('btn-timer-ss').textContent='START';
// Don't auto-uncheck - user controls toggle
broadcastTimerToPlayers(modTimerRemaining,false); broadcastTimerToPlayers(modTimerRemaining,false);
} else { } else {
if(modTimerRemaining<=0)modTimerLoad(); if(modTimerRemaining<=0)modTimerLoad();
modTimerRunning=true; modTimerRunning=true;
document.getElementById('btn-timer-ss').textContent='PAUSE'; document.getElementById('btn-timer-ss').textContent='PAUSE';
// Don't auto-check - user controls toggle
broadcastTimerToPlayers(modTimerRemaining,true); broadcastTimerToPlayers(modTimerRemaining,true);
modTimerInterval=setInterval(()=>{ modTimerInterval=setInterval(()=>{
modTimerRemaining--; modTimerRemaining--;
@@ -351,7 +353,7 @@ function modTimerToggle(){
} }
},1000); },1000);
} }
// Update toggle state to match running state // Sync toggle with running state
const tog=document.getElementById('timer-tog'); const tog=document.getElementById('timer-tog');
if(tog)tog.checked=modTimerRunning; if(tog)tog.checked=modTimerRunning;
} }
@@ -365,6 +367,9 @@ function renderModTimerDisplay(){
const s=modTimerRemaining; const s=modTimerRemaining;
el.textContent=fmtTime(s); el.textContent=fmtTime(s);
el.className='timer-digits'+(s<=5?' danger':s<=10?' warn':''); el.className='timer-digits'+(s<=5?' danger':s<=10?' warn':'');
// Sync toggle with running state (user controls ON/OFF)
const tog=document.getElementById('timer-tog');
if(tog)tog.checked=modTimerRunning;
} }
function modTimerLoad(){ function modTimerLoad(){
@@ -373,6 +378,9 @@ function modTimerLoad(){
modTimerRunning=false; modTimerRunning=false;
clearInterval(modTimerInterval); clearInterval(modTimerInterval);
document.getElementById('btn-timer-ss').textContent='START'; document.getElementById('btn-timer-ss').textContent='START';
// Sync toggle with running state (user controls ON/OFF)
const tog=document.getElementById('timer-tog');
if(tog)tog.checked=modTimerRunning;
renderModTimerDisplay(); renderModTimerDisplay();
} }
@@ -380,6 +388,9 @@ function modTimerReset(){
clearInterval(modTimerInterval); clearInterval(modTimerInterval);
modTimerRunning=false; modTimerRunning=false;
modTimerRemaining=Math.max(5,parseInt(document.getElementById('mod-timer-set').value)||30); modTimerRemaining=Math.max(5,parseInt(document.getElementById('mod-timer-set').value)||30);
// Sync toggle with running state (user controls ON/OFF)
const tog=document.getElementById('timer-tog');
if(tog)tog.checked=modTimerRunning;
renderModTimerDisplay(); renderModTimerDisplay();
broadcastTimerToPlayers(modTimerRemaining,false); broadcastTimerToPlayers(modTimerRemaining,false);
} }
@@ -392,21 +403,31 @@ function broadcastTimerToPlayers(sec,running){
}catch{} }catch{}
} }
// Timer toggle: user clicks ONCE at start to enable/disable linking
document.getElementById('timer-tog').addEventListener('change',function(e){
const tog=e.target;
if(tog.checked){
// Enable linking - timer auto-syncs with round buttons
} else {
// Disable linking - timer buttons work independently
}
});
// ══════════════════════════════════════════════════════ // ══════════════════════════════════════════════════════
// MOD ROUND CONTROL // MOD ROUND CONTROL
// ══════════════════════════════════════════════════════ // ══════════════════════════════════════════════════════
function toggleRound(){ function toggleRound(){
if(room.buzzerState.roundOpen){ if(room.buzzerState.roundOpen){
ws_send({type:'close_round'}); ws_send({type:'close_round'});
// If timer toggle is ON and timer running, pause it // If linked, pause timer
if(document.getElementById('timer-tog')?.checked && modTimerRunning){ if(document.getElementById('timer-tog').checked && modTimerRunning){
clearInterval(modTimerInterval);modTimerRunning=false; clearInterval(modTimerInterval);modTimerRunning=false;
document.getElementById('btn-timer-ss').textContent='START'; document.getElementById('btn-timer-ss').textContent='START';
} }
} else { } else {
ws_send({type:'open_round'}); ws_send({type:'open_round'});
// If timer toggle is ON and timer not running, start it // If linked and timer was stopped, start it
if(document.getElementById('timer-tog')?.checked && !modTimerRunning && modTimerRemaining===0){ if(document.getElementById('timer-tog').checked && !modTimerRunning && modTimerRemaining===0){
modTimerLoad(); modTimerLoad();
modTimerRunning=true; modTimerRunning=true;
document.getElementById('btn-timer-ss').textContent='PAUSE'; document.getElementById('btn-timer-ss').textContent='PAUSE';
@@ -427,8 +448,8 @@ function toggleRound(){
function resumeRound(){ function resumeRound(){
ws_send({type:'resume_round'}); ws_send({type:'resume_round'});
// If timer toggle is ON and timer not running, resume it // If linked and timer was stopped, resume it
if(document.getElementById('timer-tog')?.checked && !modTimerRunning){ if(document.getElementById('timer-tog').checked && !modTimerRunning){
modTimerLoad(); modTimerLoad();
modTimerRunning=true; modTimerRunning=true;
document.getElementById('btn-timer-ss').textContent='PAUSE'; document.getElementById('btn-timer-ss').textContent='PAUSE';
@@ -446,14 +467,6 @@ function resumeRound(){
} }
} }
// Timer toggle handler
document.getElementById('timer-tog').addEventListener('change',function(e){
if(e.target.checked && modTimerRemaining===0){
// If timer is enabled but not started, load it from set value
modTimerLoad();
}
});
function renderRoundButtons(){ function renderRoundButtons(){
const btn=document.getElementById('mod-round-btn'); const btn=document.getElementById('mod-round-btn');
const resumeBtn=document.getElementById('mod-resume-btn'); const resumeBtn=document.getElementById('mod-resume-btn');
@@ -467,6 +480,10 @@ function renderRoundButtons(){
btn.className='btn btn-g btn-full'; btn.className='btn btn-g btn-full';
resumeBtn.style.display='block'; resumeBtn.style.display='block';
} }
// Sync timer toggle with running state (user controls ON/OFF)
const tog=document.getElementById('timer-tog');
if(tog)tog.checked=modTimerRunning;
} }
// ══════════════════════════════════════════════════════ // ══════════════════════════════════════════════════════
@@ -491,8 +508,9 @@ function renderMod(){
renderModPlayerList(); renderModPlayerList();
renderModTeams(); renderModTeams();
renderRoundButtons(); renderRoundButtons();
// Sync timer toggle with running state // Sync timer toggle with running state (user controls ON/OFF, toggle reflects state)
document.getElementById('timer-tog').checked=modTimerRunning; const tog=document.getElementById('timer-tog');
if(tog)tog.checked=modTimerRunning;
} }
function renderModBuzz(evt){ function renderModBuzz(evt){
@@ -597,7 +615,6 @@ function renderModSettings(){
renderLiveTeamNames(); renderLiveTeamNames();
renderRoundButtons(); renderRoundButtons();
renderModTimerDisplay(); renderModTimerDisplay();
document.getElementById('timer-tog').checked=modTimerRunning;
} }
function segActivate(groupId,val){ function segActivate(groupId,val){