63 lines
1.8 KiB
JavaScript
Executable file
63 lines
1.8 KiB
JavaScript
Executable file
(function($) {
|
|
|
|
$.fullCalendar.gcalFeed = function(feedUrl, options) {
|
|
|
|
feedUrl = feedUrl.replace(/\/basic$/, '/full');
|
|
options = options || {};
|
|
|
|
return function(start, end, callback) {
|
|
$.getJSON(feedUrl + "?alt=json-in-script&callback=?",
|
|
{
|
|
'start-min': $.fullCalendar.formatDate(start, 'u'),
|
|
'start-max': $.fullCalendar.formatDate(end, 'u'),
|
|
'singleevents': true,
|
|
'max-results': 1000
|
|
},
|
|
function(data) {
|
|
var events = [];
|
|
if (data.feed.entry)
|
|
$.each(data.feed.entry, function(i, entry) {
|
|
var url;
|
|
$.each(entry['link'], function(j, link) {
|
|
if (link.type == 'text/html') {
|
|
url = link.href;
|
|
}
|
|
});
|
|
var startStr = entry['gd$when'][0]['startTime'];
|
|
var start = $.fullCalendar.parseDate(startStr);
|
|
var end = $.fullCalendar.parseDate(entry['gd$when'][0]['endTime']);
|
|
var allDay = startStr.indexOf('T') == -1;
|
|
var classNames = [];
|
|
if (allDay) {
|
|
end = new Date(end - 1); // make in inclusive
|
|
}else{
|
|
classNames.push('fc-event-nobg');
|
|
}
|
|
if (options.className) {
|
|
if (typeof options.className == 'string') {
|
|
classNames.push(options.className);
|
|
}else{
|
|
classNames = classNames.concat(options.className);
|
|
}
|
|
}
|
|
events.push({
|
|
id: entry['gCal$uid']['value'],
|
|
url: url,
|
|
title: entry['title']['$t'],
|
|
start: $.fullCalendar.parseDate(entry['gd$when'][0]['startTime']),
|
|
end: end,
|
|
location: entry['gd$where'][0]['valueString'],
|
|
description: entry['content']['$t'],
|
|
allDay: allDay,
|
|
className: classNames,
|
|
editable: options.editable || false
|
|
});
|
|
});
|
|
callback(events);
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
})(jQuery);
|