Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions src/frontend/main/website.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,16 +298,25 @@ export class ObsidianWebsite {
public async loadURL(url: string, pushState: boolean = true): Promise<ObsidianDocument | undefined> {
const header = LinkHandler.getHashFromURL(url);
const query = LinkHandler.getQueryFromURL(url);
url = LinkHandler.getPathnameFromURL(url);
console.log("Loading URL", url, header, query);
const pathName = LinkHandler.getPathnameFromURL(url);
console.log("Loading URL", url, pathName, header, query);

if (query && query.startsWith("query=")) {
this.search?.searchParseFilters(query.substring(6));
return;
}

// if this is an anchor link, try to resolve with standard behavior first
if ( url.startsWith('#') ) {
const target = document.querySelector(url);
if ( target ) {
target?.scrollIntoView( { behavior: "smooth", block: 'start', inline: 'nearest' });
return this.document
}
}

// if this document is already loaded
if (this.document.pathname == url) {
if (this.document.pathname == pathName) {
if (header) this.document.scrollToHeader(header);
else {
new Notice("This page is already loaded.");
Expand All @@ -316,14 +325,14 @@ export class ObsidianWebsite {
return this.document;
}

const data = ObsidianSite.getWebpageData(url) as WebpageData;
const data = ObsidianSite.getWebpageData(pathName) as WebpageData;
if (!data) {
new Notice("This page does not exist yet.");
console.warn("Page does not exist", url);
return undefined;
}

const page = await new ObsidianDocument(url).load();
const page = await new ObsidianDocument(pathName).load();

if (!page)
{
Expand Down
39 changes: 35 additions & 4 deletions src/plugin/render-api/render-api.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { MarkdownRendererOptions } from "./api-options";
import { Component, Notice, WorkspaceLeaf, MarkdownRenderer as ObsidianRenderer, MarkdownPreviewView, loadMermaid, TFile, MarkdownView, View, MarkdownPreviewRenderer, TAbstractFile, TFolder, Setting } from "obsidian";
import { BlockCache, Component, Notice, WorkspaceLeaf, MarkdownRenderer as ObsidianRenderer, MarkdownPreviewView, loadMermaid, TFile, MarkdownView, View, MarkdownPreviewRenderer, TAbstractFile, TFolder, Setting } from "obsidian";
import { TabManager } from "src/plugin/utils/tab-manager";
import * as electron from 'electron';
import { Settings, SettingsPage } from "src/plugin/settings/settings";
Expand Down Expand Up @@ -186,11 +186,37 @@ export namespace _MarkdownRendererInternal {

const view = renderLeaf.view;
const viewType = view.getViewType();
// @ts-ignore
const preview = view.previewMode;
let originalMarkdown = ''

switch (viewType) {
case "markdown":
// @ts-ignore
const preview = view.previewMode;
// Add block link support
const fileCache = app.metadataCache.getFileCache(file);
originalMarkdown = preview.view.data;
if (fileCache?.blocks)
{
let modifiedMarkdown = originalMarkdown;
let lines = modifiedMarkdown.split("\n");
// for every block cache, inject a span with an ID for anchor linking
for (const blockId in fileCache.blocks)
{
const block: BlockCache = fileCache.blocks[blockId];
const line = block.position.end.line;

const regex = new RegExp(`\\s\\^${blockId}$`);
if (lines[line] && lines[line].match(regex))
{
lines[line] = lines[line].replace(regex, "");
lines[block.position.start.line] = `<span class="blockid-target" id="blockid-${blockId}"></span>` + lines[block.position.start.line];
}
}
modifiedMarkdown = lines.join("\n");
preview.view.setViewData(modifiedMarkdown, true)
preview.view.save()
}

html = await renderMarkdownView(preview, options);
break;
case "kanban":
Expand All @@ -207,6 +233,12 @@ export namespace _MarkdownRendererInternal {
break;
}

// Revert the view data to the original markdown after getting the HTML
if (originalMarkdown) {
preview.view.setViewData(originalMarkdown, false);
preview.view.save();
}

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

Expand Down Expand Up @@ -1585,4 +1617,3 @@ export namespace ExportLog {
return _MarkdownRendererInternal.checkCancelled();
}
}

Loading