mirror of
https://github.com/zsviczian/obsidian-excalidraw-plugin.git
synced 2025-08-06 05:46:28 +00:00
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
// alternative https://github.com/OPD-libs/OPD-libs
|
|
|
|
export default class FrontmatterEditor {
|
|
private frontmatterStr:string;
|
|
private dataWOfrontmatter: string;
|
|
private initialized:boolean = false;
|
|
|
|
constructor (data:string) {
|
|
this.dataWOfrontmatter = data;
|
|
|
|
data = data.replaceAll("\r\n", "\n").replaceAll("\r", "\n");
|
|
const tmp = data.split(/^---(?:.|\n)*(?:^---\n)/gm);
|
|
if(tmp.length!==2) return;
|
|
this.dataWOfrontmatter = tmp[1];
|
|
this.frontmatterStr = data.match(/^---((?:.|\n)*)(?:^---\n)/gm)[0].replaceAll(/(^---\n|^\n)/gm,"").trim()+"\n";
|
|
this.initialized = true;
|
|
}
|
|
|
|
public hasKey(key:string):boolean {
|
|
if(!this.initialized) return false;
|
|
const reg = new RegExp(`^${key}:`,"gm");
|
|
return Boolean(this.frontmatterStr.match(reg));
|
|
}
|
|
|
|
public setKey(key:string, value:string) {
|
|
if(!this.initialized) return;
|
|
value = value.replaceAll("\r\n", "\n").replaceAll("\r", "\n").replaceAll(":",";").trim().split("\n").join(" ");
|
|
if(this.hasKey(key)) {
|
|
const reg = new RegExp(`^${key}:.*\\n(?:\\s\\s.*\\n)*`,"gm");
|
|
this.frontmatterStr =
|
|
this.frontmatterStr.split(reg).join("\n").trim() +
|
|
`\n${key}: ${value}`;
|
|
return;
|
|
}
|
|
this.frontmatterStr = this.frontmatterStr.trim()+`\n${key}: ${value}`;
|
|
}
|
|
|
|
get data() {
|
|
if(!this.initialized) return this.dataWOfrontmatter;
|
|
return ["---",this.frontmatterStr,"---",this.dataWOfrontmatter].join("\n");
|
|
}
|
|
} |