Zufällige Reihenfolge als Standard

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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
This commit is contained in:
team3
2026-09-02 19:49:47 +02:00
parent 7cf7144d6d
commit 8bd6a4e6b1
2 changed files with 13 additions and 2 deletions

View File

@@ -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),

View File

@@ -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) {
<div class="controls">
<input v-model="search" type="search" placeholder="Titel suchen…" />
<select v-model="sort">
<option value="random">Zufällig</option>
<option value="rating">Beste Bewertung</option>
<option value="newest">Neueste zuerst</option>
<option value="oldest">Älteste zuerst</option>