| 21627 |
kshitij.so |
1 |
/*
|
|
|
2 |
* FullCalendar v1.5.4 Google Calendar Plugin
|
|
|
3 |
*
|
|
|
4 |
* Copyright (c) 2011 Adam Shaw
|
|
|
5 |
* Dual licensed under the MIT and GPL licenses, located in
|
|
|
6 |
* MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
|
|
|
7 |
*
|
|
|
8 |
* Date: Tue Sep 4 23:38:33 2012 -0700
|
|
|
9 |
*
|
|
|
10 |
*/
|
|
|
11 |
|
|
|
12 |
(function($) {
|
|
|
13 |
|
|
|
14 |
|
|
|
15 |
var fc = $.fullCalendar;
|
|
|
16 |
var formatDate = fc.formatDate;
|
|
|
17 |
var parseISO8601 = fc.parseISO8601;
|
|
|
18 |
var addDays = fc.addDays;
|
|
|
19 |
var applyAll = fc.applyAll;
|
|
|
20 |
|
|
|
21 |
|
|
|
22 |
fc.sourceNormalizers.push(function(sourceOptions) {
|
|
|
23 |
if (sourceOptions.dataType == 'gcal' ||
|
|
|
24 |
sourceOptions.dataType === undefined &&
|
|
|
25 |
(sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) {
|
|
|
26 |
sourceOptions.dataType = 'gcal';
|
|
|
27 |
if (sourceOptions.editable === undefined) {
|
|
|
28 |
sourceOptions.editable = false;
|
|
|
29 |
}
|
|
|
30 |
}
|
|
|
31 |
});
|
|
|
32 |
|
|
|
33 |
|
|
|
34 |
fc.sourceFetchers.push(function(sourceOptions, start, end) {
|
|
|
35 |
if (sourceOptions.dataType == 'gcal') {
|
|
|
36 |
return transformOptions(sourceOptions, start, end);
|
|
|
37 |
}
|
|
|
38 |
});
|
|
|
39 |
|
|
|
40 |
|
|
|
41 |
function transformOptions(sourceOptions, start, end) {
|
|
|
42 |
|
|
|
43 |
var success = sourceOptions.success;
|
|
|
44 |
var data = $.extend({}, sourceOptions.data || {}, {
|
|
|
45 |
'start-min': formatDate(start, 'u'),
|
|
|
46 |
'start-max': formatDate(end, 'u'),
|
|
|
47 |
'singleevents': true,
|
|
|
48 |
'max-results': 9999
|
|
|
49 |
});
|
|
|
50 |
|
|
|
51 |
var ctz = sourceOptions.currentTimezone;
|
|
|
52 |
if (ctz) {
|
|
|
53 |
data.ctz = ctz = ctz.replace(' ', '_');
|
|
|
54 |
}
|
|
|
55 |
|
|
|
56 |
return $.extend({}, sourceOptions, {
|
|
|
57 |
url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?',
|
|
|
58 |
dataType: 'jsonp',
|
|
|
59 |
data: data,
|
|
|
60 |
startParam: false,
|
|
|
61 |
endParam: false,
|
|
|
62 |
success: function(data) {
|
|
|
63 |
var events = [];
|
|
|
64 |
if (data.feed.entry) {
|
|
|
65 |
$.each(data.feed.entry, function(i, entry) {
|
|
|
66 |
var startStr = entry['gd$when'][0]['startTime'];
|
|
|
67 |
var start = parseISO8601(startStr, true);
|
|
|
68 |
var end = parseISO8601(entry['gd$when'][0]['endTime'], true);
|
|
|
69 |
var allDay = startStr.indexOf('T') == -1;
|
|
|
70 |
var url;
|
|
|
71 |
$.each(entry.link, function(i, link) {
|
|
|
72 |
if (link.type == 'text/html') {
|
|
|
73 |
url = link.href;
|
|
|
74 |
if (ctz) {
|
|
|
75 |
url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + ctz;
|
|
|
76 |
}
|
|
|
77 |
}
|
|
|
78 |
});
|
|
|
79 |
if (allDay) {
|
|
|
80 |
addDays(end, -1); // make inclusive
|
|
|
81 |
}
|
|
|
82 |
events.push({
|
|
|
83 |
id: entry['gCal$uid']['value'],
|
|
|
84 |
title: entry['title']['$t'],
|
|
|
85 |
url: url,
|
|
|
86 |
start: start,
|
|
|
87 |
end: end,
|
|
|
88 |
allDay: allDay,
|
|
|
89 |
location: entry['gd$where'][0]['valueString'],
|
|
|
90 |
description: entry['content']['$t']
|
|
|
91 |
});
|
|
|
92 |
});
|
|
|
93 |
}
|
|
|
94 |
var args = [events].concat(Array.prototype.slice.call(arguments, 1));
|
|
|
95 |
var res = applyAll(success, this, args);
|
|
|
96 |
if ($.isArray(res)) {
|
|
|
97 |
return res;
|
|
|
98 |
}
|
|
|
99 |
return events;
|
|
|
100 |
}
|
|
|
101 |
});
|
|
|
102 |
|
|
|
103 |
}
|
|
|
104 |
|
|
|
105 |
|
|
|
106 |
// legacy
|
|
|
107 |
fc.gcalFeed = function(url, sourceOptions) {
|
|
|
108 |
return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' });
|
|
|
109 |
};
|
|
|
110 |
|
|
|
111 |
|
|
|
112 |
})(jQuery);
|