import { Sidebar } from './js/sidebar'; import './scss/app.scss' document.addEventListener('DOMContentLoaded', function() { initSearch(); initSidebar(); initToggle(); }); function initToggle() { const toggle = document.querySelector('#filterdays-js'); if(toggle) { toggle.addEventListener('click', () => { toggle.ariaPressed = (toggle.ariaPressed === 'true') ? 'false' : 'true'; const daysNoTrips = document.querySelectorAll('div[data-trips="0"]'); Array.prototype.forEach.call(daysNoTrips, (day: HTMLElement) => { day.classList.toggle('hidden'); }); }); } const coxToggle = document.querySelector('#filtertrips-js'); if(coxToggle) { coxToggle.addEventListener('click', () => { coxToggle.ariaPressed = (coxToggle.ariaPressed === 'true') ? 'false' : 'true'; const noCoxNeeded = document.querySelectorAll('div[data-coxneeded="false"]'); Array.prototype.forEach.call(noCoxNeeded, (notNeeded: HTMLElement) => { notNeeded.classList.toggle('hidden'); }); }); } } function initSearch() { const input = document.querySelector('#filter-js'); if(input) { filterElements(input.value); input.addEventListener('input', () => { filterElements(input.value); }); } } function filterElements(input: string) { const elements = document.querySelectorAll('form[data-filterable="true"]'); let resultWrapper = document.querySelector('#filter-result-js'), amountShownElements = 0; Array.prototype.forEach.call(elements, (element: HTMLElement) => { // set both strings (input & dataset filter) to lowercase to not be case sensitive let filterString = element.dataset.filter?.toLocaleLowerCase(); // bulk hide all elements element.style.display = 'none'; // show if input matches if(filterString?.includes(input.toLocaleLowerCase())) { element.style.display = 'flex'; amountShownElements ++; } }); if(resultWrapper) { resultWrapper.innerHTML = (amountShownElements === 0 ? 'Kein Ergebnis gefunden' : '' + amountShownElements + '' + (amountShownElements > 1 ? ' Ergebnisse' : ' Ergebnis') + ' gefunden'); } } function initSidebar() { const sidebarTrigger = >document.querySelectorAll('[data-trigger]'); if(sidebarTrigger) { Array.prototype.forEach.call(sidebarTrigger, (triggerElement: HTMLElement) => { if(triggerElement.dataset.trigger) { const sidebar = new Sidebar(triggerElement.dataset.trigger); triggerElement.addEventListener('click', () => { if(triggerElement.dataset.trigger === 'addTrip') { initTripSidebar(triggerElement); } sidebar.toggle(); }); } }); } } function initTripSidebar(triggerElement: HTMLElement) { const sidebarElement = document.querySelector('#addTrip'); if(sidebarElement && triggerElement.dataset.form && triggerElement.dataset.header) { let form = document.querySelector(triggerElement.dataset.form); let formElement = form.cloneNode(true); let formContainerElement = sidebarElement.querySelector('.form-js'); if(formContainerElement) { formContainerElement.innerHTML = ''; formContainerElement.append(formElement); } if(triggerElement.dataset.day) { let hiddenElement = formElement.querySelector('.day-js'); if(hiddenElement) { hiddenElement.value = triggerElement.dataset.day; } } let headerElement = sidebarElement.querySelector('.header-js'); if(headerElement) { headerElement.innerHTML = triggerElement.dataset.header; } } }