UNPKG

json-object-editor

Version:

JOE the Json Object Editor | Platform Edition

104 lines (99 loc) 4.07 kB
function Calendar(){ var self = this; this.default = function(data,req){ try{ var events = data.events || data.event; var payload = { params:req.params, data:data } }catch(e){ return {errors:'plugin error: '+e,failedat:'plugin'}; } return payload; }; this.test = function(data,req){ var ics = "BEGIN:VCALENDAR\ \nVERSION:2.0\ \nPRODID:-//JOE the Json Object Editor\ \nBEGIN:VEVENT\ \nX-WR-CALNAME:JOE Calendar\ \nUID:2073c980-9545-11e6-99f9-791bff9883ed@joe.com\ \nDTSTAMP:20161018T151122Z\ \nDTSTART:201601130T065000\ \nDTEND:20161130T150000\ \nSUMMARY:Bolder Boulder\ \nDESCRIPTION:Annual 10-kilometer run in Boulder, Colorado\ \nLOCATION:Folsom Field, University of Colorado (finish line)\ \nURL:http://www.bolderboulder.com\ \nSTATUS:confirmed\ \nGEO:40.0095;105.2669\ \nCATEGORIES:10k races,Memorial Day Weekend,Boulder CO\ \nEND:VEVENT\ \nEND:VCALENDAR"; return {content:ics,"content-type":"text/calendar",filename:'test.ics'}; } this.events = function(data,req){ var events = (data.event || data.events ||'').split(',').condense(); logit('events',events); if(!events || !events.length){ return {error:'please specify at least one event'}; } var ics = "BEGIN:VCALENDAR\r\nPRODID:-//JOE the Json Object Editor\r\nMETHOD:PUBLISH" +"\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN" +"\r\nX-WR-TIMEZONE:US/Central"; ics += getEventICS(events); /* \nBEGIN:VEVENT\ \nX-WR-CALNAME:JOE Calendar\ \nUID:2073c980-9545-11e6-99f9-791bff9883ed@joe.com\ \nDTSTAMP:20161018T151122Z\ \nDTSTART:201601130T065000\ \nDTEND:20161130T150000\ \nSUMMARY:Bolder Boulder\ \nDESCRIPTION:Annual 10-kilometer run in Boulder, Colorado\ \nLOCATION:Folsom Field, University of Colorado (finish line)\ \nURL:http://www.bolderboulder.com\ \nSTATUS:confirmed\ \nGEO:40.0095;105.2669\ \nCATEGORIES:10k races,Memorial Day Weekend,Boulder CO\ \nEND:VEVENT\ */ ics+= "\r\nEND:VCALENDAR"; logit(ics); if(data.mode && data.mode == "feed"){ return ics; } return {content:ics,"content-type":"text/calendar",filename:'test.ics'}; } function formatICSDate(date, isAllDay) { var noMsDate = new Date(date.getTime()); noMsDate.setMilliseconds(0); var noMsDateISOString = noMsDate.toISOString(); var icsDateString = noMsDateISOString.replace(/-/g, '').replace(/:/g, '').replace(/\.000/g, ''); return isAllDay ? icsDateString.substring(0, icsDateString.indexOf('T')) : icsDateString; }; function getEventICS(eventIDs){ var events = eventIDs[0] == "all"?JOE.Data.event : JOE.Data.event.where({_id:{$in:eventIDs}}); logit(events.length+' events',eventIDs); var ics =''; var orgname = JOE.webconfig.name; events.map(function(ev){ ics += '\r\nBEGIN:VEVENT' +'\r\nORGANIZER;CN='+orgname+':MAILTO:joe@craydent.com' +'\r\nX-WR-CALNAME:'+orgname+' Calendar' +'\r\nUID:'+ev._id+'@jsonobjecteditor.com' +'\r\nDTSTAMP:'+formatICSDate(new Date(ev.joeUpdated||ev.created)) +'\r\nDTSTART:'+formatICSDate(new Date(ev.date+' '+ev.start_time+(ev.timezone_offset||''))) +'\r\nDTEND:'+formatICSDate(new Date(ev.date+' '+ev.end_time+(ev.timezone_offset||''))) +'\r\nSUMMARY:'+(ev.name||'untitled event') +'\r\nDESCRIPTION:'+ev.info+' - '//+ev.description +'\r\nEND:VEVENT'; }) return ics; } this.protected = []; return self; } module.exports = new Calendar();