-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMMM-OneBusAway.js
88 lines (79 loc) · 3.18 KB
/
MMM-OneBusAway.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"use strict";
Module.register("MMM-OneBusAway", {
result: [],
// Default module config.
defaults: {
stopId: "1_2672",
maxResults: 5,
fadeSpeed: 1000 * 60, // update every minute
buses: []
},
// Override dom generator.
getDom: function () {
var wrapper = document.createElement("div");
wrapper.className = "oneBusAway";
if (this.hasLoaded == false) { //No data has arrived
var loadingMessage = document.createElement("span");
loadingMessage.innerHTML = "Checking Bus status...";
wrapper.appendChild(loadingMessage);
} else if (this.result.length == 0) { //No buses right now
var noBuses = document.createElement("span");
noBuses.innerHTML = "No bus departures soon.";
wrapper.appendChild(noBuses);
} else { //extract times of arrival for the buses
var validResults = 0;
for (var departureIndex = 0; departureIndex < this.result.length && validResults < this.config.maxResults; departureIndex++) {
var departureDetails = this.result[departureIndex]
if (this.config.buses.indexOf(departureDetails['routeId']) != -1){
var busShortName = departureDetails['routeShortName'];
var busDepartureTimeStamp = departureDetails['scheduledArrivalTime'];
var busEntry = this.getBusEntry(busShortName, busDepartureTimeStamp);
wrapper.appendChild(busEntry);
validResults++;
}
}
}
return wrapper;
},
getBusEntry: function (route, arrival) {
var busIcon = document.createElement("img");
busIcon.className = "badge";
busIcon.src = "modules/MMM-OneBusAway/oba_logo.png";
busIcon.style.height = "25px";
busIcon.style.width = "25px";
var nextStop = document.createElement("div");
var nextStopText = document.createElement("span");
var busDepartureDate = new Date(arrival);
var dateNow = new Date();
var departingInMinutes = (busDepartureDate - dateNow) / 60000; //difference in minutes
if (departingInMinutes > 0) {
departingInMinutes = departingInMinutes.toFixed(0);
var departureMessage = " <b>" + route + "</b> in " + departingInMinutes + " mins";
nextStopText.innerHTML = departureMessage;
nextStop.appendChild(busIcon);
nextStop.appendChild(nextStopText);
}
return nextStop;
},
getStyles: function () {
return ["MMM-OneBusAway.css"];
},
start: function () {
this.hasLoaded = false;
this.getBusesInfo();
var self = this;
setInterval(function () {
self.getBusesInfo();
}, self.config.fadeSpeed);
},
getBusesInfo: function () {
this.sendSocketNotification('GET_BUSES_INFO', this.config.stopId);
},
socketNotificationReceived: function (notification, payload) {
if (notification === "BUSES_INFO") {
this.hasLoaded = true;
this.result = payload;
this.updateDom();
}
},
});