diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d4787a3..2085491d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fixed compatibility issues caused when modules request different versions of Font Awesome, see issue [#1522](https://github.com/MichMich/MagicMirror/issues/1522). MagicMirror now uses [Font Awesome 5 with v4 shims included for backwards compatibility](https://fontawesome.com/how-to-use/on-the-web/setup/upgrading-from-version-4#shims). - Installation script problems with raspbian - Calendar: only show repeating count if the event is actually repeating [#1534](https://github.com/MichMich/MagicMirror/pull/1534) +- Calendar: Fix exdate handling when multiple values are specified (comma separated) ### New weather module - Fixed weather forecast table display [#1499](https://github.com/MichMich/MagicMirror/issues/1499). diff --git a/modules/default/calendar/vendor/ical.js/ical.js b/modules/default/calendar/vendor/ical.js/ical.js index f60c5357..8f0c532b 100644 --- a/modules/default/calendar/vendor/ical.js/ical.js +++ b/modules/default/calendar/vendor/ical.js/ical.js @@ -80,16 +80,45 @@ } } - var addTZ = function(dt, name, params){ + var addTZ = function(dt, params){ var p = parseParams(params); - if (params && p){ - dt[name].tz = p.TZID + if (params && p && dt){ + dt.tz = p.TZID } return dt } + var parseTimestamp = function(val){ + //typical RFC date-time format + var comps = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(Z)?$/.exec(val); + if (comps !== null) { + if (comps[7] == 'Z'){ // GMT + return new Date(Date.UTC( + parseInt(comps[1], 10), + parseInt(comps[2], 10)-1, + parseInt(comps[3], 10), + parseInt(comps[4], 10), + parseInt(comps[5], 10), + parseInt(comps[6], 10 ) + )); + // TODO add tz + } else { + return new Date( + parseInt(comps[1], 10), + parseInt(comps[2], 10)-1, + parseInt(comps[3], 10), + parseInt(comps[4], 10), + parseInt(comps[5], 10), + parseInt(comps[6], 10) + ); + } + } + + return undefined; + } + var dateParam = function(name){ return function(val, params, curr){ @@ -108,37 +137,24 @@ comps[3] ); - return addTZ(curr, name, params); + curr[name] = addTZ(curr[name], params); + return curr; } } + curr[name] = [] + val.split(',').forEach(function(val){ + var newDate = parseTimestamp(val); + curr[name].push(addTZ(newDate, params)); + }); - //typical RFC date-time format - var comps = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(Z)?$/.exec(val); - if (comps !== null) { - if (comps[7] == 'Z'){ // GMT - curr[name] = new Date(Date.UTC( - parseInt(comps[1], 10), - parseInt(comps[2], 10)-1, - parseInt(comps[3], 10), - parseInt(comps[4], 10), - parseInt(comps[5], 10), - parseInt(comps[6], 10 ) - )); - // TODO add tz - } else { - curr[name] = new Date( - parseInt(comps[1], 10), - parseInt(comps[2], 10)-1, - parseInt(comps[3], 10), - parseInt(comps[4], 10), - parseInt(comps[5], 10), - parseInt(comps[6], 10) - ); - } + if (curr[name].length === 0){ + delete curr[name]; + } else if (curr[name].length === 1){ + curr[name] = curr[name][0]; } - return addTZ(curr, name, params) + return curr; } } @@ -148,7 +164,11 @@ if (date.exdates === undefined) { date.exdates = []; } - date.exdates.push(date.exdate); + if (Array.isArray(date.exdate)){ + date.exdates = date.exdates.concat(date.exdate); + } else { + date.exdates.push(date.exdate); + } return date; } }