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;