From 1f7957b868ba01f49aed8ec5fefe6560d77f025c Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 26 Mar 2009 20:55:57 +0000 Subject: [PATCH] Fix for bug #3041 Monotone-Parent: d32dd5daa90a6d8f5551243352a4b7c4540a337b Monotone-Revision: e8b0505014499859d4ee1b044eee6a3aa1df237e Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2009-03-26T20:55:57 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/MailerUI.js | 62 +++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index b9866d6a4..738ef8bc2 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -253,20 +253,51 @@ function onUnload(event) { return true; } -/* bulk delete of messages */ - function onDocumentKeydown(event) { - var e = event || window.event; - var target = getTarget(event); - if ((e.keyCode == Event.KEY_DELETE - || (e.keyCode == Event.KEY_BACKSPACE - && isMac())) - && target.tagName != "INPUT") { - deleteSelectedMessages(); - Event.stop(event); - } + var target = Event.element(event); + if (target.tagName != "INPUT") + if (event.keyCode == Event.KEY_DELETE || + event.keyCode == Event.KEY_BACKSPACE && isMac()) { + deleteSelectedMessages(); + Event.stop(event); + } + else if (event.keyCode == Event.KEY_DOWN || + event.keyCode == Event.KEY_UP) { + if (Mailer.currentMessages[Mailer.currentMailbox]) { + var row = $("row_" + Mailer.currentMessages[Mailer.currentMailbox]); + var nextRow; + if (event.keyCode == Event.KEY_DOWN) + nextRow = row.next("tr"); + else + nextRow = row.previous("tr"); + if (nextRow) { + Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4); + row.up().deselectAll(); + + // Adjust the scollbar + var viewPort = $("mailboxContent"); + var divDimensions = viewPort.getDimensions(); + var rowScrollOffset = nextRow.cumulativeScrollOffset(); + var rowPosition = nextRow.positionedOffset(); + var divBottom = divDimensions.height + rowScrollOffset.top; + var rowBottom = rowPosition.top + nextRow.getHeight(); + + if (divBottom < rowBottom) + viewPort.scrollTop += rowBottom - divBottom; + else if (rowScrollOffset.top > rowPosition.top) + viewPort.scrollTop -= rowScrollOffset.top - rowPosition.top; + + // Select and load the next message + nextRow.selectElement(); + loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); + } + Event.stop(event); + } + } } +/* bulk delete of messages */ + function deleteSelectedMessages(sender) { var messageList = $("messageList").down("TBODY"); var rows = messageList.getSelectedNodes(); @@ -445,7 +476,7 @@ function onMailboxTreeItemClick(event) { head.rows[1].firstChild.update(); } else - openMailbox(mailbox); + openMailbox(mailbox); // FRANCIS: don't update folder status? Event.stop(event); } @@ -845,22 +876,23 @@ function onMessageSelectionChange() { function loadMessage(idx) { if (document.messageAjaxRequest) { + log ("aborting message request"); document.messageAjaxRequest.aborted = true; document.messageAjaxRequest.abort(); } + var div = $('messageContent'); var cachedMessage = getCachedMessage(idx); var row = $("row_" + idx); var seenStateChanged = row && row.hasClassName('mailer_unreadmail'); if (cachedMessage == null) { var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" + idx + "/view?noframe=1"); - document.messageAjaxRequest - = triggerAjaxRequest(url, messageCallback, idx); + div.update(); + document.messageAjaxRequest = triggerAjaxRequest(url, messageCallback, idx); markMailInWindow(window, idx, true); } else { - var div = $('messageContent'); div.update(cachedMessage['text']); cachedMessage['time'] = (new Date()).getTime(); document.messageAjaxRequest = null;