-
Notifications
You must be signed in to change notification settings - Fork 0
/
MM-mtaBusTime.js
139 lines (120 loc) · 3.47 KB
/
MM-mtaBusTime.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* global Module */
/* Magic Mirror
* Module: MM-mta-Bustime
*
* By Fangzhou Yu and Benjamin Huang
* MIT Licensed.
*/
Module.register("MM-mtaBusTIme", {
defaults: {
module: "MM-mtaBusTime",
position: "top_bar",
header: "Bus Arrival Times",
stops: [
{
stopId: 69,
direction: "uptown", //direction options: uptown or downtown
},
{
stopID: 420,
direction: "downtownm",
},
],
updateInterval: 60000,
retryDelay: 5000,
},
requiresVersion: "2.1.0", // Required version of MagicMirror
start: function () {
var self = this;
//Flag for check if module is loaded
this.loaded = false;
// Schedule update timer.
this.getData();
setInterval(function () {
self.updateDom();
}, this.config.updateInterval);
},
/*
* getData
* function example return data and show it in the module wrapper
* get a URL request
*
*/
getData: function () {
var config = this.config;
this.sendSocketNotification("getBusArrivalTimes", config);
},
/* scheduleUpdate()
* Schedule next update.
*
* argument delay number - Milliseconds before next update.
* If empty, this.config.updateInterval is used.
*/
scheduleUpdate: function (delay) {
var nextLoad = this.config.updateInterval;
if (typeof delay !== "undefined" && delay >= 0) {
nextLoad = delay;
}
nextLoad = nextLoad;
var self = this;
setTimeout(function () {
self.getData();
}, nextLoad);
},
getDom: function () {
var busArrivalTable = this.busArrivalTable; //data variable
var stopName = this.stopName;
// create element wrapper for show into the module
var wrapper = document.createElement("div");
var title = document.createElement("moduleTitle");
var busList = document.createElement("listOfBuses");
if (busArrivalTable) {
if (
Object.keys(busArrivalTable).length === 0 &&
busArrivalTable.constructor === Object
) {
return wrapper; //return wrapper if there is nothing new to update
}
if (!this.loaded) {
wrapper.innerHTML = "Gathering BusTime data...";
return wrapper;
}
title.innerHTML = "Bus Arrivals for " + stopName;
wrapper.appendChild(title);
}
// Data from helper
/* if (this.dataNotification) {
var wrapperDataNotification = document.createElement("div");
// translations + datanotification
wrapperDataNotification.innerHTML =
this.translate("UPDATE") + ": " + this.dataNotification.date;
wrapper.appendChild(wrapperDataNotification);
}*/
return wrapper;
},
getStyles: function () {
return ["MM-mtaBusTime.css"];
},
// Load translations files
getTranslations: function () {
//FIXME: This can be load a one file javascript definition
return {
en: "translations/en.json",
es: "translations/es.json",
};
},
// socketNotificationReceived from helper
socketNotificationReceived: function (notification, payload) {
//receives bus arrival data from node_helper.js
if (notification === "busArrivalTable") {
//upon receipt of successful data transmission, set busArrivalTable to the incoming data
this.busArrivalTable = payload;
this.updateDom(self.config.fadeSpeed);
}
if (notification === "stopName") {
this.stopName = payload;
} else if (notification === "DOM_OBJECTS_CREATED") {
console.log("Dom Objects Created");
}
},
});