bucketlist added

This commit is contained in:
esef committed 2026-07-20 22:42:55 +03:00
1 parent 97841f3f24
commit 650211e8ab
7 files changed
+240 -15

No files matched your search

+60
View File
@@ -0,0 +1,60 @@
// 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 = '<p class="bl-empty">Could not load.</p>';
});
function render(items) {
if (items.length === 0) {
listEl.innerHTML = '<p class="bl-empty">Nothing here yet.</p>';
return;
}
listEl.innerHTML = items.map(item =>
'<div class="bl-item' + (item.done ? ' bl-done' : '') + '">' +
'<div class="bl-title">' + esc(item.title) + '</div>' +
(item.date ? '<div class="bl-date">' + esc(item.date) + '</div>' : '') +
(item.description ? '<div class="bl-desc">' + esc(item.description) + '</div>' : '') +
'</div>'
).join("");
}
function esc(s) {
if (!s) return "";
return String(s).replace(/&/g,"&amp;").replace(/</g,"&lt;")
.replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;");
}
});
+6 -6
View File
@@ -3,14 +3,14 @@ document.addEventListener('DOMContentLoaded', () => {
const tabs = document.querySelectorAll('.tab-content');
const mainVideo = document.getElementById('background-video');
const calVideo = document.getElementById('calendar-background-video');
const czVideo = document.getElementById('czscores-background-video');
const bucketlistVideo = document.getElementById('bucketlist-background-video');
// ── Map URL path → tab id ──────────────────────────────
function pathToTab(path) {
const slug = path.replace(/^\/+|\/+$/g, '') || 'about';
const valid = ['about', 'gallery', 'czscores', 'yuukabot', 'calendar'];
const valid = ['about', 'gallery', 'bucketlist', 'yuukabot', 'calendar'];
// backward compat: old /ahmet links
if (slug === 'ahmet') return 'czscores';
if (slug === 'ahmet') return 'bucketlist';
return valid.includes(slug) ? slug : 'about';
}
@@ -24,12 +24,12 @@ document.addEventListener('DOMContentLoaded', () => {
// map tab id → its dedicated video element (null = use main)
const tabVideos = {
calendar: calVideo,
czscores: czVideo
bucketlist: bucketlistVideo
};
function setBgForTab(tabId) {
// Hide + pause ALL videos first
[mainVideo, calVideo, czVideo].forEach(v => {
[mainVideo, calVideo, bucketlistVideo].forEach(v => {
if (v) { v.style.display = 'none'; v.pause(); }
});
@@ -46,7 +46,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Top-bar theme toggle
if (topLine) {
topLine.classList.toggle('cal-theme', tabId === 'calendar');
topLine.classList.toggle('czscores-theme', tabId === 'czscores');
topLine.classList.toggle('bucketlist-theme', tabId === 'bucketlist');
}
}