"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,
            height: 500
        });

        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
    };
})();