Skip to content

Commit

Permalink
Added simple render markdown api, fixed css load order
Browse files Browse the repository at this point in the history
  • Loading branch information
KosmosisDire committed Jan 29, 2024
1 parent 04d0397 commit 8a3f29b
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 15 deletions.
15 changes: 14 additions & 1 deletion scripts/html-generation/asset-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,20 @@ export class AssetHandler
// remove duplicates
downloadAssets = downloadAssets.filter((asset, index, self) => self.findIndex((t) => t.relativeDownloadPath.asString == asset.relativeDownloadPath.asString) === index);

// downloadAssets.sort((a, b) => a.loadPriority - b.loadPriority);
function loadMethodToPriority(loadMethod: LoadMethod): number
{
switch (loadMethod)
{
case LoadMethod.Defer:
return 0;
case LoadMethod.Default:
return 2;
case LoadMethod.Async:
return 3;
}
}

downloadAssets.sort((a, b) => loadMethodToPriority(b.loadMethod) - loadMethodToPriority(a.loadMethod));
return downloadAssets;
}

Expand Down
103 changes: 90 additions & 13 deletions scripts/html-generation/markdown-renderer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Component, Notice, WorkspaceLeaf, MarkdownRenderer as ObsidianRenderer, MarkdownPreviewView, loadMermaid, TFile } from "obsidian";
import { Component, Notice, WorkspaceLeaf, MarkdownRenderer as ObsidianRenderer, MarkdownPreviewView, loadMermaid, TFile, MarkdownView } from "obsidian";
import { Utils } from "scripts/utils/utils";
import { AssetHandler } from "./asset-handler";
import { TabManager } from "scripts/utils/tab-manager";
Expand Down Expand Up @@ -40,11 +40,11 @@ export namespace MarkdownRenderer
return false;
}

function failRender(file: TFile, message: any): undefined
function failRender(file: TFile | undefined, message: any): undefined
{
if (checkCancelled()) return undefined;

RenderLog.error(message, `Rendering ${file.path} failed: `);
RenderLog.error(message, `Rendering ${file?.path ?? " custom markdown "} failed: `);
return;
}

Expand Down Expand Up @@ -106,7 +106,80 @@ export namespace MarkdownRenderer
return {contentEl: html, viewType: viewType};
}

export async function renderMarkdownView(preview: MarkdownPreviewView, container: HTMLElement): Promise<HTMLElement | undefined>
export async function renderMarkdownInsert(markdown: string, container: HTMLElement, addMarkdownContainer: boolean = true): Promise<HTMLElement | undefined>
{
let loneFile = !batchStarted;
if (loneFile)
{
RenderLog.log("Exporting single file, starting batch");
await MarkdownRenderer.beginBatch();
}

let success = await Utils.waitUntil(() => renderLeaf != undefined || checkCancelled(), 2000, 1);
if (!success || !renderLeaf) return failRender(undefined, "Failed to get leaf for rendering!");


let view = new MarkdownView(renderLeaf);
renderLeaf.view = view;

try
{
view.setViewData(markdown, true);
}
catch (e)
{
return failRender(undefined, e);
}


let html: HTMLElement | undefined;
let viewType = view.getViewType();

// @ts-ignore
let preview = view.previewMode;
html = await renderMarkdownView(preview, container, addMarkdownContainer);

if(checkCancelled()) return undefined;
if (!html) return failRender(undefined, "Failed to render file!");

await postProcessHTML(html);

if (loneFile) MarkdownRenderer.endBatch();

return html;
}

export async function renderMarkdown(markdown: string, options: {container: HTMLElement, addMarkdownContainer: boolean} | undefined): Promise<string | HTMLElement>
{
let container = options?.container;
let internalContainer = false;
if (!container)
{
container = document.createElement("div");
container.style.display = "none";
document.body.appendChild(container);
internalContainer = true;
}

let html = await renderMarkdownInsert(markdown, container, options?.addMarkdownContainer ?? false);
if (!html) return "";

if (!options?.addMarkdownContainer)
{
html.querySelectorAll(".mod-header, .mod-footer").forEach((e: HTMLElement) => e.remove());
}

if (internalContainer)
{
let text = html.innerHTML;
container.remove();
return text;
}

return html;
}

export async function renderMarkdownView(preview: MarkdownPreviewView, container: HTMLElement, addMarkdownContainer: boolean = true): Promise<HTMLElement | undefined>
{
// @ts-ignore
let renderer = preview.renderer;
Expand All @@ -122,12 +195,18 @@ export namespace MarkdownRenderer

let sections = renderer.sections as {"rendered": boolean, "height": number, "computed": boolean, "lines": number, "lineStart": number, "lineEnd": number, "used": boolean, "highlightRanges": number, "level": number, "headingCollapsed": boolean, "shown": boolean, "usesFrontMatter": boolean, "html": string, "el": HTMLElement}[];

let viewEl = document.body.createDiv({ cls: "markdown-preview-view markdown-rendered" });
let sizerEl = viewEl.createDiv({ cls: "markdown-preview-sizer markdown-preview-section" });
let pusherEl = sizerEl.createDiv({ cls: "markdown-preview-pusher" });
pusherEl.style.height = "0.1px";
pusherEl.style.marginBottom = "0px";
pusherEl.style.width = "1px";
let sizerEl = container;
let viewEl = container;

if (addMarkdownContainer)
{
viewEl = document.body.createDiv({ cls: "markdown-preview-view markdown-rendered" });
sizerEl = viewEl.createDiv({ cls: "markdown-preview-sizer markdown-preview-section" });
let pusherEl = sizerEl.createDiv({ cls: "markdown-preview-pusher" });
pusherEl.style.height = "0.1px";
pusherEl.style.marginBottom = "0px";
pusherEl.style.width = "1px";
}

// @ts-ignore
let promises: Promise<any>[] = [];
Expand Down Expand Up @@ -188,8 +267,7 @@ export namespace MarkdownRenderer
sizerEl.appendChild(section.el);
}

container.appendChild(viewEl);
// await AssetHandler.mathjaxStyles.load();
if (addMarkdownContainer) container.appendChild(viewEl);

return viewEl;
}
Expand Down Expand Up @@ -513,7 +591,6 @@ export namespace MarkdownRenderer
}
}


export async function beginBatch()
{
if(batchStarted)
Expand Down
2 changes: 2 additions & 0 deletions scripts/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ import { HTMLExporter } from './exporter';
import { Path } from './utils/path';
import { RenderLog } from './html-generation/render-log';
import { ExportModal } from './settings/export-modal';
import { MarkdownRenderer } from './html-generation/markdown-renderer';

export default class HTMLExportPlugin extends Plugin
{
static plugin: HTMLExportPlugin;
static updateInfo: {updateAvailable: boolean, latestVersion: string, currentVersion: string, updateNote: string} = {updateAvailable: false, latestVersion: "0", currentVersion: "0", updateNote: ""};
static pluginVersion: string = "0.0.0";
public markdownRenderer = MarkdownRenderer;

async onload()
{
Expand Down
2 changes: 1 addition & 1 deletion scripts/objects/webpage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,7 @@ export class Webpage
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes, minimum-scale=1.0, maximum-scale=5.0">
<meta charset="UTF-8">
`;

head += `\n${AssetHandler.deferredCSS.getHTMLInclude()}\n`;
head += `\n${AssetHandler.deferredJS.getHTMLInclude()}\n`;

Expand Down

0 comments on commit 8a3f29b

Please sign in to comment.