diff --git a/templates/index.html b/templates/index.html index f99cf02..df7494c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -25,23 +25,31 @@ </div> <p class="info-text"> - A registration token will be emailed to you.<br> - Token resets in: <span id="countdown" class="countdown">--:--:--</span> + <span id="info-message">A registration token will be emailed to you.</span><br> + Token resets at: <span id="countdown" class="countdown">--:--:--</span> UTC </p> </div> <script> + // Configuration values provided by the server + const TOKEN_RESET_HOUR = {{ token_reset_time_utc }}; // e.g., 0 for midnight UTC + const DOWNTIME_MINUTES = {{ downtime_before_token_reset }}; // e.g., 30 minutes + function updateCountdown() { const now = new Date(); - const tomorrow = new Date(); - tomorrow.setUTCHours(24, 0, 0, 0); + const resetTime = new Date(); - // Registration closes 15 minutes before midnight UTC - const registrationCloseTime = new Date(tomorrow); - registrationCloseTime.setUTCMinutes(-15); + // Set to next occurrence of the reset time + resetTime.setUTCHours(TOKEN_RESET_HOUR, 0, 0, 0); + if (now > resetTime) { + resetTime.setDate(resetTime.getDate() + 1); + } - const timeUntilClose = registrationCloseTime - now; - const isRegistrationOpen = timeUntilClose > 0; + // Calculate downtime start + const downtimeStart = new Date(resetTime); + downtimeStart.setMinutes(downtimeStart.getMinutes() - DOWNTIME_MINUTES); + + const isRegistrationOpen = now < downtimeStart; // Update UI based on registration status document.getElementById('registration-form').style.display = @@ -49,10 +57,17 @@ document.getElementById('registration-closed').style.display = isRegistrationOpen ? 'none' : 'block'; - // Format time remaining - const hours = String(Math.floor(timeUntilClose / (1000 * 60 * 60))).padStart(2, '0'); - const minutes = String(Math.floor((timeUntilClose % (1000 * 60 * 60)) / (1000 * 60))).padStart(2, '0'); - const seconds = String(Math.floor((timeUntilClose % (1000 * 60)) / 1000)).padStart(2, '0'); + // Update info message based on status + const infoMessage = document.getElementById('info-message'); + infoMessage.textContent = isRegistrationOpen + ? 'A registration token will be emailed to you.' + : 'Please come back after the token resets.'; + + // Format time until reset (not until downtime) + const timeUntilReset = resetTime - now; + const hours = String(Math.floor(timeUntilReset / (1000 * 60 * 60))).padStart(2, '0'); + const minutes = String(Math.floor((timeUntilReset % (1000 * 60 * 60)) / (1000 * 60))).padStart(2, '0'); + const seconds = String(Math.floor((timeUntilReset % (1000 * 60)) / 1000)).padStart(2, '0'); document.getElementById('countdown').textContent = `${hours}:${minutes}:${seconds}`; }