Files
autoban/static/js/check.js
2026-01-01 02:13:34 +01:00

60 lines
1.7 KiB
JavaScript

(function () {
'use strict';
const $ = (sel, root = document) => root.querySelector(sel);
const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel));
function bindErrorsFilter() {
const search = $('#errors-search');
if (!search) return;
const items = $$('#errorsAccordion .accordion-item');
const apply = () => {
const q = search.value.toLowerCase().trim();
items.forEach(it => {
const text = it.textContent.toLowerCase();
it.style.display = q && !text.includes(q) ? 'none' : '';
});
};
search.addEventListener('input', apply);
apply();
}
function bindEndpointsFilter() {
const tbody = $('#endpoints-tbody');
if (!tbody) return;
const input = $('#endpoints-search');
const empty = $('#endpoints-empty');
const applyFilter = () => {
const q = (input?.value || '').toLowerCase().trim();
let visible = 0;
$$('#endpoints-tbody tr').forEach(tr => {
const txt = tr.textContent.toLowerCase();
const show = !q || txt.includes(q);
tr.style.display = show ? '' : 'none';
if (show) visible++;
});
empty?.classList.toggle('d-none', visible !== 0);
};
input?.addEventListener('input', applyFilter);
applyFilter();
}
function init() {
bindErrorsFilter();
bindEndpointsFilter();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();