Skip to content

Instantly share code, notes, and snippets.

@daltonrooney
Created September 6, 2019 05:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daltonrooney/4ae77a1139b9f23a78e2ba04bc25932c to your computer and use it in GitHub Desktop.
Save daltonrooney/4ae77a1139b9f23a78e2ba04bc25932c to your computer and use it in GitHub Desktop.
Output calendar links from event in Vue.js
var MS_IN_MINUTES = 60 * 1000;
var formatTime = function (date) {
date = new Date(date * 1000);
return date.toISOString().replace(/-|:|\.\d\d\d/g, "")
};
var calendarGenerators = {
google: function (event) {
var startTime = formatTime(event.start);
var endTime = formatTime(event.end);
var href = encodeURI([
'https://www.google.com/calendar/render',
'?action=TEMPLATE',
'&text=' + (event.title || ''),
'&dates=' + (startTime || ''),
'/' + (endTime || ''),
'&details=' + (event.description || ''),
'&location=' + (event.address || ''),
'&sprop=&sprop=name:'
].join(''));
return href;
},
ics: function (event) {
var startTime = formatTime(event.start);
var endTime = formatTime(event.end);
var href = encodeURI(
'data:text/calendar;charset=utf8,' + [
'BEGIN:VCALENDAR',
'VERSION:2.0',
'BEGIN:VEVENT',
'URL:' + document.URL,
'DTSTART:' + (startTime || ''),
'DTEND:' + (endTime || ''),
'SUMMARY:' + (event.title || ''),
'DESCRIPTION:' + (event.description || ''),
'LOCATION:' + (event.address || ''),
'END:VEVENT',
'END:VCALENDAR'].join('\n'));
return href;
},
ical: function (event) {
return this.ics(event);
},
outlook: function (event) {
return this.ics(event);
}
};
var generateCalendars = function (event) {
return {
google: calendarGenerators.google(event),
ical: calendarGenerators.ical(event),
outlook: calendarGenerators.outlook(event)
};
};
var validParams = function (params) {
return params !== undefined && params.data.start !== undefined &&
(params.data.end !== undefined);
}
export function createCalendar(params) {
if (!validParams(params)) {
console.log('Event details missing.');
return;
}
return generateCalendars(params.data);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment