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) {}
}