/** * Home Filter — filtra disciplinas conforme você digita * Só funciona quando há itens [data-filterable] na página */ document.addEventListener('DOMContentLoaded', () => { const items = document.querySelectorAll('[data-filterable]'); if (!items.length) return; // Cria campo de busca const wrap = document.createElement('div'); wrap.className = 'filter-container'; wrap.innerHTML = ` `; // Insere antes do disc-grid dentro do
const grid = document.querySelector('.disc-grid'); if (grid) { grid.parentNode.insertBefore(wrap, grid); } else { const main = document.querySelector('main'); if (main) main.insertBefore(wrap, main.firstChild); } const input = document.getElementById('home-filter'); const count = document.getElementById('filter-count'); // Normaliza texto para comparação (remove acentos, maiúsculas) function normalize(str) { return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase(); } input.addEventListener('input', () => { const q = normalize(input.value.trim()); let visible = 0; items.forEach(item => { const text = normalize(item.textContent); const match = !q || text.includes(q); item.style.display = match ? '' : 'none'; if (match) visible++; }); count.textContent = q ? `${visible} resultado${visible !== 1 ? 's' : ''}` : ''; }); // Esc limpa e desfoca input.addEventListener('keydown', e => { if (e.key === 'Escape') { input.value = ''; input.dispatchEvent(new Event('input')); input.blur(); } }); // Foco automático na home com / ou Ctrl+K document.addEventListener('keydown', e => { if ((e.key === '/' || (e.ctrlKey && e.key === 'k')) && document.activeElement !== input) { e.preventDefault(); input.focus(); } }); });