Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save apsolut/f16921ae78fd4df288e7c0c5b20d96f4 to your computer and use it in GitHub Desktop.
Save apsolut/f16921ae78fd4df288e7c0c5b20d96f4 to your computer and use it in GitHub Desktop.
Not the best, when using mouse going over disabled ones (disabled - ones that have zero items in list)
document.addEventListener('DOMContentLoaded', function() {
const eventList = document.querySelector('.event-list');
const searchInput = document.getElementById('searchInput');
const eventTypeFilter = document.getElementById('eventTypeFilter');
const industryFilter = document.getElementById('industryFilter');
const countryFilter = document.getElementById('countryFilter');
const toggleFiltersBtn = document.getElementById('toggleFilters');
const filtersContainer = document.getElementById('filters');
function getFilterCounts() {
const eventItems = eventList.querySelectorAll('.event-item');
const counts = {
eventType: {},
industry: {},
country: {}
};
eventItems.forEach(item => {
const type = item.dataset.eventType;
const industry = item.dataset.eventIndustry;
const country = item.dataset.eventCountry;
counts.eventType[type] = (counts.eventType[type] || 0) + 1;
counts.industry[industry] = (counts.industry[industry] || 0) + 1;
counts.country[country] = (counts.country[country] || 0) + 1;
});
return counts;
}
function updateFilterOptions() {
const counts = getFilterCounts();
updateSelectOptions(eventTypeFilter, counts.eventType);
updateSelectOptions(industryFilter, counts.industry);
updateSelectOptions(countryFilter, counts.country);
}
function updateSelectOptions(select, counts) {
Array.from(select.options).forEach(option => {
if (option.value !== 'All') {
const count = counts[option.value] || 0;
option.textContent = `${option.value} (${count})`;
option.disabled = count === 0;
}
});
}
function filterEvents() {
const searchTerm = searchInput.value.toLowerCase();
const eventType = eventTypeFilter.value;
const industry = industryFilter.value;
const country = countryFilter.value;
const eventItems = eventList.querySelectorAll('.event-item');
eventItems.forEach(item => {
const title = item.querySelector('.event-title').textContent.toLowerCase();
const description = item.querySelector('.event-description').textContent.toLowerCase();
const itemEventType = (item.dataset.eventType || '').replace('⁠', '').trim();
const itemIndustry = (item.dataset.eventIndustry || '');
const itemCountry = (item.dataset.eventCountry || '');
const matchesSearch = title.includes(searchTerm) || description.includes(searchTerm);
const matchesEventType = eventType === 'All' || itemEventType === eventType;
const matchesIndustry = industry === 'All' || itemIndustry === industry;
const matchesCountry = country === 'All' || itemCountry === country;
if (matchesSearch && matchesEventType && matchesIndustry && matchesCountry) {
item.style.display = '';
} else {
item.style.display = 'none';
}
});
updateFilterOptions();
updateNoResultsMessage();
}
function updateNoResultsMessage() {
const visibleEvents = eventList.querySelectorAll('.event-item:not([style*="display: none"])');
let noResultsMessage = document.getElementById('noResultsMessage');
if (visibleEvents.length === 0) {
if (!noResultsMessage) {
let eventListMsg = document.querySelector('.event-list');
noResultsMessage = document.createElement('p');
noResultsMessage.id = 'noResultsMessage';
noResultsMessage.textContent = eventListMsg.getAttribute('data-event-noevents') || 'No events found matching your criteria.';
eventList.appendChild(noResultsMessage);
}
} else if (noResultsMessage) {
noResultsMessage.remove();
}
}
function toggleFilters() {
filtersContainer.style.display = filtersContainer.style.display === 'none' ? 'block' : 'none';
}
searchInput.addEventListener('input', filterEvents);
eventTypeFilter.addEventListener('change', filterEvents);
industryFilter.addEventListener('change', filterEvents);
countryFilter.addEventListener('change', filterEvents);
toggleFiltersBtn.addEventListener('click', toggleFilters);
// Initial filter to handle any default values and set up filter options
updateFilterOptions();
filterEvents();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment