-
Notifications
You must be signed in to change notification settings - Fork 0
/
node_helper.js
61 lines (54 loc) · 2.27 KB
/
node_helper.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
const NodeHelper = require("node_helper");
const request = require("request");
const cheerio = require("cheerio");
module.exports = NodeHelper.create({
// Override start method
start: function () {
console.log("MMM-WebTracker helper started...");
},
// Handle socket notifications
socketNotificationReceived: function (notification, payload) {
if (notification === "WEBTRACKER_START") {
this.config = payload;
this.getData();
}
if (notification === "WEBTRACKER_UPDATE") {
this.getData();
}
},
// Fetch data from the URL and emit to the main module
getData: function () {
const self = this;
request(this.config.url, function (error, response, body) {
if (!error && response.statusCode == 200) {
// Generate output html
const html = (() => {
const $ = cheerio.load(body);
const pointedElement = $(self.config.querySelector);
// Remove inline styling
pointedElement.find('[style]').removeAttr('style');
// Remove link tags
pointedElement.find('a').each(function() {
$(this).replaceWith($(this).html());
});
// Check if the selected element is a table
if (['tr', 'th', 'table'].includes(pointedElement.prop('tagName').toLowerCase())) {
// Remove formatting tags (and the table tag)
pointedElement.find('b, i, strong, table').each(function() {
$(this).replaceWith($(this).html());
});
return `<table class="webtracker-table">${pointedElement.html()}</table>`;
}
return pointedElement.html();
})();
// Send the modified HTML content in the notification
self.sendSocketNotification("WEBTRACKER_DATA_UPDATED", {
url: self.config.url,
data: html
});
} else {
console.error("Error fetching data:", error);
}
});
},
});