diff --git a/package-lock.json b/package-lock.json
index 1e46830..77ccaf4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "mailchain-web",
- "version": "0.0.9",
+ "version": "0.0.11",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2061,9 +2061,9 @@
}
},
"acorn": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz",
- "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw=="
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
},
"adm-zip": {
"version": "0.4.13",
diff --git a/package.json b/package.json
index 4deeb8b..7f1dbcc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "mailchain-web",
- "version": "0.0.9",
+ "version": "0.0.11",
"scripts": {
"ng": "ng",
"start": "ng serve",
@@ -60,4 +60,4 @@
"tslint": "~5.11.0",
"typescript": "~3.5.3"
}
-}
\ No newline at end of file
+}
diff --git a/src/app/inbox/inbox-compose/inbox-compose.component.ts b/src/app/inbox/inbox-compose/inbox-compose.component.ts
index 61dafd0..266e239 100644
--- a/src/app/inbox/inbox-compose/inbox-compose.component.ts
+++ b/src/app/inbox/inbox-compose/inbox-compose.component.ts
@@ -216,7 +216,7 @@ export class InboxComposeComponent implements OnInit {
let returnObs
if (this.mailchainService.validateEnsName(value)) {
- returnObs = this.nameserviceService.resolveName(
+ returnObs = await this.nameserviceService.resolveName(
this.currentProtocol,
this.currentNetwork,
value
diff --git a/src/app/inbox/inbox-message/inbox-message.component.html b/src/app/inbox/inbox-message/inbox-message.component.html
index 06a25c9..982b5c8 100644
--- a/src/app/inbox/inbox-message/inbox-message.component.html
+++ b/src/app/inbox/inbox-message/inbox-message.component.html
@@ -67,17 +67,7 @@
{{currentMessage.subject}}
-
-
-
-
-
-
-
+
diff --git a/src/app/inbox/inbox-message/inbox-message.component.scss b/src/app/inbox/inbox-message/inbox-message.component.scss
index e30fc5b..78bf24f 100644
--- a/src/app/inbox/inbox-message/inbox-message.component.scss
+++ b/src/app/inbox/inbox-message/inbox-message.component.scss
@@ -8,6 +8,14 @@
font-family: 'Courier New', Courier, monospace;
}
+.message-body-container {
+ display: contents;
+}
+
+.message-body-html {
+ flex-grow: 1; border: none; margin: 0; padding: 0;
+}
+
.message-identicon {
width: 35px;
height: 35px;
diff --git a/src/app/inbox/inbox-message/inbox-message.component.spec.ts b/src/app/inbox/inbox-message/inbox-message.component.spec.ts
index fc51a50..c1270f5 100644
--- a/src/app/inbox/inbox-message/inbox-message.component.spec.ts
+++ b/src/app/inbox/inbox-message/inbox-message.component.spec.ts
@@ -124,4 +124,84 @@ describe('InboxMessageComponent', () => {
});
});
+ describe('getViewForContentType', () => {
+ it('should call getViewForContentType when the content-type is plaintext ', () => {
+ spyOn(component, 'getViewForContentType')
+
+ component.currentMessage["headers"]["content-type"] = 'text/plain; charset="UTF-8"'
+ component.ngOnInit()
+ expect(component.getViewForContentType).toHaveBeenCalled()
+ })
+
+ it('should call getViewForContentType when the content-type is text/plain; charset="UTF-8"', () => {
+ spyOn(component, 'getViewForContentType')
+
+ component.currentMessage["headers"]["content-type"] = 'text/plain; charset="UTF-8"'
+ component.ngOnInit()
+ expect(component.getViewForContentType).toHaveBeenCalled()
+ })
+
+ it('should call getViewForContentType when the content-type is unknown', () => {
+ spyOn(component, 'getViewForContentType')
+
+ component.currentMessage["headers"]["content-type"] = 'unknown'
+ component.ngOnInit()
+ expect(component.getViewForContentType).toHaveBeenCalled()
+ })
+ })
+
+ describe('addMessageText', () => {
+ it('should call addMessageText when the content-type is plaintext ', () => {
+ spyOn(component, 'addMessageText')
+
+ component.currentMessage["headers"]["content-type"] = 'text/plain; charset="UTF-8"'
+ component.ngOnInit()
+ expect(component.addMessageText).toHaveBeenCalled()
+ })
+
+ it('should NOT call addMessageText when the content-type is text/html; charset="UTF-8" ', () => {
+ spyOn(component, 'addMessageText')
+
+ component.currentMessage["headers"]["content-type"] = 'text/html; charset="UTF-8"'
+ component.ngOnInit()
+ expect(component.addMessageText).not.toHaveBeenCalled()
+ })
+
+ it('should call addMessageText when the content-type is unknown ', () => {
+ spyOn(component, 'addMessageText')
+
+ component.currentMessage["headers"]["content-type"] = 'unknown'
+ component.ngOnInit()
+ expect(component.addMessageText).toHaveBeenCalled()
+ })
+
+ })
+ describe('addMessageIframe', () => {
+ it('should NOT call addMessageIframe when the content-type is plaintext ', () => {
+ spyOn(component, 'addMessageIframe')
+
+ component.currentMessage["headers"]["content-type"] = 'text/plain; charset="UTF-8"'
+ component.ngOnInit()
+ expect(component.addMessageIframe).not.toHaveBeenCalled()
+ })
+
+ it('should call addMessageIframe when the content-type is text/html; charset="UTF-8" ', () => {
+ spyOn(component, 'addMessageIframe')
+
+ component.currentMessage["headers"]["content-type"] = 'text/html; charset="UTF-8"'
+ component.ngOnInit()
+ expect(component.addMessageIframe).toHaveBeenCalled()
+ })
+
+ it('should NOT call addMessageIframe when the content-type is unknown ', () => {
+ spyOn(component, 'addMessageIframe')
+
+ component.currentMessage["headers"]["content-type"] = 'unknown'
+ component.ngOnInit()
+ expect(component.addMessageIframe).not.toHaveBeenCalled()
+ })
+
+ })
+
+
});
diff --git a/src/app/inbox/inbox-message/inbox-message.component.ts b/src/app/inbox/inbox-message/inbox-message.component.ts
index 54416c4..9f3d89a 100644
--- a/src/app/inbox/inbox-message/inbox-message.component.ts
+++ b/src/app/inbox/inbox-message/inbox-message.component.ts
@@ -18,7 +18,6 @@ export class InboxMessageComponent implements OnInit {
@Output() replyToMessage = new EventEmitter();
public messageNameRecords = {}
- public viewForContentType = "plaintext"
constructor(
private nameserviceService: NameserviceService,
@@ -33,7 +32,7 @@ export class InboxMessageComponent implements OnInit {
ngOnInit() {
this.resolveNamesFromMessage()
- this.viewForContentType = this.getViewForContentType()
+ this.getViewForContentType()
}
/**
@@ -86,9 +85,49 @@ export class InboxMessageComponent implements OnInit {
/**
* getViewForContentType: Returns correct view for content-type
*/
- private getViewForContentType() {
+ public getViewForContentType() {
let ct = this.currentMessage.headers["content-type"]
- return this.mailchainService.getContentTypeForView(ct)
+
+ switch (ct) {
+ case 'plaintext':
+ this.addMessageText()
+ break;
+ case 'text/html; charset="UTF-8"':
+ this.addMessageIframe()
+ break;
+ default:
+ this.addMessageText()
+ break;
+ }
+ }
+
+ /** addMessageIframe: Creates iframe containing message and adds it to message-frame */
+ public addMessageIframe() {
+ var messageFrame = document.getElementById('message-frame')
+
+ var ifrm = document.createElement("iframe");
+ ifrm.setAttribute("srcdoc", this.currentMessage.body);
+ ifrm.setAttribute("frameborder", "0");
+ ifrm.style.width = "100%";
+ ifrm.style.height = "100%";
+ ifrm.classList.add("message-body-html")
+
+ messageFrame.appendChild(ifrm);
+ }
+
+ /** Creates message div & pre containing message and adds it to message-frame */
+ public addMessageText() {
+ var messageFrame = document.getElementById('message-frame')
+
+ var divMessage = document.createElement('div')
+ divMessage.classList.add("message-body")
+
+ var preMessage = document.createElement('pre')
+ divMessage.classList.add("pre-inherit")
+ divMessage.innerText = this.currentMessage.body
+
+ divMessage.appendChild(preMessage)
+ messageFrame.appendChild(divMessage)
}
}
diff --git a/src/app/services/mailchain/mailchain.service.spec.ts b/src/app/services/mailchain/mailchain.service.spec.ts
index 22d5183..655ecc1 100644
--- a/src/app/services/mailchain/mailchain.service.spec.ts
+++ b/src/app/services/mailchain/mailchain.service.spec.ts
@@ -81,6 +81,14 @@ describe('MailchainService', () => {
expect(response).toEqual(ethereumAccountAddress)
});
+
+ it('should return a blank string if the Mailchain address is invalid', () => {
+ const mailchainAddress = "<0x@ropsten.ethereum>"
+
+ let response = mailchainService.parseAddressFromMailchain(mailchainAddress)
+
+ expect(response).toEqual('')
+ });
})
describe('dedupeMessagesByIds', () => {
diff --git a/src/app/services/mailchain/mailchain.service.ts b/src/app/services/mailchain/mailchain.service.ts
index c8ecf50..8694b17 100644
--- a/src/app/services/mailchain/mailchain.service.ts
+++ b/src/app/services/mailchain/mailchain.service.ts
@@ -50,6 +50,8 @@ export class MailchainService {
var regexMailAddr = new RegExp('<0x[0-9a-fA-Z]{40}[@].+>$');
if (regexMailAddr.test(address)) {
return address.substr(1, address.indexOf('@') - 1);
+ } else {
+ return ''
}
}
@@ -175,7 +177,7 @@ export class MailchainService {
* see tests for conditions
*/
public validateEnsName(value) {
- let regex = new RegExp('^([0-9a-zA-Z][0-9a-zA-Z\-]{2,}[\.]){1,}[a-zA-Z]{2,}$')
+ let regex = new RegExp('^([0-9a-zA-Z]{1,}[0-9a-zA-Z\-]{0,}[\.]){1,}[a-zA-Z]{2,}$')
return regex.test(value)
};