diff options
Diffstat (limited to 'web-ui')
-rw-r--r-- | web-ui/app/js/mail_view/ui/attachment_list.js | 22 | ||||
-rw-r--r-- | web-ui/app/js/mail_view/ui/draft_box.js | 17 | ||||
-rw-r--r-- | web-ui/app/js/mail_view/ui/forward_box.js | 17 | ||||
-rw-r--r-- | web-ui/app/js/page/events.js | 3 | ||||
-rw-r--r-- | web-ui/app/scss/_read.scss | 15 | ||||
-rw-r--r-- | web-ui/app/templates/compose/attachment_item.hbs | 5 | ||||
-rw-r--r-- | web-ui/app/templates/compose/attachments_list.hbs | 1 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/attachment_list.spec.js | 22 |
8 files changed, 69 insertions, 33 deletions
diff --git a/web-ui/app/js/mail_view/ui/attachment_list.js b/web-ui/app/js/mail_view/ui/attachment_list.js index eb515865..3def6870 100644 --- a/web-ui/app/js/mail_view/ui/attachment_list.js +++ b/web-ui/app/js/mail_view/ui/attachment_list.js @@ -38,6 +38,9 @@ define( uploadFileButton: '#upload-file-button' }); + var ONE_MEGABYTE = 1024*1024; + var ATTACHMENT_SIZE_LIMIT = ONE_MEGABYTE; + this.showAttachment = function (ev, data) { this.trigger(document, events.mail.appendAttachment, data); this.renderAttachmentListView(data); @@ -50,15 +53,25 @@ define( this.renderAttachmentListView = function (data) { var currentHtml = this.select('attachmentListItem').html(); var item = this.buildAttachmentListItem(data); - this.select('attachmentListItem').html(currentHtml + item); + this.select('attachmentListItem').append(item); }; this.buildAttachmentListItem = function (attachment) { var attachmentData = {ident: attachment.ident, encoding: attachment.encoding, name: attachment.name, - size: attachment.size}; - return templates.compose.attachmentItem(attachmentData); + size: attachment.size, + removable: true}; + + var element = $(templates.compose.attachmentItem(attachmentData)); + var self = this; + element.find('i.remove-icon').bind('click', function(event) { + var element = $(this); + var ident = element.closest('li').attr('data-ident'); + self.trigger(document, events.mail.removeAttachment, {ident: ident}); + event.preventDefault(); + }); + return element; }; this.checkAttachmentSize = function(e, data) { @@ -89,8 +102,7 @@ define( self.trigger(document, events.mail.startUploadAttachment); }; - var ONE_MEGABYTE = 1000000; - if (data.originalFiles[0].size > ONE_MEGABYTE) { + if (data.originalFiles[0].size > ATTACHMENT_SIZE_LIMIT) { uploadErrors.push('Filesize is too big'); } if (uploadErrors.length > 0) { 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 88051f30..07a7e472 100644 --- a/web-ui/app/js/mail_view/ui/draft_box.js +++ b/web-ui/app/js/mail_view/ui/draft_box.js @@ -64,7 +64,15 @@ define( }, subject: mail.header.subject, body: body, - attachments: mail.attachments + attachments: this.convertToRemovableAttachments(mail.attachments) + }); + + var self = this; + this.$node.find('i.remove-icon').bind('click', function(event) { + var element = $(this); + var ident = element.closest('li').attr('data-ident'); + self.trigger(document, events.mail.removeAttachment, {ident: ident}); + event.preventDefault(); }); this.enableFloatlabel('input.floatlabel'); @@ -77,6 +85,13 @@ define( this.on(this.select('closeMailButton'), 'click', this.showNoMessageSelected); }; + this.convertToRemovableAttachments = function(attachments) { + return attachments.map(function(attachment) { + attachment.removable = true; + return attachment; + }); + }; + this.mailDeleted = function(event, data) { if (_.contains(_.pluck(data.mails, 'ident'), this.attr.ident)) { this.trigger(events.dispatchers.rightPane.openNoMessageSelected); diff --git a/web-ui/app/js/mail_view/ui/forward_box.js b/web-ui/app/js/mail_view/ui/forward_box.js index a1b8dc41..3d643b2f 100644 --- a/web-ui/app/js/mail_view/ui/forward_box.js +++ b/web-ui/app/js/mail_view/ui/forward_box.js @@ -46,14 +46,29 @@ define( subject: this.attr.subject, recipients: { to: [], cc: []}, body: viewHelper.quoteMail(mail), - attachments: mail.attachments + attachments: this.convertToRemovableAttachments(mail.attachments) }); + var self = this; + this.$node.find('i.remove-icon').bind('click', function(event) { + var element = $(this); + var ident = element.closest('li').attr('data-ident'); + self.trigger(document, events.mail.removeAttachment, {ident: ident}); + event.preventDefault(); + }); + this.on(this.select('subjectDisplay'), 'click', this.showSubjectInput); this.select('recipientsDisplay').hide(); this.select('recipientsFields').show(); }; + this.convertToRemovableAttachments = function(attachments) { + return attachments.map(function(attachment) { + attachment.removable = true; + return attachment; + }); + }; + this.showSubjectInput = function() { this.select('subjectDisplay').hide(); this.select('subjectInput').show(); diff --git a/web-ui/app/js/page/events.js b/web-ui/app/js/page/events.js index f6186d41..57dd346a 100644 --- a/web-ui/app/js/page/events.js +++ b/web-ui/app/js/page/events.js @@ -147,7 +147,8 @@ define(function () { uploadingAttachment: 'mail:uploading:attachment', startUploadAttachment: 'mail:start:upload:attachment', appendAttachment: 'mail:append:attachment', - resetAttachments: 'mail:reset:attachments' + resetAttachments: 'mail:reset:attachments', + removeAttachment: 'mail:remove:attachment' }, mails: { available: 'mails:available', diff --git a/web-ui/app/scss/_read.scss b/web-ui/app/scss/_read.scss index 93e33c27..1b6f8334 100644 --- a/web-ui/app/scss/_read.scss +++ b/web-ui/app/scss/_read.scss @@ -31,7 +31,7 @@ height: 27px; margin-right: 3px; } - + .full-view-header { display:inline-block; padding-top: 5px; @@ -81,14 +81,14 @@ border-radius: 2px; background-color: #F5F5F5; margin-bottom: 8px; - + a { color: $attachment_text; display: block; text-decoration: none; line-height: inherit; padding: 4px 5px; - + &:hover, &:focus { i.download-icon { color: lighten($attachment_icon, 15); @@ -104,6 +104,13 @@ right: 0; padding: 7px 10px; } + + i.remove-icon { + float: right; + padding-right: 5px; + padding-top: 7px; + color: #999; + } } } } @@ -154,5 +161,3 @@ } } } - - diff --git a/web-ui/app/templates/compose/attachment_item.hbs b/web-ui/app/templates/compose/attachment_item.hbs index a69f209e..6fefda2f 100644 --- a/web-ui/app/templates/compose/attachment_item.hbs +++ b/web-ui/app/templates/compose/attachment_item.hbs @@ -1,8 +1,11 @@ -<li> +<li data-ident="{{ this.ident }}"> <a href="/attachment/{{ this.ident }}?encoding={{ this.encoding }}&filename={{ this.name }}"> {{ this.name }} <span class="attachment-size">({{ formatSize this.size}})</span> {{#if received}} <i class="fa fa-arrow-down download-icon"></i> {{/if}} + {{#if removable}} + <i class="fa fa-close remove-icon"></i> + {{/if}} </a> </li> diff --git a/web-ui/app/templates/compose/attachments_list.hbs b/web-ui/app/templates/compose/attachments_list.hbs index 73113023..936db2c9 100644 --- a/web-ui/app/templates/compose/attachments_list.hbs +++ b/web-ui/app/templates/compose/attachments_list.hbs @@ -21,4 +21,3 @@ <br> </div> - diff --git a/web-ui/test/spec/mail_view/ui/attachment_list.spec.js b/web-ui/test/spec/mail_view/ui/attachment_list.spec.js index d0133bc5..20f82704 100644 --- a/web-ui/test/spec/mail_view/ui/attachment_list.spec.js +++ b/web-ui/test/spec/mail_view/ui/attachment_list.spec.js @@ -40,9 +40,10 @@ describeMixin('mail_view/ui/attachment_list', function () { }); describe('Upload files -- max file size -- ', function (){ + var ONE_MEGABYTE = 1024*1024; var submitFile = 'file not submitted', submitted = 'file submitted'; var mockSubmit = function (){ submitFile = submitted; }; - var largeAttachment = {originalFiles: [{size: 4500000}], submit: mockSubmit}; + var largeAttachment = {originalFiles: [{size: ONE_MEGABYTE+1}], submit: mockSubmit}; var dummyEvent = 'whatever, not used'; it('should show error messages on the dom, when uploading files larger than 1MB', function () { @@ -85,27 +86,12 @@ describeMixin('mail_view/ui/attachment_list', function () { expect(largeAttachment.submit).not.toHaveBeenCalled(); }); - it('should upload files smaller than 1MB', function () { - var smallAttachment = {originalFiles: [{size: 450}], submit: mockSubmit}; + it('should upload files less or equal 1MB', function () { + var smallAttachment = {originalFiles: [{size: ONE_MEGABYTE}], submit: mockSubmit}; this.component.checkAttachmentSize(dummyEvent, smallAttachment); expect(submitFile).toEqual(submitted); }); }); - - xit('should start uploading attachments', function () { - var stubAttachment = {ident: 'faked', name: 'haha.txt', size: 4500}; - var mockAjax = spyOn($, 'ajax').and.callFake(function (params) {params.success(stubAttachment);}); - var uploadedAttachment = spyOnEvent(document, Pixelated.events.mail.uploadedAttachment); - var uploading = spyOnEvent(document, Pixelated.events.mail.uploadingAttachment); - - $(document).trigger(Pixelated.events.mail.startUploadAttachment); - - expect(mockAjax).toHaveBeenCalled(); - expect(uploadedAttachment).toHaveBeenTriggeredOnAndWith(document, stubAttachment); - expect(uploading).toHaveBeenTriggeredOn(document); - }); - }); - }); |