61 lines
No EOL
2.3 KiB
JavaScript
61 lines
No EOL
2.3 KiB
JavaScript
import show_error from './show-error.mjs';
|
|
async function init_app() {
|
|
|
|
const params = new URLSearchParams(location.search);
|
|
const station = params.get('station');
|
|
|
|
|
|
const station_names = await (await fetch('stations.json')).json();
|
|
const station_directions = await (await fetch('station-directions.json')).json();
|
|
const station_latlons = await (await fetch('station-latlons.json')).json();
|
|
|
|
const platforms = await (await fetch('platforms.json')).json();
|
|
|
|
station_names['MON'] = 'Monument';
|
|
station_latlons['MON'] = station_latlons['MTW'];
|
|
delete station_names['MTW'];
|
|
delete station_names['MTS'];
|
|
delete station_latlons['MTW'];
|
|
delete station_latlons['MTS'];
|
|
Object.entries(platforms).forEach(([station_key,platforms]) => {
|
|
platforms.forEach(p => {
|
|
p.station_key = station_key;
|
|
});
|
|
})
|
|
platforms['MON'] = platforms['MTS'].concat(platforms['MTW']);
|
|
station_directions['MON'] = Object.assign({}, station_directions['MTS'], station_directions['MTW']);
|
|
|
|
const stations = Object.keys(station_names).map(key => {
|
|
return {key, name: station_names[key], platforms: platforms[key], directions: station_directions[key], latlon: station_latlons[key]};
|
|
});
|
|
|
|
const lines = await (await fetch('lines.json')).json();
|
|
Object.values(lines).map(stops => stops.forEach(stop => {
|
|
stop.key = (stop.key == 'MTS' || stop.key == 'MTW') ? 'MON' : stop.key;
|
|
}))
|
|
const compilation_error = await show_error;
|
|
if(compilation_error) {
|
|
return;
|
|
}
|
|
const app = Elm.App.init({node: document.body, flags: {stations, lines, station}});
|
|
|
|
app.ports.request_data.subscribe(async ([station,platformNumber]) => {
|
|
const url = `cgi-bin/platform_data.py?station=${station}&platform=${platformNumber}`;
|
|
const data = await (await fetch(url)).json();
|
|
station = (station == 'MTS' || station == 'MTW') ? 'MON' : station;
|
|
const out = {time: (new Date()).toISOString(), station, platformNumber, data}
|
|
app.ports.receive_platform_data.send(out);
|
|
});
|
|
|
|
app.ports.request_location.subscribe(async () => {
|
|
navigator.geolocation.getCurrentPosition(
|
|
(r) => {
|
|
console.log(r);
|
|
app.ports.receive_location.send(r);
|
|
},
|
|
(e) => console.error(e)
|
|
);
|
|
});
|
|
}
|
|
|
|
init_app(); |