import libraryLoader from "../services/library_loader.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js"; import froca from "../services/froca.js"; const TPL = `
`; export default class MermaidWidget extends NoteContextAwareWidget { constructor() { super(); this.idCounter = 1; } isEnabled() { return super.isEnabled() && this.note && this.note.type === 'mermaid'; } doRender() { this.$widget = $(TPL); this.contentSized(); this.$display = this.$widget.find('.mermaid-render'); this.$errorContainer = this.$widget.find(".mermaid-error"); this.$errorMessage = this.$errorContainer.find(".error-content"); } async refreshWithNote(note) { await libraryLoader.requireLibrary(libraryLoader.MERMAID); const documentStyle = window.getComputedStyle(document.documentElement); const mermaidTheme = documentStyle.getPropertyValue('--mermaid-theme'); mermaid.mermaidAPI.initialize({ startOnLoad: false, theme: mermaidTheme.trim() }); const noteComplement = await froca.getNoteComplement(note.noteId); const content = noteComplement.content || ""; this.$display.empty(); this.$errorMessage.text('Rendering diagram...'); try { mermaid.mermaidAPI.render('graphDiv-' + this.idCounter++, content, content => this.$display.html(content)); this.$errorContainer.hide(); } catch (e) { this.$errorMessage.text(e.message).append(`See help and examples.
`); this.$errorContainer.show(); } } async entitiesReloadedEvent({loadResults}) { if (loadResults.isNoteContentReloaded(this.noteId)) { await this.refresh(); } } }