57 lines
1.4 KiB
JavaScript
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(); |