]> git.wh0rd.org - tt-rss.git/blob - digest.js
more digest page improvements
[tt-rss.git] / digest.js
1 var last_feeds = [];
2
3 var _active_feed_id = false;
4 var _active_feed_offset = false;
5 var _update_timeout = false;
6
7 function zoom(article_id) {
8 try {
9 var elem = $('A-' + article_id);
10
11 if (elem) {
12 var divs = elem.getElementsByTagName('DIV');
13
14 for (var i = 0; i < divs.length; i++) {
15 if (divs[i].className == 'excerpt')
16 Element.hide(divs[i]);
17
18 if (divs[i].className == 'content')
19 Element.show(divs[i]);
20 }
21 }
22
23 var query = "backend.php?op=rpc&subop=digest-mark&article_id=" + article_id;
24
25 new Ajax.Request("backend.php", {
26 parameters: query,
27 onComplete: function(transport) {
28 window.clearTimeout(_update_timeout);
29 _update_timeout = window.setTimeout('update()', 1000);
30 } });
31
32 } catch (e) {
33 exception_error("zoom", e);
34 }
35 }
36
37 function load_more() {
38 try {
39 var elem = $('MORE-PROMPT');
40
41 if (elem) {
42 elem.id = '';
43 Element.hide(elem);
44 }
45
46 viewfeed(_active_feed_id, _active_feed_offset + 10);
47 } catch (e) {
48 exception_error("load_more", e);
49 }
50 }
51
52 function update() {
53 try {
54 viewfeed(_active_feed_id, _active_feed_offset);
55 } catch (e) {
56 exception_error("update", e);
57 }
58 }
59
60 function view(article_id, dismiss_only) {
61 try {
62 var elem = $('A-' + article_id);
63
64 elem.id = '';
65
66 //new Effect.Fade(elem, {duration : 0.3});
67
68 Element.hide(elem);
69
70 var query = "backend.php?op=rpc&subop=digest-mark&article_id=" + article_id;
71
72 new Ajax.Request("backend.php", {
73 parameters: query,
74 onComplete: function(transport) {
75 window.clearTimeout(_update_timeout);
76 _update_timeout = window.setTimeout('update()', 1000);
77 } });
78
79 return dismiss_only != true;
80 } catch (e) {
81 exception_error("view", e);
82 }
83 }
84
85 function viewfeed(feed_id, offset) {
86 try {
87
88 if (!feed_id) feed_id = _active_feed_id;
89
90 if (!offset)
91 offset = 0;
92 else
93 offset = _active_feed_offset + offset;
94
95 var query = "backend.php?op=rpc&subop=digest-update&feed_id=" + feed_id +
96 "&offset=" + offset;
97
98 console.log(query);
99
100 new Ajax.Request("backend.php", {
101 parameters: query,
102 onComplete: function(transport) {
103 digest_update(transport, feed_id);
104 _active_feed_id = feed_id;
105 _active_feed_offset = offset;
106 } });
107
108 } catch (e) {
109 exception_error("view", e);
110 }
111 }
112
113 function find_article(articles, article_id) {
114 try {
115 for (var i = 0; i < articles.length; i++) {
116 if (articles[i].id == article_id)
117 return articles[i];
118 }
119
120 return false;
121
122 } catch (e) {
123 exception_error("find_article", e);
124 }
125 }
126
127 function find_feed(feeds, feed_id) {
128 try {
129 for (var i = 0; i < feeds.length; i++) {
130 if (feeds[i].id == feed_id)
131 return feeds[i];
132 }
133
134 return false;
135
136 } catch (e) {
137 exception_error("find_feed", e);
138 }
139 }
140
141 function get_feed_icon(feed) {
142 try {
143 if (feed.has_icon)
144 return 'icons/' + feed.id + '.ico';
145
146 if (feed.id == -1)
147 return 'images/mark_set.png';
148
149 if (feed.id == -2)
150 return 'images/pub_set.png';
151
152 if (feed.id == -3)
153 return 'images/fresh.png';
154
155 if (feed.id == -4)
156 return 'images/tag.png';
157
158 if (feed.id < -10)
159 return 'images/label.png';
160
161 } catch (e) {
162 exception_error("get_feed_icon", e);
163 }
164 }
165
166 function add_feed_entry(feed) {
167 try {
168 var icon_part = "";
169
170 icon_part = "<img src='" + get_feed_icon(feed) + "'/>";
171
172 var tmp_html = "<li>" +
173 icon_part +
174 "<a href=\"#\" onclick=\"viewfeed("+feed.id+")\">" + feed.title +
175 "<div class='unread-ctr'>" + feed.unread + "</div>" +
176 "</li>";
177
178 $("feeds-content").innerHTML += tmp_html;
179
180 } catch (e) {
181 exception_error("add_feed_entry", e);
182 }
183 }
184
185 function add_latest_entry(article, feed) {
186 try {
187
188
189 //$("latest-content").innerHTML += "bbb";
190
191 } catch (e) {
192 exception_error("add_latest_entry", e);
193 }
194 }
195
196 function add_headline_entry(article, feed) {
197 try {
198
199 var icon_part = "";
200
201 if (article.has_icon)
202 icon_part = "<img src='icons/" + article.feed_id + ".ico'/>";
203
204 var tmp_html = "<li id=\"A-"+article.id+"\">" +
205 icon_part +
206 "<img title='Dismiss' onclick=\"view("+article.id+", true)\" class='digest-check' src='images/digest_checkbox.png'>" +
207 "<a target=\"_blank\" href=\""+article.link+"\""+
208 "onclick=\"return view("+article.id+")\" class='title'>" +
209 article.title + "</a>" +
210 "<div class='body'>" +
211 "<div title=\"Click to expand article\" onclick=\"zoom("+article.id+")\" class='excerpt'>" +
212 article.excerpt + "</div>" +
213 "<div style='display : none' class='content'>" +
214 article.content + "</div>" +
215 "<div class='info'><a>" + feed.title + "</a> " + " @ " +
216 new Date(article.updated * 1000) + "</div>" +
217 "</div></li>";
218
219 $("headlines-content").innerHTML += tmp_html;
220
221 } catch (e) {
222 exception_error("add_headline_entry", e);
223 }
224 }
225
226 function digest_update(transport, feed_id) {
227 try {
228 var feeds = transport.responseXML.getElementsByTagName('feeds')[0];
229 var headlines = transport.responseXML.getElementsByTagName('headlines')[0];
230
231 if (feeds) {
232 feeds = eval("(" + feeds.firstChild.nodeValue + ")");
233
234 last_feeds = feeds;
235
236 $('feeds-content').innerHTML = "";
237
238 for (var i = 0; i < feeds.length; i++) {
239 add_feed_entry(feeds[i]);
240 }
241 } else {
242 feeds = last_feeds;
243 }
244
245 if (headlines) {
246 headlines = eval("(" + headlines.firstChild.nodeValue + ")");
247
248 if (_active_feed_id != feed_id)
249 $('headlines-content').innerHTML = "";
250
251 //Element.hide('headlines-content');
252
253 var pr = $('MORE-PROMPT');
254
255 if (pr) {
256 pr.id = '';
257 Element.hide(pr);
258 }
259
260 for (var i = 0; i < headlines.length; i++) {
261 var elem = $('A-' + headlines[i].id);
262
263 if (elem && Element.visible(elem)) {
264
265
266 } else {
267 add_headline_entry(headlines[i], find_feed(feeds, headlines[i].feed_id));
268 }
269 }
270
271 $('headlines-content').innerHTML += "<li id='MORE-PROMPT'>" +
272 "<div class='body'><a href=\"#\" onclick=\"load_more()\">" +
273 __("More articles...") + "</a></div></li>";
274
275 new Effect.Appear('headlines-content');
276
277 }
278
279 } catch (e) {
280 exception_error("digest_update", e);
281 }
282 }
283
284 function digest_init() {
285 try {
286
287 new Ajax.Request("backend.php", {
288 parameters: "backend.php?op=rpc&subop=digest-init",
289 onComplete: function(transport) {
290 digest_update(transport, -4);
291 window.setTimeout('viewfeed(-4)', 100);
292 } });
293
294 } catch (e) {
295 exception_error("digest_init", e);
296 }
297 }