rowt/frontend/main.ts

88 lines
2.8 KiB
TypeScript
Raw Normal View History

2023-04-06 13:15:40 +02:00
import { Sidebar } from './js/sidebar';
import './scss/app.scss'
document.addEventListener('DOMContentLoaded', function() {
initSearch();
2023-04-06 13:15:40 +02:00
initSidebar();
});
function initSearch() {
const input = <HTMLInputElement>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 = <HTMLElement>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' : '<strong>' + amountShownElements + '</strong>' + (amountShownElements > 1 ? ' Ergebnisse' : ' Ergebnis') + ' gefunden');
}
}
2023-04-06 13:15:40 +02:00
function initSidebar() {
const sidebarTrigger = <NodeListOf<HTMLElement>>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);
}
2023-04-06 13:15:40 +02:00
sidebar.toggle();
});
}
});
}
}
function initTripSidebar(triggerElement: HTMLElement) {
const sidebarElement = <HTMLElement>document.querySelector('#addTrip');
if(sidebarElement && triggerElement.dataset.form && triggerElement.dataset.header) {
2023-04-07 11:45:12 +02:00
let form = <HTMLElement>document.querySelector(triggerElement.dataset.form);
let formElement = <HTMLElement>form.cloneNode(true);
let formContainerElement = <HTMLElement>sidebarElement.querySelector('.form-js');
if(formContainerElement) {
formContainerElement.innerHTML = '';
formContainerElement.append(formElement);
}
if(triggerElement.dataset.day) {
let hiddenElement = <HTMLInputElement>formElement.querySelector('.day-js');
if(hiddenElement) {
hiddenElement.value = triggerElement.dataset.day;
}
}
let headerElement = sidebarElement.querySelector('.header-js');
if(headerElement) {
headerElement.innerHTML = triggerElement.dataset.header;
}
}
}