]> git.wh0rd.org - tt-rss.git/blame - digest.js
more digest page improvements
[tt-rss.git] / digest.js
CommitLineData
c01f40f4
AD
1var last_feeds = [];
2
1ca8997b
AD
3var _active_feed_id = false;
4var _active_feed_offset = false;
118e9399 5var _update_timeout = false;
1ca8997b 6
118e9399 7function zoom(article_id) {
22933e5e 8 try {
118e9399 9 var elem = $('A-' + article_id);
22933e5e 10
118e9399
AD
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
37function 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
52function update() {
53 try {
54 viewfeed(_active_feed_id, _active_feed_offset);
55 } catch (e) {
56 exception_error("update", e);
57 }
58}
59
60function 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;
22933e5e
AD
80 } catch (e) {
81 exception_error("view", e);
82 }
83}
84
1ca8997b 85function viewfeed(feed_id, offset) {
b41c2549
AD
86 try {
87
1ca8997b
AD
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
b41c2549 100 new Ajax.Request("backend.php", {
1ca8997b 101 parameters: query,
b41c2549 102 onComplete: function(transport) {
118e9399 103 digest_update(transport, feed_id);
1ca8997b
AD
104 _active_feed_id = feed_id;
105 _active_feed_offset = offset;
b41c2549
AD
106 } });
107
108 } catch (e) {
109 exception_error("view", e);
110 }
111}
112
118e9399
AD
113function 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
c01f40f4
AD
127function 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
b41c2549
AD
141function 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
c01f40f4
AD
166function add_feed_entry(feed) {
167 try {
168 var icon_part = "";
169
b41c2549 170 icon_part = "<img src='" + get_feed_icon(feed) + "'/>";
c01f40f4
AD
171
172 var tmp_html = "<li>" +
173 icon_part +
1ca8997b 174 "<a href=\"#\" onclick=\"viewfeed("+feed.id+")\">" + feed.title +
c01f40f4
AD
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
b41c2549 185function add_latest_entry(article, feed) {
c01f40f4 186 try {
b41c2549
AD
187
188
189 //$("latest-content").innerHTML += "bbb";
c01f40f4
AD
190
191 } catch (e) {
192 exception_error("add_latest_entry", e);
193 }
194}
195
196function add_headline_entry(article, feed) {
197 try {
198
199 var icon_part = "";
200
201 if (article.has_icon)
1ca8997b 202 icon_part = "<img src='icons/" + article.feed_id + ".ico'/>";
c01f40f4 203
22933e5e 204 var tmp_html = "<li id=\"A-"+article.id+"\">" +
c01f40f4 205 icon_part +
118e9399 206 "<img title='Dismiss' onclick=\"view("+article.id+", true)\" class='digest-check' src='images/digest_checkbox.png'>" +
22933e5e
AD
207 "<a target=\"_blank\" href=\""+article.link+"\""+
208 "onclick=\"return view("+article.id+")\" class='title'>" +
209 article.title + "</a>" +
118e9399
AD
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>" +
c01f40f4 215 "<div class='info'><a>" + feed.title + "</a> " + " @ " +
b41c2549 216 new Date(article.updated * 1000) + "</div>" +
1ca8997b 217 "</div></li>";
c01f40f4
AD
218
219 $("headlines-content").innerHTML += tmp_html;
220
221 } catch (e) {
222 exception_error("add_headline_entry", e);
223 }
224}
225
118e9399 226function digest_update(transport, feed_id) {
c01f40f4
AD
227 try {
228 var feeds = transport.responseXML.getElementsByTagName('feeds')[0];
229 var headlines = transport.responseXML.getElementsByTagName('headlines')[0];
230
231 if (feeds) {
c01f40f4
AD
232 feeds = eval("(" + feeds.firstChild.nodeValue + ")");
233
1ca8997b
AD
234 last_feeds = feeds;
235
b41c2549
AD
236 $('feeds-content').innerHTML = "";
237
c01f40f4
AD
238 for (var i = 0; i < feeds.length; i++) {
239 add_feed_entry(feeds[i]);
240 }
1ca8997b
AD
241 } else {
242 feeds = last_feeds;
c01f40f4
AD
243 }
244
245 if (headlines) {
246 headlines = eval("(" + headlines.firstChild.nodeValue + ")");
247
118e9399
AD
248 if (_active_feed_id != feed_id)
249 $('headlines-content').innerHTML = "";
250
251 //Element.hide('headlines-content');
252
253 var pr = $('MORE-PROMPT');
b41c2549 254
118e9399
AD
255 if (pr) {
256 pr.id = '';
257 Element.hide(pr);
258 }
1ca8997b 259
c01f40f4 260 for (var i = 0; i < headlines.length; i++) {
118e9399
AD
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 }
c01f40f4 269 }
b41c2549 270
118e9399
AD
271 $('headlines-content').innerHTML += "<li id='MORE-PROMPT'>" +
272 "<div class='body'><a href=\"#\" onclick=\"load_more()\">" +
273 __("More articles...") + "</a></div></li>";
1ca8997b
AD
274
275 new Effect.Appear('headlines-content');
276
c01f40f4
AD
277 }
278
279 } catch (e) {
280 exception_error("digest_update", e);
281 }
282 }
283
284function digest_init() {
285 try {
286
287 new Ajax.Request("backend.php", {
288 parameters: "backend.php?op=rpc&subop=digest-init",
289 onComplete: function(transport) {
118e9399 290 digest_update(transport, -4);
1ca8997b 291 window.setTimeout('viewfeed(-4)', 100);
c01f40f4
AD
292 } });
293
294 } catch (e) {
295 exception_error("digest_init", e);
296 }
297}