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; // 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 = ""; } else { card.style.display = "none"; } } } function toggleFavorite(element) { var img = element.querySelector("img"); var card = element.closest(".feature-card"); var cardId = card.id; if (img.src.endsWith("star.svg")) { img.src = "images/star-fill.svg"; card.classList.add("favorite"); localStorage.setItem(cardId, "favorite"); } else { img.src = "images/star.svg"; card.classList.remove("favorite"); localStorage.removeItem(cardId); } reorderCards(); updateFavoritesDropdown(); filterCards(); } function reorderCards() { var container = document.querySelector(".features-container"); var cards = Array.from(container.getElementsByClassName("feature-card")); cards.sort(function (a, b) { var aIsFavorite = localStorage.getItem(a.id) === "favorite"; var bIsFavorite = localStorage.getItem(b.id) === "favorite"; if (aIsFavorite && !bIsFavorite) { return -1; } if (!aIsFavorite && bIsFavorite) { return 1; } return 0; }); cards.forEach(function (card) { container.appendChild(card); }); } function initializeCards() { var cards = document.querySelectorAll(".feature-card"); cards.forEach(function (card) { var cardId = card.id; var img = card.querySelector(".favorite-icon img"); if (localStorage.getItem(cardId) === "favorite") { img.src = "images/star-fill.svg"; card.classList.add("favorite"); } }); reorderCards(); updateFavoritesDropdown(); filterCards(); } window.onload = initializeCards;