90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
// eslint-disable-next-line node/no-extraneous-require
|
||
require("regenerator-runtime/runtime");
|
||
|
||
const network = require("../tam/network.json");
|
||
const simulation = require("../tam/simulation");
|
||
const map = require("./map/index.js");
|
||
|
||
// Run courses simulation
|
||
const coursesSimulation = simulation.start();
|
||
const informations = document.querySelector("#informations");
|
||
let courseId = null;
|
||
|
||
const displayTime = date => [
|
||
date.getHours(),
|
||
date.getMinutes(),
|
||
date.getSeconds()
|
||
].map(number => number.toString().padStart(2, "0")).join(":");
|
||
|
||
setInterval(() => {
|
||
let html = `
|
||
<dl>
|
||
<dt>Heure actuelle</dt>
|
||
<dd>${displayTime(new Date())}</dd>
|
||
</dl>
|
||
`;
|
||
|
||
if (courseId !== null && courseId in coursesSimulation.courses) {
|
||
const course = coursesSimulation.courses[courseId];
|
||
|
||
const timeToHTML = time => Math.ceil((time - Date.now()) / 1000);
|
||
|
||
const stopToHTML = stopId => stopId in network.stops ?
|
||
network.stops[stopId].properties.name :
|
||
'<em>Arrêt inconnu</em>';
|
||
|
||
const passingsToHTML = passings => passings.map(([stopId, time]) => `
|
||
<tr>
|
||
<td>${stopToHTML(stopId)}</td>
|
||
<td>${displayTime(new Date(time))}</td>
|
||
</tr>
|
||
`).join("\n");
|
||
|
||
html += `
|
||
<dl>
|
||
<dt>ID</dt>
|
||
<dd>${courseId}</dd>
|
||
|
||
<dt>Ligne</dt>
|
||
<dd>${course.line}</dd>
|
||
|
||
<dt>Destination</dt>
|
||
<dd>${stopToHTML(course.finalStop)}</dd>
|
||
|
||
<dt>État</dt>
|
||
<dd>${course.state === "moving"
|
||
? `Entre ${stopToHTML(course.departureStop)}
|
||
et ${stopToHTML(course.arrivalStop)}`
|
||
: `À l’arrêt ${stopToHTML(course.currentStop)}`}</dd>
|
||
|
||
${course.state === "moving" ? `
|
||
<dt>Arrivée dans</dt>
|
||
<dd>${timeToHTML(course.arrivalTime)} s</dd>
|
||
|
||
<dt>Distance parcourue</dt>
|
||
<dd>${Math.ceil(course.traveledDistance)} m</dd>
|
||
|
||
<dt>Vitesse</dt>
|
||
<dd>${Math.ceil(course.speed * 3600)} km/h</dd>
|
||
` : `
|
||
<dt>Départ dans</dt>
|
||
<dd>${timeToHTML(course.departureTime)} s</dd>
|
||
`}
|
||
</dl>
|
||
|
||
<h2>Arrêts précédents</h2>
|
||
<table>${passingsToHTML(course.prevPassings)}</table>
|
||
|
||
<h2>Arrêts suivants</h2>
|
||
<table>${passingsToHTML(course.nextPassings)}</table>
|
||
`;
|
||
}
|
||
|
||
informations.innerHTML = html;
|
||
}, 1000);
|
||
|
||
// Create the network and courses map
|
||
map.create(/* map = */ "map", coursesSimulation, course => {
|
||
courseId = course;
|
||
});
|