From 7f9d71bf1fb0f0589f328366984e30d342a08882 Mon Sep 17 00:00:00 2001
From: svncommit <devs@roundcube.net>
Date: Fri, 29 Aug 2008 03:48:23 -0400
Subject: [PATCH] Display sum of subfolders unread count for collapsed folder.

---
 program/js/app.js |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 3c5a11d..3fb21bc 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1171,6 +1171,7 @@
         this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+escape(id)+'&');
         }
       this.http_post('save-pref', '_name=collapsed_folders&_value='+escape(this.env.collapsed_folders));
+      this.set_unread_count_display(id, false);
       }
     }
 
@@ -3482,9 +3483,30 @@
     var reg, text_obj, item;
     if (item = this.get_folder_li(mbox))
       {
-      // set new text
+      item.setAttribute('count', count);
+      this.set_unread_count_display(mbox, set_title);
+      }
+    }
+
+
+  // update the mailbox count display
+  this.set_unread_count_display = function(mbox, set_title)
+    {
+    var reg, text_obj, item, count, div, children;
+    if (item = this.get_folder_li(mbox))
+      {
+      count = parseInt(item.getAttribute('count') ? item.getAttribute('count') : 0);
       text_obj = item.getElementsByTagName('a')[0];
       reg = /\s+\([0-9]+\)$/i;
+
+      div = item.getElementsByTagName('div')[0];
+      if (div.className.match(/collapsed/))
+        {
+        // add children's counters
+        children = item.getElementsByTagName('li');
+        for (var i=0; i<children.length; i++)
+          count = count+parseInt(children[i].getAttribute('count') ? children[i].getAttribute('count') : 0);
+        }
 
       if (count && text_obj.innerHTML.match(reg))
         text_obj.innerHTML = text_obj.innerHTML.replace(reg, ' ('+count+')');
@@ -3493,6 +3515,11 @@
       else
         text_obj.innerHTML = text_obj.innerHTML.replace(reg, '');
 
+      // set parent's display
+      reg = new RegExp(RegExp.escape(this.env.delimiter) + '[^' + RegExp.escape(this.env.delimiter) + ']+');
+      if (mbox.match(reg))
+        this.set_unread_count_display(mbox.replace(reg, ''), false);
+
       // set the right classes
       this.set_classname(item, 'unread', count>0 ? true : false);
       }

--
Gitblit v1.9.1