Spaces:
Sleeping
Sleeping
File size: 3,139 Bytes
3c4e575 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
// Global JavaScript functions can be added here.
document.addEventListener('DOMContentLoaded', function () {
// Example: Add a class to the body to indicate JS is enabled
document.body.classList.add('js-enabled');
// You could centralize common functions here if needed,
// for example, a function to make API calls with error handling.
// const apiRequest = async (url, method, body = null, headers = {}) => { ... }
const logoutButton = document.getElementById('logoutButton');
if (logoutButton) {
logoutButton.addEventListener('click', function (event) {
event.preventDefault(); // Prevent default anchor action
localStorage.removeItem('accessToken');
localStorage.removeItem('tokenType');
// Redirect to the server's /logout endpoint, which then redirects to login page
// This ensures any server-side session cleanup (if implemented later) could also occur.
window.location.href = '/logout';
});
}
// Client-side check to update navbar based on token presence
// This runs on every page load to set the correct initial state for navbar items.
const accessToken = localStorage.getItem('accessToken');
const navWelcomeItem = document.getElementById('navWelcomeItem');
const navLogoutItem = document.getElementById('navLogoutItem');
const navLoginItem = document.getElementById('navLoginItem');
const navSignupItem = document.getElementById('navSignupItem');
if (accessToken) {
// User is logged in (according to localStorage)
if (navWelcomeItem) navWelcomeItem.style.display = 'block'; // Or 'list-item' if needed
if (navLogoutItem) navLogoutItem.style.display = 'block';
if (navLoginItem) navLoginItem.style.display = 'none';
if (navSignupItem) navSignupItem.style.display = 'none';
// Optional: Fetch user email to display in welcome message
// Could be done here or within specific page scripts like homepage.html
// fetch('/auth/users/me', { headers: {'Authorization': `Bearer ${accessToken}`} })
// .then(response => response.ok ? response.json() : Promise.reject('Failed'))
// .then(data => {
// const welcomeSpan = document.getElementById('navUserWelcome');
// if (welcomeSpan) welcomeSpan.textContent = `Welcome, ${data.email}`;
// })
// .catch(err => console.error("Error fetching user for navbar:", err));
} else {
// User is logged out
if (navWelcomeItem) navWelcomeItem.style.display = 'none';
if (navLogoutItem) navLogoutItem.style.display = 'none';
if (navLoginItem) navLoginItem.style.display = 'block';
if (navSignupItem) navSignupItem.style.display = 'block';
}
});
// Function to get CSRF token if using CSRF protection with forms not handled by FastAPI's default
// function getCookie(name) { ... }
// Not strictly needed for this JWT setup unless forms post directly without JS.
|