1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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`<search-view></search-view>`
}, {
pattern: /^\/([a-zA-Z0-9]+)\/([a-z]+)$/,
render: param => html`<journeys-view slug="${param[0]}" mode="${param[1]}"></journeys-view>`
}, {
pattern: /^\/j\/([a-z]+)\/(.+)$/,
render: param => html`<journey-view profile="${param[0]}" refreshToken="${param[1]}"></journey-view>`
}, {
pattern: /^\/t\/([a-z]+)\/(.+)$/,
render: param => html`<trip-view profile="${param[0]}" refreshToken="${param[1]}"></trip-view>`
}, {
pattern: /^\/d\/([a-z]+)\/([^/]+)(\/[0-9]+)?$/,
render: param => html`<departures-view profile="${param[0]}" stopId="${param[1]}" when="${param[2]}"></departures-view>`
}
];
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 = '<oeffi-search></oeffi-search>';
if (!isDevServer) {
navigator.serviceWorker.register('/sw.js').then(registration => {
console.log('SW registered: ', registration);
}).catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
}
});