132 lines
4.6 KiB
JavaScript
132 lines
4.6 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
|
const modal = document.getElementById('reboot-modal');
|
|
const rebootButton = document.getElementById('rebootModem');
|
|
const cancelButtons = modal.querySelectorAll('.cancel, .modal-background');
|
|
const powerButton = document.querySelector('div.button.is-warning.is-outlined.reboot-modal');
|
|
const modalMessage = document.getElementById('modal-message');
|
|
const loadingContent = document.getElementById('loading-content');
|
|
const modalButtons = document.getElementById('modal-buttons');
|
|
const countdownElement = document.getElementById('countdown');
|
|
|
|
let countdownInterval;
|
|
|
|
function toggleModal(show = true) {
|
|
modal.classList.toggle('is-active', show);
|
|
document.documentElement.classList.toggle('is-clipped', show);
|
|
|
|
// Reset modal content when closing
|
|
if (!show) {
|
|
modalMessage.style.display = 'block';
|
|
loadingContent.style.display = 'none';
|
|
modalButtons.style.display = 'flex';
|
|
if (countdownInterval) {
|
|
clearInterval(countdownInterval);
|
|
}
|
|
countdownElement.textContent = '80';
|
|
}
|
|
}
|
|
|
|
function startCountdown() {
|
|
let timeLeft = 80;
|
|
|
|
// Update display for countdown
|
|
modalMessage.style.display = 'none';
|
|
loadingContent.style.display = 'flex';
|
|
modalButtons.style.display = 'none';
|
|
|
|
countdownInterval = setInterval(() => {
|
|
timeLeft--;
|
|
countdownElement.textContent = timeLeft;
|
|
|
|
if (timeLeft <= 0) {
|
|
clearInterval(countdownInterval);
|
|
window.location.reload();
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
// Show modal when restart connection button is clicked
|
|
powerButton.addEventListener('click', function(e) {
|
|
e.preventDefault();
|
|
toggleModal(true);
|
|
});
|
|
|
|
// Hide modal when cancel or background is clicked
|
|
cancelButtons.forEach(button => {
|
|
button.addEventListener('click', () => toggleModal(false));
|
|
});
|
|
|
|
// Handle ESC key press
|
|
document.addEventListener('keydown', function(e) {
|
|
if (e.key === 'Escape' && modal.classList.contains('is-active')) {
|
|
toggleModal(false);
|
|
}
|
|
});
|
|
|
|
// Function to send AT command
|
|
async function sendRebootCommand() {
|
|
try {
|
|
// Disable the reboot button and show loading state
|
|
rebootButton.classList.add('is-loading');
|
|
rebootButton.disabled = true;
|
|
|
|
const response = await fetch('/cgi-bin/atinout_handler.sh', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
},
|
|
body: 'command=' + encodeURIComponent('AT+CFUN=1,1')
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
|
|
if (data.output && data.output.includes('OK')) {
|
|
startCountdown();
|
|
} else {
|
|
throw new Error('Reboot command failed');
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('Error:', error);
|
|
toggleModal(false);
|
|
showNotification('Failed to reboot device. Please try again.', 'is-danger');
|
|
} finally {
|
|
// Re-enable the reboot button and remove loading state
|
|
rebootButton.classList.remove('is-loading');
|
|
rebootButton.disabled = false;
|
|
}
|
|
}
|
|
|
|
// Function to show notification (for errors only now)
|
|
function showNotification(message, type = 'is-info') {
|
|
const notification = document.createElement('div');
|
|
notification.className = `notification ${type} is-light`;
|
|
notification.style.position = 'fixed';
|
|
notification.style.top = '1rem';
|
|
notification.style.right = '1rem';
|
|
notification.style.zIndex = '9999';
|
|
notification.style.maxWidth = '300px';
|
|
|
|
const deleteButton = document.createElement('button');
|
|
deleteButton.className = 'delete';
|
|
deleteButton.addEventListener('click', () => notification.remove());
|
|
|
|
notification.appendChild(deleteButton);
|
|
notification.appendChild(document.createTextNode(message));
|
|
|
|
document.body.appendChild(notification);
|
|
|
|
setTimeout(() => {
|
|
if (document.body.contains(notification)) {
|
|
notification.remove();
|
|
}
|
|
}, 5000);
|
|
}
|
|
|
|
// Handle reboot button click
|
|
rebootButton.addEventListener('click', sendRebootCommand);
|
|
}); |