diff --git a/src/main/resources/static/js/homecard.js b/src/main/resources/static/js/homecard.js index 723f37176..6dddfa2bc 100644 --- a/src/main/resources/static/js/homecard.js +++ b/src/main/resources/static/js/homecard.js @@ -1,24 +1,56 @@ function filterCards() { var input = document.getElementById("searchBar"); var filter = input.value.toUpperCase(); - var cards = document.querySelectorAll(".feature-card"); - for (var i = 0; i < cards.length; i++) { - var card = cards[i]; - var title = card.querySelector("h5.card-title").innerText; - var text = card.querySelector("p.card-text").innerText; + let featureGroups = document.querySelectorAll(".feature-group"); + const collapsedGroups = getCollapsedGroups(); - // Get the navbar tags associated with the card - var navbarItem = document.querySelector(`a.dropdown-item[href="${card.id}"]`); - var navbarTags = navbarItem ? navbarItem.getAttribute("data-bs-tags") : ""; + for (const featureGroup of featureGroups) { + var cards = featureGroup.querySelectorAll(".feature-card"); - var content = title + " " + text + " " + navbarTags; + let groupMatchesFilter = false; + for (var i = 0; i < cards.length; i++) { + var card = cards[i]; + var title = card.querySelector("h5.card-title").innerText; + var text = card.querySelector("p.card-text").innerText; - if (content.toUpperCase().indexOf(filter) > -1) { - card.style.display = ""; - } else { - card.style.display = "none"; + // Get the navbar tags associated with the card + var navbarItem = document.querySelector(`a.dropdown-item[href="${card.id}"]`); + var navbarTags = navbarItem ? navbarItem.getAttribute("data-bs-tags") : ""; + + var content = title + " " + text + " " + navbarTags; + + if (content.toUpperCase().indexOf(filter) > -1) { + card.style.display = ""; + groupMatchesFilter = true; + } else { + card.style.display = "none"; + } } + + if (!groupMatchesFilter) { + featureGroup.style.display = "none"; + } else { + featureGroup.style.display = ""; + resetOrTemporarilyExpandGroup(featureGroup, filter, collapsedGroups); + } + } +} + +function getCollapsedGroups() { + return localStorage.getItem("collapsedGroups") ? JSON.parse(localStorage.getItem("collapsedGroups")) : []; +} + +function resetOrTemporarilyExpandGroup(featureGroup, filterKeywords = "", collapsedGroups = []) { + const shouldResetCollapse = filterKeywords.trim() === ""; + if (shouldResetCollapse) { + // Resetting the group's expand/collapse to its original state (as in collapsed groups) + const isCollapsed = collapsedGroups.indexOf(featureGroup.id) != -1; + expandCollapseToggle(featureGroup, !isCollapsed); + } else { + // Temporarily expands feature group without affecting the actual/stored collapsed groups + featureGroup.classList.remove("collapsed"); + featureGroup.querySelector(".header-expand-button").classList.remove("collapsed"); } }