]>
Commit | Line | Data |
---|---|---|
c01f40f4 AD |
1 | var last_feeds = []; |
2 | ||
1ca8997b AD |
3 | var _active_feed_id = false; |
4 | var _active_feed_offset = false; | |
118e9399 | 5 | var _update_timeout = false; |
1ca8997b | 6 | |
d5d56329 AD |
7 | function catchup_article(article_id, callback) { |
8 | try { | |
9 | var query = "?op=rpc&subop=catchupSelected" + | |
10 | "&cmode=0&ids=" + article_id; | |
11 | ||
12 | new Ajax.Request("backend.php", { | |
13 | parameters: query, | |
14 | onComplete: function(transport) { | |
15 | if (callback) callback(transport); | |
16 | } }); | |
17 | ||
18 | } catch (e) { | |
19 | exception_error("catchup_article", e); | |
20 | } | |
21 | } | |
22 | ||
23 | function set_selected_feed(feed_id) { | |
11a7a966 AD |
24 | try { |
25 | var feeds = $("feeds-content").getElementsByTagName("LI"); | |
26 | ||
27 | for (var i = 0; i < feeds.length; i++) { | |
28 | if (feeds[i].id == "F-" + feed_id) | |
29 | feeds[i].className = "selected"; | |
30 | else | |
31 | feeds[i].className = ""; | |
32 | } | |
33 | ||
d5d56329 AD |
34 | _active_feed_id = feed_id; |
35 | ||
11a7a966 AD |
36 | } catch (e) { |
37 | exception_error("mark_selected_feed", e); | |
38 | } | |
39 | } | |
40 | ||
118e9399 | 41 | function zoom(article_id) { |
22933e5e | 42 | try { |
118e9399 | 43 | var elem = $('A-' + article_id); |
22933e5e | 44 | |
118e9399 AD |
45 | if (elem) { |
46 | var divs = elem.getElementsByTagName('DIV'); | |
47 | ||
48 | for (var i = 0; i < divs.length; i++) { | |
49 | if (divs[i].className == 'excerpt') | |
50 | Element.hide(divs[i]); | |
51 | ||
52 | if (divs[i].className == 'content') | |
53 | Element.show(divs[i]); | |
54 | } | |
55 | } | |
56 | ||
d5d56329 AD |
57 | catchup_article(article_id, |
58 | function() { update(); }); | |
118e9399 AD |
59 | |
60 | } catch (e) { | |
61 | exception_error("zoom", e); | |
62 | } | |
63 | } | |
64 | ||
65 | function load_more() { | |
66 | try { | |
118e9399 AD |
67 | viewfeed(_active_feed_id, _active_feed_offset + 10); |
68 | } catch (e) { | |
69 | exception_error("load_more", e); | |
70 | } | |
71 | } | |
72 | ||
73 | function update() { | |
74 | try { | |
d5d56329 AD |
75 | console.log('updating feeds...'); |
76 | ||
77 | window.clearTimeout(_update_timeout); | |
78 | ||
79 | new Ajax.Request("backend.php", { | |
80 | parameters: "?op=rpc&subop=digest-init", | |
81 | onComplete: function(transport) { | |
e0cebf2a | 82 | fatal_error_check(transport); |
d5d56329 AD |
83 | parse_feeds(transport); |
84 | set_selected_feed(_active_feed_id); | |
85 | } }); | |
86 | ||
87 | _update_timeout = window.setTimeout('update()', 5*1000); | |
118e9399 AD |
88 | } catch (e) { |
89 | exception_error("update", e); | |
90 | } | |
91 | } | |
92 | ||
d5d56329 | 93 | function remove_headline_entry(article_id) { |
118e9399 AD |
94 | try { |
95 | var elem = $('A-' + article_id); | |
96 | ||
d5d56329 AD |
97 | if (elem) { |
98 | elem.parentNode.removeChild(elem); | |
99 | } | |
118e9399 | 100 | |
d5d56329 AD |
101 | } catch (e) { |
102 | exception_error("remove_headline_entry", e); | |
103 | } | |
104 | } | |
118e9399 | 105 | |
d5d56329 AD |
106 | function view(article_id, dismiss_only) { |
107 | try { | |
108 | remove_headline_entry(article_id); | |
118e9399 | 109 | |
d5d56329 AD |
110 | catchup_article(article_id, |
111 | function() { update(); }); | |
118e9399 AD |
112 | |
113 | return dismiss_only != true; | |
22933e5e AD |
114 | } catch (e) { |
115 | exception_error("view", e); | |
116 | } | |
117 | } | |
118 | ||
1ca8997b | 119 | function viewfeed(feed_id, offset) { |
b41c2549 AD |
120 | try { |
121 | ||
1ca8997b AD |
122 | if (!feed_id) feed_id = _active_feed_id; |
123 | ||
d5d56329 | 124 | if (!offset) { |
1ca8997b | 125 | offset = 0; |
d5d56329 | 126 | } else { |
1ca8997b | 127 | offset = _active_feed_offset + offset; |
d5d56329 | 128 | } |
1ca8997b AD |
129 | |
130 | var query = "backend.php?op=rpc&subop=digest-update&feed_id=" + feed_id + | |
131 | "&offset=" + offset; | |
132 | ||
b41c2549 | 133 | new Ajax.Request("backend.php", { |
1ca8997b | 134 | parameters: query, |
b41c2549 | 135 | onComplete: function(transport) { |
e0cebf2a | 136 | fatal_error_check(transport); |
d5d56329 AD |
137 | parse_headlines(transport, offset == 0); |
138 | set_selected_feed(feed_id); | |
1ca8997b | 139 | _active_feed_offset = offset; |
11a7a966 | 140 | } }); |
b41c2549 AD |
141 | |
142 | } catch (e) { | |
143 | exception_error("view", e); | |
144 | } | |
145 | } | |
146 | ||
118e9399 AD |
147 | function find_article(articles, article_id) { |
148 | try { | |
149 | for (var i = 0; i < articles.length; i++) { | |
150 | if (articles[i].id == article_id) | |
151 | return articles[i]; | |
152 | } | |
153 | ||
154 | return false; | |
155 | ||
156 | } catch (e) { | |
157 | exception_error("find_article", e); | |
158 | } | |
159 | } | |
160 | ||
c01f40f4 AD |
161 | function find_feed(feeds, feed_id) { |
162 | try { | |
163 | for (var i = 0; i < feeds.length; i++) { | |
164 | if (feeds[i].id == feed_id) | |
165 | return feeds[i]; | |
166 | } | |
167 | ||
168 | return false; | |
169 | ||
170 | } catch (e) { | |
171 | exception_error("find_feed", e); | |
172 | } | |
173 | } | |
174 | ||
b41c2549 AD |
175 | function get_feed_icon(feed) { |
176 | try { | |
177 | if (feed.has_icon) | |
178 | return 'icons/' + feed.id + '.ico'; | |
179 | ||
180 | if (feed.id == -1) | |
181 | return 'images/mark_set.png'; | |
182 | ||
183 | if (feed.id == -2) | |
184 | return 'images/pub_set.png'; | |
185 | ||
186 | if (feed.id == -3) | |
187 | return 'images/fresh.png'; | |
188 | ||
189 | if (feed.id == -4) | |
190 | return 'images/tag.png'; | |
191 | ||
192 | if (feed.id < -10) | |
193 | return 'images/label.png'; | |
194 | ||
d5d56329 AD |
195 | return 'images/blank_icon.gif'; |
196 | ||
b41c2549 AD |
197 | } catch (e) { |
198 | exception_error("get_feed_icon", e); | |
199 | } | |
200 | } | |
201 | ||
c01f40f4 AD |
202 | function add_feed_entry(feed) { |
203 | try { | |
204 | var icon_part = ""; | |
205 | ||
b41c2549 | 206 | icon_part = "<img src='" + get_feed_icon(feed) + "'/>"; |
c01f40f4 | 207 | |
11a7a966 | 208 | var tmp_html = "<li id=\"F-"+feed.id+"\">" + |
c01f40f4 | 209 | icon_part + |
1ca8997b | 210 | "<a href=\"#\" onclick=\"viewfeed("+feed.id+")\">" + feed.title + |
c01f40f4 AD |
211 | "<div class='unread-ctr'>" + feed.unread + "</div>" + |
212 | "</li>"; | |
213 | ||
214 | $("feeds-content").innerHTML += tmp_html; | |
215 | ||
216 | } catch (e) { | |
217 | exception_error("add_feed_entry", e); | |
218 | } | |
219 | } | |
220 | ||
c01f40f4 AD |
221 | function add_headline_entry(article, feed) { |
222 | try { | |
223 | ||
224 | var icon_part = ""; | |
225 | ||
d5d56329 | 226 | icon_part = "<img class='icon' src='" + get_feed_icon(feed) + "'/>"; |
c01f40f4 | 227 | |
22933e5e | 228 | var tmp_html = "<li id=\"A-"+article.id+"\">" + |
c01f40f4 | 229 | icon_part + |
6361fd20 AD |
230 | "<div class='digest-check'>" + |
231 | "<img title='Set starred' onclick=\"toggleMark(this, "+article.id+")\" src='images/mark_unset.png'>" + | |
232 | "<img title='Set published' onclick=\"togglePub(this, "+article.id+")\" src='images/pub_unset.png'>" + | |
118e9399 | 233 | "<img title='Dismiss' onclick=\"view("+article.id+", true)\" class='digest-check' src='images/digest_checkbox.png'>" + |
6361fd20 | 234 | "</div>" + |
22933e5e AD |
235 | "<a target=\"_blank\" href=\""+article.link+"\""+ |
236 | "onclick=\"return view("+article.id+")\" class='title'>" + | |
237 | article.title + "</a>" + | |
118e9399 AD |
238 | "<div class='body'>" + |
239 | "<div title=\"Click to expand article\" onclick=\"zoom("+article.id+")\" class='excerpt'>" + | |
240 | article.excerpt + "</div>" + | |
241 | "<div style='display : none' class='content'>" + | |
242 | article.content + "</div>" + | |
c524d7e6 AD |
243 | "<div class='info'><a href=\#\" onclick=\"viewfeed("+feed.id+")\">" + |
244 | feed.title + "</a> " + " @ " + | |
b41c2549 | 245 | new Date(article.updated * 1000) + "</div>" + |
1ca8997b | 246 | "</div></li>"; |
c01f40f4 AD |
247 | |
248 | $("headlines-content").innerHTML += tmp_html; | |
249 | ||
250 | } catch (e) { | |
251 | exception_error("add_headline_entry", e); | |
252 | } | |
253 | } | |
254 | ||
d5d56329 AD |
255 | function parse_feeds(transport) { |
256 | try { | |
257 | ||
258 | var feeds = transport.responseXML.getElementsByTagName('feeds')[0]; | |
259 | ||
260 | if (feeds) { | |
261 | feeds = eval("(" + feeds.firstChild.nodeValue + ")"); | |
262 | ||
e0cebf2a AD |
263 | feeds.sort( function (a,b) |
264 | { | |
265 | if (b.unread != a.unread) | |
266 | return (b.unread - a.unread) | |
267 | else | |
268 | if (a.title > b.title) | |
269 | return 1; | |
270 | else if (a.title < b.title) | |
271 | return -1; | |
272 | else | |
273 | return 0; | |
274 | }); | |
275 | ||
d5d56329 AD |
276 | last_feeds = feeds; |
277 | ||
278 | $('feeds-content').innerHTML = ""; | |
279 | ||
280 | for (var i = 0; i < feeds.length; i++) { | |
281 | add_feed_entry(feeds[i]); | |
282 | } | |
283 | } | |
284 | ||
285 | } catch (e) { | |
286 | exception_error("parse_feeds", e); | |
287 | } | |
288 | } | |
289 | ||
290 | function parse_headlines(transport, replace) { | |
291 | try { | |
292 | var headlines = transport.responseXML.getElementsByTagName('headlines')[0]; | |
293 | ||
294 | if (headlines) { | |
295 | headlines = eval("(" + headlines.firstChild.nodeValue + ")"); | |
296 | ||
297 | if (replace) $('headlines-content').innerHTML = ''; | |
298 | ||
299 | var pr = $('MORE-PROMPT'); | |
300 | ||
301 | if (pr) pr.parentNode.removeChild(pr); | |
302 | ||
303 | for (var i = 0; i < headlines.length; i++) { | |
304 | ||
305 | if (!$('A-' + headlines[i].id)) { | |
306 | add_headline_entry(headlines[i], | |
307 | find_feed(last_feeds, headlines[i].feed_id)); | |
308 | } | |
309 | } | |
310 | ||
311 | if (pr) { | |
312 | $('headlines-content').appendChild(pr); | |
313 | } else { | |
314 | $('headlines-content').innerHTML += "<li id='MORE-PROMPT'>" + | |
315 | "<div class='body'><a href=\"javascript:load_more()\">" + | |
316 | __("More articles...") + "</a></div></li>"; | |
317 | } | |
318 | ||
319 | new Effect.Appear('headlines-content'); | |
320 | } | |
321 | ||
322 | } catch (e) { | |
323 | exception_error("parse_headlines", e); | |
324 | } | |
325 | } | |
326 | ||
327 | /*function digest_update(transport, feed_id, offset) { | |
c01f40f4 AD |
328 | try { |
329 | var feeds = transport.responseXML.getElementsByTagName('feeds')[0]; | |
330 | var headlines = transport.responseXML.getElementsByTagName('headlines')[0]; | |
331 | ||
332 | if (feeds) { | |
c01f40f4 AD |
333 | feeds = eval("(" + feeds.firstChild.nodeValue + ")"); |
334 | ||
1ca8997b AD |
335 | last_feeds = feeds; |
336 | ||
b41c2549 AD |
337 | $('feeds-content').innerHTML = ""; |
338 | ||
c01f40f4 AD |
339 | for (var i = 0; i < feeds.length; i++) { |
340 | add_feed_entry(feeds[i]); | |
341 | } | |
1ca8997b AD |
342 | } else { |
343 | feeds = last_feeds; | |
c01f40f4 AD |
344 | } |
345 | ||
346 | if (headlines) { | |
347 | headlines = eval("(" + headlines.firstChild.nodeValue + ")"); | |
348 | ||
d5d56329 | 349 | if (_active_feed_id != feed_id || !offset) |
118e9399 AD |
350 | $('headlines-content').innerHTML = ""; |
351 | ||
118e9399 | 352 | var pr = $('MORE-PROMPT'); |
b41c2549 | 353 | |
118e9399 AD |
354 | if (pr) { |
355 | pr.id = ''; | |
356 | Element.hide(pr); | |
357 | } | |
1ca8997b | 358 | |
c01f40f4 | 359 | for (var i = 0; i < headlines.length; i++) { |
118e9399 AD |
360 | var elem = $('A-' + headlines[i].id); |
361 | ||
362 | if (elem && Element.visible(elem)) { | |
d5d56329 AD |
363 | if (!headlines[i].unread) |
364 | remove_headline_entry(headlines[i].id); | |
118e9399 AD |
365 | |
366 | } else { | |
367 | add_headline_entry(headlines[i], find_feed(feeds, headlines[i].feed_id)); | |
368 | } | |
c01f40f4 | 369 | } |
b41c2549 | 370 | |
118e9399 AD |
371 | $('headlines-content').innerHTML += "<li id='MORE-PROMPT'>" + |
372 | "<div class='body'><a href=\"#\" onclick=\"load_more()\">" + | |
373 | __("More articles...") + "</a></div></li>"; | |
1ca8997b AD |
374 | |
375 | new Effect.Appear('headlines-content'); | |
d5d56329 | 376 | } |
1ca8997b | 377 | |
d5d56329 AD |
378 | if (feed_id != undefined) { |
379 | _active_feed_id = feed_id; | |
c01f40f4 AD |
380 | } |
381 | ||
d5d56329 AD |
382 | if (offset != undefined) _active_feed_offset = offset; |
383 | ||
384 | mark_selected_feed(_active_feed_id); | |
385 | ||
c01f40f4 AD |
386 | } catch (e) { |
387 | exception_error("digest_update", e); | |
388 | } | |
d5d56329 | 389 | } */ |
c01f40f4 | 390 | |
d5d56329 | 391 | function init() { |
c01f40f4 AD |
392 | try { |
393 | ||
394 | new Ajax.Request("backend.php", { | |
395 | parameters: "backend.php?op=rpc&subop=digest-init", | |
396 | onComplete: function(transport) { | |
d5d56329 | 397 | parse_feeds(transport); |
1ca8997b | 398 | window.setTimeout('viewfeed(-4)', 100); |
d5d56329 | 399 | _update_timeout = window.setTimeout('update()', 5*1000); |
c01f40f4 AD |
400 | } }); |
401 | ||
402 | } catch (e) { | |
403 | exception_error("digest_init", e); | |
404 | } | |
405 | } | |
6361fd20 AD |
406 | |
407 | function tMark_afh_off(effect) { | |
408 | try { | |
409 | var elem = effect.effects[0].element; | |
410 | ||
411 | console.log("tMark_afh_off : " + elem.id); | |
412 | ||
413 | if (elem) { | |
414 | elem.src = elem.src.replace("mark_set", "mark_unset"); | |
415 | elem.alt = __("Star article"); | |
416 | Element.show(elem); | |
417 | } | |
418 | ||
419 | } catch (e) { | |
420 | exception_error("tMark_afh_off", e); | |
421 | } | |
422 | } | |
423 | ||
424 | function tPub_afh_off(effect) { | |
425 | try { | |
426 | var elem = effect.effects[0].element; | |
427 | ||
428 | console.log("tPub_afh_off : " + elem.id); | |
429 | ||
430 | if (elem) { | |
431 | elem.src = elem.src.replace("pub_set", "pub_unset"); | |
432 | elem.alt = __("Publish article"); | |
433 | Element.show(elem); | |
434 | } | |
435 | ||
436 | } catch (e) { | |
437 | exception_error("tPub_afh_off", e); | |
438 | } | |
439 | } | |
440 | ||
441 | function toggleMark(mark_img, id) { | |
442 | ||
443 | try { | |
444 | ||
445 | var query = "?op=rpc&id=" + id + "&subop=mark"; | |
446 | ||
447 | query = query + "&afid=" + _active_feed_id; | |
448 | query = query + "&omode=c"; | |
449 | ||
450 | if (!mark_img) return; | |
451 | ||
6361fd20 AD |
452 | if (mark_img.src.match("mark_unset")) { |
453 | mark_img.src = mark_img.src.replace("mark_unset", "mark_set"); | |
454 | mark_img.alt = __("Unstar article"); | |
455 | query = query + "&mark=1"; | |
456 | } else { | |
457 | mark_img.alt = __("Please wait..."); | |
458 | query = query + "&mark=0"; | |
459 | ||
460 | mark_img.src = mark_img.src.replace("mark_set", "mark_unset"); | |
461 | mark_img.alt = __("Star article"); | |
462 | } | |
463 | ||
464 | new Ajax.Request("backend.php", { | |
465 | parameters: query, | |
466 | onComplete: function(transport) { | |
467 | // | |
468 | } }); | |
469 | ||
470 | } catch (e) { | |
471 | exception_error("toggleMark", e); | |
472 | } | |
473 | } | |
474 | ||
475 | function togglePub(mark_img, id, note) { | |
476 | ||
477 | try { | |
478 | ||
479 | var query = "?op=rpc&id=" + id + "&subop=publ"; | |
480 | ||
481 | query = query + "&afid=" + _active_feed_id; | |
482 | ||
483 | if (note != undefined) { | |
484 | query = query + "¬e=" + param_escape(note); | |
485 | } else { | |
486 | query = query + "¬e=undefined"; | |
487 | } | |
488 | ||
489 | query = query + "&omode=c"; | |
490 | ||
491 | if (!mark_img) return; | |
492 | ||
493 | if (mark_img.src.match("pub_unset") || note != undefined) { | |
494 | mark_img.src = mark_img.src.replace("pub_unset", "pub_set"); | |
495 | mark_img.alt = __("Unpublish article"); | |
496 | query = query + "&pub=1"; | |
497 | ||
498 | } else { | |
499 | mark_img.alt = __("Please wait..."); | |
500 | query = query + "&pub=0"; | |
501 | ||
502 | mark_img.src = mark_img.src.replace("pub_set", "pub_unset"); | |
503 | mark_img.alt = __("Publish article"); | |
504 | } | |
505 | ||
506 | new Ajax.Request("backend.php", { | |
507 | parameters: query, | |
508 | onComplete: function(transport) { | |
509 | // | |
510 | } }); | |
511 | ||
512 | } catch (e) { | |
513 | exception_error("togglePub", e); | |
514 | } | |
515 | } | |
516 | ||
e0cebf2a AD |
517 | function fatal_error(code, msg) { |
518 | try { | |
519 | ||
520 | if (code == 6) { | |
521 | window.location.href = "digest.php"; | |
522 | } else if (code == 5) { | |
523 | window.location.href = "update.php"; | |
524 | } else { | |
525 | ||
526 | if (msg == "") msg = "Unknown error"; | |
527 | ||
528 | console.error("Fatal error: " + code + "\n" + | |
529 | msg); | |
530 | ||
531 | } | |
532 | ||
533 | } catch (e) { | |
534 | exception_error("fatalError", e); | |
535 | } | |
536 | } | |
537 | ||
538 | function fatal_error_check(transport) { | |
539 | try { | |
540 | if (transport.responseXML) { | |
541 | var error = transport.responseXML.getElementsByTagName("error")[0]; | |
542 | ||
543 | if (error) { | |
544 | var code = error.getAttribute("error-code"); | |
545 | var msg = error.getAttribute("error-msg"); | |
546 | if (code != 0) { | |
547 | fatal_error(code, msg); | |
548 | return false; | |
549 | } | |
550 | } | |
551 | } | |
552 | } catch (e) { | |
553 | exception_error("fatal_error_check", e); | |
554 | } | |
555 | return true; | |
556 | } | |
557 | ||
558 |