mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-08-10 02:02:29 +08:00
fix(mermaid): event leak
This commit is contained in:
parent
4e81e1e5a8
commit
3fe8fede9a
@ -41,6 +41,8 @@ export default class MermaidWidget extends NoteContextAwareWidget {
|
||||
private $errorContainer!: JQuery<HTMLElement>;
|
||||
private $errorMessage!: JQuery<HTMLElement>;
|
||||
private dirtyAttachment?: boolean;
|
||||
private zoomHandler?: () => void;
|
||||
private zoomInstance?: SvgPanZoom.Instance;
|
||||
|
||||
isEnabled() {
|
||||
return super.isEnabled() && this.note?.type === "mermaid" && this.note.isContentAvailable() && this.noteContext?.viewScope?.viewMode === "default";
|
||||
@ -55,6 +57,7 @@ export default class MermaidWidget extends NoteContextAwareWidget {
|
||||
}
|
||||
|
||||
async refreshWithNote(note: FNote) {
|
||||
this.cleanup();
|
||||
this.$errorContainer.hide();
|
||||
|
||||
await libraryLoader.requireLibrary(libraryLoader.MERMAID);
|
||||
@ -94,9 +97,19 @@ export default class MermaidWidget extends NoteContextAwareWidget {
|
||||
|
||||
// Enable pan to zoom.
|
||||
import("svg-pan-zoom").then(svgPanZoom => {
|
||||
svgPanZoom.default($svg[0], {
|
||||
controlIconsEnabled: true
|
||||
const zoom = svgPanZoom.default($svg[0], {
|
||||
zoomEnabled: true,
|
||||
controlIconsEnabled: true,
|
||||
fit: true,
|
||||
center: true
|
||||
});
|
||||
|
||||
this.zoomHandler = () => {
|
||||
zoom.resize();
|
||||
zoom.fit();
|
||||
zoom.center();
|
||||
};
|
||||
$(window).on("resize", this.zoomHandler);
|
||||
});
|
||||
} catch (e: any) {
|
||||
console.warn(e);
|
||||
@ -105,6 +118,23 @@ export default class MermaidWidget extends NoteContextAwareWidget {
|
||||
}
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
super.cleanup();
|
||||
if (this.zoomHandler) {
|
||||
$(window).off("resize", this.zoomHandler);
|
||||
this.zoomHandler = undefined;
|
||||
}
|
||||
this.zoomInstance?.destroy();
|
||||
}
|
||||
|
||||
toggleInt(show: boolean | null | undefined): void {
|
||||
super.toggleInt(show);
|
||||
|
||||
if (!show) {
|
||||
this.cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
async renderSvg() {
|
||||
idCounter++;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user