Odjezdova-tabule-MHD/server/static/departure-list.js

57 lines
1.4 KiB
JavaScript

const { createApp } = Vue;
let app = createApp({
data() {
return {
top: 0,
interval: null,
stop_id: null,
stops: [],
departures: []
}
},
methods: {
async set() {
localStorage.setItem("favstop", app.$data.stop_id);
this.update();
},
async update() {
if(app.$data.stop_id) app.$data.departures = (await api("/departures/"+app.$data.stop_id)).departures;
},
async setup() {
app.$data.stops = (await api("/stops")).stops;
let ids = Object.keys(app.$data.stops);
if(ids.length < 1) {
alert("Žádné zastávky nejsou k dispozici!");
if(app.$data.interval) clearTimeout(app.$data.interval);
return;
}
if(localStorage.getItem("favstop")) {
if(ids.indexOf(localStorage.getItem("favstop")) != -1) app.$data.stop_id = localStorage.getItem("favstop");
}
if(!app.$data.stop_id) app.$data.stop_id = ids[0];
window.addEventListener("scroll", () => {
app.$data.top = document.querySelector('html').scrollTop;
});
app.$data.interval = setInterval(app.update, 5000);
app.update();
}
}
}).mount('#app');
async function api(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(this.readyState !== 4) return;
if(!this.responseText) reject(this);
try {
resolve(JSON.parse(this.responseText));
} catch(e) {
resolve(null);
}
};
xhr.open("GET", url, true);
xhr.send();
});
}
app.setup();