import { KEY } from "./helpers/keyCodes"; /** * Create and display a pop-up dialog box. * This dialog box does not allow for any interaction and should close when clicking * outside of it */ let dialogBoxes = []; // Close dialog box when clicking outside $(document).click(function(event) { if (dialogBoxOpened && dialogBoxes.length >= 1) { if (!$(event.target).closest(dialogBoxes[0]).length){ closeTopmostDialogBox(); } } }); function closeTopmostDialogBox() { if (!dialogBoxOpened || dialogBoxes.length === 0) return; dialogBoxes[0].remove(); dialogBoxes.shift(); if (dialogBoxes.length == 0) { dialogBoxOpened = false; } else { dialogBoxes[0].style.visibility = "visible"; } } // Dialog box close buttons $(document).on('click', '.dialog-box-close-button', function( event ) { closeTopmostDialogBox(); }); document.addEventListener("keydown", function (event) { if (event.keyCode == KEY.ESC && dialogBoxOpened) { closeTopmostDialogBox(); event.preventDefault(); } }); let dialogBoxOpened = false; function dialogBoxCreate(txt, preformatted=false) { console.log(`dialogBoxCreate() called`) var container = document.createElement("div"); container.setAttribute("class", "dialog-box-container"); var content = document.createElement("div"); content.setAttribute("class", "dialog-box-content"); var closeButton = document.createElement("span"); closeButton.setAttribute("class", "dialog-box-close-button"); closeButton.innerHTML = "×" var textE; if (preformatted) { // For text files as they are often computed data that // shouldn't be wrapped and should retain tabstops. textE = document.createElement("pre"); textE.innerHTML = txt; } else { textE = document.createElement("p"); textE.innerHTML = txt.replace(/(?:\r\n|\r|\n)/g, '
'); } content.appendChild(closeButton); content.appendChild(textE); container.appendChild(content); document.body.appendChild(container); if (dialogBoxes.length >= 1) { container.style.visibility = "hidden"; } dialogBoxes.push(container); setTimeout(function() { dialogBoxOpened = true; }, 400); } export {dialogBoxCreate, dialogBoxOpened};