diff --git a/program/js/app.js b/program/js/app.js index 308088612..346f4e44e 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -4535,28 +4535,34 @@ function rcube_webmail() // 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 = $('
').addClass(type).html(msg).data('msg', msg), - cont = $(this.gui_objects.message).show(); + // create DOM object and display it + var obj = $('
').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 @@ function rcube_webmail() 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); + } + } } } }