diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 6854803a..385b917d 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -121,7 +121,13 @@ The following properties can be configured: emptyCalendarText Text to display when there are no upcoming events.
-
Default value: ''No upcoming events.' +
Default value: 'No upcoming events.' + + + + todayText + Text to display when an event is planned for today.
+
Default value: 'Today' diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 3365ea00..a9c54022 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -30,7 +30,10 @@ Module.register('calendar',{ 'De verjaardag van ' : '' }, loadingText: 'Loading events …', - emptyCalendarText: 'No upcoming 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' }, // Define required scripts. @@ -112,7 +115,8 @@ Module.register('calendar',{ eventWrapper.appendChild(titleWrapper); var timeWrapper = document.createElement("td"); - timeWrapper.innerHTML = 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); @@ -160,11 +164,13 @@ Module.register('calendar',{ */ createEventList: function() { var events = []; + var today = moment().startOf('day'); for (var c in this.calendarData) { var calendar = this.calendarData[c]; for (var e in calendar) { var event = calendar[e]; event.url = c; + event.today = event.startDate >= today && event.startDate < (today + 24 * 60 * 60 * 1000); events.push(event); } } diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index 238bb84b..215f60ee 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -42,19 +42,35 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe for (var e in data) { var event = data[e]; + var now = new Date(); var today = moment().startOf('day'); + //console.log(event); + + // 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) { + isFacebookBirthday = true; + } + } + 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'); + } - if (typeof event.rrule != 'undefined') { + 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. - var now = new Date(); + if (rule.timeset[0].hour == now.getHours(), rule.timeset[0].minute == now.getMinutes(), @@ -65,23 +81,24 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe rule.timeset[0].second = startDate.format('s'); } - var dates = rule.between(new Date(), today.add(maximumNumberOfDays, 'days') , true, limitFunction); - //console.log(dates); + 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') + 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') + startDate: startDate.format('x'), + fullDayEvent: (event.start.length === 8) }); } }