@@ -9,6 +9,9 @@ function getFeedsURLs(url, callback) {
9
9
// Check if it's a Reddit URL
10
10
var rdRss = getRedditRss ( url ) ;
11
11
12
+ // Check if it's a Kickstarter URL
13
+ var ksRss = getKickstarterRss ( url ) ;
14
+
12
15
if ( ytRss !== false )
13
16
{
14
17
var feeds_urls = [ ] ;
@@ -37,83 +40,108 @@ function getFeedsURLs(url, callback) {
37
40
38
41
callback ( feeds_urls ) ;
39
42
}
43
+ else if ( ksRss !== false )
44
+ {
45
+ var feeds_urls = [ ] ;
46
+
47
+ var feed = {
48
+ type : '' ,
49
+ url : ksRss ,
50
+ title : ksRss ,
51
+ } ;
52
+
53
+ feeds_urls . push ( feed ) ;
54
+
55
+ callback ( feeds_urls ) ;
56
+ }
40
57
else
41
58
{
42
- var x = new XMLHttpRequest ( ) ;
43
- x . open ( 'GET' , url ) ;
44
-
45
- x . responseType = '' ;
46
- x . onload = function ( ) {
47
- var response = x . response ;
48
-
49
- var feeds_urls = [ ] ;
50
- var types = [
51
- 'application/rss+xml' ,
52
- 'application/atom+xml' ,
53
- 'application/rdf+xml' ,
54
- 'application/rss' ,
55
- 'application/atom' ,
56
- 'application/rdf' ,
57
- 'text/rss+xml' ,
58
- 'text/atom+xml' ,
59
- 'text/rdf+xml' ,
60
- 'text/rss' ,
61
- 'text/atom' ,
62
- 'text/rdf'
63
- ] ;
64
-
65
- document . getElementById ( 'rss-feed-url_response' ) . innerHTML = response ;
66
-
67
- var links = document . getElementById ( 'rss-feed-url_response' ) . querySelectorAll ( "#rss-feed-url_response link[type]" ) ;
68
-
69
- document . getElementById ( 'rss-feed-url_response' ) . innerHTML = '' ;
70
-
71
- for ( var i = 0 ; i < links . length ; i ++ )
72
- {
73
- if ( links [ i ] . hasAttribute ( 'type' ) && types . indexOf ( links [ i ] . getAttribute ( 'type' ) ) !== - 1 )
74
- {
75
- feed_url = links [ i ] . getAttribute ( 'href' ) ;
76
-
77
- // If feed's url starts with "//"
78
- if ( feed_url . indexOf ( "//" ) == 0 )
79
- feed_url = "http:" + feed_url ;
80
- // If feed's url starts with "/"
81
- else if ( feed_url . startsWith ( '/' ) )
82
- feed_url = url . split ( '/' ) [ 0 ] + '//' + url . split ( '/' ) [ 2 ] + feed_url ;
83
- // If feed's url starts with http or https
84
- else if ( / ^ ( h t t p | h t t p s ) : \/ \/ / i. test ( feed_url ) )
85
- feed_url = feed_url ;
86
- // If feed's has no slash
87
- else if ( ! feed_url . match ( / \/ / ) )
88
- feed_url = url . substr ( 0 , url . lastIndexOf ( "/" ) ) + '/' + feed_url ;
89
- else
90
- feed_url = url + "/" + feed_url . replace ( / ^ \/ / g, '' ) ;
91
-
92
- var feed = {
93
- type : links [ i ] . getAttribute ( 'type' ) ,
94
- url : feed_url ,
95
- title : links [ i ] . getAttribute ( 'title' ) || feed_url
96
- } ;
97
-
98
- feeds_urls . push ( feed ) ;
99
- }
59
+ var xhr = new XMLHttpRequest ( ) ;
60
+ xhr . onreadystatechange = function ( ) {
61
+ if ( xhr . readyState == XMLHttpRequest . DONE ) {
62
+ var urlContent = xhr . responseText ;
63
+
64
+ if ( urlContent != '' )
65
+ document . getElementById ( 'rss-feed-url_response' ) . innerHTML = urlContent ;
66
+
67
+ searchFeed ( url , callback ) ;
100
68
}
69
+ }
70
+ xhr . open ( 'GET' , url , true ) ;
71
+ xhr . send ( ) ;
72
+ }
73
+ }
101
74
102
- if ( feeds_urls . length === 0 )
75
+ /**
76
+ * Search RSS Feed in source code
77
+ */
78
+ function searchFeed ( url , callback )
79
+ {
80
+ if ( document . getElementById ( 'rss-feed-url_response' ) . innerHTML != '' )
81
+ {
82
+ var feeds_urls = [ ] ;
83
+ var types = [
84
+ 'application/rss+xml' ,
85
+ 'application/atom+xml' ,
86
+ 'application/rdf+xml' ,
87
+ 'application/rss' ,
88
+ 'application/atom' ,
89
+ 'application/rdf' ,
90
+ 'text/rss+xml' ,
91
+ 'text/atom+xml' ,
92
+ 'text/rdf+xml' ,
93
+ 'text/rss' ,
94
+ 'text/atom' ,
95
+ 'text/rdf'
96
+ ] ;
97
+
98
+ var links = document . getElementById ( 'rss-feed-url_response' ) . querySelectorAll ( "#rss-feed-url_response link[type]" ) ;
99
+
100
+ document . getElementById ( 'rss-feed-url_response' ) . innerHTML = '' ;
101
+
102
+ for ( var i = 0 ; i < links . length ; i ++ )
103
+ {
104
+ if ( links [ i ] . hasAttribute ( 'type' ) && types . indexOf ( links [ i ] . getAttribute ( 'type' ) ) !== - 1 )
103
105
{
104
- var test_feed = tryToGetFeedURL ( url ) ;
105
- if ( test_feed !== null )
106
- feeds_urls . push ( test_feed ) ;
106
+ feed_url = links [ i ] . getAttribute ( 'href' ) ;
107
+
108
+ // If feed's url starts with "//"
109
+ if ( feed_url . indexOf ( "//" ) == 0 )
110
+ feed_url = "http:" + feed_url ;
111
+ // If feed's url starts with "/"
112
+ else if ( feed_url . startsWith ( '/' ) )
113
+ feed_url = url . split ( '/' ) [ 0 ] + '//' + url . split ( '/' ) [ 2 ] + feed_url ;
114
+ // If feed's url starts with http or https
115
+ else if ( / ^ ( h t t p | h t t p s ) : \/ \/ / i. test ( feed_url ) )
116
+ feed_url = feed_url ;
117
+ // If feed's has no slash
118
+ else if ( ! feed_url . match ( / \/ / ) )
119
+ feed_url = url . substr ( 0 , url . lastIndexOf ( "/" ) ) + '/' + feed_url ;
120
+ else
121
+ feed_url = url + "/" + feed_url . replace ( / ^ \/ / g, '' ) ;
122
+
123
+ var feed = {
124
+ type : links [ i ] . getAttribute ( 'type' ) ,
125
+ url : feed_url ,
126
+ title : links [ i ] . getAttribute ( 'title' ) || feed_url
127
+ } ;
128
+
129
+ feeds_urls . push ( feed ) ;
107
130
}
131
+ }
108
132
109
- callback ( feeds_urls ) ;
110
- } ;
111
-
112
- x . onerror = function ( ) {
113
- render ( 'Unable to find feed' ) ;
114
- } ;
133
+ if ( feeds_urls . length === 0 )
134
+ {
135
+ var test_feed = tryToGetFeedURL ( url ) ;
136
+ if ( test_feed !== null )
137
+ feeds_urls . push ( test_feed ) ;
138
+ }
115
139
116
- x . send ( ) ;
140
+ callback ( feeds_urls ) ;
141
+ }
142
+ else
143
+ {
144
+ render ( 'Unable to find feed' ) ;
117
145
}
118
146
}
119
147
@@ -187,6 +215,34 @@ function getRedditRss(tabUrl)
187
215
}
188
216
189
217
218
+ /*
219
+ * Get RSS feed URL of kickstarter
220
+ */
221
+ function getKickstarterRss ( tabUrl )
222
+ {
223
+ // Check if subreddit URL
224
+ var regex = RegExp ( / ^ ( h t t p ( s ) ? : \/ \/ ) ? ( ( w ) { 3 } .) ? k i c k s t a r t e r \. c o m / gm) ;
225
+
226
+ var isKickstarterUrl = regex . test ( tabUrl ) ;
227
+
228
+ if ( isKickstarterUrl )
229
+ {
230
+ // Remove last "/" if presents
231
+ var feedUrl = tabUrl . replace ( / \/ $ / , '' ) ;
232
+ feedUrl = feedUrl + '.atom' ;
233
+
234
+ if ( feedUrl != tabUrl )
235
+ return feedUrl ;
236
+ else
237
+ return false ;
238
+ }
239
+ else
240
+ {
241
+ return false ;
242
+ }
243
+ }
244
+
245
+
190
246
/**
191
247
* Prints message in #feeds
192
248
*/
@@ -263,14 +319,15 @@ function tryToGetFeedURL(tabUrl) {
263
319
264
320
var xhr = new XMLHttpRequest ( ) ;
265
321
xhr . onreadystatechange = function ( ) {
266
- if ( xhr . readyState == 4 && xhr . status == 200 ) {
322
+ if ( xhr . readyState == XMLHttpRequest . DONE ) {
267
323
return xhr . responseText ;
268
324
}
269
325
} ;
270
326
xhr . open ( "GET" , feed_url , false ) ;
271
327
xhr . send ( ) ;
272
328
273
329
var urlContent = xhr . responseText ;
330
+
274
331
if ( xhr . status != 404 && urlContent != '' )
275
332
{
276
333
var oParser = new DOMParser ( ) ;
0 commit comments