From 293fa9424c096a589cd99615c0d68f7d16a8a3d7 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 8 Jun 2006 05:05:11 +0100 Subject: [PATCH] rework hideOrShowFeeds(): now hides empty categories should be compatible with browsers w/o document.styleSheets (closes #40) --- functions.js | 66 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/functions.js b/functions.js index 8401a0ff3..9757eca80 100644 --- a/functions.js +++ b/functions.js @@ -594,7 +594,9 @@ function all_counters_callback() { if (getInitParam("feeds_sort_by_unread") == 1) { resort_feedlist(); } - + + hideOrShowFeeds(document, getInitParam("hide_read_feeds") == 1); + } catch (e) { exception_error("all_counters_callback", e); } @@ -726,25 +728,67 @@ function popupHelp(tid) { function hideOrShowFeeds(doc, hide) { - if (!doc.styleSheets) return; + var fd = getFeedsContext().document; + + var list = fd.getElementById("feedList"); + + if (fd.getElementById("feedCatHolder")) { + + var feeds = fd.getElementById("feedList"); + var child = feeds.firstChild; + + while (child) { - var css_rules = doc.styleSheets[0].cssRules; + if (child.id == "feedCatHolder") { + hideOrShowFeedsCategory(fd, child.firstChild, hide, child.previousSibling); + } + + child = child.nextSibling; + } - if (!css_rules || !css_rules.length) return; + } else { + hideOrShowFeedsCategory(fd, fd.getElementById("feedList"), hide); + } +} - for (i = 0; i < css_rules.length; i++) { - var rule = css_rules[i]; +function hideOrShowFeedsCategory(doc, node, hide, cat_node) { + +// debug("hideOrShowFeedsCategory: " + node + " (" + hide + ")"); + + var cat_unread = 0; + + if (node.hasChildNodes() && node.firstChild.nextSibling != false) { + for (i = 0; i < node.childNodes.length; i++) { + if (node.childNodes[i].nodeName != "LI") { continue; } + + var has_unread = (node.childNodes[i].className != "feed"); + +// debug(node.childNodes[i].id + " --> " + has_unread); + + if (hide && !has_unread) { + node.childNodes[i].style.display = "none"; + } - if (rule.selectorText == "ul.feedList li.feed") { if (!hide) { - rule.style.display = "block"; - } else { - rule.style.display = "none"; + node.childNodes[i].style.display = "list-item"; + } + + if (has_unread) { + cat_unread++; } + } + } - } + if (cat_unread == 0) { + if (hide) { + cat_node.style.display = "none"; + } else { + cat_node.style.display = "list-item"; + } + } +// debug("unread for category: " + cat_unread); } function selectTableRow(r, do_select) {