mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-08-11 11:02:27 +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 $errorContainer!: JQuery<HTMLElement>;
|
||||||
private $errorMessage!: JQuery<HTMLElement>;
|
private $errorMessage!: JQuery<HTMLElement>;
|
||||||
private dirtyAttachment?: boolean;
|
private dirtyAttachment?: boolean;
|
||||||
|
private zoomHandler?: () => void;
|
||||||
|
private zoomInstance?: SvgPanZoom.Instance;
|
||||||
|
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
return super.isEnabled() && this.note?.type === "mermaid" && this.note.isContentAvailable() && this.noteContext?.viewScope?.viewMode === "default";
|
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) {
|
async refreshWithNote(note: FNote) {
|
||||||
|
this.cleanup();
|
||||||
this.$errorContainer.hide();
|
this.$errorContainer.hide();
|
||||||
|
|
||||||
await libraryLoader.requireLibrary(libraryLoader.MERMAID);
|
await libraryLoader.requireLibrary(libraryLoader.MERMAID);
|
||||||
@ -94,9 +97,19 @@ export default class MermaidWidget extends NoteContextAwareWidget {
|
|||||||
|
|
||||||
// Enable pan to zoom.
|
// Enable pan to zoom.
|
||||||
import("svg-pan-zoom").then(svgPanZoom => {
|
import("svg-pan-zoom").then(svgPanZoom => {
|
||||||
svgPanZoom.default($svg[0], {
|
const zoom = svgPanZoom.default($svg[0], {
|
||||||
controlIconsEnabled: true
|
zoomEnabled: true,
|
||||||
|
controlIconsEnabled: true,
|
||||||
|
fit: true,
|
||||||
|
center: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.zoomHandler = () => {
|
||||||
|
zoom.resize();
|
||||||
|
zoom.fit();
|
||||||
|
zoom.center();
|
||||||
|
};
|
||||||
|
$(window).on("resize", this.zoomHandler);
|
||||||
});
|
});
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
console.warn(e);
|
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() {
|
async renderSvg() {
|
||||||
idCounter++;
|
idCounter++;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user