83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
// Blazor Server Reconnection Timer
|
|
(function() {
|
|
let reconnectTimer = null;
|
|
let startTime = null;
|
|
|
|
function startTimer() {
|
|
if (reconnectTimer) return; // Already running
|
|
|
|
console.log('Blazor reconnection started, timer running...');
|
|
startTime = Date.now();
|
|
|
|
reconnectTimer = setInterval(() => {
|
|
const elapsedSeconds = Math.floor((Date.now() - startTime) / 1000);
|
|
const timerElement = document.getElementById('reconnect-elapsed-time');
|
|
|
|
if (timerElement) {
|
|
timerElement.textContent = `${elapsedSeconds}s`;
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
function stopTimer() {
|
|
if (reconnectTimer) {
|
|
console.log('Blazor reconnection ended, stopping timer');
|
|
clearInterval(reconnectTimer);
|
|
reconnectTimer = null;
|
|
|
|
// Reset timer display
|
|
const timerElement = document.getElementById('reconnect-elapsed-time');
|
|
if (timerElement) {
|
|
timerElement.textContent = '0s';
|
|
}
|
|
}
|
|
}
|
|
|
|
function checkReconnectionState() {
|
|
const modal = document.getElementById('components-reconnect-modal');
|
|
|
|
if (!modal) return;
|
|
|
|
// Check if modal has the "show" class (Blazor applies this when reconnecting)
|
|
if (modal.classList.contains('components-reconnect-show')) {
|
|
startTimer();
|
|
} else {
|
|
stopTimer();
|
|
}
|
|
}
|
|
|
|
// MutationObserver to watch for class changes on the modal
|
|
const observer = new MutationObserver((mutations) => {
|
|
mutations.forEach((mutation) => {
|
|
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
|
checkReconnectionState();
|
|
}
|
|
});
|
|
});
|
|
|
|
// Start observing when DOM is ready
|
|
function init() {
|
|
const modal = document.getElementById('components-reconnect-modal');
|
|
|
|
if (modal) {
|
|
observer.observe(modal, {
|
|
attributes: true,
|
|
attributeFilter: ['class']
|
|
});
|
|
|
|
// Check initial state
|
|
checkReconnectionState();
|
|
console.log('Blazor reconnection timer initialized');
|
|
} else {
|
|
console.warn('components-reconnect-modal not found, retrying...');
|
|
setTimeout(init, 100);
|
|
}
|
|
}
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', init);
|
|
} else {
|
|
init();
|
|
}
|
|
})();
|