diff --git a/index.html b/index.html index cd7ef13..1a742d2 100644 --- a/index.html +++ b/index.html @@ -61,8 +61,13 @@

StudyPlan

- - +
+ + + +
@@ -372,8 +377,11 @@

{ - localStorage.removeItem('studyplan_user'); + // (Header logout removed) logout handled in profile popover - // Show login modal again - document.getElementById('auth-modal').style.display = 'flex'; + // Profile Button / Popover + const profileBtn = document.getElementById('profile-btn'); + const profilePopover = document.getElementById('profile-popover'); + + function renderProfile() { + const userStr = localStorage.getItem('studyplan_user'); + if (!profileBtn) return; + if (!userStr) { + profileBtn.innerHTML = 'Profile'; + profilePopover.style.display = 'none'; + return; + } + let user; + try { user = JSON.parse(userStr); } catch (e) { user = { email: userStr }; } + const name = user.name || (user.email ? user.email.split('@')[0] : 'User'); + const avatar = `https://ui-avatars.com/api/?name=${encodeURIComponent(name)}&background=4f46e5&color=fff&size=128`; + profileBtn.innerHTML = `avatar ${name}`; + profilePopover.innerHTML = ` +
+ +
+
${name}
+
${user.email || ''}
+
+
+
+ +
+ `; + } + + profileBtn.addEventListener('click', (e) => { + if (!localStorage.getItem('studyplan_user')) { + document.getElementById('auth-modal').style.display = 'flex'; + return; + } + profilePopover.style.display = profilePopover.style.display === 'block' ? 'none' : 'block'; + const expanded = profilePopover.style.display === 'block'; + profileBtn.setAttribute('aria-expanded', expanded ? 'true' : 'false'); + }); + + // Close popover when clicking outside + document.addEventListener('click', (e) => { + if (!profilePopover.contains(e.target) && e.target !== profileBtn) { + profilePopover.style.display = 'none'; + profileBtn.setAttribute('aria-expanded','false'); + } + }); + + // Logout from popover + document.addEventListener('click', (e) => { + if (e.target && e.target.id === 'popover-logout') { + localStorage.removeItem('studyplan_user'); + document.getElementById('auth-modal').style.display = 'flex'; + profilePopover.style.display = 'none'; + window.location.reload(); + } + }); - // Refresh page state - window.location.reload(); -}); + // Render profile on load + renderProfile(); // Settings Modal Logic const settingsModal = document.getElementById('settings-modal'); diff --git a/package-lock.json b/package-lock.json index 5652882..e9685a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "sqlite3": "^6.0.1" }, "engines": { - "node": "20.x" + "node": ">=20.x" } }, "node_modules/@google/genai": {