-
Analysiere Muster
-
Berechne surjective Mappings in Rust...
+
+
+
+
Algorithmus läuft
+
Berechne Kombinationen...
@@ -420,35 +443,56 @@
// Initialize Icons
lucide.createIcons();
- themeSelect.addEventListener('change', (e) => {
- document.documentElement.setAttribute('data-theme', e.target.value);
- localStorage.setItem('ayto-theme', e.target.value);
- });
-
- const savedTheme = localStorage.getItem('ayto-theme');
- if (savedTheme) {
- document.documentElement.setAttribute('data-theme', savedTheme);
- themeSelect.value = savedTheme;
+ // --- Cookie Theme Manager ---
+ function setCookie(name, value, days) {
+ let expires = "";
+ if (days) {
+ let date = new Date();
+ date.setTime(date.getTime() + (days*24*60*60*1000));
+ expires = "; expires=" + date.toUTCString();
+ }
+ document.cookie = name + "=" + (value || "") + expires + "; path=/";
+ }
+
+ function getCookie(name) {
+ let nameEQ = name + "=";
+ let ca = document.cookie.split(';');
+ for(let i=0; i < ca.length; i++) {
+ let c = ca[i];
+ while (c.charAt(0)==' ') c = c.substring(1,c.length);
+ if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+ }
+ return null;
}
+ function applyTheme(theme) {
+ document.documentElement.setAttribute('data-theme', theme);
+ themeSelect.value = theme;
+ setCookie('ayto-theme', theme, 365); // Save for 1 year
+ }
+
+ themeSelect.addEventListener('change', (e) => applyTheme(e.target.value));
+
+ // Load saved theme on boot
+ const savedTheme = getCookie('ayto-theme') || 'ayto';
+ applyTheme(savedTheme);
+
+ // --- UI Feedback ---
function showLoading() { loadingSpinner.classList.remove("hidden"); }
function hideLoading() { loadingSpinner.classList.add("hidden"); }
function showError(message) {
errorText.textContent = message;
errorMessage.classList.remove("hidden");
- errorMessage.style.opacity = "1";
- setTimeout(() => {
- errorMessage.style.opacity = "0";
- setTimeout(() => errorMessage.classList.add("hidden"), 500);
- }, 5000);
+ setTimeout(() => errorMessage.classList.add("hidden"), 5000);
}
+ // --- Core Logic ---
function handleSetupContestants() {
const g1 = g1NamesText.value.split('\n').map(s => s.trim()).filter(s => s.length > 0);
const g2 = g2NamesText.value.split('\n').map(s => s.trim()).filter(s => s.length > 0);
- if (g1.length === 0 || g2.length === 0) return showError("Bitte gib die Namen der Teilnehmer ein.");
+ if (g1.length === 0 || g2.length === 0) return showError("Bitte Namen für beide Gruppen eintragen.");
if (g1.length > g2.length) return showError("Gruppe A darf nicht größer sein als Gruppe B.");
group1Names = g1;
@@ -464,11 +508,14 @@
initialPossibilitiesText.textContent = `${group1Names.length} in Gruppe A • ${group2Names.length} in Gruppe B`;
inputSections.classList.remove("hidden");
+ inputSections.classList.add("flex");
statusDashboard.classList.remove("hidden");
gridSection.classList.remove("hidden");
saveButton.disabled = false;
lucide.createIcons();
+
+ handleCalculate(); // Auto-calculate on start
return true;
}
@@ -480,10 +527,10 @@
function populateCeremonyPairBuilder() {
ceremonyPairsContainer.innerHTML = group1Names.map(name => `
-
-
${name}
-