diff --git a/README.md b/README.md
index 3941dec..d34434c 100644
--- a/README.md
+++ b/README.md
@@ -28,14 +28,18 @@
| Extension | MIME Type | Available |
| --------- | ---------------------------------------------------------------------------------- | --------- |
+| bmp | image/bmp | `✓` |
| doc | application/msword | `✓` |
| docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | `✓` |
+| htm | text/htm | `✓` |
+| html | text/html | `✓` |
| jpg | image/jpg | `✓` |
| jpeg | image/jpeg | `✓` |
| pdf | application/pdf | `✓` |
| png | image/png | `✓` |
| ppt | application/vnd.ms-powerpoint | `✓` |
| pptx | applicatiapplication/vnd.openxmlformats-officedocument.presentationml.presentation | `✓` |
+| tiff | image/tiff | `✓` |
| xls | application/vnd.ms-excel | `✓` |
| xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | `✓` |
diff --git a/src/index.tsx b/src/index.tsx
index a3bc225..4e6f445 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -3,6 +3,7 @@ import styled, { ThemeProvider } from "styled-components";
import { HeaderBar } from "./components/HeaderBar";
import { ProxyRenderer } from "./components/ProxyRenderer";
import BMPRenderer from "./plugins/bmp";
+import HTMLRenderer from "./plugins/html";
import ImageProxyRenderer from "./plugins/image";
import JPGRenderer from "./plugins/jpg";
import MSDocRenderer from "./plugins/msdoc";
@@ -68,6 +69,7 @@ export { DocViewerRenderers } from "./plugins";
export * from "./types";
export {
BMPRenderer,
+ HTMLRenderer,
ImageProxyRenderer,
JPGRenderer,
MSDocRenderer,
diff --git a/src/plugins/html/index.tsx b/src/plugins/html/index.tsx
new file mode 100644
index 0000000..1da2a87
--- /dev/null
+++ b/src/plugins/html/index.tsx
@@ -0,0 +1,49 @@
+import React, { useEffect } from "react";
+import styled from "styled-components";
+import { DocRenderer, IStyledProps } from "../../types";
+import { base64FileLoader } from "../../utils/fileLoaders";
+
+const HTMLRenderer: DocRenderer = ({ mainState: { currentDocument } }) => {
+ useEffect(() => {
+ const bodyBase64 =
+ currentDocument?.base64Data?.replace("data:text/html;base64,", "") || "";
+ const body: string = window.atob(bodyBase64);
+
+ let iframeCont = document.getElementById(
+ "html-body"
+ ) as HTMLIFrameElement | null;
+ let iframe = iframeCont?.contentWindow && iframeCont.contentWindow;
+ if (!iframe) return;
+
+ const iframeDoc = iframe.document;
+ iframeDoc.open();
+ iframeDoc.write(`${body}`);
+ iframeDoc.close();
+ }, []);
+
+ return (
+
+
+
+ );
+};
+
+export default HTMLRenderer;
+
+HTMLRenderer.fileTypes = ["htm", "html", "text/htm", "text/html"];
+HTMLRenderer.weight = 0;
+HTMLRenderer.fileLoader = base64FileLoader;
+
+const Container = styled.div`
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ padding: 0 30px;
+`;
+
+const BodyIFrame = styled.iframe`
+ height: 100%;
+ padding: 15px;
+ margin: 20px 0 20px 0;
+ border: 1px solid ${(props: IStyledProps) => props.theme.secondary};
+`;
diff --git a/src/plugins/index.ts b/src/plugins/index.ts
index 3eb4852..f49a300 100644
--- a/src/plugins/index.ts
+++ b/src/plugins/index.ts
@@ -1,4 +1,5 @@
import BMPRenderer from "./bmp";
+import HTMLRenderer from "./html";
import JPGRenderer from "./jpg";
import MSDocRenderer from "./msdoc";
import MSGRenderer from "./msg";
@@ -8,6 +9,7 @@ import TIFFRenderer from "./tiff";
export const DocViewerRenderers = [
BMPRenderer,
+ HTMLRenderer,
JPGRenderer,
MSDocRenderer,
MSGRenderer,
diff --git a/src/plugins/msg/index.tsx b/src/plugins/msg/index.tsx
index 4f5f31b..65c2896 100644
--- a/src/plugins/msg/index.tsx
+++ b/src/plugins/msg/index.tsx
@@ -14,6 +14,27 @@ const MSGRenderer: DocRenderer = ({ mainState: { currentDocument } }) => {
setFileData(_fd);
}, [currentDocument?.arrayBuffer]);
+ useEffect(() => {
+ if (!fileData || fileData.hasOwnProperty("error")) return;
+
+ let iframeCont = document.getElementById(
+ "msg-body"
+ ) as HTMLIFrameElement | null;
+ let iframe = iframeCont?.contentWindow && iframeCont.contentWindow;
+ if (!iframe) return;
+
+ const iframeDoc = iframe.document;
+
+ let body = (fileData as MSGFileData).body.replace(
+ /(\r\n|\n|\r)/gm,
+ "
"
+ );
+
+ iframeDoc.open();
+ iframeDoc.write(`${body}`);
+ iframeDoc.close();
+ }, [fileData]);
+
if (!fileData || fileData.hasOwnProperty("error")) {
return {(fileData as MSGErrorResult)?.error};
}
@@ -21,16 +42,15 @@ const MSGRenderer: DocRenderer = ({ mainState: { currentDocument } }) => {
let {
recipients,
subject,
- body,
senderEmail,
senderName,
} = fileData as MSGFileData;
- body = body.replace(/(\r\n|\n|\r)/gm, "
");
-
return (
- {subject}
+
+ {subject}
+
@@ -48,7 +68,7 @@ const MSGRenderer: DocRenderer = ({ mainState: { currentDocument } }) => {
-
+
);
};
@@ -72,6 +92,8 @@ MSGRenderer.weight = 0;
MSGRenderer.fileLoader = arrayBufferFileLoader;
const Container = styled.div`
+ display: flex;
+ flex-direction: column;
width: 100%;
padding: 0 30px;
`;
@@ -88,7 +110,8 @@ const RecipientContainer = styled.div`
border: 1px solid ${(props: IStyledProps) => props.theme.secondary};
`;
-const BodyContainer = styled.div`
+const BodyIFrame = styled.iframe`
+ height: 100%;
padding: 15px;
margin: 20px 0 20px 0;
border: 1px solid ${(props: IStyledProps) => props.theme.secondary};