Files
Trilium/src/public/app/widgets/dialogs/note_source.js

78 lines
2.3 KiB
JavaScript
Raw Normal View History

2022-12-01 13:07:23 +01:00
import appContext from "../../components/app_context.js";
import BasicWidget from "../basic_widget.js";
import utils from "../../services/utils.js";
2017-12-26 18:15:29 -05:00
const TPL = `
<div class="note-source-dialog modal fade mx-auto" tabindex="-1" role="dialog">
<style>
.note-source-dialog .note-source {
height: 98%;
width: 100%;
min-height: 500px;
overflow: scroll;
}
</style>
2017-12-26 18:15:29 -05:00
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Note source</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<textarea readonly="readonly" class="note-source"></textarea>
</div>
</div>
</div>
</div>`;
2017-12-26 18:15:29 -05:00
export default class NoteSourceDialog extends BasicWidget {
doRender() {
this.$widget = $(TPL);
this.$noteSource = this.$widget.find(".note-source");
}
2017-12-26 18:15:29 -05:00
async refresh() {
const noteCompletement = await appContext.tabManager.getActiveContext().getNoteComplement();
2017-12-26 18:15:29 -05:00
this.$noteSource.text(this.formatHtml(noteCompletement.content));
}
2017-12-26 18:15:29 -05:00
formatHtml(str) {
const div = document.createElement('div');
div.innerHTML = str.trim();
2017-12-26 18:15:29 -05:00
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;
2017-12-26 18:15:29 -05:00
for (let i = 0; i < node.children.length; i++) {
textNode = document.createTextNode(`
${indentBefore}`);
node.insertBefore(textNode, node.children[i]);
2017-12-26 18:15:29 -05:00
this.formatNode(node.children[i], level);
2017-12-26 18:15:29 -05:00
if (node.lastElementChild === node.children[i]) {
textNode = document.createTextNode(`
${indentAfter}`);
node.appendChild(textNode);
}
}
return node;
2017-12-26 18:15:29 -05:00
}
async openNoteSourceDialogEvent() {
await this.refresh();
utils.openDialog(this.$widget);
}
2021-05-22 12:26:45 +02:00
}