From 6cd02043afe8a7dcfed7666383527fe68b53fecb Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Sat, 9 May 2015 14:37:40 -0400 Subject: [PATCH] (feat) can now batch delete messages --- .../ContactsUI/UIxContactFoldersView.wox | 2 +- .../MailerUI/UIxMailFolderTemplate.wox | 9 ++- UI/Templates/MailerUI/UIxMailMainFrame.wox | 16 +++- .../js/Contacts/AddressBookController.js | 78 +++++++++---------- .../js/Mailer/Mailbox.service.js | 17 ++++ .../js/Mailer/MailboxController.js | 2 + .../js/Mailer/MailboxesController.js | 18 +++++ .../js/Mailer/Message.service.js | 1 + 8 files changed, 101 insertions(+), 42 deletions(-) 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"> +
-
+
@@ -338,6 +340,18 @@
+
+ + + + + + + + + + +
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; } /**