I Dream Of Jeannie Archive.org ✦

function filterItems() { let filtered = [...masterItems]; // apply type filter if (currentFilter !== "all") { filtered = filtered.filter(item => item.type === currentFilter); } // apply search text if (currentSearch.trim() !== "") { const searchLower = currentSearch.trim().toLowerCase(); filtered = filtered.filter(item => item.searchText.includes(searchLower)); } return filtered; }

return ` <div class="archive-card" data-id="${item.identifier}"> <div class="card-thumb"> ${thumbHtml} </div> <div class="card-content"> <div class="type-tag">${typeLabel}</div> <div class="card-title"> ${escapeHtml(item.title)} <span class="year-badge">${item.year}</span> </div> <div class="card-desc">${escapeHtml(item.description)}</div> <div class="card-actions"> <a href="${item.externalUrl}" target="_blank" rel="noopener noreferrer" class="btn-archive"> 📀 View on Archive.org → </a> <span class="external-link">open media player</span> </div> </div> </div> `; }).join('');

<div id="cardsContainer" class="items-grid"> <div class="loading-state">✨ summoning Jeannie's bottle... fetching from archive.org metadata ✨</div> </div> <footer> 🧞‍♀️ Curated collection of “I Dream of Jeannie” related items from the Internet Archive’s open library. Click any button to watch or read original archived media. All content belongs to respective rights holders. </footer> </div> i dream of jeannie archive.org

/* stats line */ .stats { display: flex; justify-content: space-between; margin-bottom: 1.5rem; font-size: 0.85rem; color: #bfd1cf; padding: 0 0.2rem; }

function setActiveFilterButton(type) { filterBtns.forEach(btn => { const btnType = btn.getAttribute("data-type"); if (btnType === type) { btn.classList.add("active"); } else { btn.classList.remove("active"); } }); } function filterItems() { let filtered = [

// build initial dataset with enriched thumb url let masterItems = JEANNIE_ARCHIVE_ITEMS.map(item => ({ ...item, thumbUrl: getThumbnailUrl(item), // lower case fields for search searchText: `${item.title} ${item.description} ${item.year} ${item.type}`.toLowerCase() }));

if (filtered.length === 0) { container.innerHTML = `<div class="no-results">🧞 No Jeannie treasures match — try another search or clear filter! “Master, say the magic word!” 🧞</div>`; return; } All content belongs to respective rights holders

// simple XSS escape function escapeHtml(str) { return str.replace(/[&<>]/g, function(m) { if (m === '&') return '&'; if (m === '<') return '<'; if (m === '>') return '>'; return m; }).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(c) { return c; }); }

/* main container */ .archive-feature { max-width: 1400px; margin: 0 auto; background: rgba(10, 18, 22, 0.65); backdrop-filter: blur(2px); border-radius: 3rem; padding: 2rem 2rem 2.5rem; box-shadow: 0 25px 45px -12px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.05); border: 1px solid rgba(255,215,150,0.2); }