generated from obsidianmd/obsidian-sample-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
LiveExport.ts
44 lines (34 loc) · 1.03 KB
/
LiveExport.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { TFile } from "obsidian";
export class LiveExport {
resourceBaseUrl: string = "";
file: TFile;
constructor(file: TFile, resourceBaseUrl: string = "") {
this.file = file;
this.resourceBaseUrl = resourceBaseUrl;
}
isFileValid() {
const isMD = this.file.extension === "md";
const isSizeValid = this.file.stat.size < 1000000;
return isMD && isSizeValid;
}
replaceResourcesLink(content: string, resourceBaseUrl: string) {
const resourceRegex = /!\[\[(.*)\]\]/g;
content = content.replace(resourceRegex, function (match, g1) {
if (!resourceBaseUrl.endsWith("/") && !g1.startsWith("/"))
resourceBaseUrl += "/";
let replaceStr = "![](" + resourceBaseUrl + g1 + ")";
replaceStr = replaceStr.replace(/ /g, "%20");
return replaceStr;
});
return content;
}
async getExportString() {
const content = await this.file.vault.cachedRead(this.file);
if (!this.isFileValid()) return null;
const newContent = this.replaceResourcesLink(
content,
this.resourceBaseUrl
);
return newContent;
}
}