gtfs-to-html
Version:
Build human readable transit timetables as HTML, PDF or CSV from GTFS
87 lines (73 loc) • 2.35 kB
JavaScript
/* global toggleMap */
function showSelectedTimetable() {
const timetables = document.querySelectorAll('.timetable');
if (timetables.length === 1) {
showTimetable(timetables[0].dataset.timetableId);
return;
}
document
.querySelectorAll('#day_list_selector input[name="dayList"]')
.forEach((element) => {
const label = element.closest('label');
if (label) {
label.classList.toggle('btn-active', element.checked);
label.classList.toggle('btn-inactive', !element.checked);
}
});
document
.querySelectorAll('#direction_name_selector input[name="directionId"]')
.forEach((element) => {
const label = element.closest('label');
if (label) {
label.classList.toggle('btn-active', element.checked);
label.classList.toggle('btn-inactive', !element.checked);
}
});
const dayListInput = document.querySelector(
'#day_list_selector input[name="dayList"]:checked',
);
const dayList = dayListInput ? dayListInput.value : null;
const directionIdInput = document.querySelector(
'#direction_name_selector input[name="directionId"]:checked',
);
const directionId = directionIdInput ? directionIdInput.value : null;
timetables.forEach((timetable) => {
timetable.style.display = 'none';
});
const selectedTimetable = document.querySelector(
`.timetable[data-day-list="${dayList}"][data-direction-id="${directionId}"]`,
);
if (selectedTimetable) {
const id = selectedTimetable.dataset.timetableId;
showTimetable(id);
}
}
function showTimetable(id) {
const timetable = document.querySelector(
`.timetable[data-timetable-id="${id}"]`,
);
if (timetable) {
timetable.style.display = 'block';
}
// Check if toggleMap is defined
if (typeof toggleMap === 'function') {
toggleMap(id);
}
}
document.addEventListener('DOMContentLoaded', () => {
showSelectedTimetable();
document
.querySelectorAll('#day_list_selector input[name="dayList"]')
.forEach((input) => {
input.addEventListener('change', () => {
showSelectedTimetable();
});
});
document
.querySelectorAll('#direction_name_selector input[name="directionId"]')
.forEach((input) => {
input.addEventListener('change', () => {
showSelectedTimetable();
});
});
});