diff --git a/src/public/script.js b/src/public/script.js index 493ef65..9fb594c 100644 --- a/src/public/script.js +++ b/src/public/script.js @@ -94,7 +94,7 @@ function handle(msg){ break; case 'round_closed': 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();} break; case 'buzzer_reset': @@ -330,11 +330,13 @@ function modTimerToggle(){ if(modTimerRunning){ clearInterval(modTimerInterval);modTimerRunning=false; document.getElementById('btn-timer-ss').textContent='START'; + // Don't auto-uncheck - user controls toggle broadcastTimerToPlayers(modTimerRemaining,false); } else { if(modTimerRemaining<=0)modTimerLoad(); modTimerRunning=true; document.getElementById('btn-timer-ss').textContent='PAUSE'; + // Don't auto-check - user controls toggle broadcastTimerToPlayers(modTimerRemaining,true); modTimerInterval=setInterval(()=>{ modTimerRemaining--; @@ -351,7 +353,7 @@ function modTimerToggle(){ } },1000); } - // Update toggle state to match running state + // Sync toggle with running state const tog=document.getElementById('timer-tog'); if(tog)tog.checked=modTimerRunning; } @@ -365,6 +367,9 @@ function renderModTimerDisplay(){ const s=modTimerRemaining; el.textContent=fmtTime(s); 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(){ @@ -373,6 +378,9 @@ function modTimerLoad(){ modTimerRunning=false; clearInterval(modTimerInterval); 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(); } @@ -380,6 +388,9 @@ function modTimerReset(){ clearInterval(modTimerInterval); modTimerRunning=false; 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(); broadcastTimerToPlayers(modTimerRemaining,false); } @@ -392,21 +403,31 @@ function broadcastTimerToPlayers(sec,running){ }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 // ══════════════════════════════════════════════════════ function toggleRound(){ if(room.buzzerState.roundOpen){ ws_send({type:'close_round'}); - // If timer toggle is ON and timer running, pause it - if(document.getElementById('timer-tog')?.checked && modTimerRunning){ + // If linked, pause timer + if(document.getElementById('timer-tog').checked && modTimerRunning){ clearInterval(modTimerInterval);modTimerRunning=false; document.getElementById('btn-timer-ss').textContent='START'; } } else { ws_send({type:'open_round'}); - // If timer toggle is ON and timer not running, start it - if(document.getElementById('timer-tog')?.checked && !modTimerRunning && modTimerRemaining===0){ + // If linked and timer was stopped, start it + if(document.getElementById('timer-tog').checked && !modTimerRunning && modTimerRemaining===0){ modTimerLoad(); modTimerRunning=true; document.getElementById('btn-timer-ss').textContent='PAUSE'; @@ -427,8 +448,8 @@ function toggleRound(){ function resumeRound(){ ws_send({type:'resume_round'}); - // If timer toggle is ON and timer not running, resume it - if(document.getElementById('timer-tog')?.checked && !modTimerRunning){ + // If linked and timer was stopped, resume it + if(document.getElementById('timer-tog').checked && !modTimerRunning){ modTimerLoad(); modTimerRunning=true; 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(){ const btn=document.getElementById('mod-round-btn'); const resumeBtn=document.getElementById('mod-resume-btn'); @@ -467,6 +480,10 @@ function renderRoundButtons(){ btn.className='btn btn-g btn-full'; 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(); renderModTeams(); renderRoundButtons(); - // Sync timer toggle with running state - document.getElementById('timer-tog').checked=modTimerRunning; + // Sync timer toggle with running state (user controls ON/OFF, toggle reflects state) + const tog=document.getElementById('timer-tog'); + if(tog)tog.checked=modTimerRunning; } function renderModBuzz(evt){ @@ -597,7 +615,6 @@ function renderModSettings(){ renderLiveTeamNames(); renderRoundButtons(); renderModTimerDisplay(); - document.getElementById('timer-tog').checked=modTimerRunning; } function segActivate(groupId,val){