This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BreakPilot Dev 19855efacc
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
feat: BreakPilot PWA - Full codebase (clean push without large binaries)
All services: admin-v2, studio-v2, website, ai-compliance-sdk,
consent-service, klausur-service, voice-service, and infrastructure.
Large PDFs and compiled binaries excluded via .gitignore.
2026-02-11 13:25:58 +01:00

106 lines
2.6 KiB
JavaScript

/**
* BreakPilot Studio - Theme Module
*
* Dark/Light Mode Toggle-Funktionalität:
* - Speichert Präferenz in localStorage
* - Unterstützt data-theme Attribut auf <html>
*
* Refactored: 2026-01-19
*/
// Initialisiere Theme sofort beim Laden (IIFE)
(function initializeTheme() {
const savedTheme = localStorage.getItem('bp-theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
console.log('Initial theme set to:', savedTheme);
})();
/**
* Holt das aktuelle Theme
* @returns {string} - 'dark' oder 'light'
*/
export function getCurrentTheme() {
return document.documentElement.getAttribute('data-theme') || 'dark';
}
/**
* Setzt das Theme
* @param {string} theme - 'dark' oder 'light'
*/
export function setTheme(theme) {
if (theme !== 'dark' && theme !== 'light') {
console.warn(`Invalid theme: ${theme}. Use 'dark' or 'light'.`);
return;
}
document.documentElement.setAttribute('data-theme', theme);
localStorage.setItem('bp-theme', theme);
// Custom Event für andere Module
window.dispatchEvent(new CustomEvent('themeChanged', {
detail: { theme }
}));
}
/**
* Wechselt zwischen Dark und Light Mode
* @returns {string} - Das neue Theme
*/
export function toggleTheme() {
const current = getCurrentTheme();
const newTheme = current === 'dark' ? 'light' : 'dark';
setTheme(newTheme);
return newTheme;
}
/**
* Initialisiert den Theme-Toggle-Button
* Sucht nach Elements mit IDs: theme-toggle, theme-icon, theme-label
*/
export function initThemeToggle() {
const toggle = document.getElementById('theme-toggle');
const icon = document.getElementById('theme-icon');
const label = document.getElementById('theme-label');
if (!toggle || !icon || !label) {
console.warn('Theme toggle elements not found (theme-toggle, theme-icon, theme-label)');
return;
}
function updateToggleUI(theme) {
if (theme === 'light') {
icon.textContent = '☀️';
label.textContent = 'Light';
} else {
icon.textContent = '🌙';
label.textContent = 'Dark';
}
}
// Initialize UI based on current theme
updateToggleUI(getCurrentTheme());
// Click-Handler
toggle.addEventListener('click', function() {
console.log('Theme toggle clicked');
const newTheme = toggleTheme();
console.log('Switched to:', newTheme);
updateToggleUI(newTheme);
});
}
/**
* Prüft ob Dark Mode aktiv ist
* @returns {boolean}
*/
export function isDarkMode() {
return getCurrentTheme() === 'dark';
}
/**
* Prüft ob Light Mode aktiv ist
* @returns {boolean}
*/
export function isLightMode() {
return getCurrentTheme() === 'light';
}