Browse Source

:recycle: lute #120

Van 6 years ago
parent
commit
a514874d31
4 changed files with 24 additions and 53 deletions
  1. 2 2
      src/index.ts
  2. 0 34
      src/ts/markdown/lute.ts
  3. 17 10
      src/ts/markdown/md2html.ts
  4. 5 7
      src/ts/preview/index.ts

+ 2 - 2
src/index.ts

@@ -15,7 +15,7 @@ import {abcRender} from "./ts/markdown/abcRender";
 import {chartRender} from "./ts/markdown/chartRender";
 import {codeRender} from "./ts/markdown/codeRender";
 import {mathRender} from "./ts/markdown/mathRender";
-import {md2htmlByText, md2htmlByVditor} from "./ts/markdown/md2html";
+import {md2htmlByText} from "./ts/markdown/md2html";
 import {mermaidRender} from "./ts/markdown/mermaidRender";
 import {preview as vditorPreview} from "./ts/markdown/preview";
 import {Preview} from "./ts/preview/index";
@@ -153,7 +153,7 @@ class Vditor {
     }
 
     public getHTML() {
-        return md2htmlByVditor(this.vditor);
+        return md2htmlByText(getText(this.vditor.editor.element));
     }
 
     public tip(text: string, time?: number) {

+ 0 - 34
src/ts/markdown/lute.ts

@@ -1,34 +0,0 @@
-import {CDN_PATH} from "../constants";
-import {addScript} from "../util/addScript";
-
-declare const Go: new() => {
-    importObject: WebAssembly.WebAssemblyInstantiatedSource
-    run(instance: WebAssembly.Instance): void,
-};
-
-declare const WebAssembly: {
-    instantiateStreaming(
-        source: Response | Promise<Response>,
-        importObject?: WebAssembly.WebAssemblyInstantiatedSource,
-    ): Promise<WebAssembly.WebAssemblyInstantiatedSource>;
-    instantiate(bytes: BufferSource, importObject?: any): Promise<WebAssembly.WebAssemblyInstantiatedSource>;
-};
-
-export const initLute = async () => {
-    if (document.getElementById("vditorLuteJS")) {
-        return;
-    }
-
-    if (!WebAssembly.instantiateStreaming) { // polyfill
-        WebAssembly.instantiateStreaming = async (resp, importObject) => {
-            const bytes = await (await resp).arrayBuffer();
-            return await WebAssembly.instantiate(bytes, importObject);
-        };
-    }
-
-    await addScript(`${CDN_PATH}/vditor/dist/js/lute/wasm_exec.js`, "vditorLuteJS");
-    const go = new Go();
-    const result = await WebAssembly.instantiateStreaming(await fetch(`${CDN_PATH}/vditor/dist/js/lute/lute.wasm`),
-        go.importObject);
-    go.run(result.instance);
-};

+ 17 - 10
src/ts/markdown/md2html.ts

@@ -1,20 +1,27 @@
-import {getText} from "../editor/getText";
-import {initLute} from "./lute";
+import {addScript} from "../util/addScript";
+import {CDN_PATH} from "../constants";
 
 declare const lute: {
     markdown(text: string): string,
 };
 
-export const md2htmlByText = async (mdText: string) => {
-    if (typeof lute === "undefined") {
-        await initLute();
-    }
-    return lute.markdown(mdText);
+declare const Go: new() => {
+    importObject: WebAssembly.WebAssemblyInstantiatedSource
+    run(instance: WebAssembly.Instance): void,
 };
 
-export const md2htmlByVditor = async (vditor: IVditor) => {
+const initLute = async () => {
+    await addScript(`${CDN_PATH}/vditor/dist/js/lute/wasm_exec.js`, "vditorLuteJS");
+    const go = new Go();
+    const resp = await fetch(`${CDN_PATH}/vditor/dist/js/lute/lute.wasm`);
+    const bytes = await resp.arrayBuffer();
+    const result = await WebAssembly.instantiate(bytes, go.importObject);
+    go.run(result.instance);
+};
+
+export const md2htmlByText = async (mdText: string) => {
     if (typeof lute === "undefined") {
-        await initLute();
+         await initLute();
     }
-    return lute.markdown(getText(vditor.editor.element));
+    return await lute.markdown(mdText);
 };

+ 5 - 7
src/ts/preview/index.ts

@@ -4,7 +4,7 @@ import {abcRender} from "../markdown/abcRender";
 import {chartRender} from "../markdown/chartRender";
 import {codeRender} from "../markdown/codeRender";
 import {mathRender} from "../markdown/mathRender";
-import {md2htmlByVditor} from "../markdown/md2html";
+import {md2htmlByText} from "../markdown/md2html";
 import {mermaidRender} from "../markdown/mermaidRender";
 
 export class Preview {
@@ -40,7 +40,7 @@ export class Preview {
 
         clearTimeout(vditor.mdTimeoutId);
 
-        vditor.mdTimeoutId = window.setTimeout(() => {
+        vditor.mdTimeoutId = window.setTimeout(async () => {
             const renderStartTime = new Date().getTime();
             if (vditor.options.preview.url) {
                 const xhr = new XMLHttpRequest();
@@ -64,11 +64,9 @@ export class Preview {
                     markdownText: getText(vditor.editor.element),
                 }));
             } else {
-                md2htmlByVditor(vditor).then((html) => {
-                    this.element.children[0].innerHTML = html;
-                    this.afterRender(vditor, renderStartTime);
-                });
-
+                const html = await md2htmlByText(getText(vditor.editor.element));
+                this.element.children[0].innerHTML = html;
+                this.afterRender(vditor, renderStartTime);
             }
         }, vditor.options.preview.delay);
     }