From 57e38f47af2526aee3e1ef01991dd7d1ebb46f24 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sun, 09 Jan 2011 03:24:39 -0500
Subject: [PATCH] - Use 'loading' message's labels stacking + some code improvements

---
 program/js/app.js |   52 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 3080886..346f4e4 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -4535,28 +4535,34 @@
 
     // The same message is already displayed
     if (this.messages[key]) {
+      // replace label
       if (this.messages[key].obj)
         this.messages[key].obj.html(msg);
+      // store label in stack
+      if (type == 'loading') {
+        this.messages[key].labels.push({'id': id, 'msg': msg});
+      }
+      // add element and set timeout
       this.messages[key].elements.push(id);
-      window.setTimeout(function() { ref.hide_message(id, true); }, timeout);
+      window.setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout);
       return id;
     }
 
-    var obj = $('<div>').addClass(type).html(msg).data('msg', msg),
-      cont = $(this.gui_objects.message).show();
+    // create DOM object and display it
+    var obj = $('<div>').addClass(type).html(msg).data('key', key),
+      cont = $(this.gui_objects.message).append(obj).show();
+
+    this.messages[key] = {'obj': obj, 'elements': [id]};
 
     if (type == 'loading') {
-      obj.appendTo(cont);
-      this.messages[key] = {'obj': obj, 'elements': [id]};
-      window.setTimeout(function() { rcmail.hide_message(id); }, timeout);
-      return id;
+      this.messages[key].labels = [{'id': id, 'msg': msg}];
     }
     else {
-      obj.appendTo(cont).bind('mousedown', function() { return ref.hide_message(obj, true); });
-      window.setTimeout(function() { ref.hide_message(id, true); }, timeout);
-      this.messages[key] = { 'obj': obj, 'elements': [id] };
-      return id;
+      obj.click(function() { return ref.hide_message(obj); });
     }
+
+    window.setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout);
+    return id;
   };
 
   // make a message to disapear
@@ -4566,26 +4572,38 @@
     if (this.is_framed())
       return parent.rcmail.hide_message(obj, fade);
 
+    var k, n, i, msg, m = this.messages;
+
+    // Hide message by object, don't use for 'loading'!
     if (typeof(obj) == 'object') {
-      // hide message object
       $(obj)[fade?'fadeOut':'hide']();
-      
-      var msg = $(obj).data('msg');
+      msg = $(obj).data('key');
       if (this.messages[msg])
         delete this.messages[msg];
     }
+    // Hide message by id
     else {
-      // hide message by id
-      var k, n, m = this.messages;
       for (k in m) {
         for (n in m[k].elements) {
           if (m[k] && m[k].elements[n] == obj) {
             m[k].elements.splice(n, 1);
-            // hide dom element if last instance is removed
+            // hide DOM element if last instance is removed
             if (!m[k].elements.length) {
               m[k].obj[fade?'fadeOut':'hide']();
               delete m[k];
             }
+            // set pending action label for 'loading' message
+            else if (k == 'loading') {
+              for (i in m[k].labels) {
+                if (m[k].labels[i].id == obj) {
+                  delete m[k].labels[i];
+                }
+                else {
+                  msg = m[k].labels[i].msg;
+                }
+                m[k].obj.html(msg);
+              }
+            }
           }
         }
       }

--
Gitblit v1.9.1