]> git.wh0rd.org Git - 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 href=\#\" onclick=\"viewfeed("+feed.id+")\">" + 
216                                 feed.title + "</a> " + " @ " + 
217                                 new Date(article.updated * 1000) + "</div>" +
218                         "</div></li>";
219
220                 $("headlines-content").innerHTML += tmp_html;
221
222         } catch (e) {
223                 exception_error("add_headline_entry", e);
224         }
225 }
226
227 function digest_update(transport, feed_id) {
228         try {
229                 var feeds = transport.responseXML.getElementsByTagName('feeds')[0];
230                 var headlines = transport.responseXML.getElementsByTagName('headlines')[0];
231
232                 if (feeds) {
233                         feeds = eval("(" + feeds.firstChild.nodeValue + ")");
234
235                         last_feeds = feeds;
236
237                         $('feeds-content').innerHTML = "";
238
239                         for (var i = 0; i < feeds.length; i++) {
240                                 add_feed_entry(feeds[i]);
241                         }
242                 } else {
243                         feeds = last_feeds;
244                 }
245
246                 if (headlines) {
247                         headlines = eval("(" + headlines.firstChild.nodeValue + ")");
248
249                         if (_active_feed_id != feed_id) 
250                                 $('headlines-content').innerHTML = "";
251
252                         //Element.hide('headlines-content');
253                         
254                         var pr = $('MORE-PROMPT');
255
256                         if (pr) {
257                                 pr.id = '';
258                                 Element.hide(pr);
259                         }
260
261                         for (var i = 0; i < headlines.length; i++) {
262                                 var elem = $('A-' + headlines[i].id);
263                                 
264                                 if (elem && Element.visible(elem)) {
265
266
267                                 } else {
268                                         add_headline_entry(headlines[i], find_feed(feeds, headlines[i].feed_id));
269                                 }
270                         }
271
272                         $('headlines-content').innerHTML += "<li id='MORE-PROMPT'>" +
273                                 "<div class='body'><a href=\"#\" onclick=\"load_more()\">" +
274                                 __("More articles...") + "</a></div></li>";
275
276                         new Effect.Appear('headlines-content');
277
278                 }
279
280         } catch (e) {
281                 exception_error("digest_update", e);
282         }
283         }
284
285 function digest_init() {
286         try {
287                 
288                 new Ajax.Request("backend.php", {
289                         parameters: "backend.php?op=rpc&subop=digest-init",
290                         onComplete: function(transport) {
291                                 digest_update(transport, -4);
292                                 window.setTimeout('viewfeed(-4)', 100);
293                                 } });
294
295         } catch (e) {
296                 exception_error("digest_init", e);
297         }
298 }