From c594eca0de78f46bd5f18194c058d94487d1a9e2 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 16 May 2013 01:08:04 +0400 Subject: [PATCH] implement additional counter mode for virtual feeds when there's 0 unread articles --- classes/pref/feeds.php | 8 ++++++++ include/functions.php | 8 +++++++- js/FeedTree.js | 14 ++++++++++---- js/feedlist.js | 2 ++ tt-rss.css | 6 ++++++ 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index ffe7410fe..d43740310 100644 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -54,6 +54,7 @@ class Pref_Feeds extends Handler_Protected { $cat['type'] = 'category'; $cat['unread'] = 0; $cat['child_unread'] = 0; + $cat['auxcounter'] = 0; $cat['items'] = $this->get_category_items($line['id']); @@ -74,6 +75,7 @@ class Pref_Feeds extends Handler_Protected { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; $feed['bare_id'] = (int)$feed_line['id']; + $feed['auxcounter'] = 0; $feed['name'] = $feed_line['title']; $feed['checkbox'] = false; $feed['unread'] = 0; @@ -132,6 +134,7 @@ class Pref_Feeds extends Handler_Protected { $item = array(); $item['id'] = 'FEED:' . $feed_id; $item['bare_id'] = (int)$feed_id; + $item['auxcounter'] = 0; $item['name'] = $feed['title']; $item['checkbox'] = false; $item['error'] = ''; @@ -193,6 +196,7 @@ class Pref_Feeds extends Handler_Protected { $cat = array(); $cat['id'] = 'CAT:' . $line['id']; $cat['bare_id'] = (int)$line['id']; + $cat['auxcounter'] = 0; $cat['name'] = $line['title']; $cat['items'] = array(); $cat['checkbox'] = false; @@ -215,6 +219,7 @@ class Pref_Feeds extends Handler_Protected { $cat = array(); $cat['id'] = 'CAT:0'; $cat['bare_id'] = 0; + $cat['auxcounter'] = 0; $cat['name'] = __("Uncategorized"); $cat['items'] = array(); $cat['type'] = 'category'; @@ -232,6 +237,7 @@ class Pref_Feeds extends Handler_Protected { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; $feed['bare_id'] = (int)$feed_line['id']; + $feed['auxcounter'] = 0; $feed['name'] = $feed_line['title']; $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; @@ -263,6 +269,7 @@ class Pref_Feeds extends Handler_Protected { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; $feed['bare_id'] = (int)$feed_line['id']; + $feed['auxcounter'] = 0; $feed['name'] = $feed_line['title']; $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; @@ -1541,6 +1548,7 @@ class Pref_Feeds extends Handler_Protected { $obj['updated'] = $updated; $obj['icon'] = getFeedIcon($feed_id); $obj['bare_id'] = $feed_id; + $obj['auxcounter'] = 0; return $obj; } diff --git a/include/functions.php b/include/functions.php index 149809a35..5296f9e61 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1459,8 +1459,14 @@ $count = getFeedUnread($i); + if ($i == 0 || $i == -1 || $i == -2) + $auxctr = getFeedArticles($i, false); + else + $auxctr = 0; + $cv = array("id" => $i, - "counter" => (int) $count); + "counter" => (int) $count, + "auxcounter" => $auxctr); // if (get_pref('EXTENDED_FEEDLIST')) // $cv["xmsg"] = getFeedArticles($i)." ".__("total"); diff --git a/js/FeedTree.js b/js/FeedTree.js index f3ac8ba19..e35417daf 100644 --- a/js/FeedTree.js +++ b/js/FeedTree.js @@ -186,11 +186,13 @@ dojo.declare("fox.FeedTree", dijit.Tree, { ctr = dojo.doc.createElement('span'); ctr.className = 'counterNode'; - ctr.innerHTML = args.item.unread; + ctr.innerHTML = args.item.unread > 0 ? args.item.unread : args.item.auxcounter; //args.item.unread > 0 ? ctr.addClassName("unread") : ctr.removeClassName("unread"); - args.item.unread > 0 ? Element.show(ctr) : Element.hide(ctr); + args.item.unread > 0 || args.item.auxcounter > 0 ? Element.show(ctr) : Element.hide(ctr); + + args.item.unread == 0 && args.item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux"); dojo.place(ctr, tnode.rowNode, 'first'); tnode.counterNode = ctr; @@ -218,10 +220,14 @@ dojo.declare("fox.FeedTree", dijit.Tree, { if (node.counterNode) { ctr = node.counterNode; - ctr.innerHTML = item.unread; - item.unread > 0 ? Effect.Appear(ctr, {duration : 0.3, + ctr.innerHTML = item.unread > 0 ? item.unread : item.auxcounter; + item.unread > 0 || item.auxcounter > 0 ? + Effect.Appear(ctr, {duration : 0.3, queue: { position: 'end', scope: 'CAPPEAR-' + item.id, limit: 1 }}) : Element.hide(ctr); + + item.unread == 0 && item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux"); + } } diff --git a/js/feedlist.js b/js/feedlist.js index 51082f827..84b561227 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -219,6 +219,7 @@ function parse_counters(elems, scheduled_call) { var error = elems[l].error; var has_img = elems[l].has_img; var updated = elems[l].updated; + var auxctr = parseInt(elems[l].auxcounter); if (id == "global-unread") { global_unread = ctr; @@ -236,6 +237,7 @@ function parse_counters(elems, scheduled_call) { } setFeedUnread(id, (kind == "cat"), ctr); + setFeedValue(id, (kind == "cat"), 'auxcounter', auxctr); if (kind != "cat") { setFeedValue(id, false, 'error', error); diff --git a/tt-rss.css b/tt-rss.css index a437c9d41..f1459e3c0 100644 --- a/tt-rss.css +++ b/tt-rss.css @@ -1067,6 +1067,12 @@ div.hl.active { font-family : "Segoe UI", Tahoma, sans-serif; } +#feedTree .counterNode.aux { + background : #f0f0f0; + color : #999; + border-color : #f0f0f0; +} + #feedTree .counterNode { font-weight : bold; display : inline-block;