]>
git.wh0rd.org - tt-rss.git/blob - digest.js
0e567193f18f36dbc718b6cfba10615843e5ce1b
3 var _active_feed_id
= false;
4 var _active_feed_offset
= false;
5 var _update_timeout
= false;
7 function mark_selected_feed(feed_id
) {
9 var feeds
= $("feeds-content").getElementsByTagName("LI");
11 for (var i
= 0; i
< feeds
.length
; i
++) {
12 if (feeds
[i
].id
== "F-" + feed_id
)
13 feeds
[i
].className
= "selected";
15 feeds
[i
].className
= "";
19 exception_error("mark_selected_feed", e
);
23 function zoom(article_id
) {
25 var elem
= $('A-' + article_id
);
28 var divs
= elem
.getElementsByTagName('DIV');
30 for (var i
= 0; i
< divs
.length
; i
++) {
31 if (divs
[i
].className
== 'excerpt')
32 Element
.hide(divs
[i
]);
34 if (divs
[i
].className
== 'content')
35 Element
.show(divs
[i
]);
39 var query
= "backend.php?op=rpc&subop=digest-mark&article_id=" + article_id
;
41 new Ajax
.Request("backend.php", {
43 onComplete: function(transport
) {
44 window
.clearTimeout(_update_timeout
);
45 _update_timeout
= window
.setTimeout('update()', 1000);
49 exception_error("zoom", e
);
53 function load_more() {
55 var elem
= $('MORE-PROMPT');
62 viewfeed(_active_feed_id
, _active_feed_offset
+ 10);
64 exception_error("load_more", e
);
70 viewfeed(_active_feed_id
, _active_feed_offset
);
72 exception_error("update", e
);
76 function view(article_id
, dismiss_only
) {
78 var elem
= $('A-' + article_id
);
82 //new Effect.Fade(elem, {duration : 0.3});
86 var query
= "backend.php?op=rpc&subop=digest-mark&article_id=" + article_id
;
88 new Ajax
.Request("backend.php", {
90 onComplete: function(transport
) {
91 window
.clearTimeout(_update_timeout
);
92 _update_timeout
= window
.setTimeout('update()', 1000);
95 return dismiss_only
!= true;
97 exception_error("view", e
);
101 function viewfeed(feed_id
, offset
) {
104 if (!feed_id
) feed_id
= _active_feed_id
;
109 offset
= _active_feed_offset
+ offset
;
111 var query
= "backend.php?op=rpc&subop=digest-update&feed_id=" + feed_id
+
116 new Ajax
.Request("backend.php", {
118 onComplete: function(transport
) {
119 digest_update(transport
, feed_id
);
120 _active_feed_id
= feed_id
;
121 _active_feed_offset
= offset
;
122 mark_selected_feed(feed_id
);
126 exception_error("view", e
);
130 function find_article(articles
, article_id
) {
132 for (var i
= 0; i
< articles
.length
; i
++) {
133 if (articles
[i
].id
== article_id
)
140 exception_error("find_article", e
);
144 function find_feed(feeds
, feed_id
) {
146 for (var i
= 0; i
< feeds
.length
; i
++) {
147 if (feeds
[i
].id
== feed_id
)
154 exception_error("find_feed", e
);
158 function get_feed_icon(feed
) {
161 return 'icons/' + feed
.id
+ '.ico';
164 return 'images/mark_set.png';
167 return 'images/pub_set.png';
170 return 'images/fresh.png';
173 return 'images/tag.png';
176 return 'images/label.png';
179 exception_error("get_feed_icon", e
);
183 function add_feed_entry(feed
) {
187 icon_part
= "<img src='" + get_feed_icon(feed
) + "'/>";
189 var tmp_html
= "<li id=\"F-"+feed
.id
+"\">" +
191 "<a href=\"#\" onclick=\"viewfeed("+feed
.id
+")\">" + feed
.title
+
192 "<div class='unread-ctr'>" + feed
.unread
+ "</div>" +
195 $("feeds-content").innerHTML
+= tmp_html
;
198 exception_error("add_feed_entry", e
);
202 function add_latest_entry(article
, feed
) {
206 //$("latest-content").innerHTML += "bbb";
209 exception_error("add_latest_entry", e
);
213 function add_headline_entry(article
, feed
) {
218 if (article
.has_icon
)
219 icon_part
= "<img class='icon' src='icons/" + article
.feed_id
+ ".ico'/>";
221 var tmp_html
= "<li id=\"A-"+article
.id
+"\">" +
223 "<div class='digest-check'>" +
224 "<img title='Set starred' onclick=\"toggleMark(this, "+article
.id
+")\" src='images/mark_unset.png'>" +
225 "<img title='Set published' onclick=\"togglePub(this, "+article
.id
+")\" src='images/pub_unset.png'>" +
226 "<img title='Dismiss' onclick=\"view("+article
.id
+", true)\" class='digest-check' src='images/digest_checkbox.png'>" +
228 "<a target=\"_blank\" href=\""+article
.link
+"\""+
229 "onclick=\"return view("+article
.id
+")\" class='title'>" +
230 article
.title
+ "</a>" +
231 "<div class='body'>" +
232 "<div title=\"Click to expand article\" onclick=\"zoom("+article
.id
+")\" class='excerpt'>" +
233 article
.excerpt
+ "</div>" +
234 "<div style='display : none' class='content'>" +
235 article
.content
+ "</div>" +
236 "<div class='info'><a href=\#\" onclick=\"viewfeed("+feed
.id
+")\">" +
237 feed
.title
+ "</a> " + " @ " +
238 new Date(article
.updated
* 1000) + "</div>" +
241 $("headlines-content").innerHTML
+= tmp_html
;
244 exception_error("add_headline_entry", e
);
248 function digest_update(transport
, feed_id
) {
250 var feeds
= transport
.responseXML
.getElementsByTagName('feeds')[0];
251 var headlines
= transport
.responseXML
.getElementsByTagName('headlines')[0];
254 feeds
= eval("(" + feeds
.firstChild
.nodeValue
+ ")");
258 $('feeds-content').innerHTML
= "";
260 for (var i
= 0; i
< feeds
.length
; i
++) {
261 add_feed_entry(feeds
[i
]);
268 headlines
= eval("(" + headlines
.firstChild
.nodeValue
+ ")");
270 if (_active_feed_id
!= feed_id
)
271 $('headlines-content').innerHTML
= "";
273 //Element.hide('headlines-content');
275 var pr
= $('MORE-PROMPT');
282 for (var i
= 0; i
< headlines
.length
; i
++) {
283 var elem
= $('A-' + headlines
[i
].id
);
285 if (elem
&& Element
.visible(elem
)) {
289 add_headline_entry(headlines
[i
], find_feed(feeds
, headlines
[i
].feed_id
));
293 $('headlines-content').innerHTML
+= "<li id='MORE-PROMPT'>" +
294 "<div class='body'><a href=\"#\" onclick=\"load_more()\">" +
295 __("More articles...") + "</a></div></li>";
297 new Effect
.Appear('headlines-content');
302 exception_error("digest_update", e
);
306 function digest_init() {
309 new Ajax
.Request("backend.php", {
310 parameters
: "backend.php?op=rpc&subop=digest-init",
311 onComplete: function(transport
) {
312 digest_update(transport
, -4);
313 window
.setTimeout('viewfeed(-4)', 100);
317 exception_error("digest_init", e
);
321 function tMark_afh_off(effect
) {
323 var elem
= effect
.effects
[0].element
;
325 console
.log("tMark_afh_off : " + elem
.id
);
328 elem
.src
= elem
.src
.replace("mark_set", "mark_unset");
329 elem
.alt
= __("Star article");
334 exception_error("tMark_afh_off", e
);
338 function tPub_afh_off(effect
) {
340 var elem
= effect
.effects
[0].element
;
342 console
.log("tPub_afh_off : " + elem
.id
);
345 elem
.src
= elem
.src
.replace("pub_set", "pub_unset");
346 elem
.alt
= __("Publish article");
351 exception_error("tPub_afh_off", e
);
355 function toggleMark(mark_img
, id
) {
359 var query
= "?op=rpc&id=" + id
+ "&subop=mark";
361 query
= query
+ "&afid=" + _active_feed_id
;
362 query
= query
+ "&omode=c";
364 if (!mark_img
) return;
366 var vfeedu
= $("FEEDU--1");
367 var crow
= $("RROW-" + id
);
369 if (mark_img
.src
.match("mark_unset")) {
370 mark_img
.src
= mark_img
.src
.replace("mark_unset", "mark_set");
371 mark_img
.alt
= __("Unstar article");
372 query
= query
+ "&mark=1";
374 mark_img
.alt
= __("Please wait...");
375 query
= query
+ "&mark=0";
377 mark_img
.src
= mark_img
.src
.replace("mark_set", "mark_unset");
378 mark_img
.alt
= __("Star article");
381 new Ajax
.Request("backend.php", {
383 onComplete: function(transport
) {
388 exception_error("toggleMark", e
);
392 function togglePub(mark_img
, id
, note
) {
396 var query
= "?op=rpc&id=" + id
+ "&subop=publ";
398 query
= query
+ "&afid=" + _active_feed_id
;
400 if (note
!= undefined) {
401 query
= query
+ "¬e=" + param_escape(note
);
403 query
= query
+ "¬e=undefined";
406 query
= query
+ "&omode=c";
408 if (!mark_img
) return;
410 if (mark_img
.src
.match("pub_unset") || note
!= undefined) {
411 mark_img
.src
= mark_img
.src
.replace("pub_unset", "pub_set");
412 mark_img
.alt
= __("Unpublish article");
413 query
= query
+ "&pub=1";
416 mark_img
.alt
= __("Please wait...");
417 query
= query
+ "&pub=0";
419 mark_img
.src
= mark_img
.src
.replace("pub_set", "pub_unset");
420 mark_img
.alt
= __("Publish article");
423 new Ajax
.Request("backend.php", {
425 onComplete: function(transport
) {
430 exception_error("togglePub", e
);