59 lines
2.3 KiB
JavaScript
59 lines
2.3 KiB
JavaScript
// 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 }
|
|
}
|