fertiges design.
This commit is contained in:
parent
d31681cee1
commit
74f38656f7
|
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
export function googleCalendarUrl({ title, details, location, start, end }){
|
||||||
|
const params = new URLSearchParams({
|
||||||
|
action: 'TEMPLATE',
|
||||||
|
text: title,
|
||||||
|
details,
|
||||||
|
location,
|
||||||
|
dates: `${formatDate(start)}/${formatDate(end)}`
|
||||||
|
})
|
||||||
|
return `https://calendar.google.com/calendar/render?${params.toString()}`
|
||||||
|
}
|
||||||
|
|
||||||
|
export function downloadICS({ title, details, location, start, end, filename='event.ics' }){
|
||||||
|
const ics = [
|
||||||
|
'BEGIN:VCALENDAR',
|
||||||
|
'VERSION:2.0',
|
||||||
|
'PRODID:-//Annaville SDA Church//EN',
|
||||||
|
'CALSCALE:GREGORIAN',
|
||||||
|
'BEGIN:VEVENT',
|
||||||
|
`DTSTART:${formatDate(start)}`,
|
||||||
|
`DTEND:${formatDate(end)}`,
|
||||||
|
`SUMMARY:${escapeICS(title)}`,
|
||||||
|
`DESCRIPTION:${escapeICS(details || '')}`,
|
||||||
|
`LOCATION:${escapeICS(location || '')}`,
|
||||||
|
'END:VEVENT',
|
||||||
|
'END:VCALENDAR'
|
||||||
|
].join('\r\n')
|
||||||
|
const blob = new Blob([ics], { type: 'text/calendar' })
|
||||||
|
const url = URL.createObjectURL(blob)
|
||||||
|
const a = document.createElement('a')
|
||||||
|
a.href = url; a.download = filename; a.click()
|
||||||
|
URL.revokeObjectURL(url)
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatDate(date){
|
||||||
|
const pad = n => String(n).padStart(2, '0')
|
||||||
|
return `${date.getUTCFullYear()}${pad(date.getUTCMonth()+1)}${pad(date.getUTCDate())}T${pad(date.getUTCHours())}${pad(date.getUTCMinutes())}00Z`
|
||||||
|
}
|
||||||
|
function escapeICS(text){
|
||||||
|
return text.replace(/,/g, '\\,').replace(/;/g, '\\;').replace(/\n/g, '\\n')
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue