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) {