Mercurial > ambnews-firefox
annotate ambnews/content/ambnews.js @ 10:f07bf657f483
Display of Vanilla forum threads is better now; fixed some display bugs; updated TODOs; documented more code.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Fri, 22 Aug 2008 10:02:50 -0700 |
parents | 8cafc4c42c29 |
children | f259d52d361e |
rev | line source |
---|---|
1 | 1 var AmbNews = { |
2 url: function url(spec) { | |
3 if (typeof(spec) != "string") | |
4 // Assume that a URI object was passed in, so just return it back. | |
5 return spec; | |
6 var classObj = Components.classes["@mozilla.org/network/io-service;1"]; | |
7 var ios = classObj.getService(Components.interfaces.nsIIOService); | |
8 return ios.newURI(spec, null, null); | |
9 }, | |
10 getFeed: function AmbNews_getFeed(url, callback) { | |
11 function onXml(text) { | |
12 var feed = null; | |
13 if (text) { | |
14 var resultListener = { | |
15 handleResult: function resultListener_handleResult(aResult) { | |
10
f07bf657f483
Display of Vanilla forum threads is better now; fixed some display bugs; updated TODOs; documented more code.
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
16 var nsIFeed = aResult.doc; |
f07bf657f483
Display of Vanilla forum threads is better now; fixed some display bugs; updated TODOs; documented more code.
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
17 if (!nsIFeed) |
f07bf657f483
Display of Vanilla forum threads is better now; fixed some display bugs; updated TODOs; documented more code.
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
18 return; |
1 | 19 feed = {}; |
20 var Ci = Components.interfaces; | |
21 nsIFeed.QueryInterface(Ci.nsIFeed); | |
22 feed.link = nsIFeed.link; | |
23 feed.title = nsIFeed.title; | |
24 feed.entries = []; | |
25 for (var i = 0; i < nsIFeed.items.length; i++) { | |
26 var item = nsIFeed.items.queryElementAt(i, Ci.nsIFeedEntry); | |
27 feed.entries.push(item); | |
28 } | |
29 } | |
30 }; | |
31 var fp = AmbNews.__getFeedProcessor(); | |
32 fp.listener = resultListener; | |
33 fp.parseFromString(text, AmbNews.url(url)); | |
34 } | |
35 callback(feed); | |
36 } | |
37 AmbNews.__getXml(url, onXml); | |
38 }, | |
39 __getXml: function AmbNews_getXml(url, callback) { | |
40 var feedUrl = AmbNews.url(url); | |
41 var annSvc = AmbNews.__getAnnSvc(); | |
42 | |
5
8cafc4c42c29
Changed page annotations from AmbNews/something to ambnews/something to match the way other paths are done, but it appears that page annotations are case-insensitive anyways, which is cool I guess.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
43 if (annSvc.pageHasAnnotation(feedUrl, "ambnews/feed-xml")) { |
8cafc4c42c29
Changed page annotations from AmbNews/something to ambnews/something to match the way other paths are done, but it appears that page annotations are case-insensitive anyways, which is cool I guess.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
44 var xml = annSvc.getPageAnnotation(feedUrl, "ambnews/feed-xml"); |
1 | 45 // TODO: Perhaps re-enable this, but only let it live for a |
46 // few minutes? | |
47 //callback(xml); | |
48 //return; | |
49 } | |
50 | |
51 var request = new XMLHttpRequest(); | |
52 request.open("GET", url, true); | |
53 | |
54 var onRscFunc = function getXml_onReadyStateChange() { | |
55 if (request.readyState == 4) { | |
56 if (request.status == 200) { | |
57 if (request.responseText) { | |
58 annSvc.setPageAnnotation(feedUrl, | |
5
8cafc4c42c29
Changed page annotations from AmbNews/something to ambnews/something to match the way other paths are done, but it appears that page annotations are case-insensitive anyways, which is cool I guess.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
59 "ambnews/feed-xml", |
1 | 60 request.responseText, |
61 0, | |
62 annSvc.EXPIRE_DAYS); | |
63 callback(request.responseText); | |
64 } else | |
65 callback(""); | |
66 } else | |
67 callback(""); | |
68 } | |
69 }; | |
70 | |
71 request.onreadystatechange = onRscFunc; | |
72 request.send(null); | |
73 }, | |
74 __getFeedProcessor: function AmbNews_getFeedProcessor() { | |
75 var Cc = Components.classes; | |
76 var Ci = Components.interfaces; | |
77 var fp = Cc["@mozilla.org/feed-processor;1"] | |
78 .createInstance(Ci.nsIFeedProcessor); | |
79 return fp; | |
80 }, | |
81 __getAnnSvc: function AmbNews_getAnnSvc() { | |
82 var Cc = Components.classes; | |
83 var annSvc = Cc["@mozilla.org/browser/annotation-service;1"] | |
84 .getService(Components.interfaces.nsIAnnotationService); | |
85 return annSvc; | |
86 }, | |
87 onLinkAdded: function AmbNews_onLinkAdded(aEvent) { | |
88 if (aEvent.target.rel == "alternate" && | |
89 (aEvent.target.type == "application/rss+xml" || | |
90 aEvent.target.type == "application/atom+xml")) { | |
91 var annSvc = AmbNews.__getAnnSvc(); | |
92 var page = AmbNews.url(aEvent.target.baseURI); | |
93 var feed = AmbNews.url(aEvent.target.href); | |
5
8cafc4c42c29
Changed page annotations from AmbNews/something to ambnews/something to match the way other paths are done, but it appears that page annotations are case-insensitive anyways, which is cool I guess.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
94 annSvc.setPageAnnotation(page, "ambnews/feed", |
1 | 95 feed.spec, 0, annSvc.EXPIRE_WEEKS); |
96 } | |
2
88b12596346d
Added an about:news handler and made the default page for new tabs about:news.
Atul Varma <varmaa@toolness.com>
parents:
1
diff
changeset
|
97 }, |
88b12596346d
Added an about:news handler and made the default page for new tabs about:news.
Atul Varma <varmaa@toolness.com>
parents:
1
diff
changeset
|
98 onLoad: function AmbNews_onLoad(aEvent) { |
88b12596346d
Added an about:news handler and made the default page for new tabs about:news.
Atul Varma <varmaa@toolness.com>
parents:
1
diff
changeset
|
99 if (aEvent.target.baseURI == "about:blank") { |
88b12596346d
Added an about:news handler and made the default page for new tabs about:news.
Atul Varma <varmaa@toolness.com>
parents:
1
diff
changeset
|
100 var doc = aEvent.target; |
88b12596346d
Added an about:news handler and made the default page for new tabs about:news.
Atul Varma <varmaa@toolness.com>
parents:
1
diff
changeset
|
101 doc.defaultView.location = "about:news"; |
4
f4b6208eadd5
Increased delay to select URL bar text.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
102 // TODO: The delay here only works most of the time; |
f4b6208eadd5
Increased delay to select URL bar text.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
103 // its effectiveness is a race condition and we should |
f4b6208eadd5
Increased delay to select URL bar text.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
104 // figure out what even to listen for to actually select |
f4b6208eadd5
Increased delay to select URL bar text.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
105 // the URL bar text consistently |
f4b6208eadd5
Increased delay to select URL bar text.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
106 window.setTimeout(function() { gURLBar.select(); }, 50); |
2
88b12596346d
Added an about:news handler and made the default page for new tabs about:news.
Atul Varma <varmaa@toolness.com>
parents:
1
diff
changeset
|
107 } |
1 | 108 } |
109 }; |