]> git.wh0rd.org - tt-rss.git/blame - digest.js
config: remove option ENABLE_UPDATE_DAEMON
[tt-rss.git] / digest.js
CommitLineData
c01f40f4 1var last_feeds = [];
285de6d8
AD
2var init_params = {};
3
1ca8997b
AD
4var _active_feed_id = false;
5var _active_feed_offset = false;
118e9399 6var _update_timeout = false;
e4c530dc 7var _view_update_timeout = false;
c1b5cd23 8var _feedlist_expanded = false;
e4c530dc 9var _update_seq = 1;
c1b5cd23 10
41de9581
AD
11function article_appear(article_id) {
12 try {
13 new Effect.Appear('A-' + article_id);
14 } catch (e) {
15 exception_error("article_appear", e);
16 }
17}
18
c1b5cd23
AD
19function catchup_feed(feed_id, callback) {
20 try {
21
22 var fn = find_feed(last_feeds, feed_id).title;
23
24 if (confirm(__("Mark all articles in %s as read?").replace("%s", fn))) {
25
26 var is_cat = "";
27
9ed133e7 28 if (feed_id < 0) is_cat = "true"; // KLUDGE
c1b5cd23
AD
29
30 var query = "?op=rpc&subop=catchupFeed&feed_id=" +
31 feed_id + "&is_cat=" + is_cat;
32
33 new Ajax.Request("backend.php", {
34 parameters: query,
35 onComplete: function(transport) {
36 if (callback) callback(transport);
37
38 update();
39 } });
40 }
41
42 } catch (e) {
43 exception_error("catchup_article", e);
44 }
45}
46
58226f86 47function get_visible_article_ids() {
46360a96 48 try {
5e9a79e1
AD
49 var elems = $("headlines-content").getElementsByTagName("LI");
50 var ids = [];
eb4f33ec 51
5e9a79e1
AD
52 for (var i = 0; i < elems.length; i++) {
53 if (elems[i].id && elems[i].id.match("A-")) {
54 ids.push(elems[i].id.replace("A-", ""));
eb4f33ec 55 }
5e9a79e1
AD
56 }
57
58226f86
AD
58 return ids;
59
60 } catch (e) {
61 exception_error("get_visible_article_ids", e);
62 }
63}
64
65function catchup_visible_articles(callback) {
66 try {
67
68 var ids = get_visible_article_ids();
69
5e9a79e1
AD
70 if (confirm(__("Mark %d displayed articles as read?").replace("%d", ids.length))) {
71
eb4f33ec
AD
72 var query = "?op=rpc&subop=catchupSelected" +
73 "&cmode=0&ids=" + param_escape(ids);
74
75 new Ajax.Request("backend.php", {
76 parameters: query,
77 onComplete: function(transport) {
78 if (callback) callback(transport);
79
80 viewfeed(_active_feed_id, 0);
81 } });
82
83 }
46360a96
AD
84
85 } catch (e) {
86 exception_error("catchup_visible_articles", e);
87 }
88}
1ca8997b 89
d5d56329
AD
90function catchup_article(article_id, callback) {
91 try {
92 var query = "?op=rpc&subop=catchupSelected" +
93 "&cmode=0&ids=" + article_id;
94
95 new Ajax.Request("backend.php", {
96 parameters: query,
97 onComplete: function(transport) {
98 if (callback) callback(transport);
99 } });
100
101 } catch (e) {
102 exception_error("catchup_article", e);
103 }
104}
105
106function set_selected_feed(feed_id) {
11a7a966
AD
107 try {
108 var feeds = $("feeds-content").getElementsByTagName("LI");
109
110 for (var i = 0; i < feeds.length; i++) {
111 if (feeds[i].id == "F-" + feed_id)
112 feeds[i].className = "selected";
113 else
114 feeds[i].className = "";
115 }
116
d5d56329
AD
117 _active_feed_id = feed_id;
118
11a7a966
AD
119 } catch (e) {
120 exception_error("mark_selected_feed", e);
121 }
122}
123
d8ea9902 124function zoom(elem, article_id) {
22933e5e 125 try {
d8ea9902 126 //alert(elem + "/" + article_id);
22933e5e 127
d8ea9902
AD
128 elem.innerHTML = "<img src='images/indicator_tiny.gif'> " +
129 __("Loading, please wait...");
130
131 new Ajax.Request("backend.php", {
132 parameters: "?op=rpc&subop=digest-get-contents&article_id=" +
133 article_id,
134 onComplete: function(transport) {
135 fatal_error_check(transport);
136
0fe841ef
AD
137 var reply = JSON.parse(transport.responseText);
138
139 if (reply) {
140 var article = reply['article'];
141
142 elem.innerHTML = article.content;
85629f6c
AD
143
144 new Effect.BlindDown(elem, {duration : 0.5});
145
146 elem.onclick = false;
147 elem.style.cursor = "auto";
2f57dff5
AD
148
149 catchup_article(article_id,
150 function() {
151 window.clearTimeout(_view_update_timeout);
152 _view_update_timeout = window.setTimeout("view_update()", 500);
153 $("A-" + article_id).className = "read";
154 });
155
156
d8ea9902
AD
157 } else {
158 elem.innerHTML = __("Error: unable to load article.");
159 }
160
161 } });
118e9399 162
118e9399
AD
163
164 } catch (e) {
165 exception_error("zoom", e);
166 }
167}
168
169function load_more() {
170 try {
5e9a79e1
AD
171 var pr = $("H-LOADING-IMG");
172
173 if (pr) Element.show(pr);
174
175 viewfeed(_active_feed_id, _active_feed_offset + 10, false, false, true,
176 function() {
177 var pr = $("H-LOADING-IMG");
178
179 if (pr) Element.hide(pr);
180 });
118e9399
AD
181 } catch (e) {
182 exception_error("load_more", e);
183 }
184}
185
5e9a79e1 186function update(callback) {
118e9399 187 try {
d5d56329
AD
188 console.log('updating feeds...');
189
190 window.clearTimeout(_update_timeout);
191
192 new Ajax.Request("backend.php", {
193 parameters: "?op=rpc&subop=digest-init",
194 onComplete: function(transport) {
e0cebf2a 195 fatal_error_check(transport);
d5d56329
AD
196 parse_feeds(transport);
197 set_selected_feed(_active_feed_id);
5e9a79e1
AD
198
199 if (callback) callback(transport);
d5d56329
AD
200 } });
201
202 _update_timeout = window.setTimeout('update()', 5*1000);
118e9399
AD
203 } catch (e) {
204 exception_error("update", e);
205 }
206}
207
d5d56329 208function remove_headline_entry(article_id) {
118e9399
AD
209 try {
210 var elem = $('A-' + article_id);
211
d5d56329
AD
212 if (elem) {
213 elem.parentNode.removeChild(elem);
214 }
118e9399 215
d5d56329
AD
216 } catch (e) {
217 exception_error("remove_headline_entry", e);
218 }
219}
118e9399 220
e4c530dc
AD
221function view_update() {
222 try {
5e9a79e1 223 viewfeed(_active_feed_id, _active_feed_offset, false, true, true);
e4c530dc
AD
224 update();
225 } catch (e) {
226 exception_error("view_update", e);
227 }
228}
229
d5d56329
AD
230function view(article_id, dismiss_only) {
231 try {
232 remove_headline_entry(article_id);
118e9399 233
d5d56329 234 catchup_article(article_id,
1a434472 235 function() {
e4c530dc 236 window.clearTimeout(_view_update_timeout);
2f57dff5 237 _view_update_timeout = window.setTimeout("view_update()", 500);
1a434472 238 });
118e9399
AD
239
240 return dismiss_only != true;
22933e5e
AD
241 } catch (e) {
242 exception_error("view", e);
243 }
244}
245
5e9a79e1 246function viewfeed(feed_id, offset, replace, no_effects, no_indicator, callback) {
b41c2549
AD
247 try {
248
1ca8997b
AD
249 if (!feed_id) feed_id = _active_feed_id;
250
d5d56329 251 if (!offset) {
1ca8997b 252 offset = 0;
d5d56329 253 } else {
1ca8997b 254 offset = _active_feed_offset + offset;
d5d56329 255 }
1ca8997b 256
41de9581
AD
257 if (replace == undefined) replace = (offset == 0);
258
e4c530dc
AD
259 _update_seq = _update_seq + 1;
260
78ac6caf 261 var query = "backend.php?op=rpc&subop=digest-update&feed_id=" +
e4c530dc
AD
262 param_escape(feed_id) + "&offset=" + offset +
263 "&seq=" + _update_seq;
78ac6caf
AD
264
265 console.log(query);
1ca8997b 266
b8a1b2ae
AD
267 if ($("F-" + feed_id)) {
268 var img = $("F-" + feed_id).getElementsByTagName("IMG")[0];
d3f13000 269
b8a1b2ae
AD
270 if (img && !no_indicator) {
271 img.setAttribute("orig_src", img.src);
272 img.src = 'images/indicator_tiny.gif';
273 }
5e9a79e1 274 }
d3f13000 275
b41c2549 276 new Ajax.Request("backend.php", {
1ca8997b 277 parameters: query,
b41c2549 278 onComplete: function(transport) {
c7a5c8a5
AD
279 Element.hide("overlay");
280
e0cebf2a 281 fatal_error_check(transport);
41de9581 282 parse_headlines(transport, replace, no_effects);
5e9a79e1 283 set_selected_feed(feed_id);
1ca8997b 284 _active_feed_offset = offset;
5e9a79e1
AD
285
286 if (img && !no_indicator)
287 img.src = img.getAttribute("orig_src");
288
289 if (callback) callback(transport);
290
11a7a966 291 } });
b41c2549
AD
292
293 } catch (e) {
294 exception_error("view", e);
295 }
296}
297
118e9399
AD
298function find_article(articles, article_id) {
299 try {
300 for (var i = 0; i < articles.length; i++) {
301 if (articles[i].id == article_id)
302 return articles[i];
303 }
304
305 return false;
306
307 } catch (e) {
308 exception_error("find_article", e);
309 }
310}
311
c01f40f4
AD
312function find_feed(feeds, feed_id) {
313 try {
314 for (var i = 0; i < feeds.length; i++) {
315 if (feeds[i].id == feed_id)
316 return feeds[i];
317 }
318
319 return false;
320
321 } catch (e) {
322 exception_error("find_feed", e);
323 }
324}
325
b41c2549
AD
326function get_feed_icon(feed) {
327 try {
328 if (feed.has_icon)
f1f3a642 329 return getInitParam('icons_url') + "/" + feed.id + '.ico';
b41c2549
AD
330
331 if (feed.id == -1)
332 return 'images/mark_set.png';
333
334 if (feed.id == -2)
335 return 'images/pub_set.png';
336
337 if (feed.id == -3)
338 return 'images/fresh.png';
339
340 if (feed.id == -4)
341 return 'images/tag.png';
342
343 if (feed.id < -10)
344 return 'images/label.png';
345
d5d56329
AD
346 return 'images/blank_icon.gif';
347
b41c2549
AD
348 } catch (e) {
349 exception_error("get_feed_icon", e);
350 }
351}
352
c01f40f4
AD
353function add_feed_entry(feed) {
354 try {
355 var icon_part = "";
356
b41c2549 357 icon_part = "<img src='" + get_feed_icon(feed) + "'/>";
c01f40f4 358
c1b5cd23
AD
359 var tmp_html = "<li id=\"F-"+feed.id+"\" " +
360 "onmouseover=\"feed_mi(this)\" onmouseout=\"feed_mo(this)\">" +
c01f40f4 361 icon_part +
c1b5cd23
AD
362 "<a href=\"#\" onclick=\"viewfeed("+feed.id+")\">" + feed.title + "</a>" +
363 "<div class='unread-ctr'>" +
46360a96
AD
364 "<img onclick=\"catchup_feed("+feed.id+")\" title=\"" +
365 __("Mark as read") +
366 "\" class=\"dismiss\" style='display : none' src=\"images/digest_checkbox.png\">" +
c1b5cd23
AD
367 "<span class=\"unread\">" + feed.unread + "</span>" +
368 "</div>" +
c01f40f4
AD
369 "</li>";
370
371 $("feeds-content").innerHTML += tmp_html;
372
373 } catch (e) {
374 exception_error("add_feed_entry", e);
375 }
376}
377
41de9581 378function add_headline_entry(article, feed, no_effects) {
c01f40f4
AD
379 try {
380
381 var icon_part = "";
382
d5d56329 383 icon_part = "<img class='icon' src='" + get_feed_icon(feed) + "'/>";
c01f40f4 384
9ed133e7
AD
385 var mark_part = "";
386 var publ_part = "";
387
78ac6caf
AD
388 var tags_part = "";
389
390 if (article.tags.length > 0) {
391
392 tags_part = " " + __("in") + " ";
393
394 for (var i = 0; i < Math.min(5, article.tags.length); i++) {
395 tags_part += "<a href=\"#\" onclick=\"viewfeed('" +
396 article.tags[i] + "')\">" +
397 article.tags[i] + "</a>, ";
398 }
399
400 tags_part = tags_part.replace(/, $/, "");
401 tags_part = "<span class=\"tags\">" + tags_part + "</span>";
402 }
403
9ed133e7
AD
404 if (article.marked)
405 mark_part = "<img title='"+ __("Unstar article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_set.png'>";
406 else
407 mark_part = "<img title='"+__("Star article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_unset.png'>";
408
409 if (article.published)
410 publ_part = "<img title='"+__("Unpublish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_set.png'>";
411 else
412 publ_part = "<img title='"+__("Publish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_unset.png'>";
413
41de9581 414 var style = "";
9ed133e7 415
41de9581
AD
416 if (!no_effects) style = "style=\"display : none\"";
417
ed6c208d
AD
418 if (article.excerpt.trim() == "")
419 article.excerpt = __("Click to expand article.");
420
e638cd02
AD
421 var li_class = "unread";
422
423 var fresh_max = getInitParam("fresh_article_max_age") * 60 * 60;
424 var d = new Date();
425
426 if (d.getTime() / 1000 - article.updated < fresh_max)
427 li_class = "fresh";
428
429 var tmp_html = "<li id=\"A-"+article.id+"\" "+style+" class=\""+li_class+"\">" +
c01f40f4 430 icon_part +
85629f6c 431
6361fd20 432 "<div class='digest-check'>" +
85629f6c
AD
433 mark_part +
434 publ_part +
ba7e88e5 435 "<img title='" + __("Share on Twitter") + "' onclick=\"tweet_article("+article.id+", true)\" src='images/art-tweet.png'>" +
85629f6c 436 "<img title='" + __("Mark as read") + "' onclick=\"view("+article.id+", true)\" src='images/digest_checkbox.png'>" +
6361fd20 437 "</div>" +
22933e5e
AD
438 "<a target=\"_blank\" href=\""+article.link+"\""+
439 "onclick=\"return view("+article.id+")\" class='title'>" +
440 article.title + "</a>" +
118e9399 441 "<div class='body'>" +
d8ea9902 442 "<div title=\""+__("Click to expand article")+"\" onclick=\"zoom(this, "+article.id+")\" class='excerpt'>" +
118e9399 443 article.excerpt + "</div>" +
c524d7e6 444 "<div class='info'><a href=\#\" onclick=\"viewfeed("+feed.id+")\">" +
78ac6caf 445 feed.title + "</a> " + tags_part + " @ " +
b41c2549 446 new Date(article.updated * 1000) + "</div>" +
1ca8997b 447 "</div></li>";
c01f40f4
AD
448
449 $("headlines-content").innerHTML += tmp_html;
450
41de9581
AD
451 if (!no_effects)
452 window.setTimeout('article_appear(' + article.id + ')', 100);
453
c01f40f4
AD
454 } catch (e) {
455 exception_error("add_headline_entry", e);
456 }
457}
458
c1b5cd23
AD
459function expand_feeds() {
460 try {
461 _feedlist_expanded = true;
462
463 redraw_feedlist(last_feeds);
464
465 } catch (e) {
466 exception_error("expand_feeds", e);
467 }
468}
469
470function redraw_feedlist(feeds) {
471 try {
472
473 $('feeds-content').innerHTML = "";
474
475 var limit = 10;
476
477 if (_feedlist_expanded) limit = feeds.length;
478
479 for (var i = 0; i < Math.min(limit, feeds.length); i++) {
480 add_feed_entry(feeds[i]);
481 }
482
483 if (feeds.length > limit) {
484 $('feeds-content').innerHTML += "<li id='F-MORE-PROMPT'>" +
485 "<img src='images/blank_icon.gif'>" +
486 "<a href=\"#\" onclick=\"expand_feeds()\">" +
487 __("%d more...").replace("%d", feeds.length-10) +
488 "</a>" + "</li>";
489 }
490
126cb765 491 if (feeds.length == 0) {
29a5b4aa
AD
492 $('feeds-content').innerHTML =
493 "<div class='insensitive' style='text-align : center'>" +
494 __("No unread feeds.") + "</div>";
126cb765
AD
495 }
496
c1b5cd23
AD
497 } catch (e) {
498 exception_error("redraw_feedlist", e);
499 }
500}
501
d5d56329
AD
502function parse_feeds(transport) {
503 try {
126cb765 504 var reply = JSON.parse(transport.responseText);
d5d56329 505
126cb765 506 if (!reply) return;
c1b5cd23 507
126cb765 508 var feeds = reply['feeds'];
d5d56329
AD
509
510 if (feeds) {
d5d56329 511
e0cebf2a
AD
512 feeds.sort( function (a,b)
513 {
514 if (b.unread != a.unread)
515 return (b.unread - a.unread)
516 else
517 if (a.title > b.title)
518 return 1;
519 else if (a.title < b.title)
520 return -1;
521 else
522 return 0;
523 });
524
4311cc7e
AD
525 var all_articles = find_feed(feeds, -4);
526
527 update_title(all_articles.unread);
528
d5d56329
AD
529 last_feeds = feeds;
530
c1b5cd23 531 redraw_feedlist(feeds);
d5d56329
AD
532 }
533
534 } catch (e) {
535 exception_error("parse_feeds", e);
536 }
537}
538
41de9581 539function parse_headlines(transport, replace, no_effects) {
d5d56329 540 try {
126cb765
AD
541 var reply = JSON.parse(transport.responseText);
542 if (!reply) return;
c1b5cd23 543
126cb765 544 var seq = reply['seq'];
e4c530dc
AD
545
546 if (seq) {
e4c530dc
AD
547 if (seq != _update_seq) {
548 console.log("parse_headlines: wrong sequence received.");
549 return;
550 }
551 } else {
552 return;
553 }
554
126cb765
AD
555 var headlines = reply['headlines']['content'];
556 var headlines_title = reply['headlines']['title'];
d5d56329 557
78ac6caf 558 if (headlines && headlines_title) {
126cb765 559 $("headlines-title").innerHTML = headlines_title
78ac6caf 560
6eed9e80
AD
561 if (replace) {
562 $('headlines-content').innerHTML = '';
563 Element.hide('headlines-content');
564 }
d5d56329 565
c1b5cd23 566 var pr = $('H-MORE-PROMPT');
d5d56329
AD
567
568 if (pr) pr.parentNode.removeChild(pr);
569
6eed9e80
AD
570 var inserted = false;
571
d5d56329
AD
572 for (var i = 0; i < headlines.length; i++) {
573
574 if (!$('A-' + headlines[i].id)) {
575 add_headline_entry(headlines[i],
41de9581 576 find_feed(last_feeds, headlines[i].feed_id), !no_effects);
6eed9e80
AD
577
578 inserted = $("A-" + headlines[i].id);
d5d56329
AD
579 }
580 }
581
58226f86
AD
582 var ids = get_visible_article_ids();
583
584 if (ids.length > 0) {
585 if (pr) {
586 $('headlines-content').appendChild(pr);
ba7e88e5 587 if (!no_effects && inserted) new Effect.ScrollTo(inserted);
58226f86
AD
588 } else {
589 $('headlines-content').innerHTML += "<li id='H-MORE-PROMPT'>" +
590 "<div class='body'>" +
ba7e88e5 591 "<a href=\"#\" onclick=\"catchup_visible_articles()\">" +
58226f86 592 __("Mark as read") + "</a> | " +
ba7e88e5 593 "<a href=\"#\" onclick=\"load_more()\">" +
58226f86
AD
594 __("Load more...") + "</a>" +
595 "<img style=\"display : none\" "+
eb4f33ec 596 "id=\"H-LOADING-IMG\" src='images/indicator_tiny.gif'>" +
58226f86
AD
597 "</div></li>";
598 }
599 } else {
600 // FIXME : display some kind of "nothing to see here" prompt here
d5d56329
AD
601 }
602
41de9581
AD
603 if (replace && !no_effects)
604 new Effect.Appear('headlines-content', {duration : 0.3});
6eed9e80
AD
605
606 //new Effect.Appear('headlines-content');
d5d56329
AD
607 }
608
609 } catch (e) {
610 exception_error("parse_headlines", e);
611 }
612}
613
5328c7d7 614function init_second_stage() {
c01f40f4 615 try {
c01f40f4
AD
616 new Ajax.Request("backend.php", {
617 parameters: "backend.php?op=rpc&subop=digest-init",
618 onComplete: function(transport) {
d5d56329 619 parse_feeds(transport);
1ca8997b 620 window.setTimeout('viewfeed(-4)', 100);
d5d56329 621 _update_timeout = window.setTimeout('update()', 5*1000);
c01f40f4
AD
622 } });
623
5328c7d7
AD
624 } catch (e) {
625 exception_error("init_second_stage", e);
626 }
627}
628
5328c7d7
AD
629function init() {
630 try {
ba7e88e5 631 dojo.require("dijit.Dialog");
5328c7d7
AD
632
633 new Ajax.Request("backend.php", {
634 parameters: "?op=rpc&subop=sanityCheck",
635 onComplete: function(transport) {
285de6d8 636 backend_sanity_check_callback(transport);
5328c7d7
AD
637 } });
638
c01f40f4
AD
639 } catch (e) {
640 exception_error("digest_init", e);
641 }
642}
6361fd20 643
4ad8c93b 644function toggle_mark(img, id) {
6361fd20
AD
645
646 try {
647
648 var query = "?op=rpc&id=" + id + "&subop=mark";
6361fd20 649
4ad8c93b 650 if (!img) return;
6361fd20 651
4ad8c93b
AD
652 if (img.src.match("mark_unset")) {
653 img.src = img.src.replace("mark_unset", "mark_set");
654 img.alt = __("Unstar article");
6361fd20
AD
655 query = query + "&mark=1";
656 } else {
4ad8c93b
AD
657 img.src = img.src.replace("mark_set", "mark_unset");
658 img.alt = __("Star article");
6361fd20 659 query = query + "&mark=0";
6361fd20
AD
660 }
661
662 new Ajax.Request("backend.php", {
663 parameters: query,
664 onComplete: function(transport) {
9ed133e7 665 update();
6361fd20
AD
666 } });
667
668 } catch (e) {
9ed133e7 669 exception_error("toggle_mark", e);
6361fd20
AD
670 }
671}
672
4ad8c93b 673function toggle_pub(img, id, note) {
6361fd20
AD
674
675 try {
676
677 var query = "?op=rpc&id=" + id + "&subop=publ";
678
6361fd20
AD
679 if (note != undefined) {
680 query = query + "&note=" + param_escape(note);
681 } else {
682 query = query + "&note=undefined";
683 }
684
4ad8c93b 685 if (!img) return;
6361fd20 686
4ad8c93b
AD
687 if (img.src.match("pub_unset") || note != undefined) {
688 img.src = img.src.replace("pub_unset", "pub_set");
689 img.alt = __("Unpublish article");
6361fd20
AD
690 query = query + "&pub=1";
691
692 } else {
4ad8c93b
AD
693 img.src = img.src.replace("pub_set", "pub_unset");
694 img.alt = __("Publish article");
6361fd20 695 query = query + "&pub=0";
6361fd20
AD
696 }
697
698 new Ajax.Request("backend.php", {
699 parameters: query,
700 onComplete: function(transport) {
9ed133e7 701 update();
6361fd20
AD
702 } });
703
704 } catch (e) {
9ed133e7 705 exception_error("toggle_pub", e);
6361fd20
AD
706 }
707}
708
e0cebf2a
AD
709function fatal_error(code, msg) {
710 try {
711
712 if (code == 6) {
713 window.location.href = "digest.php";
714 } else if (code == 5) {
661135c7 715 window.location.href = "db-updater.php";
e0cebf2a
AD
716 } else {
717
718 if (msg == "") msg = "Unknown error";
719
720 console.error("Fatal error: " + code + "\n" +
721 msg);
722
723 }
724
725 } catch (e) {
726 exception_error("fatalError", e);
727 }
728}
729
730function fatal_error_check(transport) {
731 try {
732 if (transport.responseXML) {
733 var error = transport.responseXML.getElementsByTagName("error")[0];
734
735 if (error) {
736 var code = error.getAttribute("error-code");
737 var msg = error.getAttribute("error-msg");
738 if (code != 0) {
739 fatal_error(code, msg);
740 return false;
741 }
742 }
743 }
744 } catch (e) {
745 exception_error("fatal_error_check", e);
746 }
747 return true;
748}
749
c1b5cd23
AD
750function feed_mi(elem) {
751 try {
752 var imgs = elem.getElementsByTagName('IMG');
753 var spans = elem.getElementsByTagName('SPAN');
754
755 for (var i = 0; i < imgs.length; i++) {
756 if (imgs[i].className == "dismiss")
757 Element.show(imgs[i]);
758 }
759
760 for (var i = 0; i < spans.length; i++) {
761 if (spans[i].className == "unread")
762 Element.hide(spans[i]);
763 }
764
765
766 } catch (e) {
767 exception_error("feed_mi", e);
768 }
769}
770
771function feed_mo(elem) {
772 try {
773 var imgs = elem.getElementsByTagName('IMG');
774 var spans = elem.getElementsByTagName('SPAN');
775
776 for (var i = 0; i < imgs.length; i++) {
777 if (imgs[i].className == "dismiss")
778 Element.hide(imgs[i]);
779 }
780
781 for (var i = 0; i < spans.length; i++) {
782 if (spans[i].className == "unread")
783 Element.show(spans[i]);
784 }
e0cebf2a 785
c1b5cd23
AD
786 } catch (e) {
787 exception_error("feed_mo", e);
788 }
789}
4311cc7e
AD
790
791function update_title(unread) {
792 try {
793 document.title = "Tiny Tiny RSS";
794
795 if (unread > 0)
796 document.title += " (" + unread + ")";
797
798 } catch (e) {
799 exception_error("update_title", e);
800 }
801}
802
ba7e88e5
AD
803function tweet_article(id) {
804 try {
805
806 var query = "?op=rpc&subop=getTweetInfo&id=" + param_escape(id);
807
808 console.log(query);
809
810 var d = new Date();
811 var ts = d.getTime();
812
813 var w = window.open('backend.php?op=loading', 'ttrss_tweet',
814 "status=0,toolbar=0,location=0,width=500,height=400,scrollbars=1,menubar=0");
815
816 new Ajax.Request("backend.php", {
817 parameters: query,
818 onComplete: function(transport) {
819 var ti = JSON.parse(transport.responseText);
820
821 var share_url = "http://twitter.com/share?_=" + ts +
822 "&text=" + param_escape(ti.title) +
823 "&url=" + param_escape(ti.link);
824
825 w.location.href = share_url;
826
827 } });
828
829 } catch (e) {
830 exception_error("tweet_article", e);
831 }
832}