mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-08-21 12:55:22 +00:00
Standardize: TO JSCS!
This commit is contained in:
@@ -7,55 +7,55 @@
|
||||
* MIT Licensed.
|
||||
*/
|
||||
|
||||
Module.register('calendar',{
|
||||
Module.register("calendar",{
|
||||
|
||||
// Define module defaults
|
||||
defaults: {
|
||||
maximumEntries: 10, // Total Maximum Entries
|
||||
maximumNumberOfDays: 365,
|
||||
displaySymbol: true,
|
||||
defaultSymbol: 'calendar', // Fontawsome Symbol see http://fontawesome.io/cheatsheet/
|
||||
defaultSymbol: "calendar", // Fontawsome Symbol see http://fontawesome.io/cheatsheet/
|
||||
maxTitleLength: 25,
|
||||
fetchInterval: 5 * 60 * 1000, // Update every 5 minutes.
|
||||
animationSpeed: 2000,
|
||||
fade: true,
|
||||
fadePoint: 0.25, // Start on 1/4th of the list.
|
||||
calendars: [
|
||||
calendars: [
|
||||
{
|
||||
symbol: 'calendar',
|
||||
url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics',
|
||||
symbol: "calendar",
|
||||
url: "http://www.calendarlabs.com/templates/ical/US-Holidays.ics",
|
||||
},
|
||||
],
|
||||
titleReplace: {
|
||||
'De verjaardag van ' : ''
|
||||
"De verjaardag van ": ""
|
||||
},
|
||||
loadingText: 'Loading events …',
|
||||
emptyCalendarText: 'No upcoming events.',
|
||||
loadingText: "Loading events …",
|
||||
emptyCalendarText: "No upcoming events.",
|
||||
|
||||
// TODO: It would be nice if there is a way to get this from the Moment.js locale.
|
||||
todayText: 'Today'
|
||||
todayText: "Today"
|
||||
},
|
||||
|
||||
// Define required scripts.
|
||||
getStyles: function() {
|
||||
return ['calendar.css', 'font-awesome.css'];
|
||||
return ["calendar.css", "font-awesome.css"];
|
||||
},
|
||||
|
||||
// Define required scripts.
|
||||
getScripts: function() {
|
||||
return ['moment.js'];
|
||||
return ["moment.js"];
|
||||
},
|
||||
|
||||
// Override start method.
|
||||
start: function() {
|
||||
Log.log('Starting module: ' + this.name);
|
||||
Log.log("Starting module: " + this.name);
|
||||
|
||||
// Set locale.
|
||||
moment.locale(config.language);
|
||||
|
||||
for (var c in this.config.calendars) {
|
||||
var calendar = this.config.calendars[c];
|
||||
calendar.url = calendar.url.replace('webcal://', 'http://');
|
||||
calendar.url = calendar.url.replace("webcal://", "http://");
|
||||
this.addCalendar(calendar.url);
|
||||
}
|
||||
|
||||
@@ -65,17 +65,17 @@ Module.register('calendar',{
|
||||
|
||||
// Override socket notification handler.
|
||||
socketNotificationReceived: function(notification, payload) {
|
||||
if (notification === 'CALENDAR_EVENTS') {
|
||||
if (notification === "CALENDAR_EVENTS") {
|
||||
if (this.hasCalendarURL(payload.url)) {
|
||||
this.calendarData[payload.url] = payload.events;
|
||||
this.loaded = true;
|
||||
}
|
||||
} else if(notification === 'FETCH_ERROR') {
|
||||
Log.error('Calendar Error. Could not fetch calendar: ' + payload.url);
|
||||
} else if(notification === 'INCORRECT_URL') {
|
||||
Log.error('Calendar Error. Incorrect url: ' + payload.url);
|
||||
} else if (notification === "FETCH_ERROR") {
|
||||
Log.error("Calendar Error. Could not fetch calendar: " + payload.url);
|
||||
} else if (notification === "INCORRECT_URL") {
|
||||
Log.error("Calendar Error. Incorrect url: " + payload.url);
|
||||
} else {
|
||||
Log.log('Calendar received an unknown socket notification: '+notification);
|
||||
Log.log("Calendar received an unknown socket notification: " + notification);
|
||||
}
|
||||
|
||||
this.updateDom(this.config.animationSpeed);
|
||||
@@ -115,7 +115,7 @@ Module.register('calendar',{
|
||||
eventWrapper.appendChild(titleWrapper);
|
||||
|
||||
var timeWrapper = document.createElement("td");
|
||||
timeWrapper.innerHTML = (event.today) ? this.config.todayText : moment(event.startDate,'x').fromNow();
|
||||
timeWrapper.innerHTML = (event.today) ? this.config.todayText : moment(event.startDate,"x").fromNow();
|
||||
// timeWrapper.innerHTML = moment(event.startDate,'x').format('lll');
|
||||
timeWrapper.className = "time light";
|
||||
eventWrapper.appendChild(timeWrapper);
|
||||
@@ -164,7 +164,7 @@ Module.register('calendar',{
|
||||
*/
|
||||
createEventList: function() {
|
||||
var events = [];
|
||||
var today = moment().startOf('day');
|
||||
var today = moment().startOf("day");
|
||||
for (var c in this.calendarData) {
|
||||
var calendar = this.calendarData[c];
|
||||
for (var e in calendar) {
|
||||
@@ -175,7 +175,7 @@ Module.register('calendar',{
|
||||
}
|
||||
}
|
||||
|
||||
events.sort(function(a,b) {
|
||||
events.sort(function(a, b) {
|
||||
return a.startDate - b.startDate;
|
||||
});
|
||||
|
||||
@@ -188,7 +188,7 @@ Module.register('calendar',{
|
||||
* argument url sting - Url to add.
|
||||
*/
|
||||
addCalendar: function(url) {
|
||||
this.sendSocketNotification('ADD_CALENDAR', {
|
||||
this.sendSocketNotification("ADD_CALENDAR", {
|
||||
url: url,
|
||||
maximumEntries: this.config.maximumEntries,
|
||||
maximumNumberOfDays: this.config.maximumNumberOfDays,
|
||||
@@ -206,7 +206,7 @@ Module.register('calendar',{
|
||||
symbolForUrl: function(url) {
|
||||
for (var c in this.config.calendars) {
|
||||
var calendar = this.config.calendars[c];
|
||||
if (calendar.url === url && typeof calendar.symbol === 'string') {
|
||||
if (calendar.url === url && typeof calendar.symbol === "string") {
|
||||
return calendar.symbol;
|
||||
}
|
||||
}
|
||||
|
@@ -5,10 +5,10 @@
|
||||
* MIT Licensed.
|
||||
*/
|
||||
|
||||
var NodeHelper = require('node_helper');
|
||||
var ical = require('ical');
|
||||
var moment = require('moment');
|
||||
var validUrl = require('valid-url');
|
||||
var NodeHelper = require("node_helper");
|
||||
var ical = require("ical");
|
||||
var moment = require("moment");
|
||||
var validUrl = require("valid-url");
|
||||
|
||||
var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays) {
|
||||
var self = this;
|
||||
@@ -27,7 +27,6 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
|
||||
clearTimeout(reloadTimer);
|
||||
reloadTimer = null;
|
||||
|
||||
|
||||
ical.fromURL(url, {}, function(err, data) {
|
||||
if (err) {
|
||||
fetchFailedCallback(self, err);
|
||||
@@ -38,66 +37,65 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
|
||||
//console.log(data);
|
||||
newEvents = [];
|
||||
|
||||
var limitFunction = function (date, i){return i < maximumEntries;};
|
||||
var limitFunction = function(date, i) {return i < maximumEntries;};
|
||||
|
||||
for (var e in data) {
|
||||
var event = data[e];
|
||||
var now = new Date();
|
||||
var today = moment().startOf('day');
|
||||
var today = moment().startOf("day");
|
||||
|
||||
//console.log(event);
|
||||
|
||||
// FIXME:
|
||||
// FIXME:
|
||||
// Ugly fix to solve the facebook birthday issue.
|
||||
// Otherwise, the recurring events only show the birthday for next year.
|
||||
var isFacebookBirthday = false;
|
||||
if (typeof event.uid !== 'undefined') {
|
||||
if (event.uid.indexOf('@facebook.com') !== -1) {
|
||||
if (typeof event.uid !== "undefined") {
|
||||
if (event.uid.indexOf("@facebook.com") !== -1) {
|
||||
isFacebookBirthday = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.type === 'VEVENT') {
|
||||
var startDate = (event.start.length === 8) ? moment(event.start, 'YYYYMMDD') : moment(new Date(event.start));
|
||||
if (event.type === "VEVENT") {
|
||||
var startDate = (event.start.length === 8) ? moment(event.start, "YYYYMMDD") : moment(new Date(event.start));
|
||||
if (event.start.length === 8) {
|
||||
startDate = startDate.startOf('day');
|
||||
startDate = startDate.startOf("day");
|
||||
}
|
||||
|
||||
if (typeof event.rrule != 'undefined' && !isFacebookBirthday) {
|
||||
if (typeof event.rrule != "undefined" && !isFacebookBirthday) {
|
||||
var rule = event.rrule;
|
||||
|
||||
// Check if the timeset is set to this current time.
|
||||
// If so, the RRULE line does not contain any BYHOUR, BYMINUTE, BYSECOND params.
|
||||
// This causes the times of the recurring event to be incorrect.
|
||||
// By adjusting the timeset property, this issue is solved.
|
||||
|
||||
|
||||
if (rule.timeset[0].hour == now.getHours(),
|
||||
rule.timeset[0].minute == now.getMinutes(),
|
||||
rule.timeset[0].second == now.getSeconds()) {
|
||||
|
||||
rule.timeset[0].hour = startDate.format('H');
|
||||
rule.timeset[0].minute = startDate.format('m');
|
||||
rule.timeset[0].second = startDate.format('s');
|
||||
rule.timeset[0].hour = startDate.format("H");
|
||||
rule.timeset[0].minute = startDate.format("m");
|
||||
rule.timeset[0].second = startDate.format("s");
|
||||
}
|
||||
|
||||
var dates = rule.between(today, today.add(maximumNumberOfDays, 'days') , true, limitFunction);
|
||||
var dates = rule.between(today, today.add(maximumNumberOfDays, "days") , true, limitFunction);
|
||||
console.log(dates);
|
||||
for (var d in dates) {
|
||||
startDate = moment(new Date(dates[d]));
|
||||
newEvents.push({
|
||||
title: (typeof event.summary.val !== 'undefined') ? event.summary.val : event.summary,
|
||||
startDate: startDate.format('x'),
|
||||
title: (typeof event.summary.val !== "undefined") ? event.summary.val : event.summary,
|
||||
startDate: startDate.format("x"),
|
||||
fullDayEvent: (event.start.length === 8)
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// Single event.
|
||||
if (startDate >= today && startDate <= today.add(maximumNumberOfDays, 'days')) {
|
||||
if (startDate >= today && startDate <= today.add(maximumNumberOfDays, "days")) {
|
||||
newEvents.push({
|
||||
title: (typeof event.summary.val !== 'undefined') ? event.summary.val : event.summary,
|
||||
startDate: startDate.format('x'),
|
||||
title: (typeof event.summary.val !== "undefined") ? event.summary.val : event.summary,
|
||||
startDate: startDate.format("x"),
|
||||
fullDayEvent: (event.start.length === 8)
|
||||
});
|
||||
}
|
||||
@@ -105,7 +103,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
|
||||
}
|
||||
}
|
||||
|
||||
newEvents.sort(function(a,b) {
|
||||
newEvents.sort(function(a, b) {
|
||||
return a.startDate - b.startDate;
|
||||
});
|
||||
|
||||
@@ -190,14 +188,13 @@ module.exports = NodeHelper.create({
|
||||
|
||||
this.fetchers = [];
|
||||
|
||||
console.log('Starting node helper for: ' + this.name);
|
||||
|
||||
console.log("Starting node helper for: " + this.name);
|
||||
|
||||
},
|
||||
|
||||
// Override socketNotificationReceived method.
|
||||
socketNotificationReceived: function(notification, payload) {
|
||||
if (notification === 'ADD_CALENDAR') {
|
||||
if (notification === "ADD_CALENDAR") {
|
||||
//console.log('ADD_CALENDAR: ');
|
||||
this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays);
|
||||
}
|
||||
@@ -214,28 +211,28 @@ module.exports = NodeHelper.create({
|
||||
createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays) {
|
||||
var self = this;
|
||||
|
||||
if (!validUrl.isUri(url)){
|
||||
self.sendSocketNotification('INCORRECT_URL', {url:url});
|
||||
if (!validUrl.isUri(url)) {
|
||||
self.sendSocketNotification("INCORRECT_URL", {url: url});
|
||||
return;
|
||||
}
|
||||
|
||||
var fetcher;
|
||||
if (typeof self.fetchers[url] === 'undefined') {
|
||||
console.log('Create new calendar fetcher for url: ' + url + ' - Interval: ' + fetchInterval);
|
||||
if (typeof self.fetchers[url] === "undefined") {
|
||||
console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval);
|
||||
fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays);
|
||||
|
||||
fetcher.onReceive(function(fetcher) {
|
||||
//console.log('Broadcast events.');
|
||||
//console.log(fetcher.events());
|
||||
|
||||
self.sendSocketNotification('CALENDAR_EVENTS', {
|
||||
self.sendSocketNotification("CALENDAR_EVENTS", {
|
||||
url: fetcher.url(),
|
||||
events: fetcher.events()
|
||||
});
|
||||
});
|
||||
|
||||
fetcher.onError(function(fetcher, error) {
|
||||
self.sendSocketNotification('FETCH_ERROR', {
|
||||
self.sendSocketNotification("FETCH_ERROR", {
|
||||
url: fetcher.url(),
|
||||
error: error
|
||||
});
|
||||
|
Reference in New Issue
Block a user