]>
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 (!document
.getElementById('RROW-' + active_post_id
)) {
173 active_post_id
= false;
176 if (active_post_id
== false) {
177 next_id
= getFirstVisibleHeadlineId();
178 prev_id
= getLastVisibleHeadlineId();
180 for (var i
= 0; i
< rows
.length
; i
++) {
181 if (rows
[i
] == active_post_id
) {
188 if (mode
== "next") {
189 if (next_id
!= undefined) {
190 view(next_id
, getActiveFeedId());
194 if (mode
== "prev") {
195 if ( prev_id
!= undefined) {
196 view(prev_id
, getActiveFeedId());
201 function toggleUnread(id
, cmode
) {
203 if (!xmlhttp_ready(xmlhttp_rpc
)) {
208 var row
= document
.getElementById("RROW-" + id
);
210 var nc
= row
.className
;
211 nc
= nc
.replace("Unread", "");
212 nc
= nc
.replace("Selected", "");
214 if (row
.className
.match("Unread")) {
217 row
.className
= nc
+ "Unread";
220 if (!cmode
) cmode
= 2;
222 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
223 param_escape(id
) + "&cmode=" + param_escape(cmode
);
225 xmlhttp_rpc
.open("GET", query
, true);
226 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
227 xmlhttp_rpc
.send(null);
233 exception_error("toggleUnread", e
);
237 function selectionToggleUnread(cdm_mode
, set_state
, callback_func
) {
239 if (!xmlhttp_ready(xmlhttp_rpc
)) {
247 rows
= cdmGetSelectedArticles();
249 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
252 for (i
= 0; i
< rows
.length
; i
++) {
253 var row
= document
.getElementById("RROW-" + rows
[i
]);
255 var nc
= row
.className
;
256 nc
= nc
.replace("Unread", "");
257 nc
= nc
.replace("Selected", "");
259 if (row
.className
.match("Unread")) {
260 row
.className
= nc
+ "Selected";
262 row
.className
= nc
+ "UnreadSelected";
267 if (rows
.length
> 0) {
271 if (set_state
== undefined) {
273 } else if (set_state
== true) {
275 } else if (set_state
== false) {
279 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
280 param_escape(rows
.toString()) + "&cmode=" + cmode
;
282 _catchup_callback_func
= callback_func
;
284 xmlhttp_rpc
.open("GET", query
, true);
285 xmlhttp_rpc
.onreadystatechange
=catchup_callback
;
286 xmlhttp_rpc
.send(null);
291 exception_error("selectionToggleUnread", e
);
295 function selectionToggleMarked(cdm_mode
) {
297 if (!xmlhttp_ready(xmlhttp_rpc
)) {
305 rows
= cdmGetSelectedArticles();
307 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
310 for (i
= 0; i
< rows
.length
; i
++) {
311 var row
= document
.getElementById("RROW-" + rows
[i
]);
312 var mark_img
= document
.getElementById("FMARKPIC-" + rows
[i
]);
314 if (row
&& mark_img
) {
316 if (mark_img
.alt
== "Set mark") {
317 mark_img
.src
= "images/mark_set.png";
318 mark_img
.alt
= "Reset mark";
319 mark_img
.setAttribute('onclick',
320 'javascript:toggleMark('+rows
[i
]+', false)');
323 mark_img
.src
= "images/mark_unset.png";
324 mark_img
.alt
= "Set mark";
325 mark_img
.setAttribute('onclick',
326 'javascript:toggleMark('+rows
[i
]+', true)');
331 if (rows
.length
> 0) {
333 var query
= "backend.php?op=rpc&subop=markSelected&ids=" +
334 param_escape(rows
.toString()) + "&cmode=2";
336 xmlhttp_rpc
.open("GET", query
, true);
337 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
338 xmlhttp_rpc
.send(null);
343 exception_error("selectionToggleMarked", e
);
347 function cdmGetSelectedArticles() {
348 var sel_articles
= new Array();
349 var container
= document
.getElementById("headlinesInnerContainer");
351 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
352 var child
= container
.childNodes
[i
];
354 if (child
.id
.match("RROW-") && child
.className
.match("Selected")) {
355 var c_id
= child
.id
.replace("RROW-", "");
356 sel_articles
.push(c_id
);
363 // mode = all,none,unread
364 function cdmSelectArticles(mode
) {
365 var container
= document
.getElementById("headlinesInnerContainer");
367 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
368 var child
= container
.childNodes
[i
];
370 if (child
.id
.match("RROW-")) {
371 var aid
= child
.id
.replace("RROW-", "");
373 var cb
= document
.getElementById("RCHK-" + aid
);
376 if (!child
.className
.match("Selected")) {
377 child
.className
= child
.className
+ "Selected";
380 } else if (mode
== "unread") {
381 if (child
.className
.match("Unread") && !child
.className
.match("Selected")) {
382 child
.className
= child
.className
+ "Selected";
386 child
.className
= child
.className
.replace("Selected", "");
393 function catchupPage() {
395 if (document
.getElementById("headlinesList")) {
396 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
397 selectionToggleUnread(false, false, 'viewCurrentFeed()');
398 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
400 cdmSelectArticles('all');
401 selectionToggleUnread(true, false, 'viewCurrentFeed()')
402 cdmSelectArticles('none');
406 function labelFromSearch(search
, search_mode
, match_on
, feed_id
, is_cat
) {
408 if (!xmlhttp_ready(xmlhttp_rpc
)) {
412 var title
= prompt("Please enter label title:", "");
416 var query
= "backend.php?op=labelFromSearch&search=" + param_escape(search
) +
417 "&smode=" + param_escape(search_mode
) + "&match=" + param_escape(match_on
) +
418 "&feed=" + param_escape(feed_id
) + "&is_cat=" + param_escape(is_cat
) +
419 "&title=" + param_escape(title
);
421 debug("LFS: " + query
);
423 xmlhttp_rpc
.open("GET", query
, true);
424 xmlhttp_rpc
.onreadystatechange
=dlg_frefresh_callback
;
425 xmlhttp_rpc
.send(null);