mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
refactoring of mermaid support WIP
This commit is contained in:
parent
b37bcd294c
commit
896c9cec04
@ -43,6 +43,7 @@ import EditButton from "../widgets/buttons/edit_button.js";
|
|||||||
import CalendarMenuWidget from "../widgets/buttons/calendar_menu.js";
|
import CalendarMenuWidget from "../widgets/buttons/calendar_menu.js";
|
||||||
import EditedNotesWidget from "../widgets/ribbon_widgets/edited_notes.js";
|
import EditedNotesWidget from "../widgets/ribbon_widgets/edited_notes.js";
|
||||||
import OpenNoteButtonWidget from "../widgets/buttons/open_note_button_widget.js";
|
import OpenNoteButtonWidget from "../widgets/buttons/open_note_button_widget.js";
|
||||||
|
import MermaidWidget from "../widgets/mermaid.js";
|
||||||
|
|
||||||
export default class DesktopLayout {
|
export default class DesktopLayout {
|
||||||
constructor(customWidgets) {
|
constructor(customWidgets) {
|
||||||
@ -151,6 +152,7 @@ export default class DesktopLayout {
|
|||||||
new ScrollingContainer()
|
new ScrollingContainer()
|
||||||
.filling()
|
.filling()
|
||||||
.child(new SqlTableSchemasWidget())
|
.child(new SqlTableSchemasWidget())
|
||||||
|
.child(new MermaidWidget())
|
||||||
.child(new NoteDetailWidget())
|
.child(new NoteDetailWidget())
|
||||||
.child(new NoteListWidget())
|
.child(new NoteListWidget())
|
||||||
.child(new SearchResultWidget())
|
.child(new SearchResultWidget())
|
||||||
|
57
src/public/app/widgets/mermaid.js
Normal file
57
src/public/app/widgets/mermaid.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import libraryLoader from "../services/library_loader.js";
|
||||||
|
import NoteContextAwareWidget from "./note_context_aware_widget.js";
|
||||||
|
import froca from "../services/froca.js";
|
||||||
|
|
||||||
|
const TPL = `<div class="mermaid-widget">
|
||||||
|
<div class="mermaid-error alert alert-warning">
|
||||||
|
<p><strong>The diagram could not displayed.</strong></p>
|
||||||
|
<p class="error-content">Rendering diagram...</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mermaid-render"></div>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
export default class MermaidWidget extends NoteContextAwareWidget {
|
||||||
|
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', content, content => this.$display.html(content));
|
||||||
|
|
||||||
|
this.$errorContainer.hide();
|
||||||
|
} catch (e) {
|
||||||
|
this.$errorMessage.text(e.message);
|
||||||
|
this.$errorContainer.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async entitiesReloadedEvent({loadResults}) {
|
||||||
|
if (loadResults.isNoteContentReloaded(this.noteId)) {
|
||||||
|
await this.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -48,8 +48,7 @@ const typeWidgetClasses = {
|
|||||||
'relation-map': RelationMapTypeWidget,
|
'relation-map': RelationMapTypeWidget,
|
||||||
'protected-session': ProtectedSessionTypeWidget,
|
'protected-session': ProtectedSessionTypeWidget,
|
||||||
'book': BookTypeWidget,
|
'book': BookTypeWidget,
|
||||||
'note-map': NoteMapTypeWidget,
|
'note-map': NoteMapTypeWidget
|
||||||
'mermaid': MermaidTypeWidget
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class NoteDetailWidget extends NoteContextAwareWidget {
|
export default class NoteDetailWidget extends NoteContextAwareWidget {
|
||||||
@ -163,7 +162,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
|
|||||||
type = 'read-only-text';
|
type = 'read-only-text';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type === 'code' && await this.noteContext.isReadOnly()) {
|
if ((type === 'code' || type === 'mermaid') && await this.noteContext.isReadOnly()) {
|
||||||
type = 'read-only-code';
|
type = 'read-only-code';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +170,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
|
|||||||
type = 'editable-text';
|
type = 'editable-text';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type === 'code') {
|
if (type === 'code' || type === 'mermaid') {
|
||||||
type = 'editable-code';
|
type = 'editable-code';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,11 +33,12 @@ export default class MermaidTypeWidget extends TypeWidget {
|
|||||||
doRender() {
|
doRender() {
|
||||||
this.$widget = $(TPL);
|
this.$widget = $(TPL);
|
||||||
this.$display = this.$widget.find('.mermaid-render');
|
this.$display = this.$widget.find('.mermaid-render');
|
||||||
|
this.$errorContainer = this.$widget.find(".mermaid-error");
|
||||||
|
this.$errorMessage = this.$errorContainer.find(".error-content");
|
||||||
|
|
||||||
this.$editor = this.$widget.find('.note-detail-code-editor');
|
this.$editor = this.$widget.find('.note-detail-code-editor');
|
||||||
|
|
||||||
this.$errorContainer = this.$widget.find(".mermaid-error");
|
|
||||||
this.$errorMessage = this.$errorContainer.find(".error-content");
|
|
||||||
|
|
||||||
this.initialized = Promise.all( [this.initRenderer(), this.initEditor()]);
|
this.initialized = Promise.all( [this.initRenderer(), this.initEditor()]);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user