From 081e527d3a9473fb1468f86b25c854e912fd775b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 17 May 2008 05:42:20 +0100 Subject: [PATCH] vfeed grouping: prevent duplicate group headings --- backend.php | 8 ++++++-- feedlist.js | 9 +++++++-- functions.php | 27 +++++++++++++++------------ viewfeed.js | 6 ++++++ 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/backend.php b/backend.php index c0362b45f..bdecb6cd0 100644 --- a/backend.php +++ b/backend.php @@ -228,6 +228,7 @@ $cat_view = db_escape_string($_GET["cat"]); $next_unread_feed = db_escape_string($_GET["nuf"]); $offset = db_escape_string($_GET["skip"]); + $vgroup_last_feed = db_escape_string($_GET["vgrlf"]); set_pref($link, "_DEFAULT_VIEW_MODE", $view_mode); set_pref($link, "_DEFAULT_VIEW_LIMIT", $limit); @@ -246,17 +247,20 @@ } else { $ret = outputHeadlinesList($link, $feed, $subop, - $view_mode, $limit, $cat_view, $next_unread_feed, $offset); + $view_mode, $limit, $cat_view, $next_unread_feed, $offset, + $vgroup_last_feed); $topmost_article_ids = $ret[0]; $headlines_count = $ret[1]; $returned_feed = $ret[2]; $disable_cache = $ret[3]; + $vgroup_last_feed = $ret[4]; print "]]>"; print ""; - + print ""; + $headlines_unread = getFeedUnread($link, $returned_feed); print ""; diff --git a/feedlist.js b/feedlist.js index 782cb3a19..7ca490053 100644 --- a/feedlist.js +++ b/feedlist.js @@ -142,8 +142,6 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) { disableContainerChildren("headlinesToolbar", false); Form.enable("main_toolbar_form"); - debug(query); - // for piggybacked counters if (tagsAreDisplayed()) { @@ -152,6 +150,13 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) { query = query + "&omode=flc"; } + // to prevent duplicate feed titles when showing grouped vfeeds + if (vgroup_last_feed) { + query = query + "&vgrlf=" + param_escape(vgroup_last_feed); + } + + debug(query); + var container = document.getElementById("headlinesInnerContainer"); if (container && page_offset == 0 && !isCdmMode()) { diff --git a/functions.php b/functions.php index e9134328c..693b3ddc1 100644 --- a/functions.php +++ b/functions.php @@ -4680,7 +4680,7 @@ } function outputHeadlinesList($link, $feed, $subop, $view_mode, $limit, $cat_view, - $next_unread_feed, $offset) { + $next_unread_feed, $offset, $vgr_last_feed = false) { $disable_cache = false; @@ -4784,6 +4784,8 @@ $feed_site_url = $qfh_ret[2]; $last_error = $qfh_ret[3]; + $vgroup_last_feed = $vgr_last_feed; + if ($feed == -2) { $feed_site_url = article_publish_url($link); } @@ -4927,17 +4929,13 @@ if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) { if (defined('_VFEED_GROUP_BY_FEED')) { - if ($line["feed_title"] != $cur_feed_title) { + if ($feed_id != $vgroup_last_feed) { $cur_feed_title = $line["feed_title"]; + $vgroup_last_feed = $feed_id; -/* print "". - $line["feed_title"]. - " (". - "more)"; */ - $vf_catchup_link = "(select, - mark as read)"; + $vf_catchup_link = "(mark as read)"; print "". "". @@ -5003,11 +5001,16 @@ } else { if (defined('_VFEED_GROUP_BY_FEED')) { - if ($line["feed_title"] != $cur_feed_title) { + if ($feed_id != $vgroup_last_feed) { + + $cur_feed_title = $line["feed_title"]; + $vgroup_last_feed = $feed_id; + + $vf_catchup_link = "(mark as read)"; + print ""; - $cur_feed_title = $line["feed_title"]; + $line["feed_title"]." $vf_catchup_link"; } } @@ -5199,7 +5202,7 @@ print ""; } - return array($topmost_article_ids, $headlines_count, $feed, $disable_cache); + return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $vgroup_last_feed); } // from here: http://www.roscripts.com/Create_tag_cloud-71.html diff --git a/viewfeed.js b/viewfeed.js index fb7275127..caaec2daa 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -17,6 +17,8 @@ var _cdm_wd_vishist = new Array(); var article_cache = new Array(); +var vgroup_last_feed = false; + function catchup_callback() { if (xmlhttp_rpc.readyState == 4) { try { @@ -93,10 +95,14 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { var headlines_unread_obj = transport.responseXML.getElementsByTagName("headlines-unread")[0]; var disable_cache_obj = transport.responseXML.getElementsByTagName("disable-cache")[0]; + var vgroup_last_feed_obj = transport.responseXML.getElementsByTagName("vgroup-last-feed")[0]; + var headlines_count = headlines_count_obj.getAttribute("value"); var headlines_unread = headlines_unread_obj.getAttribute("value"); var disable_cache = disable_cache_obj.getAttribute("value") != "0"; + vgroup_last_feed = vgroup_last_feed_obj.getAttribute("value"); + if (headlines_count == 0) { _infscroll_disable = 1; } else {