Top.Mail.Ru
? ?
Image

Imagebbseva


bbseva, posts by tag: javascript - LiveJournal


Entries by tag: javascript

Publish event to Google Calendar link generator
Image
Imagebbseva
Description:
Generates well formed link to add event to one's Google Calendar. More info on Google Calendar event publisher guide

Source:
//declare namespace
GoogleCalendar = function() {

    return {
        /**
         * Returns link to add to google calendar
         * @param event = {
            what, //title
            dates : {
                start: {
                    year,month,day,hour,minute
                },
                end: {
                    year,month,day,hour,minute
                }
            },
            location,
            trp, //show busy true/false
            url : window.location.href
         * }
         */
        getGoogleCalendarEventLink : function(event) {
            var url = "http://www.google.com/calendar/event?action=TEMPLATE";
            url += "&text=" + urlFormat(event.what);
            url += "&dates=" + getDateString(event.dates);
            url += "&details=" + urlFormat(event.url);
            url += "&location=" + urlFormat(event.location);
            url += "&trp=" + event.trp;
            url += "&sprop=" + urlFormat(event.url);

            return url;
        }
    };

    function urlFormat(str) {
        var newstr = str.replace(/^\s+/g, "");
        return encodeURIComponent(newstr.replace(/\s+$/g, ""));
    }

    // Determines the CGI argument for dates parameter based on user input
    function getDateString( dates ) {
        var dateString = "";

        dateString += getUTCDateString(dates.start.year,
                dates.start.month,
                dates.start.day,
                dates.start.hour,
                dates.start.minute);
        dateString += "/";
        dateString += getUTCDateString(dates.end.year,
                dates.end.month,
                dates.end.day,
                dates.end.hour,
                dates.end.minute);
        return dateString;
    }

    // Converts the given time into UTC, returns this in a string
    function getUTCDateString(y,m,d,h,min) {
        var timeObj = new Date(y,m,d,h,min);
        var dateStr = "" + timeObj.getUTCFullYear();
        dateStr += stringPad(timeObj.getUTCMonth()+1);
        dateStr += stringPad(timeObj.getUTCDate());
        dateStr += "T" + stringPad(timeObj.getUTCHours());
        dateStr += stringPad(timeObj.getUTCMinutes()) + "00Z";
        return dateStr;
    }

    // Add a leading '0' if string is only 1 char
    function stringPad(str) {
        var newStr = "" + str;
        if (newStr.length == 1) {
            newStr = "0" + newStr;
        }
        return newStr;
    }
}();


Usage:
//javascript
var link = document.getElementById('addToCalendar'),
event = {
            what : "Friday Beers",
            dates : {
                start: {
                    year : "2009",
                    month : "6",
                    day : "21",
                    hour : "16",
                    minute : "0"
                },
                end: {
                    year : "2009",
                    month : "6",
                    day : "21",
                    hour : "18",
                    minute : "0"
                }
            },
            location : "Sezam st. 5, Neverland, Universe ",
            trp: false,
            url : "http://www.example.com/event_description"
};
link.href = GoogleCalendar.getGoogleCalendarEventLink(event);
....
<!-- HTML Code -->
<a href="#" id="addToCalendar">Add event to my Google Calendar</a>


Image