From 8bd6a4e6b19bf3f52ceff062706f6e247a37c08a Mon Sep 17 00:00:00 2001 From: team3 Date: Wed, 2 Sep 2026 19:49:47 +0200 Subject: [PATCH] =?UTF-8?q?Zuf=C3=A4llige=20Reihenfolge=20als=20Standard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nach Bewertung sortiert sieht man immer dieselben zwanzig Filme. Zufällig kommt auch mal etwas aus der Mitte des Katalogs nach oben. Jeder Film bekommt dafür einen festen Wurf. Mit Math.random() direkt im Vergleich würde die Sortierung bei jedem Filtern neu durcheinanderspringen. Neu gemischt wird beim Neuladen der Seite. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ --- frontend/src/App.vue | 12 +++++++++++- frontend/src/components/FilterSidebar.vue | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 6dd5851..0a64c3e 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -15,7 +15,7 @@ const status = ref(null) const loading = ref(true) const error = ref('') const search = ref('') -const sort = ref('rating') +const sort = ref('random') const selected = ref(null) // Nach dem Neuladen soll derselbe Reiter offen sein const TAB_SCHLUESSEL = 'filmabend_tab' @@ -289,7 +289,17 @@ function score(movie) { ) } +// Ein fester Wurf je Film. Mit Math.random() im Vergleich springen die +// Karten bei jedem Filtern neu durcheinander. +const wuerfel = new Map() + +function zufall(movie) { + if (!wuerfel.has(movie.id)) wuerfel.set(movie.id, Math.random()) + return wuerfel.get(movie.id) +} + const SORTS = { + random: (a, b) => zufall(a) - zufall(b), rating: (a, b) => score(b) - score(a), newest: (a, b) => (b.year || 0) - (a.year || 0), oldest: (a, b) => (a.year || 9999) - (b.year || 9999), diff --git a/frontend/src/components/FilterSidebar.vue b/frontend/src/components/FilterSidebar.vue index 54d8207..8166f0b 100644 --- a/frontend/src/components/FilterSidebar.vue +++ b/frontend/src/components/FilterSidebar.vue @@ -13,7 +13,7 @@ const props = defineProps({ const emit = defineEmits(['toggle', 'all', 'reset']) const search = defineModel('search', { type: String, default: '' }) -const sort = defineModel('sort', { type: String, default: 'rating' }) +const sort = defineModel('sort', { type: String, default: 'random' }) const ranges = defineModel('ranges', { type: Object, default: () => ({}) }) // Auch ein verschobener Regler zählt als aktiver Filter @@ -47,6 +47,7 @@ function beschriften(regler) {