(function($) { $.fullCalendar.gcalFeed = function(feedUrl, options) { feedUrl = feedUrl.replace(/\/basic$/, '/full'); options = options || {}; return function(start, end, callback) { var params = { 'start-min': $.fullCalendar.formatDate(start, 'u'), 'start-max': $.fullCalendar.formatDate(end, 'u'), 'singleevents': true, 'max-results': 9999 }; if (options.currentTimezone) { params.ctz = options.currentTimezone.replace(' ', '_'); } $.getJSON(feedUrl + "?alt=json-in-script&callback=?", params, function(data) { var events = []; if (data.feed.entry) { $.each(data.feed.entry, function(i, entry) { var startStr = entry['gd$when'][0]['startTime'], start = $.fullCalendar.parseISO8601(startStr, true), end = $.fullCalendar.parseISO8601(entry['gd$when'][0]['endTime'], true), allDay = startStr.indexOf('T') == -1, url; $.each(entry.link, function() { if (this.type == 'text/html') { url = this.href; } }); if (allDay) { $.fullCalendar.addDays(end, -1); // make inclusive } events.push({ id: entry['gCal$uid']['value'], title: entry['title']['$t'], url: url, start: start, end: end, allDay: allDay, location: entry['gd$where'][0]['valueString'], description: entry['content']['$t'], className: options.className, editable: options.editable || false }); }); } callback(events); }); } } })(jQuery);