diff --git a/assets/app_auth.js b/assets/app_auth.js index a35073d..c425b87 100644 --- a/assets/app_auth.js +++ b/assets/app_auth.js @@ -50,29 +50,47 @@ user: getStoredUser(), platformStatus: { maintenance: false, announcement: '', allow_registration: true }, + getToken() { + if (!this.token) { + this.token = getStoredToken(); + } + return this.token; + }, + + getUser() { + if (!this.user) { + this.user = getStoredUser(); + } + return this.user; + }, + isLoggedIn() { - return !!(this.token && this.user && !this.user.isGuest && this.user.email); + const token = this.getToken(); + const user = this.getUser(); + return !!(token && user && !user.isGuest && user.email); }, isAdmin() { - return !!(this.isLoggedIn() && this.user && this.user.role === 'admin'); + const user = this.getUser(); + return !!(this.isLoggedIn() && user && user.role === 'admin'); }, - setSession(token, user, rememberMe = false) { + isTeacher() { + const user = this.getUser(); + return !!(this.isLoggedIn() && user && (user.role === 'teacher' || user.role === 'admin')); + }, + + setSession(token, user, rememberMe = true) { this.token = token; this.user = user; - if (rememberMe) { + try { localStorage.setItem('auth_token', token); localStorage.setItem('auth_user', JSON.stringify(user)); - sessionStorage.removeItem('auth_token'); - sessionStorage.removeItem('auth_user'); - } else { sessionStorage.setItem('auth_token', token); sessionStorage.setItem('auth_user', JSON.stringify(user)); - localStorage.removeItem('auth_token'); - localStorage.removeItem('auth_user'); - } + } catch (e) {} + this.updateUI(); this.handleMaintenanceDisplay(); }, @@ -313,6 +331,7 @@ updateUI() { const loggedIn = this.isLoggedIn(); + const user = this.getUser(); // Topbar Elemente in index.html const userSpan = document.getElementById('nav-auth-user'); @@ -322,12 +341,18 @@ const teacherLink = document.getElementById('nav-teacher-link'); const heroPrimaryCta = document.getElementById('hero-primary-cta'); + // Dashboard Links auf index.html / impressum / datenschutz + const navDashLink = document.getElementById('nav-dashboard-link'); + const mobDashLink = document.getElementById('mobile-drawer-dash-link'); + const landingBanner = document.getElementById('landing-logged-in-banner'); + const landingUserName = document.getElementById('landing-user-name'); + if (guestBtn) guestBtn.style.display = 'none'; // Gast-Button permanent ausblenden - if (loggedIn && this.user) { + if (loggedIn && user) { if (userSpan) { userSpan.style.display = 'inline-flex'; - userSpan.innerHTML = `👤 ${escapeHtml(this.user.name || this.user.email)}`; + userSpan.innerHTML = `👤 ${escapeHtml(user.name || user.email)}`; } if (loginBtn) { loginBtn.style.display = 'inline-flex'; @@ -335,6 +360,7 @@ loginBtn.style.background = 'rgba(239, 68, 68, 0.15)'; loginBtn.style.color = '#f87171'; loginBtn.style.borderColor = 'rgba(239, 68, 68, 0.3)'; + loginBtn.removeAttribute('onclick'); loginBtn.onclick = () => { if (confirm('Möchtest du dich wirklich abmelden?')) { this.logout(); @@ -342,14 +368,18 @@ }; } if (registerBtn) { + registerBtn.style.display = 'inline-flex'; registerBtn.innerHTML = '💻 Zum Kurs-Dashboard💻 Dashboard'; registerBtn.style.background = '#10b981'; - registerBtn.onclick = () => { + registerBtn.removeAttribute('onclick'); + registerBtn.onclick = (e) => { + e.preventDefault(); window.location.href = 'dashboard.html'; }; } if (heroPrimaryCta) { heroPrimaryCta.innerHTML = '▶ Zum Dashboard & Kurse wählen →'; + heroPrimaryCta.removeAttribute('onclick'); heroPrimaryCta.onclick = (e) => { e.preventDefault(); window.location.href = 'dashboard.html'; @@ -360,11 +390,25 @@ document.querySelectorAll('.landing-cta-btn').forEach(btn => { btn.innerHTML = '▶ Zum Dashboard & Kurse wählen →'; btn.style.background = '#10b981'; + btn.removeAttribute('onclick'); btn.onclick = (e) => { e.preventDefault(); window.location.href = 'dashboard.html'; }; }); + + const footerLoginBtn = document.getElementById('footer-cta-login'); + if (footerLoginBtn) footerLoginBtn.style.display = 'none'; + + // Banner und Dashboard-Links einblenden + if (landingBanner) { + landingBanner.style.display = 'flex'; + if (landingUserName) { + landingUserName.innerText = user.name || user.email.split('@')[0]; + } + } + if (navDashLink) navDashLink.style.display = 'inline-flex'; + if (mobDashLink) mobDashLink.style.display = 'flex'; } else { if (userSpan) userSpan.style.display = 'none'; if (loginBtn) { @@ -398,11 +442,18 @@ window.openAuthModal('register', { allowClose: true }); }; }); + + const footerLoginBtn = document.getElementById('footer-cta-login'); + if (footerLoginBtn) footerLoginBtn.style.display = 'inline-flex'; + + if (landingBanner) landingBanner.style.display = 'none'; + if (navDashLink) navDashLink.style.display = 'none'; + if (mobDashLink) mobDashLink.style.display = 'none'; } // 🔒 Strikter Rollen-Filter für Dozenten- und Admin-Funktionen - const isTeacherOrAdmin = loggedIn && this.user && (this.user.role === 'teacher' || this.user.role === 'admin'); - const isAdmin = loggedIn && this.user && this.user.role === 'admin'; + const isTeacherOrAdmin = loggedIn && user && (user.role === 'teacher' || user.role === 'admin'); + const isAdmin = loggedIn && user && user.role === 'admin'; document.querySelectorAll('.teacher-only, #nav-teacher-link, #mobile-drawer-teacher-link, #footer-teacher-link').forEach(el => { if (isTeacherOrAdmin) { diff --git a/assets/ihk_tools/exam_engine.js b/assets/ihk_tools/exam_engine.js index c0bae24..2e3882f 100644 --- a/assets/ihk_tools/exam_engine.js +++ b/assets/ihk_tools/exam_engine.js @@ -630,7 +630,7 @@ class IhkExamEngine {
`; diff --git a/courses/bash/08_robuste_skripte_und_debugging/index.html b/courses/bash/08_robuste_skripte_und_debugging/index.html index 2b9d633..ca74672 100644 --- a/courses/bash/08_robuste_skripte_und_debugging/index.html +++ b/courses/bash/08_robuste_skripte_und_debugging/index.html @@ -141,7 +141,7 @@ set +x # Schaltet Tracing wieder ausBearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/05_einstieg_cpp_und_namespaces/index.html b/courses/cpp/05_einstieg_cpp_und_namespaces/index.html index 54a1603..6ef109f 100644 --- a/courses/cpp/05_einstieg_cpp_und_namespaces/index.html +++ b/courses/cpp/05_einstieg_cpp_und_namespaces/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/06_klassen_konstruktoren_und_raii/index.html b/courses/cpp/06_klassen_konstruktoren_und_raii/index.html index a984552..1b8ab5e 100644 --- a/courses/cpp/06_klassen_konstruktoren_und_raii/index.html +++ b/courses/cpp/06_klassen_konstruktoren_und_raii/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/07_vererbung_und_virtuelle_methoden/index.html b/courses/cpp/07_vererbung_und_virtuelle_methoden/index.html index f2d44f4..0f520a3 100644 --- a/courses/cpp/07_vererbung_und_virtuelle_methoden/index.html +++ b/courses/cpp/07_vererbung_und_virtuelle_methoden/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/08_operator_overloading/index.html b/courses/cpp/08_operator_overloading/index.html index 7a2e963..50b8b84 100644 --- a/courses/cpp/08_operator_overloading/index.html +++ b/courses/cpp/08_operator_overloading/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/13_multithreading_mit_std_thread/index.html b/courses/cpp/13_multithreading_mit_std_thread/index.html index eee0d8c..7fb0dcb 100644 --- a/courses/cpp/13_multithreading_mit_std_thread/index.html +++ b/courses/cpp/13_multithreading_mit_std_thread/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/14_dateiverarbeitung_und_streams/index.html b/courses/cpp/14_dateiverarbeitung_und_streams/index.html index 0a91519..d627507 100644 --- a/courses/cpp/14_dateiverarbeitung_und_streams/index.html +++ b/courses/cpp/14_dateiverarbeitung_und_streams/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/15_googletest_gtest_unittesting/index.html b/courses/cpp/15_googletest_gtest_unittesting/index.html index 4616f7b..f3e681e 100644 --- a/courses/cpp/15_googletest_gtest_unittesting/index.html +++ b/courses/cpp/15_googletest_gtest_unittesting/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/cpp/16_master_abschlussprojekt_high_performance_engine/index.html b/courses/cpp/16_master_abschlussprojekt_high_performance_engine/index.html index 19d1813..f8c77da 100644 --- a/courses/cpp/16_master_abschlussprojekt_high_performance_engine/index.html +++ b/courses/cpp/16_master_abschlussprojekt_high_performance_engine/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/02_kontrollfluss_und_pattern_matching/index.html b/courses/csharp/02_kontrollfluss_und_pattern_matching/index.html index a5d99e2..199b277 100644 --- a/courses/csharp/02_kontrollfluss_und_pattern_matching/index.html +++ b/courses/csharp/02_kontrollfluss_und_pattern_matching/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/03_arrays_listen_und_collections/index.html b/courses/csharp/03_arrays_listen_und_collections/index.html index 70cd7ba..0d31f78 100644 --- a/courses/csharp/03_arrays_listen_und_collections/index.html +++ b/courses/csharp/03_arrays_listen_und_collections/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/04_methoden_parameter_und_tuples/index.html b/courses/csharp/04_methoden_parameter_und_tuples/index.html index 3850c6f..b3268a8 100644 --- a/courses/csharp/04_methoden_parameter_und_tuples/index.html +++ b/courses/csharp/04_methoden_parameter_und_tuples/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/05_klassen_objekte_und_primary_constructors/index.html b/courses/csharp/05_klassen_objekte_und_primary_constructors/index.html index c4957db..2eaaa41 100644 --- a/courses/csharp/05_klassen_objekte_und_primary_constructors/index.html +++ b/courses/csharp/05_klassen_objekte_und_primary_constructors/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/06_records_und_immutability/index.html b/courses/csharp/06_records_und_immutability/index.html index 374521f..a8e0d2b 100644 --- a/courses/csharp/06_records_und_immutability/index.html +++ b/courses/csharp/06_records_und_immutability/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/07_vererbung_polymorphismus_und_abstract/index.html b/courses/csharp/07_vererbung_polymorphismus_und_abstract/index.html index 37c8868..c47c092 100644 --- a/courses/csharp/07_vererbung_polymorphismus_und_abstract/index.html +++ b/courses/csharp/07_vererbung_polymorphismus_und_abstract/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/08_interfaces_und_dependency_injection/index.html b/courses/csharp/08_interfaces_und_dependency_injection/index.html index 05f2c4d..ca9fcf1 100644 --- a/courses/csharp/08_interfaces_und_dependency_injection/index.html +++ b/courses/csharp/08_interfaces_und_dependency_injection/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/13_json_serialisierung_und_dateien/index.html b/courses/csharp/13_json_serialisierung_und_dateien/index.html index c430e0a..01973a7 100644 --- a/courses/csharp/13_json_serialisierung_und_dateien/index.html +++ b/courses/csharp/13_json_serialisierung_und_dateien/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/14_events_delegates_und_lambdas/index.html b/courses/csharp/14_events_delegates_und_lambdas/index.html index f2f8868..dd73c8f 100644 --- a/courses/csharp/14_events_delegates_und_lambdas/index.html +++ b/courses/csharp/14_events_delegates_und_lambdas/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/15_xunit_automatisiertes_unit_testing/index.html b/courses/csharp/15_xunit_automatisiertes_unit_testing/index.html index e02c014..1cbfa84 100644 --- a/courses/csharp/15_xunit_automatisiertes_unit_testing/index.html +++ b/courses/csharp/15_xunit_automatisiertes_unit_testing/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/csharp/16_master_abschlussprojekt_enterprise_order_engine/index.html b/courses/csharp/16_master_abschlussprojekt_enterprise_order_engine/index.html index 19a3c6c..ed9dbf2 100644 --- a/courses/csharp/16_master_abschlussprojekt_enterprise_order_engine/index.html +++ b/courses/csharp/16_master_abschlussprojekt_enterprise_order_engine/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/go/08_defer_panic_und_recover/index.html b/courses/go/08_defer_panic_und_recover/index.html index 82d06f6..d19af5d 100644 --- a/courses/go/08_defer_panic_und_recover/index.html +++ b/courses/go/08_defer_panic_und_recover/index.html @@ -87,7 +87,7 @@ defer fmt.Println("3. Dritter Defer") diff --git a/courses/go/16_master_abschlussprojekt_microservice/index.html b/courses/go/16_master_abschlussprojekt_microservice/index.html index 277aa76..cac638f 100644 --- a/courses/go/16_master_abschlussprojekt_microservice/index.html +++ b/courses/go/16_master_abschlussprojekt_microservice/index.html @@ -147,7 +147,7 @@ diff --git a/courses/ihk_ap1/01_lf1_unternehmen_und_arbeitsplatz/index.html b/courses/ihk_ap1/01_lf1_unternehmen_und_arbeitsplatz/index.html index 1b8c729..b7b219c 100644 --- a/courses/ihk_ap1/01_lf1_unternehmen_und_arbeitsplatz/index.html +++ b/courses/ihk_ap1/01_lf1_unternehmen_und_arbeitsplatz/index.html @@ -10,7 +10,7 @@Einstieg in Java, main-Methode, Variablen, int, double, boolean und String-Ausgaben.
Entscheidungen mit if/else und modernen Java Switch-Expressions (->).
Zählschleifen, while-Schleifen, for-each und Array-Verarbeitung in Java.
Methodendeklaration, statische vs. Instanzmethoden und Methodenüberladung.
Klassendefinition, new-Operator, this-Referenz und Konstruktoren.
diff --git a/courses/java/06_kapselung_und_records/index.html b/courses/java/06_kapselung_und_records/index.html index 2934a6f..505cb4d 100644 --- a/courses/java/06_kapselung_und_records/index.html +++ b/courses/java/06_kapselung_und_records/index.html @@ -11,7 +11,7 @@Zugriffsmodifikatoren private/public, Getter/Setter und Java 17+ Records.
diff --git a/courses/java/07_vererbung_polymorphie_und_super/index.html b/courses/java/07_vererbung_polymorphie_und_super/index.html index c1616d3..a741b0a 100644 --- a/courses/java/07_vererbung_polymorphie_und_super/index.html +++ b/courses/java/07_vererbung_polymorphie_und_super/index.html @@ -11,7 +11,7 @@Vererbung mit extends, Aufruf mit super(), Überschreiben (@Override) und abstrakte Klassen.
diff --git a/courses/java/08_interfaces_und_default_methods/index.html b/courses/java/08_interfaces_und_default_methods/index.html index 8105793..1a80528 100644 --- a/courses/java/08_interfaces_und_default_methods/index.html +++ b/courses/java/08_interfaces_und_default_methods/index.html @@ -11,7 +11,7 @@Schnittstellen mit interface, implements, Default- und Static-Methoden.
diff --git a/courses/java/13_dateien_json_und_persistenz/index.html b/courses/java/13_dateien_json_und_persistenz/index.html index dda5e83..a122e47 100644 --- a/courses/java/13_dateien_json_und_persistenz/index.html +++ b/courses/java/13_dateien_json_und_persistenz/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/java/14_multithreading_und_virtual_threads/index.html b/courses/java/14_multithreading_und_virtual_threads/index.html index ce2e806..fd8941c 100644 --- a/courses/java/14_multithreading_und_virtual_threads/index.html +++ b/courses/java/14_multithreading_und_virtual_threads/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/java/15_junit_5_automatisiertes_unit_testing/index.html b/courses/java/15_junit_5_automatisiertes_unit_testing/index.html index 603938f..328b9f1 100644 --- a/courses/java/15_junit_5_automatisiertes_unit_testing/index.html +++ b/courses/java/15_junit_5_automatisiertes_unit_testing/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/java/16_master_abschlussprojekt_banking_system/index.html b/courses/java/16_master_abschlussprojekt_banking_system/index.html index 8f727f8..2326e96 100644 --- a/courses/java/16_master_abschlussprojekt_banking_system/index.html +++ b/courses/java/16_master_abschlussprojekt_banking_system/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/javascript/16_master_abschlussprojekt_web_app/index.html b/courses/javascript/16_master_abschlussprojekt_web_app/index.html index 702976f..e9dc0ac 100644 --- a/courses/javascript/16_master_abschlussprojekt_web_app/index.html +++ b/courses/javascript/16_master_abschlussprojekt_web_app/index.html @@ -166,7 +166,7 @@ diff --git a/courses/powershell/16_master_abschlussprojekt_cloud_ops_engine/index.html b/courses/powershell/16_master_abschlussprojekt_cloud_ops_engine/index.html index 5b3be19..d7862d7 100644 --- a/courses/powershell/16_master_abschlussprojekt_cloud_ops_engine/index.html +++ b/courses/powershell/16_master_abschlussprojekt_cloud_ops_engine/index.html @@ -130,7 +130,7 @@ diff --git a/courses/rust/05_structs_und_impl_methoden/index.html b/courses/rust/05_structs_und_impl_methoden/index.html index 0220b59..4c3fef6 100644 --- a/courses/rust/05_structs_und_impl_methoden/index.html +++ b/courses/rust/05_structs_und_impl_methoden/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/rust/06_enums_und_option_monade/index.html b/courses/rust/06_enums_und_option_monade/index.html index db1d51b..62821e1 100644 --- a/courses/rust/06_enums_und_option_monade/index.html +++ b/courses/rust/06_enums_und_option_monade/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/rust/07_robustes_error_handling_mit_result/index.html b/courses/rust/07_robustes_error_handling_mit_result/index.html index 2889e61..bfcf56a 100644 --- a/courses/rust/07_robustes_error_handling_mit_result/index.html +++ b/courses/rust/07_robustes_error_handling_mit_result/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/rust/08_packages_crates_und_module/index.html b/courses/rust/08_packages_crates_und_module/index.html index 5f21c73..08ed1e2 100644 --- a/courses/rust/08_packages_crates_und_module/index.html +++ b/courses/rust/08_packages_crates_und_module/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/rust/14_shared_state_concurrency/index.html b/courses/rust/14_shared_state_concurrency/index.html index 2ba509f..2d9d316 100644 --- a/courses/rust/14_shared_state_concurrency/index.html +++ b/courses/rust/14_shared_state_concurrency/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/rust/15_automatisiertes_testing_mit_cargo_test/index.html b/courses/rust/15_automatisiertes_testing_mit_cargo_test/index.html index b9f5be1..eacefec 100644 --- a/courses/rust/15_automatisiertes_testing_mit_cargo_test/index.html +++ b/courses/rust/15_automatisiertes_testing_mit_cargo_test/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/courses/rust/16_master_abschlussprojekt_high_speed_cache/index.html b/courses/rust/16_master_abschlussprojekt_high_speed_cache/index.html index 10e20e1..d827229 100644 --- a/courses/rust/16_master_abschlussprojekt_high_speed_cache/index.html +++ b/courses/rust/16_master_abschlussprojekt_high_speed_cache/index.html @@ -15,7 +15,7 @@Bearbeite die Aufgaben im Startercode und teste deine Lösung direkt in der Web-IDE.
diff --git a/index.html b/index.html index d22859b..487be80 100644 --- a/index.html +++ b/index.html @@ -252,11 +252,11 @@ @@ -276,12 +276,12 @@ @@ -740,7 +740,7 @@ -