diff --git a/UI/Templates/MailerUI/UIxMailFolderTemplate.wox b/UI/Templates/MailerUI/UIxMailFolderTemplate.wox index 4de6f274f..4b5576697 100644 --- a/UI/Templates/MailerUI/UIxMailFolderTemplate.wox +++ b/UI/Templates/MailerUI/UIxMailFolderTemplate.wox @@ -212,7 +212,7 @@ {{mailbox.service.selectedFolder.getLength()}} - + 0) { + nextIndex -= 1; + nextMessage = vm.selectedFolder.$messages[nextIndex]; + } + if (index < vm.selectedFolder.$messages.length) + previousMessage = vm.selectedFolder.$messages[index]; + if (nextMessage) { + if (nextMessage.isread && previousMessage && !previousMessage.isread) { + nextIndex = index; + nextMessage = previousMessage; + } + } + else if (previousMessage) { + nextIndex = index; + nextMessage = previousMessage; + } + if (nextMessage) { + $state.go('mail.account.mailbox.message', { messageId: nextMessage.uid }); + vm.selectedFolder.$topIndex = nextIndex; + } + else { + $state.go('mail.account.mailbox'); + } + } } }); }); @@ -174,6 +193,26 @@ } } + angular + .module('material.components.virtualRepeat') + .decorator('mdVirtualRepeatContainerDirective', mdVirtualRepeatContainerDirectiveDecorator); + + /** + * @ngInject + */ + mdVirtualRepeatContainerDirectiveDecorator.$inject = ['$delegate']; + function mdVirtualRepeatContainerDirectiveDecorator($delegate) { + $delegate[0].controller.prototype.resetScroll = function() { + // Don't scroll to top if current virtual repeater is the messages list + // but do update the container size + if (this.$element.parent().attr('id') == 'messagesList') + this.updateSize(); + else + this.scrollTo(0); + }; + return $delegate; + } + angular .module('SOGo.MailerUI') .controller('MailboxController', MailboxController); diff --git a/UI/WebServerResources/js/Mailer/Mailer.app.js b/UI/WebServerResources/js/Mailer/Mailer.app.js index de3d4f1af..f2a36a445 100644 --- a/UI/WebServerResources/js/Mailer/Mailer.app.js +++ b/UI/WebServerResources/js/Mailer/Mailer.app.js @@ -177,9 +177,6 @@ var mailboxId = decodeUriFilter($stateParams.mailboxId), _find; - if (Mailbox.selectedFolder) - Mailbox.selectedFolder.$isLoading = true; - // Recursive find function _find = function(mailboxes) { var mailbox = _.find(mailboxes, function(o) { @@ -195,6 +192,9 @@ return mailbox; }; + if (Mailbox.selectedFolder) + Mailbox.selectedFolder.$isLoading = true; + return _find(stateAccount.$mailboxes); } @@ -255,11 +255,11 @@ var message; message = _.find(stateMailbox.$messages, function(messageObject) { - return messageObject.uid == $stateParams.messageId; + return messageObject.uid == parseInt($stateParams.messageId); }); if (message) { - stateMailbox.selectedMessage = $stateParams.messageId; + stateMailbox.selectedMessage = parseInt($stateParams.messageId); return message.$reload(); } else { diff --git a/UI/WebServerResources/js/Mailer/MessageController.js b/UI/WebServerResources/js/Mailer/MessageController.js index b83984a39..3b5fba978 100644 --- a/UI/WebServerResources/js/Mailer/MessageController.js +++ b/UI/WebServerResources/js/Mailer/MessageController.js @@ -92,7 +92,8 @@ } function doDelete() { - var parentCtrls = $parentControllers(), mailbox, message, state; + var mailbox, message, state, nextMessage, previousMessage, + parentCtrls = $parentControllers(); if (parentCtrls.messageCtrl) { mailbox = parentCtrls.mailboxCtrl.selectedFolder; @@ -105,19 +106,38 @@ state = $state; } - mailbox.$deleteMessages([message]).then(function() { - // Remove message from list of messages - var index = _.findIndex(mailbox.$messages, function(o) { - return o.uid == message.uid; - }); - if (index != -1) - mailbox.$messages.splice(index, 1); + mailbox.$deleteMessages([message]).then(function(index) { + var nextIndex = index; // Remove message object from scope message = null; - // Navigate to mailbox if not in popup window if (angular.isDefined(state)) { + // Select either the next or previous message + if (index > 0) { + nextIndex -= 1; + nextMessage = mailbox.$messages[nextIndex]; + } + if (index < mailbox.$messages.length) + previousMessage = mailbox.$messages[index]; + + if (nextMessage) { + if (nextMessage.isread && previousMessage && !previousMessage.isread) { + nextIndex = index; + nextMessage = previousMessage; + } + } + else if (previousMessage) { + nextIndex = index; + nextMessage = previousMessage; + } + try { - state.go('mail.account.mailbox', { mailboxId: encodeUriFilter(mailbox.path) }); + if (nextMessage) { + state.go('mail.account.mailbox.message', { messageId: nextMessage.uid }); + mailbox.$topIndex = nextIndex; + } + else { + state.go('mail.account.mailbox'); + } } catch (error) {} }