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:
@@ -15,7 +15,7 @@ const status = ref(null)
|
|||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const error = ref('')
|
const error = ref('')
|
||||||
const search = ref('')
|
const search = ref('')
|
||||||
const sort = ref('rating')
|
const sort = ref('random')
|
||||||
const selected = ref(null)
|
const selected = ref(null)
|
||||||
// Nach dem Neuladen soll derselbe Reiter offen sein
|
// Nach dem Neuladen soll derselbe Reiter offen sein
|
||||||
const TAB_SCHLUESSEL = 'filmabend_tab'
|
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 = {
|
const SORTS = {
|
||||||
|
random: (a, b) => zufall(a) - zufall(b),
|
||||||
rating: (a, b) => score(b) - score(a),
|
rating: (a, b) => score(b) - score(a),
|
||||||
newest: (a, b) => (b.year || 0) - (a.year || 0),
|
newest: (a, b) => (b.year || 0) - (a.year || 0),
|
||||||
oldest: (a, b) => (a.year || 9999) - (b.year || 9999),
|
oldest: (a, b) => (a.year || 9999) - (b.year || 9999),
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const props = defineProps({
|
|||||||
const emit = defineEmits(['toggle', 'all', 'reset'])
|
const emit = defineEmits(['toggle', 'all', 'reset'])
|
||||||
|
|
||||||
const search = defineModel('search', { type: String, default: '' })
|
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: () => ({}) })
|
const ranges = defineModel('ranges', { type: Object, default: () => ({}) })
|
||||||
|
|
||||||
// Auch ein verschobener Regler zählt als aktiver Filter
|
// Auch ein verschobener Regler zählt als aktiver Filter
|
||||||
@@ -47,6 +47,7 @@ function beschriften(regler) {
|
|||||||
<div class="controls">
|
<div class="controls">
|
||||||
<input v-model="search" type="search" placeholder="Titel suchen…" />
|
<input v-model="search" type="search" placeholder="Titel suchen…" />
|
||||||
<select v-model="sort">
|
<select v-model="sort">
|
||||||
|
<option value="random">Zufällig</option>
|
||||||
<option value="rating">Beste Bewertung</option>
|
<option value="rating">Beste Bewertung</option>
|
||||||
<option value="newest">Neueste zuerst</option>
|
<option value="newest">Neueste zuerst</option>
|
||||||
<option value="oldest">Älteste zuerst</option>
|
<option value="oldest">Älteste zuerst</option>
|
||||||
|
|||||||
Reference in New Issue
Block a user