summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--web-ui/app/js/mail_view/ui/compose_box.js6
-rw-r--r--web-ui/app/js/mail_view/ui/draft_box.js1
-rw-r--r--web-ui/app/js/mail_view/ui/mail_view.js1
-rw-r--r--web-ui/app/js/mixins/with_compose_inline.js4
-rw-r--r--web-ui/app/js/mixins/with_mail_edit_base.js19
-rw-r--r--web-ui/app/js/page/events.js1
-rw-r--r--web-ui/test/spec/mail_view/ui/reply_box.spec.js8
-rw-r--r--web-ui/test/spec/mixins/with_mail_edit_base.spec.js23
8 files changed, 43 insertions, 20 deletions
diff --git a/web-ui/app/js/mail_view/ui/compose_box.js b/web-ui/app/js/mail_view/ui/compose_box.js
index 92588310..dcc8fd76 100644
--- a/web-ui/app/js/mail_view/ui/compose_box.js
+++ b/web-ui/app/js/mail_view/ui/compose_box.js
@@ -67,13 +67,15 @@ define(
}
};
+ this.discardDraft = function () {
+ this.trigger(events.dispatchers.rightPane.openNoMessageSelected);
+ };
+
this.after('initialize', function () {
this.renderComposeBox();
this.select('toBox').focus();
- this.on(this.select('cancelButton'), 'click', this.showNoMessageSelected);
this.on(document, events.mail.deleted, this.mailDeleted);
-
this.on(document, events.mail.sent, this.showNoMessageSelected);
});
}
diff --git a/web-ui/app/js/mail_view/ui/draft_box.js b/web-ui/app/js/mail_view/ui/draft_box.js
index 8c2e15c7..e8dd10ea 100644
--- a/web-ui/app/js/mail_view/ui/draft_box.js
+++ b/web-ui/app/js/mail_view/ui/draft_box.js
@@ -72,7 +72,6 @@ define(
this.select('bodyBox').focus();
this.select('tipMsg').hide();
this.enableAutoSave();
- this.on(this.select('cancelButton'), 'click', this.showNoMessageSelected);
this.on(this.select('closeMailButton'), 'click', this.showNoMessageSelected);
};
diff --git a/web-ui/app/js/mail_view/ui/mail_view.js b/web-ui/app/js/mail_view/ui/mail_view.js
index 3c5b0ccc..01db6c4f 100644
--- a/web-ui/app/js/mail_view/ui/mail_view.js
+++ b/web-ui/app/js/mail_view/ui/mail_view.js
@@ -212,7 +212,6 @@ define(
this.trigger(events.mail.want, {mail: this.attr.ident, caller: this});
};
-
this.after('initialize', function () {
this.on(this, events.mail.here, this.displayMail);
this.on(this, events.mail.notFound, this.openNoMessageSelectedPane);
diff --git a/web-ui/app/js/mixins/with_compose_inline.js b/web-ui/app/js/mixins/with_compose_inline.js
index cd5dcd8b..b39201ae 100644
--- a/web-ui/app/js/mixins/with_compose_inline.js
+++ b/web-ui/app/js/mixins/with_compose_inline.js
@@ -65,6 +65,10 @@ define(
this.attr.mail.ident = data.ident;
};
+ this.discardDraft = function() {
+ this.trashReply();
+ };
+
this.after('initialize', function () {
this.on(document, events.mail.sent, this.openMail);
this.on(document, events.mail.deleted, this.trashReply);
diff --git a/web-ui/app/js/mixins/with_mail_edit_base.js b/web-ui/app/js/mixins/with_mail_edit_base.js
index da92ad29..a3c88e66 100644
--- a/web-ui/app/js/mixins/with_mail_edit_base.js
+++ b/web-ui/app/js/mixins/with_mail_edit_base.js
@@ -118,10 +118,14 @@ define(
this.trashMail = function() {
this.cancelPostponedSaveDraft();
- this.trigger(document, events.mail.save, {
- mail: this.buildMail(),
- callback: this.deleteMail.bind(this)
- });
+ if (this.attr.ident) {
+ this.trigger(document, events.mail.save, {
+ mail: this.buildMail(),
+ callback: this.deleteMail.bind(this)
+ });
+ } else {
+ this.trigger(document, events.ui.mail.discard);
+ }
};
this.trim_recipient = function(recipients) {
@@ -133,7 +137,7 @@ define(
this.sendMail = function () {
this.cancelPostponedSaveDraft();
var mail = this.buildMail('sent');
-
+
if (allRecipientsAreEmails(mail)) {
mail.header.to = this.trim_recipient(mail.header.to);
mail.header.cc = this.trim_recipient(mail.header.cc);
@@ -219,6 +223,10 @@ define(
});
};
+ this.before('initialize', function () {
+ this.discardDraft = function () {};
+ });
+
this.after('initialize', function () {
this.on(document, events.dispatchers.rightPane.clear, this.teardown);
this.on(document, events.ui.recipients.updated, this.recipientsUpdated);
@@ -227,6 +235,7 @@ define(
this.on(document, events.ui.mail.send, this.sendMail);
+ this.on(document, events.ui.mail.discard, this.discardDraft);
this.on(document, events.ui.tag.selected, this.saveTag);
this.on(document, events.ui.tag.select, this.saveTag);
});
diff --git a/web-ui/app/js/page/events.js b/web-ui/app/js/page/events.js
index 307fc8d1..6897cf63 100644
--- a/web-ui/app/js/page/events.js
+++ b/web-ui/app/js/page/events.js
@@ -60,6 +60,7 @@ define(function () {
wantChecked: 'ui:mail:wantChecked',
hereChecked: 'ui:mail:hereChecked',
checked: 'ui:mail:checked',
+ discard: 'ui:mail:discard',
unchecked: 'ui:mail:unchecked',
changedSinceLastSave: 'ui:mail:changedSinceLastSave',
send: 'ui:mail:send',
diff --git a/web-ui/test/spec/mail_view/ui/reply_box.spec.js b/web-ui/test/spec/mail_view/ui/reply_box.spec.js
index 9542f37a..731d57b3 100644
--- a/web-ui/test/spec/mail_view/ui/reply_box.spec.js
+++ b/web-ui/test/spec/mail_view/ui/reply_box.spec.js
@@ -82,14 +82,6 @@ describeComponent('mail_view/ui/reply_box', function () {
expect(this.component.select('bodyBox').val()).toBe('quoted email');
});
- it('triggers mail when cancelling a reply', function () {
- var mailSaveEvent = spyOnEvent(document, Pixelated.events.mail.save);
-
- this.component.select('trashButton').click();
-
- expect(mailSaveEvent).toHaveBeenTriggeredOn(document);
- });
-
it('reopens the mail after the reply is sent', function () {
var mailOpenEvent = spyOnEvent(document, Pixelated.events.ui.mail.open);
diff --git a/web-ui/test/spec/mixins/with_mail_edit_base.spec.js b/web-ui/test/spec/mixins/with_mail_edit_base.spec.js
index 601f2c11..2ad12361 100644
--- a/web-ui/test/spec/mixins/with_mail_edit_base.spec.js
+++ b/web-ui/test/spec/mixins/with_mail_edit_base.spec.js
@@ -2,12 +2,14 @@ describeMixin('mixins/with_mail_edit_base', function () {
'use strict';
beforeEach(function () {
+ this.Component.discardDraft = function () {};
this.setupComponent();
// Stubing mixing wrongly!!! 'deprecated' while waiting for draft component extraction
this.component.buildMail = function (tag) {
return { header: { to: ['a@smth.com'], from: 'b@smth.com', subject: 'Sbject' } };
};
+
spyOn(this.component, 'trim_recipient').and.callFake(function(recipients) {
return recipients.map(function(recipient) {
return recipient.trim();
@@ -66,11 +68,26 @@ describeMixin('mixins/with_mail_edit_base', function () {
});
});
- describe('when user asks to trash the mail', function() {
- it('triggers mail delete for this mail', function() {
+ describe('when user asks to discard the mail', function() {
+ var mailSaveSpy, mailDiscardSpy;
+
+ beforeEach(function () {
+ mailSaveSpy = spyOnEvent(document, Pixelated.events.mail.save);
+ mailDiscardSpy = spyOnEvent(document, Pixelated.events.ui.mail.discard);
+ });
+
+ it('discards the mail if it was never saved', function() {
+ delete this.component.attr.ident;
+ this.component.trashMail();
+ expect(mailSaveSpy).not.toHaveBeenTriggeredOn(document);
+ expect(mailDiscardSpy).toHaveBeenTriggeredOn(document);
+ });
+
+ it('deletes the draft if it was saved before', function() {
var spy = spyOnEvent(document, Pixelated.events.mail.save);
+ this.component.attr.ident = 'ident';
this.component.trashMail();
- expect(spy).toHaveBeenTriggeredOn(document);
+ expect(mailSaveSpy).toHaveBeenTriggeredOn(document);
});
});