CINXE.COM
saarVV
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="robots" content="noindex"> <meta http-equiv="cache-control" content="no-cache" /> <meta name="color-scheme" content="light dark"> <meta id="HFS_ThemeColor" name="theme-color" content="#004E92" /> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=2" /> <meta id="MsApplicationTileImage" name="msapplication-TileImage" content="img/light/customer/apple-touch-icon-144x144-precomposed.png?v=1719222691516"> <title>saarVV</title> <link id="HFS_AppleTouchIconPrecomposed144" rel="apple-touch-icon-precomposed" sizes="144x144" href="img/light/customer/apple-touch-icon-144x144-precomposed.png?v=1719222691516"> <link id="HFS_AppleTouchIconPrecomposed114" rel="apple-touch-icon-precomposed" sizes="114x114" href="img/light/customer/apple-touch-icon-114x114-precomposed.png?v=1719222691516"> <link id="HFS_AppleTouchIconPrecomposed72" rel="apple-touch-icon-precomposed" sizes="72x72" href="img/light/customer/apple-touch-icon-72x72-precomposed.png?v=1719222691516"> <link id="HFS_AppleTouchIconPrecomposed57" rel="apple-touch-icon-precomposed" href="img/light/customer/apple-touch-icon-57x57-precomposed.png?v=1719222691516"> <link id="HFS_ShortcutIcon196" rel="shortcut icon" sizes="196x196" href="img/light/customer/touch-icon-196x196.png?v=1719222691516"> <link id="HFS_ShortcutIcon" rel="shortcut icon" href="img/light/customer/apple-touch-icon.png?v=1719222691516"> <link rel="manifest" href="manifest.json?v=1.0.2"> <!-- Preloading resources here as they are available more quickly when they need to be used --> <link rel="preload" href="css/leaflet/leaflet.min.css" as="style" /> <!-- Check if OpenGraph Tags should be rendered, this config parameter is the same for all virtual clients --> <!-- It is not possible to have individual open graph tag settings for virtual clients, so not recommended if virtual clients differ from --> <meta property="og:url" content="https://demo.hafas.de/webapp/lyra/latest/presets/ALL" /> <meta property="og:type" content="website" /> <meta property="og:title" content="saarVV" /> <meta property="og:description" content="Checkout the latest Lyra WebApp" /> <meta property="og:image" content="https://demo.hafas.de/webapp/lyra/latest/presets/ALL/img/light/customer/flyin-bg-img.jpg" /> <meta name="twitter:url" content="https://demo.hafas.de/webapp/lyra/latest/presets/ALL" /> <meta name="twitter:title" content="saarVV" /> <meta name="twitter:description" content="Checkout the latest Lyra WebApp" /> <meta name="twitter:image" content="https://demo.hafas.de/webapp/lyra/latest/presets/ALL/img/light/customer/flyin-bg-img.jpg" /> <meta name="twitter:card" content="summary_large_image" /> <link rel="preload" href="css/fonts/roboto-v18-latin-500.woff2" as="font" type="font/woff2" crossorigin /> <link rel="preload" href="css/fonts/roboto-v18-latin-700.woff2" as="font" type="font/woff2" crossorigin /> <script type="text/javascript" src="js/hafas_lib_core.js?v=1719222691516" defer></script> <script type="text/javascript"> var path = 'js/'; // intentional redundancy // this way the script can load before core was loaded function determineLanguage(options){ options = options || {}; var possibleLangs = []; // PRIO 1: check for URL-Parameter "language" // Tempor盲r umgezogen if (options.urlParam) { var urlLang = Hafas.Core.getParameterByName(options.urlParam); if (urlLang) possibleLangs.push(urlLang); } // PRIO 2: language via options if(options.language) { possibleLangs.push(options.language); } // PRIO 3: local storage try { if (options.localStorageKey && localStorage && localStorage.getItem && options.localStorageKey) { var lsLang = localStorage.getItem(options.localStorageKey); if (lsLang) { lsLang = JSON.parse(lsLang); // check if entry is expired if (new Date().getTime() > lsLang.expires) { localStorage.removeItem(options.localStorageKey); } else { possibleLangs.push(lsLang.lang); } } } } catch (e) { console.log("i18n.readFromStorage", "Fehler: Sprache kann nicht aus localStorage gelesen werden.", e); } // PRIO 4: browser language // Allgemein gibt der Browser ein Sprachk眉rzel an (-> shortcode 'de'). // Je nachdem ob der Benutzer ein Land angibt, wird das L盲nderk眉rzel herausgegeben (-> fullcode 'de_DE'). // Wird der fullcode gefunden wird die Spracheinstellung 眉bernommen. if (hfsMetadata.Switches.useBrowserLanguage && (navigator.language || navigator.browserLanguage)) { // navigator.language // navigator.browserLanguage (alteIE) // Internet Explorer 11: de-DE // Opera/Firefox/Chrome: de/en-US/en-GB (Firefox kann Sprache detailliert einstellen) // K眉rzel wird in der Webapp mit Unterstrich angegeben (daher replace) var browserLang = (navigator.language || navigator.browserLanguage || '').replace('-', '_'); possibleLangs.push(browserLang); // Extrahiere Sprachcode possibleLangs.push(browserLang.slice(0, 2)); } // PRIO 5: default language possibleLangs.push(hfsMetadata.defaultLang); var allLangs = hfsMetadata.languages; for (var i = 0, size = possibleLangs.length; i < size; i++) { var posLang = possibleLangs[i]; for (var j = 0, jSize = allLangs.length; j < jSize; j++) { var curLang = allLangs[j]; if (curLang.lang === posLang || curLang.iso === posLang || curLang.hciLang === posLang) { return curLang; } } } // Wenn alle Stricke rei脽en... return allLangs[0]; } function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null; } function isValidVirtualClient(vc){ return new RegExp("vs_[^<>]*$","g").test(vc); } function getDefaultLang(){ for(var l=0; l < hfsMetadata.languages.length;l++){ var lang = hfsMetadata.languages[l]; if(lang.isDefault){ hfsMetadata.defaultLang = lang.lang; } } } function initSplashScreen(){ // Determin defaultLang getDefaultLang(); if(hfsMetadata.Switches.useSplashScreen == false){ return; } document.getElementById('HFS_Splashscreen').style.display = ''; // Logo zeigen if(hfsMetadata.Splashscreen.mode == 'BOTH' || hfsMetadata.Splashscreen.mode == 'LOGO'){ var colorScheme = Hafas.Core.getColorScheme(); document.getElementById('HFS_SplashscreenLogo').style.display = ''; document.getElementById('HFS_SplashscreenLogoImage').width = hfsMetadata.Splashscreen.logoWidth; document.getElementById('HFS_SplashscreenLogoImage').src = hfsMetadata.imageBasePath + colorScheme + '/' + hfsMetadata.Splashscreen.logo; } // Text zeigen if(hfsMetadata.Splashscreen.mode == 'BOTH' || hfsMetadata.Splashscreen.mode == 'TEXT'){ document.getElementById('HFS_SplashscreenText').style.display = ''; } // Loading Spinner if(hfsMetadata.Splashscreen.showLoadingSpinner == true){ document.getElementById('HFS_SplashSpinner').style.display = ''; } // Progress Bar if(hfsMetadata.Splashscreen.showProgress == true){ document.getElementById('HFS_SplashProgress').style.display = ''; } var langParam = getURLParameter("language"); var language = determineLanguage({ language: langParam }); var descriptionText = (typeof hfsMetadata.description == 'string')?hfsMetadata.description:hfsMetadata.description[language.lang]; document.getElementById('HFS_SplashTitle').innerHTML = hfsMetadata.name; document.getElementById('HFS_SplashDesc').innerHTML = descriptionText; } function applyPreference (mediaQueryList) { if (Hafas.Util && Hafas.Util.isCookieTypeActive('functional')) { var storage = Hafas.Core.newType('hafasStorage'); if (storage && storage.get('hfsColorScheme_' + Hafas.Config.Storage.id)) { return; } } if (mediaQueryList.matches) { Hafas.Core.setColorScheme('dark'); } else { Hafas.Core.setColorScheme('light'); } } function initColorScheme () { // If WebApp is in an iFrame and also initialized by the iFrame API, color scheme will be handled by iFrame API if (window.self !== window.top && Hafas.Config.iframeApiEnabled) { return; } // Add a listener for color scheme requests from iframes, e.g. by the widget generator addEventListener('message', (message) => { if (message.data.type === 'getColorScheme') { Hafas('iframe', false)?.contentWindow?.postMessage({type: 'colorScheme', colorScheme: Hafas.Core.getColorScheme()}, '*'); } }); // If only one color scheme was configured, set useColorTheming to false, so we don't have to check availableThemes every time if (!(Hafas.Config.ColorScheme?.availableSchemes?.length > 1)) { Hafas.Config.Switches.useColorTheming = false; } if (Hafas.Config.Switches.useColorTheming) { // Check if URL has a dark mode parameter and apply it // Jumpin module would be too late to avoid loading unnecessary CSS files var darkModeUrlParam = getURLParameter('darkmode'); if (darkModeUrlParam != null) { if (darkModeUrlParam === '1' && Hafas.Config.ColorScheme?.availableSchemes?.includes('dark')) { Hafas.Core.setColorScheme('dark'); } else { Hafas.Core.setColorScheme('light'); } return; } // Check local storage for color scheme var storageId = Hafas.Config.Storage.id; // At this point, Hafas.Config.Storage.id does not yet contain the virtual client name var lParam = getURLParameter('L'); if (lParam) { storageId = Hafas.Config.Storage.prop.name + '_' + lParam + '_' + Hafas.Config.Storage.prop.env + '_' + Hafas.Config.Storage.prop.version; } var storedScheme = localStorage.getItem('hfsColorScheme_' + storageId); if (storedScheme) { // Apply color scheme from local storage Hafas.Core.setColorScheme(storedScheme); return; } // Check if system setting should be used and apply it if (Hafas.Config.ColorScheme.useSystemSetting) { // Set color theme according to system setting and add listener var prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)"); applyPreference(prefersDarkScheme); prefersDarkScheme.addEventListener('change', applyPreference); return; } } // If useColorTheming === false or color scheme can/should not be set according to URL parameter, local storage, or system setting, get and set scheme according to config var colorScheme = Hafas.Core.getColorScheme(); Hafas.Core.setColorScheme(colorScheme); } var subPath = getURLParameter("L"); var embedConfig = true; if(subPath) { if(!isValidVirtualClient(subPath)){ embedConfig = false; } else { path = 'customer/' + subPath + '/js/'; document.getElementsByTagName("html")[0].setAttribute("data-customer", subPath); } } if(embedConfig) { if(subPath) { document.write('<script type="text\/javascript" src="' + path + 'metadata.js?v=1719222691516"><\/script>'); <!-- Include virtual client hafas_webapp_tracking.js if tracking is set to true in the config --> }else{ document.write('<script type="text\/javascript" src="metadata.js?v=1719222691516"><\/script>'); <!-- Include hafas_webapp_tracking.js if tracking is set to true in the config --> } document.write('<script type="text\/javascript" src="' + path + 'hafas_webapp_config.js?v=1719222691516" defer><\/script>'); } </script> <script type="text/javascript" src="js/hafas_webapp_application.js?v=1719222691516" defer></script> <style> .lyr_splashScreen { font-family: sans-serif; font-size: 14px; position: fixed; display: flex; flex-direction: column; justify-content: center; align-items: center; left: 0; right: 0; top: 0; bottom: 0; background-color: rgb(var(--lyr-background-medium)); color: rgb(var(--lyr-text-neutral)); opacity: 1; text-align: center; } .lyr_splashScreenLogo{ margin-bottom:8px; } .lyr_statusWrapper { height: 150px; } #HFS_NoScript .table1{ margin-top: 20px; color: #D30D42; } #HFS_NoScript .table2{ margin-top: 20px; color: #24242A; } #HFS_NoScript td{ padding-top: 5px; padding-bottom: 5px; text-align: left; } #HFS_NoScript .caption{ font-size: large; font-weight: bold; } </style> </head> <body class="lyr" onload="initColorScheme();initSplashScreen();Hafas.Core.init(); Hafas.Core.initHead({cssBasePath: 'css/', imgBasePath:'img/',version:'1.0.2'});"> <div id="HFS_Splashscreen" class="lyr_splashScreen" style="display:none;"> <!-- Implementation of noscript on javascript deactivation --> <noscript> <section id="HFS_NoScript"> <table class="table1"> <tr> <td class="caption"> German: </td> </tr> <tr> <td> JavaScript ist deaktiviert. Aktivieren Sie JavaScript und aktualisieren Sie die Seite. </td> </tr> <tr> <td class="caption"> English: </td> </tr> <tr> <td> JavaScript is deactivated. Please activate JavaScript and refresh the page. </td> </tr> <tr> <td class="caption"> French: </td> </tr> <tr> <td> JavaScript est d茅sactiv茅. Veuillez activer JavaScript et actualiser la page. </td> </tr> <tr> <td class="caption"> Spanish: </td> </tr> <tr> <td> JavaScript est谩 desactivado. Active JavaScript y actualice la p谩gina. </td> </tr> </table> <table class="table2"> <tr> <td class="caption"> How to activate JavaScript on your browser </td> </tr> <tr> <td> On your browser take the following steps to activate javascript on your system. </td> </tr> <tr> <td> <ul> <li>Click on the browser side menu</li> <li>Select more tools</li> <li>Select Developer tools or Web Developer tools depending on the browser you are using</li> <li>Click on the setting <i class="haf_action_settings" aria-hidden="true"></i>icon and scroll down to Debugger section </li> <li>Deselect javascript</li> <li>Refresh your browser</li> </ul> </td> </tr> </table> </section> </noscript> <div id="HFS_SplashscreenLogo" class="lyr_splashScreenLogo" style="display:none;"> <img id="HFS_SplashscreenLogoImage" alt="Logo" src="img/light/customer/hacon_logo_white.svg?v=1719222691516" /> </div> <div id="HFS_SplashscreenText" style="display:none;"> <h1 id="HFS_SplashTitle"></h1> <p id="HFS_SplashDesc"></p> </div> <div class="lyr_statusWrapper"> <div id="HFS_SplashProgress" style="display:none;"></div> <div id="HFS_SplashSpinner" style="display:none;" class="lyr_atomSpinner"></div> </div> </div> <div id="HFS_WebApp" data-hfs-content="webapp" data-iframe-height="webapp" class="lyr_wrapApplication" ></div> <div id="DynamicTemplates" hidden></div> </body> </html>