document.getElementById('filter_status')?.addEventListener('change', filterLogs); document.getElementById('filter_threat')?.addEventListener('change', filterLogs); document.getElementById('filter_method')?.addEventListener('change', filterLogs); document.getElementById('filter_threats_only')?.addEventListener('change', filterLogs); function filterLogs() { const statusFilter = document.getElementById('filter_status')?.value; const threatFilter = document.getElementById('filter_threat')?.value; const methodFilter = document.getElementById('filter_method')?.value; const threatsOnly = document.getElementById('filter_threats_only')?.checked; document.querySelectorAll('.log-row').forEach(row => { let show = true; if (statusFilter && row.dataset.status !== statusFilter) show = false; if (threatFilter && row.dataset.threat !== threatFilter) show = false; if (methodFilter && row.dataset.method !== methodFilter) show = false; if (threatsOnly && row.dataset.threatCount === '0') show = false; row.style.display = show ? '' : 'none'; }); }