let searchTimeout; const searchInput = document.getElementById('search-input'); const searchDropdown = document.getElementById('search-dropdown'); if (searchInput) { searchInput.addEventListener('input', function(e) { clearTimeout(searchTimeout); const query = e.target.value.trim(); if (query.length < 2) { searchDropdown.innerHTML = ''; return; } searchTimeout = setTimeout(() => { fetch('/api/search-quick?q=' + encodeURIComponent(query)) .then(res => res.json()) .then(results => { if (!results || results.length === 0) { searchDropdown.innerHTML = ''; return; } let html = '
'; html += '
Anime
'; results.forEach(r => { html += ` ${r.image ? `${r.title}` : '
no image
'}
${escapeHtml(r.title)}
${r.type}
`; }); html += `View all results for ${escapeHtml(query)}`; html += '
'; searchDropdown.innerHTML = html; }) .catch(err => console.error('Search error:', err)); }, 300); }); searchInput.addEventListener('blur', () => { setTimeout(() => { searchDropdown.innerHTML = ''; }, 200); }); document.addEventListener('click', (e) => { if (!e.target.closest('.header-search-wrapper')) { searchDropdown.innerHTML = ''; } }); } function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; }