diff --git a/src/js/chat-widget.el b/src/js/chat-widget.el index 2130a0f..bb638b6 100644 --- a/src/js/chat-widget.el +++ b/src/js/chat-widget.el @@ -76,17 +76,59 @@ fn main() -> Void { saveSession(session); } var msgCount = session.count || 0; + var _headerResetInterval = null; + + function _nextMidnightUTC() { + var now = new Date(); + var midnight = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1)); + return Math.floor(midnight.getTime() / 1000); + } + + function _startHeaderResetTimer() { + var el = document.getElementById('neuron-demo-countdown'); + if (!el) return; + if (_headerResetInterval) return; // already ticking + var resetAt = _nextMidnightUTC(); + function _tick() { + var secsLeft = Math.max(0, resetAt - Math.floor(Date.now() / 1000)); + var hh = Math.floor(secsLeft / 3600); + var mm = Math.floor((secsLeft % 3600) / 60); + var ss = secsLeft % 60; + var pad = function(n) { return n < 10 ? '0' + n : '' + n; }; + var ts = hh + ':' + pad(mm) + ':' + pad(ss); + var el2 = document.getElementById('neuron-demo-countdown'); + if (!el2) { clearInterval(_headerResetInterval); _headerResetInterval = null; return; } + el2.textContent = 'resets in ' + ts; + el2.style.color = 'rgba(255,255,255,0.65)'; + el2.style.fontWeight = '600'; + if (secsLeft <= 0) { + clearInterval(_headerResetInterval); + _headerResetInterval = null; + el2.textContent = '10 questions left'; + el2.style.color = '#ffffff'; + el2.style.fontWeight = '700'; + } + } + _tick(); + _headerResetInterval = setInterval(_tick, 1000); + } function updateCountdown() { var el = document.getElementById('neuron-demo-countdown'); if (!el) return; var remaining = MAX - msgCount; - el.textContent = remaining + ' question' + (remaining === 1 ? '' : 's') + ' left'; - el.style.color = '#ffffff'; - el.style.fontWeight = '700'; + if (remaining <= 0) { + _startHeaderResetTimer(); + } else { + if (_headerResetInterval) { clearInterval(_headerResetInterval); _headerResetInterval = null; } + el.textContent = remaining + ' question' + (remaining === 1 ? '' : 's') + ' left'; + el.style.color = '#ffffff'; + el.style.fontWeight = '700'; + } } window.neuronDemoReset = function() { + if (_headerResetInterval) { clearInterval(_headerResetInterval); _headerResetInterval = null; } clearSession(); session = { messages: [], count: 0, context: '' }; msgCount = 0;