]>
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
) {
57 debug("loading article: " + id
+ "/" + feed_id
);
62 //setActiveFeedId(feed_id);
64 var query
= "backend.php?op=view&id=" + param_escape(id
) +
65 "&feed=" + param_escape(feed_id
);
67 var date
= new Date();
69 if (!xmlhttp_ready(xmlhttp
) && last_article_view
< date
.getTime() / 1000 - 15) {
70 debug("<b>xmlhttp seems to be stuck at view, aborting</b>");
74 if (xmlhttp_ready(xmlhttp
)) {
76 cleanSelected("headlinesList");
78 var crow
= document
.getElementById("RROW-" + active_post_id
);
79 crow
.className
= crow
.className
.replace("Unread", "");
81 var upd_img_pic
= document
.getElementById("FUPDPIC-" + active_post_id
);
84 upd_img_pic
.src
= "images/blank_icon.gif";
87 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
88 markHeadline(active_post_id
);
90 xmlhttp
.open("GET", query
, true);
91 xmlhttp
.onreadystatechange
=article_callback
;
94 debug("xmlhttp busy (@view)");
99 exception_error("view", e
);
103 function toggleMark(id
) {
105 if (!xmlhttp_ready(xmlhttp_rpc
)) {
110 var query
= "backend.php?op=rpc&id=" + id
+ "&subop=mark";
112 var mark_img
= document
.getElementById("FMARKPIC-" + id
);
113 var vfeedu
= document
.getElementById("FEEDU--1");
114 var crow
= document
.getElementById("RROW-" + id
);
116 if (mark_img
.alt
!= "Reset mark") {
117 mark_img
.src
= "images/mark_set.png";
118 mark_img
.alt
= "Reset mark";
119 query
= query
+ "&mark=1";
121 if (vfeedu
&& crow
.className
.match("Unread")) {
122 vfeedu
.innerHTML
= (+vfeedu
.innerHTML
) + 1;
126 mark_img
.src
= "images/mark_unset.png";
127 mark_img
.alt
= "Set mark";
128 query
= query
+ "&mark=0";
130 if (vfeedu
&& crow
.className
.match("Unread")) {
131 vfeedu
.innerHTML
= (+vfeedu
.innerHTML
) - 1;
136 var vfeedctr
= document
.getElementById("FEEDCTR--1");
137 var vfeedr
= document
.getElementById("FEEDR--1");
139 if (vfeedu
&& vfeedctr
) {
140 if ((+vfeedu
.innerHTML
) > 0) {
141 if (crow
.className
.match("Unread") && !vfeedr
.className
.match("Unread")) {
142 vfeedr
.className
= vfeedr
.className
+ "Unread";
143 vfeedctr
.className
= "odd";
146 vfeedctr
.className
= "invisible";
147 vfeedr
.className
= vfeedr
.className
.replace("Unread", "");
151 debug("toggle starred for aid " + id
);
153 new Ajax
.Request(query
);
157 function moveToPost(mode
) {
159 // check for combined mode
160 if (!document
.getElementById("headlinesList"))
163 var rows
= getVisibleHeadlineIds();
168 if (active_post_id
== false) {
169 next_id
= getFirstVisibleHeadlineId();
170 prev_id
= getLastVisibleHeadlineId();
172 for (var i
= 0; i
< rows
.length
; i
++) {
173 if (rows
[i
] == active_post_id
) {
180 if (mode
== "next") {
181 if (next_id
!= undefined) {
182 view(next_id
, getActiveFeedId());
186 if (mode
== "prev") {
187 if ( prev_id
!= undefined) {
188 view(prev_id
, getActiveFeedId());
193 function toggleUnread(id
, cmode
) {
195 if (!xmlhttp_ready(xmlhttp_rpc
)) {
200 var row
= document
.getElementById("RROW-" + id
);
202 var nc
= row
.className
;
203 nc
= nc
.replace("Unread", "");
204 nc
= nc
.replace("Selected", "");
206 if (row
.className
.match("Unread")) {
209 row
.className
= nc
+ "Unread";
212 if (!cmode
) cmode
= 2;
214 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
215 param_escape(id
) + "&cmode=" + param_escape(cmode
);
217 xmlhttp_rpc
.open("GET", query
, true);
218 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
219 xmlhttp_rpc
.send(null);
225 exception_error("toggleUnread", e
);
229 function selectionToggleUnread(cdm_mode
, set_state
, callback_func
) {
231 if (!xmlhttp_ready(xmlhttp_rpc
)) {
239 rows
= cdmGetSelectedArticles();
241 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
244 for (i
= 0; i
< rows
.length
; i
++) {
245 var row
= document
.getElementById("RROW-" + rows
[i
]);
247 var nc
= row
.className
;
248 nc
= nc
.replace("Unread", "");
249 nc
= nc
.replace("Selected", "");
251 if (row
.className
.match("Unread")) {
252 row
.className
= nc
+ "Selected";
254 row
.className
= nc
+ "UnreadSelected";
259 if (rows
.length
> 0) {
263 if (set_state
== undefined) {
265 } else if (set_state
== true) {
267 } else if (set_state
== false) {
271 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
272 param_escape(rows
.toString()) + "&cmode=" + cmode
;
274 _catchup_callback_func
= callback_func
;
276 xmlhttp_rpc
.open("GET", query
, true);
277 xmlhttp_rpc
.onreadystatechange
=catchup_callback
;
278 xmlhttp_rpc
.send(null);
283 exception_error("selectionToggleUnread", e
);
287 function selectionToggleMarked(cdm_mode
) {
289 if (!xmlhttp_ready(xmlhttp_rpc
)) {
297 rows
= cdmGetSelectedArticles();
299 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
302 for (i
= 0; i
< rows
.length
; i
++) {
303 var row
= document
.getElementById("RROW-" + rows
[i
]);
304 var mark_img
= document
.getElementById("FMARKPIC-" + rows
[i
]);
306 if (row
&& mark_img
) {
308 if (mark_img
.alt
== "Set mark") {
309 mark_img
.src
= "images/mark_set.png";
310 mark_img
.alt
= "Reset mark";
311 mark_img
.setAttribute('onclick',
312 'javascript:toggleMark('+rows
[i
]+', false)');
315 mark_img
.src
= "images/mark_unset.png";
316 mark_img
.alt
= "Set mark";
317 mark_img
.setAttribute('onclick',
318 'javascript:toggleMark('+rows
[i
]+', true)');
323 if (rows
.length
> 0) {
325 var query
= "backend.php?op=rpc&subop=markSelected&ids=" +
326 param_escape(rows
.toString()) + "&cmode=2";
328 xmlhttp_rpc
.open("GET", query
, true);
329 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
330 xmlhttp_rpc
.send(null);
335 exception_error("selectionToggleMarked", e
);
339 function cdmGetSelectedArticles() {
340 var sel_articles
= new Array();
341 var container
= document
.getElementById("headlinesInnerContainer");
343 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
344 var child
= container
.childNodes
[i
];
346 if (child
.id
.match("RROW-") && child
.className
.match("Selected")) {
347 var c_id
= child
.id
.replace("RROW-", "");
348 sel_articles
.push(c_id
);
355 // mode = all,none,unread
356 function cdmSelectArticles(mode
) {
357 var container
= document
.getElementById("headlinesInnerContainer");
359 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
360 var child
= container
.childNodes
[i
];
362 if (child
.id
.match("RROW-")) {
363 var aid
= child
.id
.replace("RROW-", "");
365 var cb
= document
.getElementById("RCHK-" + aid
);
368 if (!child
.className
.match("Selected")) {
369 child
.className
= child
.className
+ "Selected";
372 } else if (mode
== "unread") {
373 if (child
.className
.match("Unread") && !child
.className
.match("Selected")) {
374 child
.className
= child
.className
+ "Selected";
378 child
.className
= child
.className
.replace("Selected", "");
385 function catchupPage() {
387 if (document
.getElementById("headlinesList")) {
388 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
389 selectionToggleUnread(false, false, 'viewCurrentFeed()');
390 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
392 cdmSelectArticles('all');
393 selectionToggleUnread(true, false, 'viewCurrentFeed()')
394 cdmSelectArticles('none');
398 function labelFromSearch(search
, search_mode
, match_on
, feed_id
, is_cat
) {
400 if (!xmlhttp_ready(xmlhttp_rpc
)) {
404 var title
= prompt("Please enter label title:", "");
408 var query
= "backend.php?op=labelFromSearch&search=" + param_escape(search
) +
409 "&smode=" + param_escape(search_mode
) + "&match=" + param_escape(match_on
) +
410 "&feed=" + param_escape(feed_id
) + "&is_cat=" + param_escape(is_cat
) +
411 "&title=" + param_escape(title
);
413 debug("LFS: " + query
);
415 xmlhttp_rpc
.open("GET", query
, true);
416 xmlhttp_rpc
.onreadystatechange
=dlg_frefresh_callback
;
417 xmlhttp_rpc
.send(null);