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