From 63819c5757b0e0cc3c5d0003c4f4c5671407e6d5 Mon Sep 17 00:00:00 2001 From: Joseph Bethge Date: Sat, 21 Jan 2017 16:05:29 +0100 Subject: [PATCH] fix calendar issues --- CHANGELOG.md | 2 +- modules/default/calendar/vendor/ical.js/ical.js | 12 +++++++++++- modules/default/calendar/vendor/ical.js/node-ical.js | 11 ++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1e8571f..3211d200 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Installer: Use init config.js from config.js.sample. -- Switched out `rrule` package for `rrule-alt` in order to improve calendar issues. (Experimental: [#565](https://github.com/MichMich/MagicMirror/issues/565)) +- Switched out `rrule` package for `rrule-alt` and fixes in `ical.js` in order to fix calendar issues. ([#565](https://github.com/MichMich/MagicMirror/issues/565)) - Make mouse events pass through the region fullscreen_above to modules below. - Scaled the splash screen down to make it a bit more subtle. - Replace HTML tables with markdown tables in README files. diff --git a/modules/default/calendar/vendor/ical.js/ical.js b/modules/default/calendar/vendor/ical.js/ical.js index 252e426b..f60c5357 100644 --- a/modules/default/calendar/vendor/ical.js/ical.js +++ b/modules/default/calendar/vendor/ical.js/ical.js @@ -90,7 +90,6 @@ return dt } - var dateParam = function(name){ return function(val, params, curr){ @@ -143,6 +142,16 @@ } } + var exdateParam = function(name){ + return function(val, params, curr){ + var date = dateParam(name)(val, params, curr); + if (date.exdates === undefined) { + date.exdates = []; + } + date.exdates.push(date.exdate); + return date; + } + } var geoParam = function(name){ return function(val, params, curr){ @@ -240,6 +249,7 @@ , 'LOCATION' : storeParam('location') , 'DTSTART' : dateParam('start') , 'DTEND' : dateParam('end') + , 'EXDATE' : exdateParam('exdate') ,' CLASS' : storeParam('class') , 'TRANSP' : storeParam('transparency') , 'GEO' : geoParam('geo') diff --git a/modules/default/calendar/vendor/ical.js/node-ical.js b/modules/default/calendar/vendor/ical.js/node-ical.js index e2c4a319..c954e722 100644 --- a/modules/default/calendar/vendor/ical.js/node-ical.js +++ b/modules/default/calendar/vendor/ical.js/node-ical.js @@ -18,6 +18,7 @@ exports.parseFile = function(filename){ var rrule = require('rrule-alt').RRule +var rrulestr = rrule.rrulestr ical.objectHandlers['RRULE'] = function(val, params, curr, stack, line){ curr.rrule = line; @@ -26,7 +27,7 @@ ical.objectHandlers['RRULE'] = function(val, params, curr, stack, line){ var originalEnd = ical.objectHandlers['END']; ical.objectHandlers['END'] = function(val, params, curr, stack){ if (curr.rrule) { - var rule = curr.rrule.replace('RRULE:', ''); + var rule = curr.rrule; if (rule.indexOf('DTSTART') === -1) { if (curr.start.length === 8) { @@ -36,10 +37,14 @@ ical.objectHandlers['END'] = function(val, params, curr, stack){ } } - rule += ';DTSTART=' + curr.start.toISOString().replace(/[-:]/g, ''); + rule += ' DTSTART:' + curr.start.toISOString().replace(/[-:]/g, ''); rule = rule.replace(/\.[0-9]{3}/, ''); } - curr.rrule = rrule.fromString(rule); + for (var i in curr.exdates) { + rule += ' EXDATE:' + curr.exdates[i].toISOString().replace(/[-:]/g, ''); + rule = rule.replace(/\.[0-9]{3}/, ''); + } + curr.rrule = rrulestr(rule); } return originalEnd.call(this, val, params, curr, stack); }