]>
git.wh0rd.org - tt-rss.git/blob - viewfeed.js
1 var active_post_id
= false;
2 var _catchup_callback_func
= false;
3 var last_article_view
= false;
5 function catchup_callback() {
6 if (xmlhttp_rpc
.readyState
== 4) {
8 debug("catchup_callback");
9 if (_catchup_callback_func
) {
10 setTimeout(_catchup_callback_func
, 100);
12 all_counters_callback();
14 exception_error("catchup_callback", e
);
19 function headlines_callback() {
20 if (xmlhttp
.readyState
== 4) {
21 debug("headlines_callback");
22 var f
= document
.getElementById("headlines-frame");
26 f
.innerHTML
= xmlhttp
.responseText
;
27 update_all_counters();
28 if (typeof correctPNG
!= 'undefined') {
35 function article_callback() {
36 if (xmlhttp
.readyState
== 4) {
37 debug("article_callback");
38 var f
= document
.getElementById("content-frame");
42 f
.innerHTML
= xmlhttp
.responseText
;
44 var date
= new Date();
45 last_article_view
= date
.getTime() / 1000;
47 if (typeof correctPNG
!= 'undefined') {
50 update_all_counters();
54 function view(id
, feed_id
, skip_history
) {
57 debug("loading article: " + id
+ "/" + feed_id
);
60 history_push("ARTICLE:" + id
+ ":" + feed_id
);
66 //setActiveFeedId(feed_id);
68 var query
= "backend.php?op=view&id=" + param_escape(id
) +
69 "&feed=" + param_escape(feed_id
);
71 var date
= new Date();
73 if (!xmlhttp_ready(xmlhttp
) && last_article_view
< date
.getTime() / 1000 - 15) {
74 debug("<b>xmlhttp seems to be stuck at view, aborting</b>");
78 if (xmlhttp_ready(xmlhttp
)) {
80 cleanSelected("headlinesList");
82 var crow
= document
.getElementById("RROW-" + active_post_id
);
83 crow
.className
= crow
.className
.replace("Unread", "");
85 var upd_img_pic
= document
.getElementById("FUPDPIC-" + active_post_id
);
88 upd_img_pic
.src
= "images/blank_icon.gif";
91 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
92 markHeadline(active_post_id
);
94 xmlhttp
.open("GET", query
, true);
95 xmlhttp
.onreadystatechange
=article_callback
;
98 debug("xmlhttp busy (@view)");
103 exception_error("view", e
);
107 function toggleMark(id
) {
109 if (!xmlhttp_ready(xmlhttp_rpc
)) {
114 var query
= "backend.php?op=rpc&id=" + id
+ "&subop=mark";
116 var mark_img
= document
.getElementById("FMARKPIC-" + id
);
117 var vfeedu
= document
.getElementById("FEEDU--1");
118 var crow
= document
.getElementById("RROW-" + id
);
120 if (mark_img
.alt
!= "Reset mark") {
121 mark_img
.src
= "images/mark_set.png";
122 mark_img
.alt
= "Reset mark";
123 query
= query
+ "&mark=1";
125 if (vfeedu
&& crow
.className
.match("Unread")) {
126 vfeedu
.innerHTML
= (+vfeedu
.innerHTML
) + 1;
130 mark_img
.src
= "images/mark_unset.png";
131 mark_img
.alt
= "Set mark";
132 query
= query
+ "&mark=0";
134 if (vfeedu
&& crow
.className
.match("Unread")) {
135 vfeedu
.innerHTML
= (+vfeedu
.innerHTML
) - 1;
140 var vfeedctr
= document
.getElementById("FEEDCTR--1");
141 var vfeedr
= document
.getElementById("FEEDR--1");
143 if (vfeedu
&& vfeedctr
) {
144 if ((+vfeedu
.innerHTML
) > 0) {
145 if (crow
.className
.match("Unread") && !vfeedr
.className
.match("Unread")) {
146 vfeedr
.className
= vfeedr
.className
+ "Unread";
147 vfeedctr
.className
= "odd";
150 vfeedctr
.className
= "invisible";
151 vfeedr
.className
= vfeedr
.className
.replace("Unread", "");
155 debug("toggle starred for aid " + id
);
157 new Ajax
.Request(query
);
161 function moveToPost(mode
) {
163 // check for combined mode
164 if (!document
.getElementById("headlinesList"))
167 var rows
= getVisibleHeadlineIds();
172 if (active_post_id
== false) {
173 next_id
= getFirstVisibleHeadlineId();
174 prev_id
= getLastVisibleHeadlineId();
176 for (var i
= 0; i
< rows
.length
; i
++) {
177 if (rows
[i
] == active_post_id
) {
184 if (mode
== "next") {
185 if (next_id
!= undefined) {
186 view(next_id
, getActiveFeedId());
190 if (mode
== "prev") {
191 if ( prev_id
!= undefined) {
192 view(prev_id
, getActiveFeedId());
197 function toggleUnread(id
, cmode
) {
199 if (!xmlhttp_ready(xmlhttp_rpc
)) {
204 var row
= document
.getElementById("RROW-" + id
);
206 var nc
= row
.className
;
207 nc
= nc
.replace("Unread", "");
208 nc
= nc
.replace("Selected", "");
210 if (row
.className
.match("Unread")) {
213 row
.className
= nc
+ "Unread";
216 if (!cmode
) cmode
= 2;
218 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
219 param_escape(id
) + "&cmode=" + param_escape(cmode
);
221 xmlhttp_rpc
.open("GET", query
, true);
222 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
223 xmlhttp_rpc
.send(null);
229 exception_error("toggleUnread", e
);
233 function selectionToggleUnread(cdm_mode
, set_state
, callback_func
) {
235 if (!xmlhttp_ready(xmlhttp_rpc
)) {
243 rows
= cdmGetSelectedArticles();
245 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
248 for (i
= 0; i
< rows
.length
; i
++) {
249 var row
= document
.getElementById("RROW-" + rows
[i
]);
251 var nc
= row
.className
;
252 nc
= nc
.replace("Unread", "");
253 nc
= nc
.replace("Selected", "");
255 if (row
.className
.match("Unread")) {
256 row
.className
= nc
+ "Selected";
258 row
.className
= nc
+ "UnreadSelected";
263 if (rows
.length
> 0) {
267 if (set_state
== undefined) {
269 } else if (set_state
== true) {
271 } else if (set_state
== false) {
275 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
276 param_escape(rows
.toString()) + "&cmode=" + cmode
;
278 _catchup_callback_func
= callback_func
;
280 xmlhttp_rpc
.open("GET", query
, true);
281 xmlhttp_rpc
.onreadystatechange
=catchup_callback
;
282 xmlhttp_rpc
.send(null);
287 exception_error("selectionToggleUnread", e
);
291 function selectionToggleMarked(cdm_mode
) {
293 if (!xmlhttp_ready(xmlhttp_rpc
)) {
301 rows
= cdmGetSelectedArticles();
303 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
306 for (i
= 0; i
< rows
.length
; i
++) {
307 var row
= document
.getElementById("RROW-" + rows
[i
]);
308 var mark_img
= document
.getElementById("FMARKPIC-" + rows
[i
]);
310 if (row
&& mark_img
) {
312 if (mark_img
.alt
== "Set mark") {
313 mark_img
.src
= "images/mark_set.png";
314 mark_img
.alt
= "Reset mark";
315 mark_img
.setAttribute('onclick',
316 'javascript:toggleMark('+rows
[i
]+', false)');
319 mark_img
.src
= "images/mark_unset.png";
320 mark_img
.alt
= "Set mark";
321 mark_img
.setAttribute('onclick',
322 'javascript:toggleMark('+rows
[i
]+', true)');
327 if (rows
.length
> 0) {
329 var query
= "backend.php?op=rpc&subop=markSelected&ids=" +
330 param_escape(rows
.toString()) + "&cmode=2";
332 xmlhttp_rpc
.open("GET", query
, true);
333 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
334 xmlhttp_rpc
.send(null);
339 exception_error("selectionToggleMarked", e
);
343 function cdmGetSelectedArticles() {
344 var sel_articles
= new Array();
345 var container
= document
.getElementById("headlinesInnerContainer");
347 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
348 var child
= container
.childNodes
[i
];
350 if (child
.id
.match("RROW-") && child
.className
.match("Selected")) {
351 var c_id
= child
.id
.replace("RROW-", "");
352 sel_articles
.push(c_id
);
359 // mode = all,none,unread
360 function cdmSelectArticles(mode
) {
361 var container
= document
.getElementById("headlinesInnerContainer");
363 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
364 var child
= container
.childNodes
[i
];
366 if (child
.id
.match("RROW-")) {
367 var aid
= child
.id
.replace("RROW-", "");
369 var cb
= document
.getElementById("RCHK-" + aid
);
372 if (!child
.className
.match("Selected")) {
373 child
.className
= child
.className
+ "Selected";
376 } else if (mode
== "unread") {
377 if (child
.className
.match("Unread") && !child
.className
.match("Selected")) {
378 child
.className
= child
.className
+ "Selected";
382 child
.className
= child
.className
.replace("Selected", "");
389 function catchupPage() {
391 if (document
.getElementById("headlinesList")) {
392 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
393 selectionToggleUnread(false, false, 'viewCurrentFeed()');
394 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
396 cdmSelectArticles('all');
397 selectionToggleUnread(true, false, 'viewCurrentFeed()')
398 cdmSelectArticles('none');
402 function labelFromSearch(search
, search_mode
, match_on
, feed_id
, is_cat
) {
404 if (!xmlhttp_ready(xmlhttp_rpc
)) {
408 var title
= prompt("Please enter label title:", "");
412 var query
= "backend.php?op=labelFromSearch&search=" + param_escape(search
) +
413 "&smode=" + param_escape(search_mode
) + "&match=" + param_escape(match_on
) +
414 "&feed=" + param_escape(feed_id
) + "&is_cat=" + param_escape(is_cat
) +
415 "&title=" + param_escape(title
);
417 debug("LFS: " + query
);
419 xmlhttp_rpc
.open("GET", query
, true);
420 xmlhttp_rpc
.onreadystatechange
=dlg_frefresh_callback
;
421 xmlhttp_rpc
.send(null);