+
Geist bearbeiten
Admin Β· Ghost Editor
@@ -451,7 +451,7 @@ body::before{content:'';position:fixed;inset:0;background-image:radial-gradient(
Sicher?
-
+
@@ -846,7 +846,74 @@ function fmtTime(ts){if(!ts)return'β';const d=new Date(ts);return d.toLocaleDa
function escH(s){return String(s||'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"');}
/* ββ BOOT ββ */
-init();
+document.addEventListener('DOMContentLoaded', () => {
+
+ // ββ Mode pills ββ
+ document.getElementById('pill-viewer').addEventListener('click', () => setMode('viewer'));
+ const pu = document.getElementById('pill-user');
+ const pa = document.getElementById('pill-admin');
+ if (pu) pu.addEventListener('click', () => setMode('user'));
+ if (pa) pa.addEventListener('click', () => setMode('admin'));
+
+ // ββ Viewer tabs ββ
+ document.querySelectorAll('#vnav .nav-btn').forEach((btn, i) => {
+ const tabs = ['cards', 'cheat', 'guide'];
+ btn.addEventListener('click', () => switchTab(tabs[i]));
+ });
+
+ // ββ Auth ββ
+ const logoutBtn = document.querySelector('.btn-logout');
+ if (logoutBtn) logoutBtn.addEventListener('click', doLogout);
+
+ // ββ Admin actions ββ
+ const newGhost = document.getElementById('btn-new-ghost');
+ const exportBtn = document.getElementById('btn-export');
+ const addAdminBtn = document.getElementById('btn-add-admin');
+ if (newGhost) newGhost.addEventListener('click', () => openGhostForm(null));
+ if (exportBtn) exportBtn.addEventListener('click', exportGhosts);
+ if (addAdminBtn) addAdminBtn.addEventListener('click', addAdmin);
+
+ // ββ Community ββ
+ const submitBtn = document.getElementById('btn-submit-tip');
+ if (submitBtn) submitBtn.addEventListener('click', submitTip);
+
+ // ββ Ghost view modal ββ
+ document.getElementById('ghost-modal').addEventListener('click', (e) => {
+ if (e.target === document.getElementById('ghost-modal')) closeModal('ghost-modal');
+ });
+ document.getElementById('close-ghost-modal').addEventListener('click', () => closeModal('ghost-modal'));
+
+ // ββ Edit modal ββ
+ document.getElementById('edit-modal').addEventListener('click', (e) => {
+ if (e.target === document.getElementById('edit-modal')) closeModal('edit-modal');
+ });
+ document.getElementById('close-edit-modal').addEventListener('click', () => closeModal('edit-modal'));
+ document.getElementById('btn-cancel-edit').addEventListener('click', () => closeModal('edit-modal'));
+ document.getElementById('btn-add-tell').addEventListener('click', addTellRow);
+ document.getElementById('btn-save-ghost').addEventListener('click', saveGhost);
+
+ // ββ Confirm dialog ββ
+ document.querySelector('.confirm-bg .btn-sm').addEventListener('click', closeConfirm);
+ document.getElementById('confirm-ok').addEventListener('click', () => {
+ if (confirmCb) confirmCb();
+ closeConfirm();
+ });
+
+ // ββ Keyboard shortcuts ββ
+ document.addEventListener('keydown', e => {
+ if (e.key === 'Escape') {
+ closeModal('ghost-modal');
+ closeModal('edit-modal');
+ closeConfirm();
+ }
+ });
+
+ // ββ Guest button ββ
+ const guestBtn = document.getElementById('guest-btn');
+ if (guestBtn) guestBtn.addEventListener('click', guestMode);
+
+ init();
+});