// Bucketlist tab — real-time Firestore list const BL_FB_CONFIG = { apiKey: "AIzaSyDuSjEGEKx5FnWYnQq8f_owbpYRBRrl5x0", authDomain: "esef-514bf.firebaseapp.com", projectId: "esef-514bf", storageBucket: "esef-514bf.firebasestorage.app", messagingSenderId: "353969651290", appId: "1:353969651290:web:41e3aaf8e54c743702a263" }; document.addEventListener("DOMContentLoaded", () => { const tab = document.getElementById("bucketlist"); if (!tab) return; if (!firebase.apps.length) firebase.initializeApp(BL_FB_CONFIG); const db = firebase.firestore(); const listEl = document.getElementById("bl-list"); if (!listEl) return; db.collection("bucketlist_items").onSnapshot(snap => { const items = []; snap.forEach(doc => { const d = doc.data(); items.push({ id: doc.id, title: d.title || "", description: d.description || "", date: d.date || "", utc: d.utc || "", done: d.done || false }); }); items.sort((a, b) => (a.utc || "").localeCompare(b.utc || "")); render(items); }, () => { if (listEl) listEl.innerHTML = '

Could not load.

'; }); function render(items) { if (items.length === 0) { listEl.innerHTML = '

Nothing here yet.

'; return; } listEl.innerHTML = items.map(item => '
' + '
' + esc(item.title) + '
' + (item.date ? '
' + esc(item.date) + '
' : '') + (item.description ? '
' + esc(item.description) + '
' : '') + '
' ).join(""); } function esc(s) { if (!s) return ""; return String(s).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"); } });