2018-12-31 20:26:36 +11:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
2018-12-31 20:45:40 +11:00
|
|
|
<title>Virtual Metro</title>
|
2018-12-31 20:26:36 +11:00
|
|
|
<style type="text/css">
|
|
|
|
#mainsvg {
|
|
|
|
width: 100vw;
|
|
|
|
height: 100vh;
|
|
|
|
max-width: 100vw;
|
|
|
|
max-height: 100vh;
|
|
|
|
}
|
2019-01-01 02:32:17 +11:00
|
|
|
#topbar {
|
|
|
|
position: absolute;
|
|
|
|
left: 0;
|
|
|
|
top: 0;
|
|
|
|
z-index: 999;
|
|
|
|
font-size: small;
|
|
|
|
}
|
2018-12-31 20:26:36 +11:00
|
|
|
body, html {
|
2019-01-01 02:32:17 +11:00
|
|
|
color: #ccc;
|
2018-12-31 20:26:36 +11:00
|
|
|
background-color: black;
|
|
|
|
margin: 0;
|
|
|
|
padding: 0;
|
|
|
|
overflow: hidden;
|
|
|
|
}
|
2019-01-01 02:32:17 +11:00
|
|
|
a, a:active, a:visited {
|
|
|
|
color: #99f;
|
|
|
|
}
|
2018-12-31 20:26:36 +11:00
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/nunjucks/3.0.1/nunjucks.min.js"></script>
|
|
|
|
<script>
|
2019-01-01 02:32:17 +11:00
|
|
|
function getQueryVariable(variable, def) {
|
|
|
|
var vars = window.location.search.substring(1).split("&");
|
|
|
|
for (var i = 0; i < vars.length; i++) {
|
|
|
|
var bits = vars[i].split("=");
|
|
|
|
if (decodeURIComponent(bits[0]) == variable) {
|
|
|
|
return decodeURIComponent(bits[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return def;
|
|
|
|
}
|
|
|
|
|
|
|
|
var stop_id = parseInt(getQueryVariable("stop_id", 1099));
|
|
|
|
var plat_id = parseInt(getQueryVariable("plat_id", 1));
|
|
|
|
|
2019-01-01 13:15:14 +11:00
|
|
|
var svg = null;
|
|
|
|
var svg_time = null;
|
|
|
|
var template = null;
|
|
|
|
var time_offset = null;
|
|
|
|
|
2018-12-31 20:26:36 +11:00
|
|
|
function start() {
|
2019-01-01 13:15:14 +11:00
|
|
|
svg = document.getElementById("mainsvg").getSVGDocument().querySelector("svg");
|
|
|
|
template = svg.innerHTML;
|
2018-12-31 20:26:36 +11:00
|
|
|
|
2018-12-31 20:45:40 +11:00
|
|
|
svg.innerHTML = nunjucks.renderString(template, {"dest": "Loading..."});
|
2018-12-31 20:26:36 +11:00
|
|
|
|
2019-01-01 13:15:14 +11:00
|
|
|
tickTrains();
|
|
|
|
window.setInterval(tickTrains, 30000);
|
|
|
|
}
|
|
|
|
|
|
|
|
function tickTrains() {
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
|
xhr.addEventListener("load", function() {
|
|
|
|
var result = JSON.parse(xhr.responseText);
|
|
|
|
|
|
|
|
svg.innerHTML = nunjucks.renderString(template, result);
|
|
|
|
svg_time = document.getElementById("mainsvg").getSVGDocument().querySelector("#time tspan");
|
|
|
|
|
|
|
|
document.getElementById("stopinfo").innerText = stop_id + " (" + result.stop_name + ")";
|
|
|
|
|
|
|
|
if (time_offset === null) {
|
|
|
|
time_offset = result.time_offset;
|
|
|
|
tickTime();
|
|
|
|
window.setInterval(tickTime, 1000);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
xhr.open("GET", "latest?stop_id=" + stop_id + "&plat_id=" + plat_id);
|
|
|
|
xhr.send();
|
|
|
|
}
|
|
|
|
|
|
|
|
function tickTime() {
|
|
|
|
var time = new Date(new Date().getTime() + time_offset * 1000);
|
|
|
|
var hour = time.getUTCHours() % 12;
|
|
|
|
if (hour === 0) hour = 12;
|
|
|
|
var minute = time.getUTCMinutes();
|
|
|
|
if (minute < 10) minute = "0" + minute;
|
|
|
|
var second = time.getUTCSeconds();
|
|
|
|
if (second < 10) second = "0" + second;
|
|
|
|
svg_time.innerHTML = hour + ":" + minute + ":" + second;
|
2018-12-31 20:26:36 +11:00
|
|
|
}
|
2019-01-01 02:32:17 +11:00
|
|
|
|
|
|
|
function changePlatform() {
|
|
|
|
var new_plat = parseInt(window.prompt("Enter new platform number:", plat_id));
|
|
|
|
window.location = "?stop_id=" + stop_id + "&plat_id=" + new_plat;
|
|
|
|
return false;
|
|
|
|
}
|
2018-12-31 20:26:36 +11:00
|
|
|
</script>
|
2019-01-01 02:46:55 +11:00
|
|
|
<div id="topbar">Stop <span id="stopinfo">?</span> [<a href="stations">change</a>] Platform <span id="platinfo">?</span> [<a href="#" onclick="return changePlatform();">change</a>]</div>
|
2018-12-31 20:26:36 +11:00
|
|
|
<object id="mainsvg" data="static/template.svg" type="image/svg+xml" onload="start();"></object>
|
2019-01-01 02:32:17 +11:00
|
|
|
<script>
|
|
|
|
document.getElementById("stopinfo").innerText = stop_id;
|
|
|
|
document.getElementById("platinfo").innerText = plat_id;
|
|
|
|
</script>
|
2018-12-31 20:26:36 +11:00
|
|
|
</body>
|
|
|
|
</html>
|