mirror of
https://github.com/cupcakearmy/dvb.git
synced 2024-12-23 08:36:29 +00:00
86 lines
1.8 KiB
JavaScript
86 lines
1.8 KiB
JavaScript
Vue.component('dvb-line', {
|
|
template: '#tmpl-dvb-line',
|
|
data() {
|
|
return {
|
|
hz: 30,
|
|
departures: null,
|
|
directions: {},
|
|
stopName: '',
|
|
lineNumber: ''
|
|
}
|
|
},
|
|
props: {
|
|
stopId: Number,
|
|
line: Number
|
|
},
|
|
filters: {
|
|
formatTime(d) {
|
|
if (d === undefined) return
|
|
d = this.parseTime(d)
|
|
let
|
|
h = d.getHours(),
|
|
m = d.getMinutes()
|
|
h = h < 10 ? `0${h}` : h
|
|
m = m < 10 ? `0${m}` : m
|
|
return `${h}:${m}`
|
|
},
|
|
timeInterval(a, b) {
|
|
a = this.parseTime(a)
|
|
b = this.parseTime(b)
|
|
return ((b - a) / 1000 / 60) | 0
|
|
}
|
|
},
|
|
methods: {
|
|
startWatcher() {
|
|
this.update()
|
|
this.watcherId = setInterval(this.update, 1000 * this.hz)
|
|
},
|
|
stopWatcher() {
|
|
clearInterval(this.watcherId)
|
|
},
|
|
update() {
|
|
fetch('https://webapi.vvo-online.de/dm', {
|
|
mode: 'cors',
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json'
|
|
},
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
'stopid': this.stopId
|
|
})
|
|
})
|
|
.then(res => res.json())
|
|
.then(res => {
|
|
this.stopName = res.Name
|
|
this.departures = res.Departures.filter(departure => departure.LineName === this.line)
|
|
this.formatDirections()
|
|
})
|
|
},
|
|
formatDirections() {
|
|
// Reset names & data
|
|
this.directions = {}
|
|
|
|
for (var i of this.departures) {
|
|
// Initial directions if null
|
|
if (!(i.Direction in this.directions))
|
|
this.directions[i.Direction] = []
|
|
|
|
// Inset departure into array
|
|
if (this.directions[i.Direction].length < 3)
|
|
this.directions[i.Direction].push(i)
|
|
}
|
|
|
|
this.directions = Object.keys(this.directions)
|
|
.sort().reduce((a, v) => {
|
|
a[v] = this.directions[v];
|
|
return a;
|
|
}, {});
|
|
},
|
|
},
|
|
created() {
|
|
this.lineNumber = this.line
|
|
this.stopId = this.stopId
|
|
this.startWatcher()
|
|
},
|
|
}) |