@@ -63,6 +63,101 @@
|
||||
if (simpleAuth.needsCaptcha() && captchaContainer) {
|
||||
captchaContainer.style.display = 'flex';
|
||||
}
|
||||
|
||||
// Add login form handler
|
||||
loginForm.addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Get form data
|
||||
const username = document.getElementById('username').value;
|
||||
const password = document.getElementById('password').value;
|
||||
const captchaInput = document.getElementById('captchaInput')?.value;
|
||||
|
||||
// Clear previous error
|
||||
if (loginError) {
|
||||
loginError.style.display = 'none';
|
||||
loginError.textContent = '';
|
||||
}
|
||||
|
||||
// Show loading spinner in submit button
|
||||
const submitButton = this.querySelector('button[type="submit"]');
|
||||
const originalButtonContent = submitButton.innerHTML;
|
||||
submitButton.disabled = true;
|
||||
submitButton.innerHTML = `
|
||||
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
|
||||
<span class="ms-2">Logging in...</span>
|
||||
`;
|
||||
|
||||
// Record start time for minimum spinner display
|
||||
const startTime = Date.now();
|
||||
|
||||
try {
|
||||
// Attempt login
|
||||
const result = await simpleAuth.login({
|
||||
username: username,
|
||||
password: password,
|
||||
captchaInput: captchaInput
|
||||
});
|
||||
|
||||
// Calculate elapsed time and wait if needed to show spinner for at least 500ms
|
||||
const elapsedTime = Date.now() - startTime;
|
||||
const minSpinnerTime = 500; // 500ms minimum spinner display time
|
||||
|
||||
if (elapsedTime < minSpinnerTime) {
|
||||
await new Promise(resolve => setTimeout(resolve, minSpinnerTime - elapsedTime));
|
||||
}
|
||||
|
||||
if (result.success) {
|
||||
// Show success message in button
|
||||
submitButton.classList.remove('btn-success');
|
||||
submitButton.classList.add('btn-success');
|
||||
submitButton.innerHTML = `
|
||||
<i class="bi bi-check-circle me-2"></i>Login successful
|
||||
`;
|
||||
|
||||
// Wait a moment before closing modal and reloading
|
||||
setTimeout(() => {
|
||||
// Close modal
|
||||
const modal = bootstrap.Modal.getInstance(document.getElementById('loginModal'));
|
||||
if (modal) {
|
||||
modal.hide();
|
||||
}
|
||||
|
||||
// Reload page to update UI
|
||||
window.location.reload();
|
||||
}, 500);
|
||||
} else {
|
||||
// Show error
|
||||
if (loginError) {
|
||||
loginError.textContent = result.error || 'Login failed';
|
||||
loginError.style.display = 'block';
|
||||
}
|
||||
|
||||
// Show CAPTCHA if needed
|
||||
if (simpleAuth.needsCaptcha() && captchaContainer) {
|
||||
captchaContainer.style.display = 'flex';
|
||||
// Generate new CAPTCHA if needed
|
||||
if (result.captcha) {
|
||||
document.getElementById('captchaCode').value = result.captcha;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset button
|
||||
submitButton.disabled = false;
|
||||
submitButton.innerHTML = originalButtonContent;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Login error:', error);
|
||||
if (loginError) {
|
||||
loginError.textContent = error.message || 'An error occurred during login';
|
||||
loginError.style.display = 'block';
|
||||
}
|
||||
|
||||
// Reset button
|
||||
submitButton.disabled = false;
|
||||
submitButton.innerHTML = originalButtonContent;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Handle logout button
|
||||
|
Reference in New Issue
Block a user