mirror of
https://github.com/cupcakearmy/dvb.git
synced 2024-09-29 01:34:42 +02: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() {
|
||
|
console.log('Updating...')
|
||
|
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
|
||
|
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()
|
||
|
},
|
||
|
})
|