diff --git a/src/public/app/dialogs/note_source.js b/src/public/app/dialogs/note_source.js
index d3ed8bc98..c96d9bf2a 100644
--- a/src/public/app/dialogs/note_source.js
+++ b/src/public/app/dialogs/note_source.js
@@ -1,40 +1,76 @@
import appContext from "../services/app_context.js";
+import BasicWidget from "../widgets/basic_widget.js";
import utils from "../services/utils.js";
-const $dialog = $("#note-source-dialog");
-const $noteSource = $("#note-source");
-
-export async function showDialog() {
- utils.openDialog($dialog);
-
- const noteCompletement = await appContext.tabManager.getActiveContext().getNoteComplement();
-
- $noteSource.text(formatHtml(noteCompletement.content));
-}
-
-function formatHtml(str) {
- const div = document.createElement('div');
- div.innerHTML = str.trim();
-
- return formatNode(div, 0).innerHTML.trim();
-}
-
-function formatNode(node, level) {
- const indentBefore = new Array(level++ + 1).join(' ');
- const indentAfter = new Array(level - 1).join(' ');
- let textNode;
-
- for (let i = 0; i < node.children.length; i++) {
- textNode = document.createTextNode('\n' + indentBefore);
- node.insertBefore(textNode, node.children[i]);
-
- formatNode(node.children[i], level);
-
- if (node.lastElementChild === node.children[i]) {
- textNode = document.createTextNode('\n' + indentAfter);
- node.appendChild(textNode);
+const TPL = `
+
`;
+
+export default class NoteSourceDialog extends BasicWidget {
+ doRender() {
+ this.$widget = $(TPL);
+ this.$noteSource = this.$widget.find(".note-source");
}
- return node;
+ async refresh() {
+ const noteCompletement = await appContext.tabManager.getActiveContext().getNoteComplement();
+
+ this.$noteSource.text(this.formatHtml(noteCompletement.content));
+ }
+
+ formatHtml(str) {
+ const div = document.createElement('div');
+ div.innerHTML = str.trim();
+
+ return this.formatNode(div, 0).innerHTML.trim();
+ }
+
+ formatNode(node, level) {
+ const indentBefore = new Array(level++ + 1).join(' ');
+ const indentAfter = new Array(level - 1).join(' ');
+ let textNode;
+
+ for (let i = 0; i < node.children.length; i++) {
+ textNode = document.createTextNode('\n' + indentBefore);
+ node.insertBefore(textNode, node.children[i]);
+
+ this.formatNode(node.children[i], level);
+
+ if (node.lastElementChild === node.children[i]) {
+ textNode = document.createTextNode('\n' + indentAfter);
+ node.appendChild(textNode);
+ }
+ }
+
+ return node;
+ }
+
+ async openNoteSourceDialogEvent() {
+ await this.refresh();
+
+ utils.openDialog(this.$widget);
+ }
}
diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js
index e20513434..d64fb02d0 100644
--- a/src/public/app/layouts/desktop_layout.js
+++ b/src/public/app/layouts/desktop_layout.js
@@ -52,6 +52,7 @@ import FindWidget from "../widgets/find.js";
import TocWidget from "../widgets/toc.js";
import BulkActionsDialog from "../widgets/dialogs/bulk_actions.js";
import AboutDialog from "../widgets/dialogs/about.js";
+import NoteSourceDialog from "../dialogs/note_source.js";
export default class DesktopLayout {
constructor(customWidgets) {
@@ -178,6 +179,7 @@ export default class DesktopLayout {
)
)
.child(new BulkActionsDialog())
- .child(new AboutDialog());
+ .child(new AboutDialog())
+ .child(new NoteSourceDialog());
}
}
diff --git a/src/public/app/services/root_command_executor.js b/src/public/app/services/root_command_executor.js
index 3817d49c0..a44c0903d 100644
--- a/src/public/app/services/root_command_executor.js
+++ b/src/public/app/services/root_command_executor.js
@@ -20,10 +20,6 @@ export default class RootCommandExecutor extends Component {
import("../dialogs/note_revisions.js").then(d => d.showCurrentNoteRevisions());
}
- showNoteSourceCommand() {
- import("../dialogs/note_source.js").then(d => d.showDialog());
- }
-
pasteMarkdownIntoTextCommand() {
import("../dialogs/markdown_import.js").then(d => d.importMarkdownInline());
}
diff --git a/src/public/app/widgets/buttons/note_actions.js b/src/public/app/widgets/buttons/note_actions.js
index 87c20d386..80001dead 100644
--- a/src/public/app/widgets/buttons/note_actions.js
+++ b/src/public/app/widgets/buttons/note_actions.js
@@ -26,7 +26,7 @@ const TPL = `