have obsidian manage component lifecycle

This commit is contained in:
limpido 2025-06-09 22:10:06 +08:00
parent 4d0d3ade4a
commit c59085f5fd
2 changed files with 39 additions and 20 deletions

View file

@ -0,0 +1,35 @@
import { MarkdownPostProcessorContext, MarkdownRenderChild } from "obsidian";
import { parseInput, treeView } from './util';
import { MarkdownRenderer } from 'obsidian';
import TreeDiagramPlugin from "./main";
export class TreeDiagramMarkdownRenderChild extends MarkdownRenderChild {
plugin: TreeDiagramPlugin;
source: string;
ctx: MarkdownPostProcessorContext;
constructor(
plugin: TreeDiagramPlugin,
source: string,
containerEl: HTMLElement,
ctx: MarkdownPostProcessorContext
) {
super(containerEl);
this.plugin = plugin;
this.source = source;
this.ctx = ctx;
}
async onload() {
let root;
let output: string[] = [];
let markdown: string;
root = parseInput(this.source);
if (root != null) {
output = treeView(root);
}
markdown = ["```", "\n", output.join("\n").trim(), "\n```"].join("");
await MarkdownRenderer.render(this.plugin.app, markdown, this.containerEl, this.ctx.sourcePath, this);
}
}

View file

@ -1,29 +1,13 @@
import { Plugin, MarkdownRenderer, Component } from 'obsidian';
import { parseInput, treeView } from './util';
import { Plugin } from 'obsidian';
import { TreeDiagramMarkdownRenderChild } from './TreeDiagramMarkdownRenderChild';
export default class TreeDiagramPlugin extends Plugin {
component: Component;
async onload() {
console.log("tree load");
this.component = new Component();
this.registerMarkdownCodeBlockProcessor("tree", async (source, el, ctx) => {
let root;
let output: string[] = [];
let markdown: string;
root = parseInput(source);
if (root != null) {
output = treeView(root);
}
markdown = ["```", "\n", output.join("\n").trim(), "\n```"].join("");
await MarkdownRenderer.render(this.app, markdown, el, ctx.sourcePath, this.component);
ctx.addChild(new TreeDiagramMarkdownRenderChild(this, source, el, ctx));
});
}
onunload() {
console.log("tree unload");
}
onunload() { }
}