import { passwordHash } from "./scripts.js"; import { clearData, createBookShelf, importBookShelf } from "./storage.js"; import { loadTemplate, storeFilesToServer, checkForStoredDataOnServer, delStoredDataOnServer, } from "./web.js"; function showMenu() { var x = document.getElementById("navMob"); if (x.className.indexOf("w3-show") == -1) { x.className += " w3-show"; } else { x.className = x.className.replace(" w3-show", ""); } if (screen.width < 993) { let sidebar = document.getElementById("sidebar"); sidebar.style.display = "none"; } } function showSidebar() { let sidebar = document.getElementById("sidebar"); if (getComputedStyle(sidebar).display === "none") { sidebar.style.display = "block"; } else { sidebar.style.display = "none"; } if (screen.width < 993) { let navBar = document.getElementById("navMob"); navBar.className = navBar.className.replace(" w3-show", ""); } } function showTextBlocks() { var x = document.getElementById("navTb"); if (x.className.indexOf("w3-show") == -1) { x.className += " w3-show"; } else { x.className = x.className.replace(" w3-show", ""); } if (screen.width < 993) { let sidebar = document.getElementById("sidebar"); sidebar.style.display = "none"; } } function insertTextBlocks(t) { let insert = "!" + t.innerText.split(":")[0] + " "; let id = activeState.lastElement; let element = document.getElementById(id); if (element === null) { return; } element.value += " " + insert; let tB = document.getElementById("navTb"); tB.className.replace(" w3-show", ""); if (element.parentElement != undefined) { if ( element.parentElement.getElementsByClassName("pell-content")[0] != undefined ) { element.parentElement.getElementsByClassName( "pell-content" )[0].innerHTML = element.value; element = element.parentElement.getElementsByClassName("pell-content")[0]; } } element.focus(); } function handleOnBlur(t) { activeState.lastElement = t.id; } function hideMenus(evt) { if (evt === undefined) return; if (evt != "force" && evt.target.parentElement != null) { if (evt.target.parentElement.id == "navMob") return; if (evt.target.parentElement.id == "navReg") return; if (evt.target.parentElement.parentElement != null) { if (evt.target.parentElement.parentElement.id == "navMob") return; if (evt.target.parentElement.parentElement.id == "navReg") return; } } let sidebar = document.getElementById("sidebar"); sidebar.style.display = "none"; let navBar = document.getElementById("navMob"); navBar.className = navBar.className.replace(" w3-show", ""); let tbBar = document.getElementById("navTb"); tbBar.className = tbBar.className.replace(" w3-show", ""); } function modalNotifier(msg, timeout = 3, closeable = true) { let modalElement = document.getElementById("modalNotifier"); let modalElementCloseBtn = document.getElementById("modalNotifierClose"); let msgElement = document.getElementById("modalMsg"); modalElement.style.display = "block"; if (!closeable) modalElementCloseBtn.style.display = "none"; msgElement.innerHTML = msg; if (timeout >= 1) { const run = setTimeout( () => (modalElement.style.display = "none"), timeout * 1000 ); } } function printVersion(msg = "") { const scripts = document.getElementsByTagName("script"); const versionSpan = document.getElementById("currentVersion").lastChild; for (var i = 0; i < scripts.length; i++) { if (scripts[i].src) { let source = scripts[i].src; // js/version/main.js let pathVersion = source.split("/"); pathVersion = pathVersion[pathVersion.length - 2]; //add it to document footer currentVersion versionSpan.textContent = msg + " version: " + pathVersion; } } } function clickImportFiles() { if (activeState.settings.localOnly == "true") { createBookShelfDownload(); return; } checkForStoredDataOnServer(); document.getElementById("modalMsg").addEventListener("click", (e) => { if (e.target && e.target.tagName === "BUTTON") { let modal = document.getElementById("modalNotifier"); switch (e.target.innerHTML) { case "Import": modal.replaceWith(modal.cloneNode(true)); document.getElementById("modalMsg").addEventListener("click", (e) => { if (e.target && e.target.tagName === "BUTTON") { let modal = document.getElementById("modalNotifier"); switch (e.target.innerHTML) { case "Yes": importBookShelf(); modal.replaceWith(modal.cloneNode(true)); modalNotifier( "Imported!", activeState.settings.notifierPause ); break; case "Cancel": modal.replaceWith(modal.cloneNode(true)); document.getElementById("modalNotifier").style.display = "none"; break; default: e.preventDefault; } } }); modalNotifier( "
\ Would you like to import the backup created on: " + activeState.serverFilesTs.replace("_", " - ") + "

\ \
", 0 ); break; case "Save": storeFilesToServer(createBookShelf()); modal.replaceWith(modal.cloneNode(true)); modalNotifier( "Files saved to server

would you like to download them?", 0 ); break; case "Delete": delStoredDataOnServer(); break; default: e.preventDefault; } } }); modalNotifier( "Here you can manage if your files should be saved on the server \
If there are stored files already on the server you can inport them \ It will overwrite any saved documents

\
\ \ \
", 0 ); } function createBookShelfDownload() { let data = createBookShelf(); let filename = data[0]["data"] + ".txt"; document.getElementById("modalMsg").addEventListener("click", (e) => { if (e.target && e.target.tagName === "BUTTON") { var element = document.createElement("a"); element.setAttribute( "href", "data:text/plain;charset=utf-8," + encodeURIComponent(JSON.stringify(data)) ); element.setAttribute("download", filename); element.style.display = "none"; document.body.appendChild(element); element.click(); document.body.removeChild(element); } }); modalNotifier( "Since you are in local only mode you can only export a backup of your files \

\
\
", 0 ); } function resetNavBar() { //enable toggleFiles Button let target = document.getElementById("toggleFilesMenu"); target.innerHTML = ""; let i = document.createElement("i"); i.classList.add("fa", "fa-file"); //target.classList.add("w3-disabled"); target.appendChild(i); target.style.cssText = ""; //enable toggleTestBlocksMenu document.getElementById("toggleTestBlocksMenu").style.display = "block"; } function wrongPwAlert() { let wrongPWAlert = document.getElementById("wrongPWAlert"); wrongPWAlert.style.display = "block"; wrongPWAlert.addEventListener("click", (e) => { if (e.target && e.target.tagName === "A") { clearStorage(); document.getElementById("wrongPWAlert").innerHTML = "

all files cleared - set new password

"; } }); } function copyToClipBoard(html) { // Create an iframe (isolated container) for the HTML var container = document.createElement("div"); container.innerHTML = html; // Hide element container.style.position = "fixed"; container.style.pointerEvents = "none"; container.style.opacity = 0; // Detect all style sheets of the page var activeSheets = Array.prototype.slice .call(document.styleSheets) .filter(function (sheet) { return !sheet.disabled; }); // Mount the iframe to the DOM to make `contentWindow` available document.body.appendChild(container); // Copy to clipboard window.getSelection().removeAllRanges(); var range = document.createRange(); range.selectNode(container); window.getSelection().addRange(range); document.execCommand("copy"); for (var i = 0; i < activeSheets.length; i++) activeSheets[i].disabled = true; document.execCommand("copy"); for (var i = 0; i < activeSheets.length; i++) activeSheets[i].disabled = false; // Remove the iframe document.body.removeChild(container); } function resetPage() { let mainFormDiv = document.getElementById("mainForm"); let outputDiv = document.getElementById("output"); let submitContainerDiv = document.getElementById("submitContainer"); let sidebarDiv = document.getElementById("sidebar"); let fileInfoDiv = document.getElementById("outputInfo"); mainFormDiv.innerHTML = ""; mainFormDiv.replaceWith(mainFormDiv.cloneNode(true)); outputDiv.innerHTML = ""; outputDiv.replaceWith(outputDiv.cloneNode(true)); submitContainerDiv.innerHTML = ""; submitContainerDiv.replaceWith(submitContainerDiv.cloneNode(true)); sidebarDiv.innerHTML = ""; sidebarDiv.replaceWith(sidebarDiv.cloneNode(true)); fileInfoDiv.innerHTML = ""; fileInfoDiv.replaceWith(fileInfoDiv.cloneNode(true)); fileInfoDiv.style.display = "none"; } export { hideMenus, showMenu, showSidebar, showTextBlocks, insertTextBlocks, handleOnBlur, modalNotifier, clickImportFiles, resetNavBar, printVersion, wrongPwAlert, copyToClipBoard, resetPage };