From 609d3923d7dc674263ddea990387dbf5488fabc6 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Sun, 18 Sep 2011 05:02:35 -0400 Subject: [PATCH] - Cache synchronization using QRESYNC/CONDSTORE - Fixed message ID updates in cache - Changed message flags handling + some fixes (e.g. fixed messages listing after delete) --- program/js/app.js | 68 ++++++++++++++++++++++------------ 1 files changed, 44 insertions(+), 24 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 002f345..38a15cf 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -86,7 +86,7 @@ if (over) button_prop.over = over; this.buttons[command].push(button_prop); - + if (this.loaded) init_button(command, button_prop); }; @@ -321,7 +321,6 @@ } if (this.gui_objects.qsearchbox) { this.enable_command('search', 'reset-search', 'moveto', true); - $(this.gui_objects.qsearchbox).select(); } if (this.contact_list && this.contact_list.rowcount > 0) @@ -990,14 +989,14 @@ this.select_all_mode = false; if (s && this.env.mailbox) - this.list_mailbox(this.env.mailbox); + this.list_mailbox(this.env.mailbox, 1); else if (s && this.task == 'addressbook') { if (this.env.source == '') { for (n in this.env.address_sources) break; this.env.source = n; this.env.group = ''; } - this.list_contacts(this.env.source, this.env.group); + this.list_contacts(this.env.source, this.env.group, 1); } break; @@ -1523,11 +1522,12 @@ this.msglist_keypress = function(list) { + if (list.modkey == CONTROL_KEY) + return; + if (list.key_pressed == list.ENTER_KEY) this.command('show'); - else if (list.key_pressed == list.DELETE_KEY) - this.command('delete'); - else if (list.key_pressed == list.BACKSPACE_KEY) + else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY) this.command('delete'); else if (list.key_pressed == 33) this.command('previouspage'); @@ -1647,8 +1647,8 @@ // merge flags over local message object $.extend(this.env.messages[uid], { deleted: flags.deleted?1:0, - replied: flags.replied?1:0, - unread: flags.unread?1:0, + replied: flags.answered?1:0, + unread: !flags.seen?1:0, forwarded: flags.forwarded?1:0, flagged: flags.flagged?1:0, has_children: flags.has_children?1:0, @@ -1671,10 +1671,10 @@ message = this.env.messages[uid], css_class = 'message' + (even ? ' even' : ' odd') - + (flags.unread ? ' unread' : '') + + (!flags.seen ? ' unread' : '') + (flags.deleted ? ' deleted' : '') + (flags.flagged ? ' flagged' : '') - + (flags.unread_children && !flags.unread && !this.env.autoexpand_threads ? ' unroot' : '') + + (flags.unread_children && flags.seen && !this.env.autoexpand_threads ? ' unroot' : '') + (message.selected ? ' selected' : ''), // for performance use DOM instead of jQuery here row = document.createElement('tr'), @@ -1689,12 +1689,12 @@ css_class += ' status'; if (flags.deleted) css_class += ' deleted'; - else if (flags.unread) + else if (!flags.seen) css_class += ' unread'; else if (flags.unread_children > 0) css_class += ' unreadchildren'; } - if (flags.replied) + if (flags.answered) css_class += ' replied'; if (flags.forwarded) css_class += ' forwarded'; @@ -1762,7 +1762,7 @@ else if (c == 'status') { if (flags.deleted) css_class = 'deleted'; - else if (flags.unread) + else if (!flags.seen) css_class = 'unread'; else if (flags.unread_children > 0) css_class = 'unreadchildren'; @@ -1772,8 +1772,11 @@ } else if (c == 'threads') html = expando; - else if (c == 'subject') + else if (c == 'subject') { + if (bw.ie) + col.onmouseover = function() { rcube_webmail.long_subject_title_ie(this, message.depth+1); }; html = tree + cols[c]; + } else if (c == 'priority') { if (flags.prio > 0 && flags.prio < 6) html = '<span class="prio'+flags.prio+'"> </span>'; @@ -2053,8 +2056,7 @@ new_row = tbody.firstChild; while (new_row) { - if (new_row.nodeType == 1 && (r = this.message_list.rows[new_row.uid]) - && r.unread_children) { + if (new_row.nodeType == 1 && (r = this.message_list.rows[new_row.uid]) && r.unread_children) { this.message_list.expand_all(r); this.set_unread_children(r.uid); } @@ -2494,7 +2496,7 @@ // if there is a trash mailbox defined and we're not currently in it else { // if shift was pressed delete it immediately - if (list && list.shiftkey) { + if (list && list.modkey == SHIFT_KEY) { if (confirm(this.get_label('deletemessagesconfirm'))) this.permanently_remove_messages(); } @@ -2797,14 +2799,15 @@ this.expunge_mailbox = function(mbox) { - var lock = false, - url = '_mbox='+urlencode(mbox); + var lock, url = '_mbox='+urlencode(mbox); // lock interface if it's the active mailbox if (mbox == this.env.mailbox) { - lock = this.set_busy(true, 'loading'); - url += '&_reload=1'; - } + lock = this.set_busy(true, 'loading'); + url += '&_reload=1'; + if (this.env.search_request) + url += '&_search='+this.env.search_request; + } // send request to server this.http_post('expunge', url, lock); @@ -3538,7 +3541,7 @@ this.insert_recipient = function(id) { - if (!this.env.contacts[id] || !this.ksearch_input) + if (id === null || !this.env.contacts[id] || !this.ksearch_input) return; // get cursor pos @@ -6113,6 +6116,23 @@ } }; +rcube_webmail.long_subject_title_ie = function(elem, indent) +{ + if (!elem.title) { + var $elem = $(elem), + txt = $.trim($elem.text()), + tmp = $('<span>').text(txt) + .css({'position': 'absolute', 'float': 'left', 'visibility': 'hidden', + 'font-size': $elem.css('font-size'), 'font-weight': $elem.css('font-weight')}) + .appendTo($('body')), + w = tmp.width(); + + tmp.remove(); + if (w + indent * 15 > $elem.width()) + elem.title = txt; + } +}; + // copy event engine prototype rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; -- Gitblit v1.9.1