| 1234567891011121314151617181920212223242526272829303132333435 |
- import Alpine from 'alpinejs';
- import 'htmx.org';
- // Dark mode toggle. Layout's inline <head> script handles the FOUC-free
- // initial paint; this just wires the toggle button.
- function applyTheme(theme) {
- if (theme === 'dark') {
- document.documentElement.classList.add('dark');
- } else {
- document.documentElement.classList.remove('dark');
- }
- try {
- localStorage.setItem('irdb-theme', theme);
- } catch (e) {
- /* ignore */
- }
- }
- document.addEventListener('click', (e) => {
- const target = e.target.closest('[data-theme-toggle]');
- if (!target) return;
- const next = document.documentElement.classList.contains('dark') ? 'light' : 'dark';
- applyTheme(next);
- });
- // htmx: send the per-session CSRF token on every state-changing request.
- document.body.addEventListener('htmx:configRequest', (e) => {
- const meta = document.querySelector('meta[name="csrf-token"]');
- if (meta && meta.content) {
- e.detail.headers['X-CSRF-Token'] = meta.content;
- }
- });
- window.Alpine = Alpine;
- Alpine.start();
|