~jstys-z/helioviewer.org/client5

« back to all changes in this revision

Viewing changes to lib/jquery.jfeed/build/jquery.jfeed.js

Preparing to merge in my branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* jFeed : jQuery feed parser plugin
2
 
 * Copyright (C) 2007 Jean-François Hovinne - http://www.hovinne.com/
3
 
 * Dual licensed under the MIT (MIT-license.txt)
4
 
 * and GPL (GPL-license.txt) licenses.
5
 
 */
6
 
 
7
 
jQuery.getFeed = function(options) {
8
 
 
9
 
    options = jQuery.extend({
10
 
 
11
 
        url: null,
12
 
        data: null,
13
 
        cache: true,
14
 
        success: null,
15
 
        failure: null,
16
 
        error: null,
17
 
        global: true,
18
 
        dataType: "xml",
19
 
 
20
 
    }, options);
21
 
 
22
 
    if (options.url) {
23
 
        
24
 
        if (jQuery.isFunction(options.failure) && jQuery.type(options.error)==='null') {
25
 
          // Handle legacy failure option
26
 
          options.error = function(xhr, msg, e){
27
 
            options.failure(msg, e);
28
 
          }
29
 
        } else if (jQuery.type(options.failure) === jQuery.type(options.error) === 'null') {
30
 
          // Default error behavior if failure & error both unspecified
31
 
          options.error = function(xhr, msg, e){
32
 
            window.console&&console.log('getFeed failed to load feed', xhr, msg, e);
33
 
          }
34
 
        }
35
 
 
36
 
        return $.ajax({
37
 
            type: 'GET',
38
 
            url: options.url,
39
 
            data: options.data,
40
 
            cache: options.cache,
41
 
            dataType: (jQuery.browser.msie) ? "text" : options.dataType,
42
 
            success: function(xml) {
43
 
                var feed = new JFeed(xml);
44
 
                if (jQuery.isFunction(options.success)) options.success(feed);
45
 
            },
46
 
            error: options.error,
47
 
            global: options.global
48
 
        });
49
 
    }
50
 
};
51
 
 
52
 
function JFeed(xml) {
53
 
    if (xml) this.parse(xml);
54
 
}
55
 
;
56
 
 
57
 
JFeed.prototype = {
58
 
 
59
 
    type: '',
60
 
    version: '',
61
 
    title: '',
62
 
    link: '',
63
 
    description: '',
64
 
    parse: function(xml) {
65
 
 
66
 
        if (jQuery.browser.msie) {
67
 
            var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
68
 
            xmlDoc.loadXML(xml);
69
 
            xml = xmlDoc;
70
 
        }
71
 
 
72
 
        if (jQuery('channel', xml).length == 1) {
73
 
 
74
 
            this.type = 'rss';
75
 
            var feedClass = new JRss(xml);
76
 
 
77
 
        } else if (jQuery('feed', xml).length == 1) {
78
 
 
79
 
            this.type = 'atom';
80
 
            var feedClass = new JAtom(xml);
81
 
        }
82
 
 
83
 
        if (feedClass) jQuery.extend(this, feedClass);
84
 
    }
85
 
};
86
 
 
87
 
function JFeedItem() {};
88
 
 
89
 
JFeedItem.prototype = {
90
 
 
91
 
    title: '',
92
 
    link: '',
93
 
    description: '',
94
 
    updated: '',
95
 
    id: ''
96
 
};
97
 
 
98
 
function JAtom(xml) {
99
 
    this._parse(xml);
100
 
};
101
 
 
102
 
JAtom.prototype = {
103
 
    
104
 
    _parse: function(xml) {
105
 
    
106
 
        var channel = jQuery('feed', xml).eq(0);
107
 
 
108
 
        this.version = '1.0';
109
 
        this.title = jQuery(channel).find('title:first').text();
110
 
        this.link = jQuery(channel).find('link:first').attr('href');
111
 
        this.description = jQuery(channel).find('subtitle:first').text();
112
 
        this.language = jQuery(channel).attr('xml:lang');
113
 
        this.updated = jQuery(channel).find('updated:first').text();
114
 
        
115
 
        this.items = new Array();
116
 
        
117
 
        var feed = this;
118
 
        
119
 
        jQuery('entry', xml).each( function() {
120
 
        
121
 
            var item = new JFeedItem();
122
 
            
123
 
            item.title = jQuery(this).find('title').eq(0).text();
124
 
            item.link = jQuery(this).find('link').eq(0).attr('href');
125
 
            item.description = jQuery(this).find('content').eq(0).text();
126
 
            item.updated = jQuery(this).find('updated').eq(0).text();
127
 
            item.id = jQuery(this).find('id').eq(0).text();
128
 
            
129
 
            feed.items.push(item);
130
 
        });
131
 
    }
132
 
};
133
 
 
134
 
function JRss(xml) {
135
 
    this._parse(xml);
136
 
};
137
 
 
138
 
JRss.prototype  = {
139
 
    
140
 
    _parse: function(xml) {
141
 
    
142
 
        if(jQuery('rss', xml).length == 0) this.version = '1.0';
143
 
        else this.version = jQuery('rss', xml).eq(0).attr('version');
144
 
 
145
 
        var channel = jQuery('channel', xml).eq(0);
146
 
    
147
 
        this.title = jQuery(channel).find('title:first').text();
148
 
        this.link = jQuery(channel).find('link:first').text();
149
 
        this.description = jQuery(channel).find('description:first').text();
150
 
        this.language = jQuery(channel).find('language:first').text();
151
 
        this.updated = jQuery(channel).find('lastBuildDate:first').text();
152
 
    
153
 
        this.items = new Array();
154
 
        
155
 
        var feed = this;
156
 
        
157
 
        jQuery('item', xml).each( function() {
158
 
        
159
 
            var item = new JFeedItem();
160
 
            
161
 
            item.title = jQuery(this).find('title').eq(0).text();
162
 
            item.link = jQuery(this).find('link').eq(0).text();
163
 
            item.description = jQuery(this).find('description').eq(0).text();
164
 
            item.updated = jQuery(this).find('pubDate').eq(0).text();
165
 
            item.id = jQuery(this).find('guid').eq(0).text();
166
 
            
167
 
            feed.items.push(item);
168
 
        });
169
 
    }
170
 
};
171