diff --git a/UI/Templates/ContactsUI/UIxContactFoldersView.wox b/UI/Templates/ContactsUI/UIxContactFoldersView.wox
index ebbbbcf7c..96c34860d 100644
--- a/UI/Templates/ContactsUI/UIxContactFoldersView.wox
+++ b/UI/Templates/ContactsUI/UIxContactFoldersView.wox
@@ -273,7 +273,7 @@
-
+
diff --git a/UI/Templates/MailerUI/UIxMailFolderTemplate.wox b/UI/Templates/MailerUI/UIxMailFolderTemplate.wox
index 2858fb0f1..0668bc26b 100644
--- a/UI/Templates/MailerUI/UIxMailFolderTemplate.wox
+++ b/UI/Templates/MailerUI/UIxMailFolderTemplate.wox
@@ -20,9 +20,16 @@
ng-click="selectMessage(currentMessage)"
ui-sref="mail.account.mailbox.message({accountId: account.id, mailboxId: (mailbox.path | encodeUri), messageId: currentMessage.uid})"
ui-sref-active="sg-active">
+
+
+
+ size="48">
+
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UI/WebServerResources/js/Contacts/AddressBookController.js b/UI/WebServerResources/js/Contacts/AddressBookController.js
index 62f1ecc24..7b982bdcc 100644
--- a/UI/WebServerResources/js/Contacts/AddressBookController.js
+++ b/UI/WebServerResources/js/Contacts/AddressBookController.js
@@ -12,49 +12,49 @@
$rootScope.currentFolder = stateAddressbook;
$rootScope.card = null;
-
+
$scope.selectCard = function(card) {
$state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});
};
-
- $scope.newComponent = function(ev) {
- $mdDialog.show({
- parent: angular.element(document.body),
- targetEvent: ev,
- clickOutsideToClose: true,
- escapeToClose: true,
- template: [
- '
',
- ' ',
- ' ',
- ' ',
- ' ' + l('Contact'),
- ' ',
- ' ',
- ' ' + l('List'),
- ' ',
- '
',
- ' ',
- ''
- ].join(''),
- locals: {
- state: $state,
- addressbookId: $scope.currentFolder.id
- },
- controller: ComponentDialogController
- });
-
- /**
- * @ngInject
- */
- ComponentDialogController.$inject = ['scope', '$mdDialog', 'state', 'addressbookId'];
- function ComponentDialogController(scope, $mdDialog, state, addressbookId) {
- scope.create = function(type) {
- $mdDialog.hide();
- state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });
- }
+
+ $scope.newComponent = function(ev) {
+ $mdDialog.show({
+ parent: angular.element(document.body),
+ targetEvent: ev,
+ clickOutsideToClose: true,
+ escapeToClose: true,
+ template: [
+ '
',
+ ' ',
+ ' ',
+ ' ',
+ ' ' + l('Contact'),
+ ' ',
+ ' ',
+ ' ' + l('List'),
+ ' ',
+ '
',
+ ' ',
+ ''
+ ].join(''),
+ locals: {
+ state: $state,
+ addressbookId: $scope.currentFolder.id
+ },
+ controller: ComponentDialogController
+ });
+
+ /**
+ * @ngInject
+ */
+ ComponentDialogController.$inject = ['scope', '$mdDialog', 'state', 'addressbookId'];
+ function ComponentDialogController(scope, $mdDialog, state, addressbookId) {
+ scope.create = function(type) {
+ $mdDialog.hide();
+ state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });
}
- };
+ }
+ };
$scope.notSelectedComponent = function(currentCard, type) {
return (currentCard.tag == type && !currentCard.selected);
diff --git a/UI/WebServerResources/js/Mailer/Mailbox.service.js b/UI/WebServerResources/js/Mailer/Mailbox.service.js
index c66639a9f..922691048 100644
--- a/UI/WebServerResources/js/Mailer/Mailbox.service.js
+++ b/UI/WebServerResources/js/Mailer/Mailbox.service.js
@@ -143,6 +143,22 @@
return Mailbox.$absolutePath(this.$account.id, this.path);
};
+ /**
+ * @function $selectedCount
+ * @memberof Mailbox.prototype
+ * @desc Return the number of messages selected by the user.
+ * @returns the number of selected messages
+ */
+ Mailbox.prototype.$selectedCount = function() {
+ var count;
+
+ count = 0;
+ if (this.$messages) {
+ count = (_.filter(this.$messages, function(message) { return message.selected })).length;
+ }
+ return count;
+ };
+
/**
* @function $filter
* @memberof Mailbox.prototype
@@ -348,6 +364,7 @@
* @return a promise of the HTTP operation
*/
Mailbox.prototype.$deleteMessages = function(uids) {
+ var _this = this;
return Mailbox.$$resource.post(this.id, 'batchDelete', {uids: uids});
};
diff --git a/UI/WebServerResources/js/Mailer/MailboxController.js b/UI/WebServerResources/js/Mailer/MailboxController.js
index 9056e8891..990c7b47c 100644
--- a/UI/WebServerResources/js/Mailer/MailboxController.js
+++ b/UI/WebServerResources/js/Mailer/MailboxController.js
@@ -11,9 +11,11 @@
$scope.account = stateAccount;
$rootScope.mailbox = stateMailbox;
$rootScope.currentFolder = stateMailbox;
+
$scope.selectMessage = function(message) {
$state.go('mail.account.mailbox.message', {accountId: stateAccount.id, mailboxId: encodeUriFilter(stateMailbox.path), messageId: message.uid});
};
+
}
angular
diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js
index b34facc15..bba748dfd 100644
--- a/UI/WebServerResources/js/Mailer/MailboxesController.js
+++ b/UI/WebServerResources/js/Mailer/MailboxesController.js
@@ -59,6 +59,24 @@
});
};
+ $scope.unselectMessages = function() {
+ _.each($rootScope.mailbox.$messages, function(message) { message.selected = false; });
+ };
+
+ $scope.confirmDeleteSelectedMessages = function() {
+ Dialog.confirm(l('Warning'),
+ l('Are you sure you want to delete the selected messages?'))
+ .then(function() {
+ // User confirmed the deletion
+ var selectedMessages = _.filter($rootScope.mailbox.$messages, function(message) { return message.selected });
+ var selectedUIDs = _.pluck(selectedMessages, 'uid');
+ $rootScope.mailbox.$deleteMessages(selectedUIDs).then(function() {
+ $rootScope.mailbox.$messages = _.difference($rootScope.mailbox.$messages, selectedMessages);
+ });
+ }, function(data, status) {
+ // Delete failed
+ });
+ };
if ($state.current.name == 'mail' && $scope.accounts.length > 0 && $scope.accounts[0].$mailboxes.length > 0) {
// Redirect to first mailbox of first account if no mailbox is selected
var account = $scope.accounts[0];
diff --git a/UI/WebServerResources/js/Mailer/Message.service.js b/UI/WebServerResources/js/Mailer/Message.service.js
index 28d139c33..0c753c20f 100644
--- a/UI/WebServerResources/js/Mailer/Message.service.js
+++ b/UI/WebServerResources/js/Mailer/Message.service.js
@@ -27,6 +27,7 @@
// The promise will be unwrapped first
this.$unwrap(futureMessageData);
}
+ this.selected = false;
}
/**