// ----------------------------- // Projektübersicht — Tabs (Navigation) & Passwort-Schutz // ----------------------------- // Modul für die Tab-Navigation und den Passwortschutz der Hauptseite (nur von // Test.html geladen, nach js/showmode.js, vor js/pdf.js). showTab() wechselt // zwischen Board, Auslastung, Projekte und Projektbeteiligte und fordert für // die geschützten Tabs 'projects'/'people' das Passwort an; confirmPassword() // prüft den SHA256-Hash gegen PROTECTED_PASSWORD_HASH (js/globals.js). Die // ausstehende Aktion wird in requestedAction (js/globals.js) gemerkt – davon // profitieren auch die Passwort-Gates in js/weeks.js (Löschen/Entsperren von // Sitzungen). Gerendert werden beim Tab-Wechsel renderBoard()/renderLoad()/ // renderProjects()/renderPeople() aus js/board.js, js/load.js, js/projects.js, // js/people.js. // showTab: wechselt zwischen Ansichten; für sensible Tabs wird ein Passwort verlangt function showTab(t, skipAuth = false){ // Für die Tabs 'projects' und 'people' ist ein Passwortschutz vorgesehen if((t==='projects' || t==='people') && !skipAuth && !isAuthenticated){ requestedAction = { type: 'tab', tab: t }; document.getElementById('passwordModal').style.display='flex'; document.getElementById('passwordInput').value=''; document.getElementById('passwordInput').focus(); return; } currentTab = t; saveUiState(); ['board','projects','load','people'].forEach(x=>{ const el = document.getElementById(x); if(el) el.style.display=(x===t?'block':'none'); }); document.querySelectorAll('.tab').forEach(el=>el.classList.toggle('active',el.dataset.tab===t)); if(t==='board' && currentWeek()) renderBoard(); if(t==='projects') renderProjects(); if(t==='load') renderLoad(); if(t==='people') renderPeople(); } // ---------- Passwort-Schutz Implementierung ---------- // confirmPassword: prüft das eingegebene Passwort gegen den gespeicherten Hash function confirmPassword(){ const pwd = document.getElementById('passwordInput').value; if(!pwd) { alert("Bitte Passwort eingeben!"); return; } const pwdHash = CryptoJS.SHA256(pwd).toString(); if(pwdHash === PROTECTED_PASSWORD_HASH){ const action = requestedAction; requestedAction = null; document.getElementById('passwordModal').style.display='none'; setTimeout(() => { if(action?.type==='tab') showTab(action.tab, true); else if(action?.type==='deleteWeek') deleteWeek(true); else if(action?.type==='unlockWeek') unlockCurrentWeek(true); }, 100); } else { alert("Falsches Passwort!"); document.getElementById('passwordInput').value=''; document.getElementById('passwordInput').focus(); } } // closePasswordModal: schließt das Passwort-Modal ohne Ausführung und // verwirft die gemerkte Aktion (requestedAction = null). function closePasswordModal(){ document.getElementById('passwordModal').style.display='none'; requestedAction = null; }