diff --git a/app/templates/index.html b/app/templates/index.html index cbbee97..5ec10ba 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -781,6 +781,14 @@ +
@@ -930,6 +938,7 @@ let selectedTags = new Set(); let allTags = {}; let currentUser = null; // #43: Auth-State + let currentSort = localStorage.getItem('sortOrder') || 'score-desc'; // #43: Auth prüfen beim Load. Steuert ob "Jetzt prüfen" aktiv ist. async function initAuth() { @@ -955,7 +964,7 @@ loadAssessments(); // Liste neu rendern (Buttons deaktivieren) }; // Bestehende Liste neu rendern damit Buttons aktiv werden - if (allAssessments.length > 0) renderList(allAssessments); + if (allAssessments.length > 0) renderList(sortAssessments(allAssessments)); } else { authBtn.textContent = '🔑 Anmelden'; authBtn.style.color = ''; @@ -968,6 +977,29 @@ } } + // Sortierung (#100) + function setSortOrder(order) { + currentSort = order; + localStorage.setItem('sortOrder', order); + applyFilters(); + } + function sortAssessments(items) { + const sorted = [...items]; + switch (currentSort) { + case 'score-desc': return sorted.sort((a, b) => (b.gwoeScore || 0) - (a.gwoeScore || 0)); + case 'score-asc': return sorted.sort((a, b) => (a.gwoeScore || 0) - (b.gwoeScore || 0)); + case 'date-desc': return sorted.sort((a, b) => (b.datum || '').localeCompare(a.datum || '')); + case 'date-asc': return sorted.sort((a, b) => (a.datum || '').localeCompare(b.datum || '')); + case 'nr-desc': return sorted.sort((a, b) => { + const na = parseInt((a.drucksache || '').split('/')[1]) || 0; + const nb = parseInt((b.drucksache || '').split('/')[1]) || 0; + return nb - na; + }); + case 'title-asc': return sorted.sort((a, b) => (a.title || '').localeCompare(b.title || '', 'de')); + default: return sorted; + } + } + // Hamburger-Menü schließen bei Klick außerhalb document.addEventListener('click', (e) => { const menu = document.getElementById('hamburger-menu'); @@ -992,6 +1024,12 @@ // Load assessments on page load — localStorage-Auswahl wiederherstellen document.addEventListener('DOMContentLoaded', () => { initAuth(); // #43: Auth-State prüfen + // Sort-Auswahl aus localStorage wiederherstellen + const savedSort = localStorage.getItem('sortOrder'); + if (savedSort) { + document.getElementById('sort-select').value = savedSort; + currentSort = savedSort; + } const saved = localStorage.getItem('selectedBundesland'); const select = document.getElementById('bundesland-select'); if (saved) { @@ -1155,7 +1193,7 @@ const resp = await fetch(url); allAssessments = await resp.json(); updateStats(); - renderList(allAssessments); + renderList(sortAssessments(allAssessments)); buildParteienFilter(); buildTagCloud(); } catch (e) { @@ -1749,7 +1787,7 @@ ); } - renderList(filtered); + renderList(sortAssessments(filtered)); } function setScoreFilter(filter, btn) { @@ -1779,7 +1817,7 @@ ); } - renderList(filtered); + renderList(sortAssessments(filtered)); } function applyScoreFilter(items, filter) {