import { LitElement, html } from 'lit'; import { cache } from 'lit/directives/cache.js'; import { initDataStorage } from './dataStorage.js'; import { initHafasClient } from './hafasClient.js'; import { initSettingsState, settingsState } from './settings.js' import { baseStyles } from './styles.js'; import './searchView.js'; import './journeysView.js'; import './journeyView.js'; import './tripView.js'; import './departuresView.js'; import './settingsView.js'; import './footerComponent.js'; class Oeffisearch extends LitElement { static properties = { outlet: { state: true }, }; routes = [ { pattern: /^\/$/, render: param => html`` }, { pattern: /^\/([a-zA-Z0-9]+)\/([a-z]+)$/, render: param => html`` }, { pattern: /^\/j\/([a-z]+)\/(.+)$/, render: param => html`` }, { pattern: /^\/t\/([a-z]+)\/(.+)$/, render: param => html`` }, { pattern: /^\/d\/([a-z]+)\/([^/]+)(\/[0-9]+)?$/, render: param => html`` } ]; constructor () { super(); this.outlet = html``; if (!window.location.hash.length) window.location = '#/'; } connectedCallback () { super.connectedCallback(); window.addEventListener('hashchange', this.routeHandler); this.routeHandler(); } disconnectedCallback () { super.disconnectedCallback(); window.removeEventListener('hashchange', this.routeHandler); } render = () => cache(this.outlet); routeHandler = () => { const dest = window.location.hash.slice(1); this.routes.forEach(route => { const match = route.pattern.exec(dest); if (match !== null) this.outlet = route.render(match.slice(1)); }); } } customElements.define('oeffi-search', Oeffisearch); window.addEventListener('load', async () => { await initSettingsState(); await initDataStorage(); await initHafasClient(settingsState.profile); const style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(baseStyles)); document.head.appendChild(style); document.body.innerHTML = ''; if (!isDevServer) { navigator.serviceWorker.register('/sw.js').then(registration => { console.log('SW registered: ', registration); }).catch(registrationError => { console.log('SW registration failed: ', registrationError); }); } });