diff --git a/public/javascripts/dialogs/note_source.js b/public/javascripts/dialogs/note_source.js new file mode 100644 index 000000000..6fb1f4d6f --- /dev/null +++ b/public/javascripts/dialogs/note_source.js @@ -0,0 +1,56 @@ +"use strict"; + +const noteSource = (function() { + const dialogEl = $("#note-source-dialog"); + const noteSourceEl = $("#note-source"); + + function showDialog() { + glob.activeDialog = dialogEl; + + dialogEl.dialog({ + modal: true, + width: 800 + }); + + const noteText = noteEditor.getCurrentNote().detail.note_text; + + noteSourceEl.text(formatHtml(noteText)); + } + + 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); + } + } + + return node; + } + + $(document).bind('keydown', 'ctrl+u', e => { + showDialog(); + + e.preventDefault(); + }); + + return { + showDialog + }; +})(); \ No newline at end of file diff --git a/views/index.ejs b/views/index.ejs index 3bbfd43f1..d5b3fffe5 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -326,6 +326,10 @@ +
+ +