From b06b794de750d972a9dff9165e203815b79c5b62 Mon Sep 17 00:00:00 2001 From: Alexandre Pretto Date: Thu, 8 Jan 2015 18:48:48 -0200 Subject: #157: mail api to return htmlBody and textPlainBody so the UI doesnt have to parse the multipart mails anymore --- web-ui/app/js/helpers/view_helper.js | 49 +++------------- web-ui/test/spec/helpers/view_helper.spec.js | 14 +---- web-ui/test/spec/services/model/mail.spec.js | 51 ----------------- web-ui/test/test_data.js | 83 ++++------------------------ 4 files changed, 21 insertions(+), 176 deletions(-) (limited to 'web-ui') diff --git a/web-ui/app/js/helpers/view_helper.js b/web-ui/app/js/helpers/view_helper.js index 72ced4af..48d9a9c7 100644 --- a/web-ui/app/js/helpers/view_helper.js +++ b/web-ui/app/js/helpers/view_helper.js @@ -31,52 +31,17 @@ define( }).join(' '); } - function addParagraphsToPlainText(plainTextBodyPart) { - return _.map(plainTextBodyPart.split('\n'), function (paragraph) { + function addParagraphsToPlainText(textPlainBody) { + return _.map(textPlainBody.split('\n'), function (paragraph) { return '

' + paragraph + '

'; }).join(''); } - function isQuotedPrintableBodyPart (bodyPart) { - return bodyPart.headers && - bodyPart.headers['Content-Transfer-Encoding'] && - bodyPart.headers['Content-Transfer-Encoding'] === 'quoted-printable'; - } - - function getHtmlContentType (mail) { - return _.find(mail.availableBodyPartsContentType(), function (contentType) { - return contentType.indexOf('text/html') >= 0; - }); - } - - function getSanitizedAndDecodedMailBody (bodyPart) { - var body; - - if (isQuotedPrintableBodyPart(bodyPart)) { - body = utf8.decode(quotedPrintable.decode(bodyPart.body)); - } else if (bodyPart.body) { - body = bodyPart.body; - } else { - body = bodyPart; - } - - return htmlWhitelister.sanitize(body, htmlWhitelister.tagPolicy); - } - function formatMailBody (mail) { - if (mail.isMailMultipartAlternative()) { - var htmlContentType; - - htmlContentType = getHtmlContentType(mail); - - if (htmlContentType) { - return $(getSanitizedAndDecodedMailBody(mail.getMailPartByContentType(htmlContentType))); - } - - return $(getSanitizedAndDecodedMailBody(addParagraphsToPlainText(mail.getMailMultiParts[0]))); - } - - return $(getSanitizedAndDecodedMailBody(addParagraphsToPlainText(mail.body))); + var body = mail.htmlBodyPart ? + htmlWhitelister.sanitize(mail.htmlBody, htmlWhitelister.tagPolicy) : + addParagraphsToPlainText(mail.textPlainBody) + return $(body) } function moveCaretToEnd(el) { @@ -125,7 +90,7 @@ define( } function quoteMail(mail) { - var quotedLines = _.map(mail.body.split('\n'), function (line) { + var quotedLines = _.map(mail.textPlainBody.split('\n'), function (line) { return '> ' + line; }); diff --git a/web-ui/test/spec/helpers/view_helper.spec.js b/web-ui/test/spec/helpers/view_helper.spec.js index 217ac890..3399baa8 100644 --- a/web-ui/test/spec/helpers/view_helper.spec.js +++ b/web-ui/test/spec/helpers/view_helper.spec.js @@ -11,7 +11,7 @@ define(['helpers/view_helper'], function (viewHelper) { describe('quote email', function() { it('should add > to body text', function() { - testData.rawMail.mail.body = 'First Line\nSecond Line'; + testData.rawMail.mail.textPlainBody = 'First Line\nSecond Line'; var quotedMail = viewHelper.quoteMail(testData.rawMail.mail); @@ -55,20 +55,10 @@ define(['helpers/view_helper'], function (viewHelper) { }); }); - it('formats the body of a multipart email', function () { - expect(viewHelper.formatMailBody(testData.parsedMail.html)).toContainHtml('

Hello everyone!

'); - }); - it('formats the body of a plain text email', function () { var formatedMail = $('
'); formatedMail.html(viewHelper.formatMailBody(testData.parsedMail.simpleTextPlain)); - expect(formatedMail).toContainHtml('

Hello Everyone

'); - }); - - it('decodes a quoted-printable email body', function () { - var result = viewHelper.formatMailBody(testData.parsedMail.htmlQuotedPrintable); - - expect(result).toContainHtml('

Hello everyone!

'); + expect(formatedMail).toContainHtml('

HNello Everyone

'); }); it('move caret to the end of text after 1ms', function () { diff --git a/web-ui/test/spec/services/model/mail.spec.js b/web-ui/test/spec/services/model/mail.spec.js index 35c4bc9b..f9d076f0 100644 --- a/web-ui/test/spec/services/model/mail.spec.js +++ b/web-ui/test/spec/services/model/mail.spec.js @@ -34,57 +34,6 @@ require(['services/model/mail'], function (Mail) { }); }); - describe('multipart email', function () { - var parsedMultipartMail; - - beforeEach(function () { - parsedMultipartMail = Mail.create(Pixelated.testData().rawMail.multipart); - }); - - it('parses the mail as multipart/alternative', function () { - expect(parsedMultipartMail.isMailMultipartAlternative()).toBe(true); - }); - - it('lists the correct available content-type of the parts', function () { - expect(parsedMultipartMail.availableBodyPartsContentType()).toEqual(['text/plain;', 'text/html;']); - }); - - it('gets the list of parts', function () { - var expectedParts = [ - { - headers: { 'Content-Type': 'text/plain;' }, - body: 'Hello everyone!\n' - }, - { - headers: { - 'Content-Type': 'text/html;', - 'Content-Transfer-Encoding': 'quoted-printable' - }, - body: '

Hello everyone!

\n' - } - ]; - - expect(parsedMultipartMail.getMailMultiParts()).toEqual(expectedParts); - }); - - it('gets the text/plain body by the content-type', function () { - expect(parsedMultipartMail.getMailPartByContentType('text/plain;')).toEqual( - { - headers: { 'Content-Type': 'text/plain;' }, - body: 'Hello everyone!\n' - }); - }); - - it('parses the content type of a text/html body', function () { - expect(parsedMultipartMail.getMailPartByContentType('text/html;')).toEqual({ - headers: { - 'Content-Type': 'text/html;', - 'Content-Transfer-Encoding': 'quoted-printable' - }, - body: '

Hello everyone!

\n' - }); - }); - }); }); }); }); diff --git a/web-ui/test/test_data.js b/web-ui/test/test_data.js index 20b6ee0f..64ec60a7 100644 --- a/web-ui/test/test_data.js +++ b/web-ui/test/test_data.js @@ -12,7 +12,7 @@ define(function() { ident:2048, tags:['gang_family','garden','nailartaddicts','inbox'], status:[], - body: 'Porro quam minus. Doloribus odio vel. Placeat alias sed est assumenda qui esse. Tenetur tempora deserunt est consequatur ducimus laborum. Velit dolor voluptatibus.\n\nRerum repellendus tempore. Aliquam dolores laudantium amet et dolor voluptas. Quod eos magni mollitia et ex. Corrupti quis reprehenderit quasi. Quam cum nobis voluptas accusamus quisquam ut asperiores.\n\nFacilis dicta mollitia non molestiae. Eligendi perspiciatis aut qui eos qui. Laborum cumque odit velit nobis. Cumque quo impedit dignissimos quia.', + textPlainBody: 'Porro quam minus. Doloribus odio vel. Placeat alias sed est assumenda qui esse. Tenetur tempora deserunt est consequatur ducimus laborum. Velit dolor voluptatibus.\n\nRerum repellendus tempore. Aliquam dolores laudantium amet et dolor voluptas. Quod eos magni mollitia et ex. Corrupti quis reprehenderit quasi. Quam cum nobis voluptas accusamus quisquam ut asperiores.\n\nFacilis dicta mollitia non molestiae. Eligendi perspiciatis aut qui eos qui. Laborum cumque odit velit nobis. Cumque quo impedit dignissimos quia.', security_casing: { locks: [], imprints: [] @@ -31,7 +31,7 @@ define(function() { 'ident':9359, 'tags':['photography','sky'], 'status':['read'], - 'body':'Illum eos nihil commodi voluptas. Velit consequatur odio quibusdam. Beatae aliquam hic quos.', + textPlainBody:'Illum eos nihil commodi voluptas. Velit consequatur odio quibusdam. Beatae aliquam hic quos.', 'mailbox': 'SENT', replying: { single: 'laurel@hamil.info', @@ -47,7 +47,7 @@ define(function() { 'ident':9360, 'tags':['photography','sky'], 'status':['read'], - 'body':'Illum eos nihil commodi voluptas. Velit consequatur odio quibusdam. Beatae aliquam hic quos.', + textPlainBody:'Illum eos nihil commodi voluptas. Velit consequatur odio quibusdam. Beatae aliquam hic quos.', 'mailbox': 'DRAFTS', replying: { single: 'afton_braun@botsford.biz', @@ -63,7 +63,7 @@ define(function() { 'ident':9360, 'tags':['photography','sky'], 'status':['read'], - 'body':'Illum eos nihil commodi voluptas. Velit consequatur odio quibusdam. Beatae aliquam hic quos.', + textPlainBody:'Illum eos nihil commodi voluptas. Velit consequatur odio quibusdam. Beatae aliquam hic quos.', 'mailbox': 'TRASH', replying: { single: 'afton_braun@botsford.biz', @@ -79,7 +79,7 @@ define(function() { 'ident':242, 'tags':['garden','instalovers','popularpic'], 'status':['read'], - 'body':'Sed est neque tempore. Alias officiis pariatur ullam porro corporis. Tempore eum quia placeat. Sapiente fuga cum.', + textPlainBody: 'Sed est neque tempore. Alias officiis pariatur ullam porro corporis. Tempore eum quia placeat. Sapiente fuga cum.', replying: { single: 'afton_braun@botsford.biz', all: { @@ -96,6 +96,7 @@ define(function() { 'tags':['garden','instalovers','popularpic'], 'status':['read'], 'body':'Sed est neque tempore. Alias officiis pariatur ullam porro corporis. Tempore eum quia placeat. Sapiente fuga cum.', + textPlainBody: 'body', replying: { single: 'cleve_jaskolski@schimmelhirthe.net', all: { @@ -111,7 +112,7 @@ define(function() { 'ident':242, 'tags':['garden','instalovers','popularpic'], 'status':['read'], - 'body':'Sed est neque tempore. Alias officiis pariatur ullam porro corporis. Tempore eum quia placeat. Sapiente fuga cum.', + textPlainBody:'Sed est neque tempore. Alias officiis pariatur ullam porro corporis. Tempore eum quia placeat. Sapiente fuga cum.', replying: { single: 'cleve_jaskolski@schimmelhirthe.net', all: { @@ -122,37 +123,6 @@ define(function() { }; - var rawMultipartMail = { - header: { - to:'multipart@multipart.info', - from:'laurel@hamill.info', - subject:'multipart email with text/plain and text/html', - content_type: 'multipart/alternative; boundary=asdfghjkl', - date:'2014-06-04T14:41:13-03:00' - }, - ident: 11, - tags:['multipart','inbox'], - status:[], - body: '--asdfghjkl\n' + - 'Content-Type: text/plain;\n' + - '\n' + - 'Hello everyone!\n' + - '--asdfghjkl\n' + - 'Content-Type: text/html;\n' + - 'Content-Transfer-Encoding: quoted-printable\n' + - '\n' + - '

Hello everyone!

\n' + - '--asdfghjkl--\n', - replying: { - single: 'laurel@hamil.info', - all: { - 'to-field': ['laurel@hamil.info'], - 'cc-field': [] - } - } - - }; - var simpleTextPlainMail = { header: { to:'jed_waelchi@cummerata.info', @@ -164,7 +134,7 @@ define(function() { tags:['textplain'], mailbox: ['inbox'], status:[], - body: 'Hello Everyone', + textPlainBody: 'Hello Everyone', isSentMail: function() { return false; }, isDraftMail: function() { return false; }, replyToAddress: function() { return { to: ['laurel@hamill.info'], cc: [] }; }, @@ -185,7 +155,8 @@ define(function() { ident:2, tags:['html','noencoding','inbox'], status:[], - body: '--asdfghjkl\nContent-Type: text/html; charset=utf8\n\n\n

Hello everyone!

\n--asdfghjkl--\n', + textPlainBody: 'Hello everyone!', + htmlBody: '\n

Hello everyone!

', isSentMail: function() { return false; }, isDraftMail: function() { return false; }, replyToAddress: function() { return { to: ['laurel@hamill.info'], cc: [] }; }, @@ -200,34 +171,6 @@ define(function() { } }; - var htmlQuotedPrintableMail = { - header: { - to:'jed_waelchi@cummerata.info', - from:'laurel@hamill.info', - subject:'Velit aut tempora animi ut nulla esse.', - content_type: 'multipart/alternative; boundary=asdfghjkl', - date:'2014-06-04T14:41:13-03:00' - }, - ident:3, - tags:['html','quotedprintable','inbox'], - status:[], - body: '--asdfghjkl\nContent-Type: text/html; charset=utf8\nContent-Transfer-Encoding: quoted-printable\n\n\n

Hello everyone!

\n--asdfghjkl--\n', - isSentMail: function() { return false; }, - isDraftMail: function() { return false; }, - replyToAddress: function() { return { to: ['laurel@hamill.info'], cc: [] }; }, - replyToAllAddress: function() { return { to: ['laurel@hamill.info'], cc: [] }; }, - isMailMultipartAlternative: function () { return true; }, - availableBodyPartsContentType: function () { return ['text/html']; }, - getMailPartByContentType: function () { - return { - headers: { - 'Content-Type': 'text/html; charset=utf-8', - 'Content-Transfer-Encoding': 'quoted-printable'}, - body: '

Hello everyone!

' - }; - } - }; - var testData = { rawMail: { mail: rawMail, @@ -236,13 +179,11 @@ define(function() { trash: rawMailInTrash, received: rawReceivedMail, receivedWithCC: rawReceivedWithCCMail, - rawMailWithMultipleTo: rawMailWithMultipleTo, - multipart: rawMultipartMail + rawMailWithMultipleTo: rawMailWithMultipleTo }, parsedMail: { simpleTextPlain: simpleTextPlainMail, - html: htmlNoEncodingMail, - htmlQuotedPrintable: htmlQuotedPrintableMail + html: htmlNoEncodingMail } }; -- cgit v1.2.3