54 lines
No EOL
1.6 KiB
JavaScript
54 lines
No EOL
1.6 KiB
JavaScript
document.addEventListener('DOMContentLoaded', () => {
|
|
checkAuthStatus();
|
|
initLogoutListener();
|
|
initNavToggle();
|
|
});
|
|
|
|
function initNavToggle() {
|
|
const navToggle = document.getElementById('nav-toggle');
|
|
const navLinks = document.getElementById('nav-links');
|
|
if (navToggle && navLinks) {
|
|
navToggle.addEventListener('click', () => {
|
|
navLinks.classList.toggle('active');
|
|
});
|
|
}
|
|
}
|
|
|
|
async function checkAuthStatus() {
|
|
try {
|
|
const res = await fetch('/auth/me');
|
|
const data = await res.json();
|
|
updateAuthUI(data.authenticated);
|
|
} catch (err) {
|
|
console.error("Auth check failed", err);
|
|
}
|
|
}
|
|
|
|
function initLogoutListener() {
|
|
const logoutLink = document.getElementById('link-logout');
|
|
if (logoutLink) {
|
|
logoutLink.addEventListener('click', async (e) => {
|
|
e.preventDefault();
|
|
try {
|
|
if (window.SpotCrypto) window.SpotCrypto.clearSession();
|
|
await fetch('/auth/logout', { method: 'POST' });
|
|
window.location.reload();
|
|
} catch (err) {
|
|
console.error("Logout failed", err);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function updateAuthUI(isLoggedIn) {
|
|
const loginLink = document.getElementById('link-login');
|
|
const logoutLink = document.getElementById('link-logout');
|
|
|
|
if (isLoggedIn) {
|
|
if (loginLink) loginLink.style.display = 'none';
|
|
if (logoutLink) logoutLink.style.display = 'inline';
|
|
} else {
|
|
if (loginLink) loginLink.style.display = 'inline';
|
|
if (logoutLink) logoutLink.style.display = 'none';
|
|
}
|
|
} |