Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
/*!
2
 * FullCalendar v2.1.1 Google Calendar Plugin
3
 * Docs & License: http://arshaw.com/fullcalendar/
4
 * (c) 2013 Adam Shaw
5
 */
6
 
7
(function(factory) {
8
        if (typeof define === 'function' && define.amd) {
9
                define([ 'jquery' ], factory);
10
        }
11
        else {
12
                factory(jQuery);
13
        }
14
})(function($) {
15
 
16
 
17
var fc = $.fullCalendar;
18
var applyAll = fc.applyAll;
19
 
20
 
21
fc.sourceNormalizers.push(function(sourceOptions) {
22
        if (sourceOptions.dataType == 'gcal' ||
23
                sourceOptions.dataType === undefined &&
24
                (sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) {
25
                        sourceOptions.dataType = 'gcal';
26
                        if (sourceOptions.editable === undefined) {
27
                                sourceOptions.editable = false;
28
                        }
29
                }
30
});
31
 
32
 
33
fc.sourceFetchers.push(function(sourceOptions, start, end, timezone) {
34
        if (sourceOptions.dataType == 'gcal') {
35
                return transformOptions(sourceOptions, start, end, timezone);
36
        }
37
});
38
 
39
 
40
function transformOptions(sourceOptions, start, end, timezone) {
41
 
42
        var success = sourceOptions.success;
43
        var data = $.extend({}, sourceOptions.data || {}, {
44
                singleevents: true,
45
                'max-results': 9999
46
        });
47
 
48
        return $.extend({}, sourceOptions, {
49
                url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?',
50
                dataType: 'jsonp',
51
                data: data,
52
                timezoneParam: 'ctz',
53
                startParam: 'start-min',
54
                endParam: 'start-max',
55
                success: function(data) {
56
                        var events = [];
57
                        if (data.feed.entry) {
58
                                $.each(data.feed.entry, function(i, entry) {
59
 
60
                                        var url;
61
                                        $.each(entry.link, function(i, link) {
62
                                                if (link.type == 'text/html') {
63
                                                        url = link.href;
64
                                                        if (timezone && timezone != 'local') {
65
                                                                url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + encodeURIComponent(timezone);
66
                                                        }
67
                                                }
68
                                        });
69
 
70
                                        events.push({
71
                                                id: entry.gCal$uid.value,
72
                                                title: entry.title.$t,
73
                                                start: entry.gd$when[0].startTime,
74
                                                end: entry.gd$when[0].endTime,
75
                                                url: url,
76
                                                location: entry.gd$where[0].valueString,
77
                                                description: entry.content.$t
78
                                        });
79
 
80
                                });
81
                        }
82
                        var args = [events].concat(Array.prototype.slice.call(arguments, 1));
83
                        var res = applyAll(success, this, args);
84
                        if ($.isArray(res)) {
85
                                return res;
86
                        }
87
                        return events;
88
                }
89
        });
90
 
91
}
92
 
93
 
94
// legacy
95
fc.gcalFeed = function(url, sourceOptions) {
96
        return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' });
97
};
98
 
99
 
100
});