forked from UsrSpace-Internal/website
41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
// Depends on https://raw.github.com/mozilla-comm/ical.js/master/build/ical.js
|
|
|
|
function ical_events(ical, event_callback, recur_event_callback) {
|
|
jcal_events(ICAL.parse(ical), event_callback, recur_event_callback)
|
|
}
|
|
|
|
function jcal_events(jcal, event_callback, recur_event_callback) {
|
|
for (event of new ICAL.Component(jcal).getAllSubcomponents('vevent')) {
|
|
if (event.hasProperty('rrule')) {
|
|
recur_event_callback(event)
|
|
} else {
|
|
event_callback(event)
|
|
}
|
|
}
|
|
}
|
|
|
|
function event_duration(event) {
|
|
return new Date(event.getFirstPropertyValue('dtend').toJSDate() - event.getFirstPropertyValue('dtstart').toJSDate()).getTime()
|
|
}
|
|
|
|
function event_dtend(dtstart, duration) {
|
|
return new ICAL.Time().fromJSDate(new Date(dtstart.toJSDate().getTime() + duration))
|
|
}
|
|
|
|
function expand_recur_event(event, dtstart, dtend, event_callback) {
|
|
exp = new ICAL.RecurExpansion({
|
|
component:event,
|
|
dtstart:event.getFirstPropertyValue('dtstart')
|
|
})
|
|
duration = event_duration(event)
|
|
while (! exp.complete && exp.next() < dtend) {
|
|
if (exp.last >= dtstart) {
|
|
event = new ICAL.Component(event.toJSON())
|
|
event.updatePropertyWithValue('dtstart', exp.last)
|
|
event.updatePropertyWithValue('dtend', event_dtend(exp.last, duration))
|
|
event_callback(event)
|
|
}
|
|
}
|
|
}
|
|
|