30 lines
1.2 KiB
JavaScript
30 lines
1.2 KiB
JavaScript
(() => {
|
|
const search = document.getElementById('catalogue-search');
|
|
const grid = document.getElementById('catalogue-test-grid');
|
|
if (!search || !grid) return;
|
|
const cards = [...grid.querySelectorAll('.catalogue-compact-card')];
|
|
const buttons = [...document.querySelectorAll('.catalogue-part-filters [data-part]')];
|
|
const empty = document.getElementById('catalogue-search-empty');
|
|
let part = 'all';
|
|
const update = () => {
|
|
const query = search.value.trim().toLocaleLowerCase();
|
|
let visible = 0;
|
|
cards.forEach((card) => {
|
|
const matches = (!query || card.dataset.title.includes(query)) && (part === 'all' || card.dataset.part === part);
|
|
card.hidden = !matches;
|
|
if (matches) visible += 1;
|
|
});
|
|
empty.hidden = visible !== 0;
|
|
};
|
|
search.addEventListener('input', update);
|
|
buttons.forEach((button) => button.addEventListener('click', () => {
|
|
part = button.dataset.part;
|
|
buttons.forEach((item) => {
|
|
const active = item === button;
|
|
item.classList.toggle('is-active', active);
|
|
item.setAttribute('aria-pressed', active ? 'true' : 'false');
|
|
});
|
|
update();
|
|
}));
|
|
})();
|