]> git.wh0rd.org - tt-rss.git/blob - feedlist.js
reset last_requested_article in viewfeed()
[tt-rss.git] / feedlist.js
1 var _feed_cur_page = 0;
2 var _infscroll_disable = 0;
3 var _infscroll_request_sent = 0;
4 var feed_under_pointer = undefined;
5
6 var mouse_is_down = false;
7 var mouse_y = 0;
8 var mouse_x = 0;
9
10 var resize_enabled = false;
11
12 function viewCategory(cat) {
13 active_feed_is_cat = true;
14 viewfeed(cat, '', true);
15 return false;
16 }
17
18 function feedlist_callback2(transport) {
19 try {
20 debug("feedlist_callback2");
21 var f = document.getElementById("feeds-frame");
22 f.innerHTML = transport.responseText;
23 feedlist_init();
24 } catch (e) {
25 exception_error("feedlist_callback2", e);
26 }
27 }
28
29 function viewNextFeedPage() {
30 try {
31 //if (!getActiveFeedId()) return;
32
33 debug("viewNextFeedPage: calling viewfeed(), p: " + _feed_cur_page+1);
34
35 viewfeed(getActiveFeedId(), undefined, activeFeedIsCat(), undefined,
36 undefined, _feed_cur_page+1);
37
38 } catch (e) {
39 exception_error("viewNextFeedPage", e);
40 }
41 }
42
43 function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) {
44 try {
45
46 // if (!offset) page_offset = 0;
47
48 last_requested_article = 0;
49
50 if (feed == getActiveFeedId()) {
51 cache_invalidate("F:" + feed);
52 }
53
54 /* if (getInitParam("theme") == "" || getInitParam("theme") == "compact") {
55 if (getInitParam("hide_feedlist") == 1) {
56 Element.hide("feeds-holder");
57 }
58 } */
59
60 var force_nocache = false;
61
62 var page_offset = 0;
63
64 if (offset > 0) {
65 page_offset = offset;
66 } else {
67 page_offset = 0;
68 _feed_cur_page = 0;
69 _infscroll_disable = 0;
70 }
71
72 if (getActiveFeedId() != feed) {
73 _feed_cur_page = 0;
74 active_post_id = 0;
75 _infscroll_disable = 0;
76 }
77
78 if (page_offset != 0 && !subop) {
79 var date = new Date();
80 var timestamp = Math.round(date.getTime() / 1000);
81
82 debug("<b>" + _infscroll_request_sent + " : " + timestamp + "</b>");
83
84 if (_infscroll_request_sent && _infscroll_request_sent + 30 > timestamp) {
85 debug("infscroll request in progress, aborting");
86 return;
87 }
88
89 _infscroll_request_sent = timestamp;
90 }
91
92 enableHotkeys();
93
94 closeInfoBox();
95
96 Form.enable("main_toolbar_form");
97
98 var toolbar_form = document.forms["main_toolbar_form"];
99 var toolbar_query = Form.serialize("main_toolbar_form");
100
101 if (toolbar_form.query) {
102 if (toolbar_form.query.value != "") {
103 force_nocache = true;
104 }
105 toolbar_form.query.value = "";
106 }
107
108 var query = "backend.php?op=viewfeed&feed=" + feed + "&" +
109 toolbar_query + "&subop=" + param_escape(subop);
110
111 if (document.getElementById("search_form")) {
112 var search_query = Form.serialize("search_form");
113 query = query + "&" + search_query;
114 closeInfoBox(true);
115 force_nocache = true;
116 }
117
118 // debug("IS_CAT_STORED: " + activeFeedIsCat() + ", IS_CAT: " + is_cat);
119
120 if (subop == "MarkAllRead") {
121
122 var feedlist = document.getElementById('feedList');
123
124 var next_unread_feed = getRelativeFeedId(feedlist,
125 feed, "next", true);
126
127 if (!next_unread_feed) {
128 next_unread_feed = getRelativeFeedId(feedlist,
129 -3, "next", true);
130 }
131
132 var show_next_feed = getInitParam("on_catchup_show_next_feed") == "1";
133
134 if (next_unread_feed && show_next_feed && !activeFeedIsCat()) {
135 query = query + "&nuf=" + param_escape(next_unread_feed);
136 //setActiveFeedId(next_unread_feed);
137 feed = next_unread_feed;
138 }
139 }
140
141 if (is_cat) {
142 query = query + "&cat=1";
143 }
144
145 if (page_offset != 0) {
146 query = query + "&skip=" + page_offset;
147
148 // to prevent duplicate feed titles when showing grouped vfeeds
149 if (vgroup_last_feed) {
150 query = query + "&vgrlf=" + param_escape(vgroup_last_feed);
151 }
152 }
153
154 var date = new Date();
155 var timestamp = Math.round(date.getTime() / 1000);
156 query = query + "&ts=" + timestamp
157
158 disableContainerChildren("headlinesToolbar", false);
159 Form.enable("main_toolbar_form");
160
161 // for piggybacked counters
162
163 if (tagsAreDisplayed()) {
164 query = query + "&omode=lt";
165 } else {
166 query = query + "&omode=flc";
167 }
168
169 debug(query);
170
171 var container = document.getElementById("headlinesInnerContainer");
172
173 /* if (container && page_offset == 0 && !isCdmMode()) {
174 new Effect.Fade(container, {duration: 1, to: 0.01,
175 queue: { position:'end', scope: 'FEEDL-' + feed, limit: 1 } } );
176 } */
177
178 var unread_ctr = get_feed_unread(feed);
179 var cache_check = false;
180
181 if (unread_ctr != -1 && !page_offset && !force_nocache && !subop) {
182
183 var cache_prefix = "";
184
185 if (is_cat) {
186 cache_prefix = "C:";
187 } else {
188 cache_prefix = "F:";
189 }
190
191 cache_check = cache_check_param(cache_prefix + feed, unread_ctr);
192 debug("headline cache check: " + cache_check);
193 }
194
195 if (cache_check) {
196 var f = document.getElementById("headlines-frame");
197
198 clean_feed_selections();
199
200 setActiveFeedId(feed);
201
202 if (is_cat != undefined) {
203 active_feed_is_cat = is_cat;
204 }
205
206 if (!is_cat) {
207 var feedr = document.getElementById("FEEDR-" + feed);
208 if (feedr && !feedr.className.match("Selected")) {
209 feedr.className = feedr.className + "Selected";
210 }
211 }
212
213 f.innerHTML = cache_find_param(cache_prefix + feed, unread_ctr);
214
215 request_counters();
216
217 } else {
218
219 if (!page_offset) {
220 notify_progress("Loading, please wait...", true);
221 }
222
223 new Ajax.Request(query, {
224 onComplete: function(transport) {
225 headlines_callback2(transport, feed, is_cat, page_offset);
226 } });
227 }
228
229 } catch (e) {
230 exception_error("viewfeed", e);
231 }
232 }
233
234 function toggleCollapseCat_af(effect) {
235 //var caption = elem.id.replace("FCATLIST-", "");
236
237 try {
238
239 var elem = effect.element;
240 var cat = elem.id.replace("FCATLIST-", "");
241 var cap = document.getElementById("FCAP-" + cat);
242
243 if (Element.visible(elem)) {
244 cap.innerHTML = cap.innerHTML.replace("…", "");
245 } else {
246 if (cap.innerHTML.lastIndexOf("…") != cap.innerHTML.length-3) {
247 cap.innerHTML = cap.innerHTML + "…";
248 }
249 }
250
251 } catch (e) {
252 exception_error("toggleCollapseCat_af", e);
253 }
254 }
255
256 function toggleCollapseCat(cat) {
257 try {
258
259 var cat_elem = document.getElementById("FCAT-" + cat);
260 var cat_list = document.getElementById("FCATLIST-" + cat).parentNode;
261 var caption = document.getElementById("FCAP-" + cat);
262
263 /* if (cat_list.className.match("invisible")) {
264 cat_list.className = "";
265 caption.innerHTML = caption.innerHTML.replace("...", "");
266 if (cat == 0) {
267 setCookie("ttrss_vf_uclps", "0");
268 }
269 } else {
270 cat_list.className = "invisible";
271 caption.innerHTML = caption.innerHTML + "...";
272 if (cat == 0) {
273 setCookie("ttrss_vf_uclps", "1");
274 }
275
276 } */
277
278 if (cat == 0) {
279 if (Element.visible("FCATLIST-" + cat)) {
280 setCookie("ttrss_vf_uclps", "1");
281 } else {
282 setCookie("ttrss_vf_uclps", "0");
283 }
284 }
285
286 if (cat == -2) {
287 if (Element.visible("FCATLIST-" + cat)) {
288 setCookie("ttrss_vf_lclps", "1");
289 } else {
290 setCookie("ttrss_vf_lclps", "0");
291 }
292 }
293
294 if (cat == -1) {
295 if (Element.visible("FCATLIST-" + cat)) {
296 setCookie("ttrss_vf_vclps", "1");
297 } else {
298 setCookie("ttrss_vf_vclps", "0");
299 }
300 }
301
302 Effect.toggle('FCATLIST-' + cat, 'blind', { duration: 0.5,
303 afterFinish: toggleCollapseCat_af });
304
305 new Ajax.Request("backend.php?op=feeds&subop=collapse&cid=" +
306 param_escape(cat));
307
308 } catch (e) {
309 exception_error("toggleCollapseCat", e);
310 }
311 }
312
313 function feedlist_init() {
314 try {
315 // if (arguments.callee.done) return;
316 // arguments.callee.done = true;
317
318 loading_set_progress(90);
319
320 debug("in feedlist init");
321
322 hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
323 document.onkeydown = hotkey_handler;
324 document.onmousemove = mouse_move_handler;
325 document.onmousedown = mouse_down_handler;
326 document.onmouseup = mouse_up_handler;
327 setTimeout("timeout()", 0);
328
329 if (typeof correctPNG != 'undefined') {
330 correctPNG();
331 }
332
333 if (getActiveFeedId()) {
334 debug("some feed is open on feedlist refresh, reloading");
335 setTimeout("viewCurrentFeed()", 100);
336 } else {
337 if (getInitParam("cdm_auto_catchup") != 1 && get_feed_unread(-3) > 0) {
338 notify_silent_next();
339 setTimeout("viewfeed(-3)", 100);
340 } else {
341 remove_splash();
342 }
343 }
344
345 if (getInitParam("theme") == "") {
346 setTimeout("hide_footer()", 5000);
347 }
348
349 init_collapsable_feedlist(getInitParam("theme"));
350
351 } catch (e) {
352 exception_error("feedlist/init", e);
353 }
354 }
355
356 function hide_footer_af(effect) {
357 try {
358 var c = document.getElementById("content-frame");
359
360 if (c) {
361 c.style.bottom = "0px";
362 } else {
363 var h = document.getElementById("headlines-frame");
364
365 if (h) {
366 h.style.bottom = "0px";
367 }
368 }
369
370 } catch (e) {
371 exception_error("hide_footer_af", e);
372 }
373 }
374
375 function hide_footer() {
376 try {
377 if (Element.visible("footer")) {
378 new Effect.Fade("footer", { afterFinish: hide_footer_af });
379 }
380 } catch (e) {
381 exception_error("hide_footer", e);
382 }
383 }
384
385 /*
386 function init_hidden_feedlist(theme) {
387 try {
388 debug("init_hidden_feedlist");
389
390 if (theme != "" && theme != "compact") return;
391
392 var fl = document.getElementById("feeds-holder");
393 var fh = document.getElementById("headlines-frame");
394 var fc = document.getElementById("content-frame");
395 var ft = document.getElementById("toolbar");
396 var ff = document.getElementById("footer");
397 var fhdr = document.getElementById("header");
398
399 var fbtn = document.getElementById("toggle_feeds_btn");
400
401 if (fbtn) Element.show(fbtn);
402
403 fl.style.top = fh.offsetTop + "px";
404 fl.style.backgroundColor = "white"; //FIXME
405
406 Element.hide(fl);
407
408 fh.style.left = "0px";
409 ft.style.left = "0px";
410 if (fc) fc.style.left = "0px";
411 if (ff) ff.style.left = "0px";
412
413 if (theme == "compact") {
414 fhdr.style.left = "10px";
415 fl.style.top = (fh.offsetTop + 1) + "px";
416 }
417
418 } catch (e) {
419 exception_error("init_hidden_feedlist", e);
420 }
421 } */
422
423 function init_collapsable_feedlist(theme) {
424 try {
425 debug("init_collapsable_feedlist");
426
427 if (theme != "" && theme != "compact" && theme != "graycube" &&
428 theme != "compat") return;
429
430 var fbtn = document.getElementById("collapse_feeds_btn");
431
432 if (fbtn) Element.show(fbtn);
433
434 if (getCookie("ttrss_vf_fclps") == 1) {
435 collapse_feedlist();
436 }
437
438 } catch (e) {
439 exception_error("init_hidden_feedlist", e);
440 }
441
442 }
443
444 function mouse_move_handler(e) {
445 try {
446 var client_y;
447 var client_x;
448
449 if (window.event) {
450 client_y = window.event.clientY;
451 client_x = window.event.clientX;
452 } else if (e) {
453 client_x = e.screenX;
454 client_y = e.screenY;
455 }
456
457 if (mouse_is_down) {
458
459 if (mouse_y == 0) mouse_y = client_y;
460 if (mouse_x == 0) mouse_x = client_x;
461
462 resize_headlines(mouse_x - client_x, mouse_y - client_y);
463
464 mouse_y = client_y;
465 mouse_x = client_x;
466
467 return false;
468 }
469
470 } catch (e) {
471 exception_error("mouse_move_handler", e);
472 }
473 }
474
475 function enable_resize(b) {
476 resize_enabled = b;
477 }
478
479 function mouse_down_handler(e) {
480 try {
481 if (resize_enabled) {
482 mouse_is_down = true;
483 mouse_x = 0;
484 mouse_y = 0;
485 document.onselectstart = function() { return false; };
486 }
487 } catch (e) {
488 exception_error("mouse_move_handler", e);
489 }
490 }
491
492 function mouse_up_handler(e) {
493 try {
494 mouse_is_down = false;
495 document.onselectstart = null;
496 } catch (e) {
497 exception_error("mouse_move_handler", e);
498 }
499 }
500
501 function request_counters_real() {
502
503 try {
504 var query = "backend.php?op=rpc&subop=getAllCounters";
505
506 if (tagsAreDisplayed()) {
507 query = query + "&omode=tl";
508 } else {
509 query = query + "&omode=flc";
510 }
511
512 new Ajax.Request(query, {
513 onComplete: function(transport) {
514 try {
515 all_counters_callback2(transport);
516 } catch (e) {
517 exception_error("viewfeed/getcounters", e);
518 }
519 } });
520
521 } catch (e) {
522 exception_error("request_counters_real", e);
523 }
524 }
525
526 var counters_last_request = 0;
527
528 function request_counters() {
529
530 try {
531
532 var date = new Date();
533 var timestamp = Math.round(date.getTime() / 1000);
534
535 if (timestamp - counters_last_request > 10) {
536 debug("scheduling request of counters...");
537 window.setTimeout("request_counters_real()", 100);
538 counters_last_request = timestamp;
539 } else {
540 debug("request_counters: rate limit reached: " + (timestamp - counters_last_request));
541 }
542
543 } catch (e) {
544 exception_error("request_counters", e);
545 }
546 }