update
This commit is contained in:
58
frontend/src/composables/useEinstellungen.js
Normal file
58
frontend/src/composables/useEinstellungen.js
Normal file
@@ -0,0 +1,58 @@
|
||||
// Was die Seite sich über den Neustart hinaus merkt: Reiter, Ansicht,
|
||||
// der Schalter für gesehene Filme und der Hostmodus. Alles im localStorage,
|
||||
// alles je Browser.
|
||||
import { onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
|
||||
const TAB_IDS = [
|
||||
'netflix', 'canon', 'search', 'aehnlich', 'wheel', 'merkliste', 'watched',
|
||||
'wuensche', 'verwaltung', 'stream',
|
||||
]
|
||||
|
||||
function gemerkt(schluessel, standard) {
|
||||
const wert = ref(localStorage.getItem(schluessel) ?? standard)
|
||||
watch(wert, (neu) => localStorage.setItem(schluessel, neu))
|
||||
return wert
|
||||
}
|
||||
|
||||
export function useEinstellungen() {
|
||||
// Kompakt zeigt viele Karten nebeneinander, Details dafür mehr je Film
|
||||
const ansicht = gemerkt('filmabend_ansicht', 'kompakt')
|
||||
|
||||
// Schon gelaufene Filme stehen beim Aussuchen nur im Weg — ab Werk raus.
|
||||
// Wer sie sehen will, schaltet um; das bleibt über den Neustart erhalten.
|
||||
const ohneGesehene = ref(localStorage.getItem('filmabend_ohne_gesehene') !== 'aus')
|
||||
watch(ohneGesehene, (an) =>
|
||||
localStorage.setItem('filmabend_ohne_gesehene', an ? 'an' : 'aus')
|
||||
)
|
||||
|
||||
// Nach dem Neuladen soll derselbe Reiter offen sein
|
||||
const zuletzt = localStorage.getItem('filmabend_tab')
|
||||
const activeTab = ref(TAB_IDS.includes(zuletzt) ? zuletzt : 'netflix')
|
||||
watch(activeTab, (id) => localStorage.setItem('filmabend_tab', id))
|
||||
|
||||
// Wer den Abend leitet, darf ziehen und die Runde leeren. Kein Login —
|
||||
// die Tastenkombination reicht, die Seite steht ohnehin nur Freunden offen.
|
||||
const host = ref(localStorage.getItem('filmabend_host') === '1')
|
||||
|
||||
// Die Verwaltung verschwindet mit dem Hostmodus. Bleibt sie offen, sieht
|
||||
// ein Gast sie weiter, ohne dass ein Reiter markiert wäre.
|
||||
watch(host, (an) => {
|
||||
const weg = an ? 'merkliste' : 'verwaltung'
|
||||
if (activeTab.value === weg) activeTab.value = 'netflix'
|
||||
})
|
||||
|
||||
function tastatur(e) {
|
||||
// e.code statt e.key: mit drei Zusatztasten liefert das Layout sonst
|
||||
// je nach System ein anderes Zeichen
|
||||
if (e.ctrlKey && e.shiftKey && e.altKey && e.code === 'KeyS') {
|
||||
e.preventDefault()
|
||||
host.value = !host.value
|
||||
localStorage.setItem('filmabend_host', host.value ? '1' : '0')
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => window.addEventListener('keydown', tastatur))
|
||||
onUnmounted(() => window.removeEventListener('keydown', tastatur))
|
||||
|
||||
return { ansicht, ohneGesehene, activeTab, host }
|
||||
}
|
||||
Reference in New Issue
Block a user