import appContext from "../../services/app_context.js"; import BasicWidget from "../basic_widget.js"; import utils from "../../services/utils.js"; const TPL = ` `; export default class NoteSourceDialog extends BasicWidget { doRender() { this.$widget = $(TPL); this.$noteSource = this.$widget.find(".note-source"); } 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); } }