/*
* Copyright (C) 2020-2023 Birte Kristina Friesel
*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
function setLang(lang) {
document.cookie = 'lang=' + lang + ';SameSite=None;Secure';
location.reload();
}
function setTheme(theme) {
localStorage.setItem('theme', theme);
if (!otherTheme.hasOwnProperty(theme)) {
theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
addStyleSheet(theme, 'theme');
}
function reload_app() {
// TODO use a variable instead of window.location.href, as
// window.location.href may be /z/...
// Until then, we guard it by only reloading whin moreinfo is not expanded.
if ($('.expanded-moreinfo').length == 0) {
$.get(window.location.href, {ajax: 1}, function(data) {
// TODO check expanded-moreinfo again here (until the issue itself has been resolved)
$('div.app > ul').html(data);
dbf_reg_handlers();
setTimeout(reload_app, 60000);
}).fail(function() {
setTimeout(reload_app, 10000);
});
} else {
setTimeout(reload_app, 30000);
}
}
function dbf_show_moreinfo(trainElem, keep_old) {
const routeprev = trainElem.data('routeprev').split('|');
const routenext = trainElem.data('routenext').split('|');
const moreinfo = trainElem.data('moreinfo').split('|');
$('.moreinfo').each(function() {
const infoElem = $(this);
if (!keep_old) {
$('.moreinfo .train-line').removeClass('sbahn fern ext ubahn bus tram').addClass(trainElem.data('linetype'));
$('.moreinfo .train-line').text(trainElem.data('line'));
$('.moreinfo .train-no').text(trainElem.data('no'));
$('.moreinfo .train-origin').text(trainElem.data('from'));
$('.moreinfo .train-dest').text(trainElem.data('to'));
$('.moreinfo .minfo').text('');
$('.moreinfo .mfooter').html('');
$('.moreinfo .verbose').html('');
$('.moreinfo .mroute').html('');
$('.moreinfo ul').html('');
var dataline = '';
if (trainElem.data('arrival') != '') {
dataline += '
An: ' + trainElem.data('arrival') + '
';
} else {
dataline += '';
}
if (trainElem.data('platform') != '') {
dataline += 'Gleis ' + trainElem.data('platform') + '
';
} else {
dataline += '';
}
if (trainElem.data('departure') != '') {
dataline += 'Ab: ' + trainElem.data('departure') + '
';
} else {
dataline += '';
}
$('.moreinfo .mfooter').append('' + dataline + '
');
if ($('.moreinfo .loading').length == 0) {
$('.moreinfo .mfooter').append('Lade Daten, bitte warten...
');
}
if (trainElem.data('moreinfo') != '') {
var ibuf = '';
for (var key in moreinfo) {
ibuf += '' + moreinfo[key] + '';
}
$('.moreinfo .mfooter').append('Meldungen: ');
}
var routebuf = '';
if (trainElem.data('routeprev') != '') {
for (var key in routeprev) {
routebuf += '' + routeprev[key] + '';
}
}
routebuf += '' + document.title + '';
if (trainElem.data('routenext') != '') {
for (var key in routenext) {
routebuf += '' + routenext[key] + '';
}
}
$('.moreinfo .mfooter').append('Fahrtverlauf: ');
}
$.get(window.location.href, {train: trainElem.data('train'), jid: trainElem.data('jid'), ajax: 1}, function(data) {
$('.moreinfo').html(data);
}).fail(function() {
$('.moreinfo .mfooter').append('Der Zug ist abgefahren (Zug nicht gefunden)');
});
infoElem.removeClass('collapsed-moreinfo');
infoElem.addClass('expanded-moreinfo');
});
}
function dbf_reg_handlers() {
$('div.app > ul > li').click(function(event) {
const trainElem = $(this);
const station = $('div.app').data('station');
const param = new URLSearchParams(window.location.search);
event.preventDefault();
var suffix = '?';
if (param.get('detailed')) {
suffix += '&detailed=1';
}
if (param.get('hafas') && param.get('hafas') != '0') {
suffix += '&hafas=' + param.get('hafas') + '&highlight=' + trainElem.data('station');
}
if (param.get('past')) {
suffix += '&past=1';
}
if (param.get('rt') || param.get('show_realtime')) {
suffix += '&rt=1';
}
if (param.get('hafas') && param.get('hafas') != '0') {
history.pushState({'page':'traindetail','jid':trainElem.data('jid')}, 'test', '/z/' + trainElem.data('jid') + suffix);
} else if (param.get('efa') && param.get('efa') != '0') {
history.pushState({'page':'traindetail','jid':trainElem.data('jid')}, 'test', '/z/' + trainElem.data('jid') + suffix);
} else {
history.pushState({'page':'traindetail','station':station,'train':trainElem.data('no')}, 'test', '/z/' + trainElem.data('train') + '/' + trainElem.data('station') + suffix);
}
dbf_show_moreinfo(trainElem, false);
});
const trainid = $(location).attr('hash').substr(1);
if (trainid) {
var found = false;
$('div.app > ul > li').each(function(index) {
if (found) {
return;
}
$(this).find('.anchor').each(function() {
if ($(this).attr('id') == trainid) {
found = true;
}
});
});
if (found) {
found = false;
$('div.app > ul > li').each(function(index) {
if (found) {
return;
}
$(this).find('.anchor').each(function() {
if ($(this).attr('id') == trainid) {
found = true;
}
});
if (found) {
$(this).addClass('selected');
} else {
$(this).addClass('past');
}
});
}
}
}
$(function() {
$('.moresettings-header').each(function() {
$(this).click(function() {
var moresettings = $('.moresettings');
if ($(this).hasClass('moresettings-header-collapsed')) {
$(this).removeClass('moresettings-header-collapsed');
$(this).addClass('moresettings-header-expanded');
moresettings.removeClass('moresettings-collapsed');
moresettings.addClass('moresettings-expanded');
}
else {
$(this).removeClass('moresettings-header-expanded');
$(this).addClass('moresettings-header-collapsed');
moresettings.removeClass('moresettings-expanded');
moresettings.addClass('moresettings-collapsed');
}
});
});
$('.developers-header').each(function() {
$(this).click(function() {
var developers = $('.developers');
if ($(this).hasClass('developers-header-collapsed')) {
$(this).removeClass('developers-header-collapsed');
$(this).addClass('developers-header-expanded');
developers.removeClass('developers-collapsed');
developers.addClass('developers-expanded');
}
else {
$(this).removeClass('developers-header-expanded');
$(this).addClass('developers-header-collapsed');
developers.removeClass('developers-expanded');
developers.addClass('developers-collapsed');
}
});
});
dbf_reg_handlers();
if ($('.content .app').length) {
setTimeout(reload_app, 30000);
history.replaceState({'page':'station'}, document.title, '');
}
window.onpopstate = function(event) {
if (event.state != null) {
if ((event.state['page'] == 'station')) {
$('.moreinfo').each(function() {
$(this).removeClass('expanded-moreinfo');
$(this).addClass('collapsed-moreinfo');
});
if (!$('div.app > ul').length) {
$('div.app').append('');
reload_app();
}
} else if ((event.state['page'] == 'traindetail')) {
var success = false;
$('div.app > ul > li').each(function() {
const trainElem = $(this);
if (trainElem.data('no') == event.state['train']) {
dbf_show_moreinfo(trainElem, true);
success = true;
return;
}
});
if (!success) {
$('.moreinfo').each(function() {
$(this).removeClass('collapsed-moreinfo');
$(this).addClass('expanded-moreinfo');
});
$('.moreinfo .mfooter').append('Der Zug ist abgefahren (Zug nicht gefunden)');
}
}
} else {
console.log("unhandled popstate! " + document.location);
}
};
});