diff options
Diffstat (limited to 'web-ui/app/js')
-rw-r--r-- | web-ui/app/js/dispatchers/middle_pane_dispatcher.js | 2 | ||||
-rw-r--r-- | web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js | 29 | ||||
-rw-r--r-- | web-ui/app/js/mail_list_actions/ui/mail_list_actions.js | 3 | ||||
-rw-r--r-- | web-ui/app/js/mail_view/ui/no_mails_available_pane.js | 6 | ||||
-rw-r--r-- | web-ui/app/js/page/events.js | 2 | ||||
-rw-r--r-- | web-ui/app/js/services/mail_service.js | 26 |
6 files changed, 64 insertions, 4 deletions
diff --git a/web-ui/app/js/dispatchers/middle_pane_dispatcher.js b/web-ui/app/js/dispatchers/middle_pane_dispatcher.js index 7a53b769..12222aec 100644 --- a/web-ui/app/js/dispatchers/middle_pane_dispatcher.js +++ b/web-ui/app/js/dispatchers/middle_pane_dispatcher.js @@ -57,7 +57,7 @@ define(['flight/lib/component', 'page/events', 'helpers/triggering', 'mail_view/ NoMailsAvailablePane.teardownAll(); } else { var child_div = this.createChildDiv(this.attr.noMailsAvailablePane); - NoMailsAvailablePane.attachTo(child_div, {tag: data.tag}); + NoMailsAvailablePane.attachTo(child_div, {tag: data.tag, forSearch: data.forSearch}); } }; diff --git a/web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js b/web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js new file mode 100644 index 00000000..b148cdce --- /dev/null +++ b/web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js @@ -0,0 +1,29 @@ +define( + [ + 'flight/lib/component', + 'views/templates', + 'mixins/with_enable_disable_on_event', + 'page/events' + ], + + function(definecomponent, templates, withEnableDisableOnEvent, events) { + 'use strict'; + + return definecomponent(archiveManyTrigger, withEnableDisableOnEvent(events.ui.mails.hasMailsChecked)); + function archiveManyTrigger() { + + this.getMailsToArchive = function() { + this.trigger(document, events.ui.mail.wantChecked, this.$node); + }; + + this.archiveManyEmails = function(event, data) { + this.trigger(document, events.mail.archiveMany, data); + }; + + this.after('initialize', function () { + this.on('click', this.getMailsToArchive); + this.on(events.ui.mail.hereChecked, this.archiveManyEmails); + }); + } + } +); diff --git a/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js b/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js index 2c9c699f..f71ed07c 100644 --- a/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js +++ b/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js @@ -29,6 +29,7 @@ define( 'mail_list_actions/ui/pagination_trigger', 'mail_list_actions/ui/delete_many_trigger', 'mail_list_actions/ui/recover_many_trigger', + 'mail_list_actions/ui/archive_many_trigger', 'mail_list_actions/ui/mark_many_as_read_trigger', 'mail_list_actions/ui/mark_as_unread_trigger' ], @@ -45,6 +46,7 @@ define( paginationTrigger, deleteManyTrigger, recoverManyTrigger, + archiveManyTrigger, markManyAsReadTrigger, markAsUnreadTrigger ) { @@ -60,6 +62,7 @@ define( paginationTrigger.attachTo('#pagination-trigger'); deleteManyTrigger.attachTo('#delete-selected'); recoverManyTrigger.attachTo('#recover-selected'); + archiveManyTrigger.attachTo('#archive-selected'); markManyAsReadTrigger.attachTo('#mark-selected-as-read'); markAsUnreadTrigger.attachTo('#mark-selected-as-unread'); refresher.attachTo(document); diff --git a/web-ui/app/js/mail_view/ui/no_mails_available_pane.js b/web-ui/app/js/mail_view/ui/no_mails_available_pane.js index 32b6bc19..b1d5f9dd 100644 --- a/web-ui/app/js/mail_view/ui/no_mails_available_pane.js +++ b/web-ui/app/js/mail_view/ui/no_mails_available_pane.js @@ -30,11 +30,15 @@ define( function noMailsAvailablePane() { this.defaultAttrs({ - tag: null + tag: null, + forSearch: '' }); + var mailsQueryMatch = /-?in:"[\w]+"|tag:"[\w]+"/g; + this.render = function() { this.attr.tag = this.attr.tag.toUpperCase(); + this.attr.forSearch = this.attr.forSearch.replace(mailsQueryMatch, '').trim().toUpperCase(); this.$node.html(templates.noMailsAvailable(this.attr)); }; diff --git a/web-ui/app/js/page/events.js b/web-ui/app/js/page/events.js index f82a6b36..307fc8d1 100644 --- a/web-ui/app/js/page/events.js +++ b/web-ui/app/js/page/events.js @@ -56,6 +56,7 @@ define(function () { delete: 'ui:mail:delete', deleteMany: 'ui:mail:deleteMany', recoverMany: 'ui:mail:recoverMany', + archiveMany: 'ui:mail:archiveMany', wantChecked: 'ui:mail:wantChecked', hereChecked: 'ui:mail:hereChecked', checked: 'ui:mail:checked', @@ -117,6 +118,7 @@ define(function () { unread: 'mail:unread', delete: 'mail:delete', deleteMany: 'mail:deleteMany', + archiveMany: 'mail:archiveMany', recoverMany: 'mail:recoverMany', deleted: 'mail:deleted', saveDraft: 'draft:save', diff --git a/web-ui/app/js/services/mail_service.js b/web-ui/app/js/services/mail_service.js index 04194964..a63d517e 100644 --- a/web-ui/app/js/services/mail_service.js +++ b/web-ui/app/js/services/mail_service.js @@ -128,11 +128,32 @@ define( var mails = dataToRecover.mails || [dataToRecover.mail]; this.refreshMails(); - this.trigger(document, events.ui.userAlerts.displayMessage, { message: dataToRecover.successMessage}); + this.trigger(document, events.ui.userAlerts.displayMessage, { message: i18n(dataToRecover.successMessage)}); this.trigger(document, events.ui.mails.uncheckAll); }, this); }; + this.triggerArchived = function (dataToArchive) { + return _.bind(function (response) { + this.refreshMails(); + this.trigger(document, events.ui.userAlerts.displayMessage, { message: i18n(response.successMessage)}); + this.trigger(document, events.ui.mails.uncheckAll); + }, this); + }; + + this.archiveManyMails = function(event, dataToArchive) { + var mailIdents = _.map(dataToArchive.checkedMails, function (mail) { + return mail.ident; + }); + monitoredAjax(this, '/mails/archive', { + type: 'POST', + dataType: 'json', + contentType: 'application/json; charset=utf-8', + data: JSON.stringify({idents: mailIdents}) + }).done(this.triggerArchived(dataToArchive)) + .fail(this.errorMessage(i18n('Could not archive emails'))); + }; + this.deleteMail = function (ev, data) { monitoredAjax(this, '/mail/' + data.mail.ident, {type: 'DELETE'}) @@ -222,7 +243,7 @@ define( monitoredAjax(this, url, { dataType: 'json' }) .done(function (data) { this.attr.numPages = Math.ceil(data.stats.total / this.attr.pageSize); - this.trigger(document, events.mails.available, _.merge(_.merge({tag: this.attr.currentTag }), this.parseMails(data))); + this.trigger(document, events.mails.available, _.merge({tag: this.attr.currentTag, forSearch: this.attr.lastQuery }, this.parseMails(data))); }.bind(this)) .fail(function () { this.trigger(document, events.ui.userAlerts.displayMessage, { message: i18n('Could not fetch messages') }); @@ -299,6 +320,7 @@ define( this.on(document, events.mail.delete, this.deleteMail); this.on(document, events.mail.deleteMany, this.deleteManyMails); this.on(document, events.mail.recoverMany, this.recoverManyMails); + this.on(document, events.mail.archiveMany, this.archiveManyMails); this.on(document, events.search.perform, this.newSearch); this.on(document, events.ui.tag.selected, this.fetchByTag); this.on(document, events.ui.tag.select, this.fetchByTag); |