From f46192bb191acdbc733f60bad60c4eb83ebb2e26 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 1 Oct 2008 05:06:55 +0100 Subject: catchup in category view mode jumps to the next unread category --- feedlist.js | 47 +++++++++++++++++++++++++++++++++-------------- functions.js | 34 ++++++++++++++++++++++++++++++++++ viewfeed.js | 2 +- 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/feedlist.js b/feedlist.js index 8400af52c..22b8aeab3 100644 --- a/feedlist.js +++ b/feedlist.js @@ -135,22 +135,41 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) { if (subop == "MarkAllRead") { - var feedlist = document.getElementById('feedList'); - - var next_unread_feed = getRelativeFeedId(feedlist, - feed, "next", true); - - if (!next_unread_feed) { - next_unread_feed = getRelativeFeedId(feedlist, - -3, "next", true); - } - var show_next_feed = getInitParam("on_catchup_show_next_feed") == "1"; - if (next_unread_feed && show_next_feed && !activeFeedIsCat()) { - query = query + "&nuf=" + param_escape(next_unread_feed); - //setActiveFeedId(next_unread_feed); - feed = next_unread_feed; + if (show_next_feed) { + + if (!activeFeedIsCat()) { + + var feedlist = document.getElementById('feedList'); + + var next_unread_feed = getRelativeFeedId(feedlist, + feed, "next", true); + + if (!next_unread_feed) { + next_unread_feed = getRelativeFeedId(feedlist, + -3, "next", true); + } + + if (next_unread_feed) { + query = query + "&nuf=" + param_escape(next_unread_feed); + //setActiveFeedId(next_unread_feed); + feed = next_unread_feed; + } + } else { + + var next_unread_feed = getNextUnreadCat(feed); + + /* we don't need to specify that our next feed is actually + a category, because we're in the is_cat mode by definition + already */ + + if (next_unread_feed && show_next_feed) { + query = query + "&nuf=" + param_escape(next_unread_feed); + feed = next_unread_feed; + } + + } } } diff --git a/functions.js b/functions.js index 351f4dcc3..77c5c13b1 100644 --- a/functions.js +++ b/functions.js @@ -1035,6 +1035,40 @@ function toggleSelectRow(sender) { } } +function getNextUnreadCat(id) { + try { + var rows = document.getElementById("feedList").getElementsByTagName("LI"); + var feeds = new Array(); + + var unread_only = true; + var is_cat = true; + + for (var i = 0; i < rows.length; i++) { + if (rows[i].id.match("FCAT-")) { + if (rows[i].id == "FCAT-" + id && is_cat || (Element.visible(rows[i]) && Element.visible(rows[i].parentNode))) { + + var cat_id = parseInt(rows[i].id.replace("FCAT-", "")); + + if (cat_id >= 0) { + if (!unread_only || get_cat_unread(cat_id) > 0) { + feeds.push(cat_id); + } + } + } + } + } + + var idx = feeds.indexOf(id); + if (idx != -1 && idx < feeds.length) { + return feeds[idx+1]; + } else { + return feeds.shift(); + } + + } catch (e) { + exception_error("getNextUnreadCat", e); + } +} function getRelativeFeedId2(id, is_cat, direction, unread_only) { try { diff --git a/viewfeed.js b/viewfeed.js index 4b90f1d05..3810aed20 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -81,7 +81,7 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { if (is_cat != undefined) { active_feed_is_cat = is_cat; } - + if (!is_cat) { var feedr = document.getElementById("FEEDR-" + active_feed_id); if (feedr && !feedr.className.match("Selected")) { -- cgit v1.2.3