summaryrefslogtreecommitdiff
path: root/web-ui
diff options
context:
space:
mode:
authorAlexandre Pretto <anunes@thoughtworks.com>2015-01-08 18:48:48 -0200
committerPixpoa pairing <pixpoapairing@pixelated-project.org>2015-01-08 18:53:40 -0200
commitb06b794de750d972a9dff9165e203815b79c5b62 (patch)
treeb34414d27dff67ce94c7c15f419f25b9dcfae0d1 /web-ui
parent266b2f10f848902b31e0dfd05696dc2f5618bf2e (diff)
#157: mail api to return htmlBody and textPlainBody so the UI doesnt have to parse the multipart mails anymore
Diffstat (limited to 'web-ui')
-rw-r--r--web-ui/app/js/helpers/view_helper.js49
-rw-r--r--web-ui/test/spec/helpers/view_helper.spec.js14
-rw-r--r--web-ui/test/spec/services/model/mail.spec.js51
-rw-r--r--web-ui/test/test_data.js83
4 files changed, 21 insertions, 176 deletions
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 '<p>' + paragraph + '</p>';
}).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('<p>Hello everyone!</p>');
- });
-
it('formats the body of a plain text email', function () {
var formatedMail = $('<div></div>');
formatedMail.html(viewHelper.formatMailBody(testData.parsedMail.simpleTextPlain));
- expect(formatedMail).toContainHtml('<p>Hello Everyone</p>');
- });
-
- it('decodes a quoted-printable email body', function () {
- var result = viewHelper.formatMailBody(testData.parsedMail.htmlQuotedPrintable);
-
- expect(result).toContainHtml('<p style="border: 5px;">Hello everyone!</p>');
+ expect(formatedMail).toContainHtml('<p>HNello Everyone</p>');
});
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: '<p><b>Hello everyone!</b></p>\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: '<p><b>Hello everyone!</b></p>\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' +
- '<p><b>Hello everyone!</b></p>\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<DOCTYPE html>\n<body> <div> <p>Hello everyone!</p> </div> </body>\n--asdfghjkl--\n',
+ textPlainBody: 'Hello everyone!',
+ htmlBody: '<DOCTYPE html>\n<body> <div> <p>Hello everyone!</p> </div> </body>',
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<DOCTYPE html>\n<body> <div style=3D"border: 5px;"> <p>Hello everyone!</p> </div> </body>\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: '<!DOCTYPE html> <body> <div> <p style=3D"border: 5px;">Hello everyone!</p> </div> </body>'
- };
- }
- };
-
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
}
};