69 lines
3.0 KiB
JavaScript
69 lines
3.0 KiB
JavaScript
// -----------------------------
|
||
// 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/board.js, js/load/load.js, js/projects/projects.js,
|
||
// js/people/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();
|
||
updateRouteUrl(currentDepartment, t);
|
||
|
||
['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;
|
||
} |