fundamental changes
implemented temporary storage implemented settings bug fixes
This commit is contained in:
parent
e4336766a0
commit
cf9a4e0efb
31
index.html
31
index.html
@ -11,15 +11,6 @@
|
|||||||
//current javascript version
|
//current javascript version
|
||||||
let jsVer = "9.9.9";
|
let jsVer = "9.9.9";
|
||||||
|
|
||||||
//settings
|
|
||||||
window.settings = {
|
|
||||||
localOnly: true,
|
|
||||||
lineBreak: 150,
|
|
||||||
font: "Arial",
|
|
||||||
fontSize: "10px",
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
let script = document.createElement("script");
|
let script = document.createElement("script");
|
||||||
script.src = "js/" + jsVer + "/init.js";
|
script.src = "js/" + jsVer + "/init.js";
|
||||||
script.type = "module";
|
script.type = "module";
|
||||||
@ -99,6 +90,7 @@
|
|||||||
href="javascript:void(0);"
|
href="javascript:void(0);"
|
||||||
title="Toggle Textblocks Menu"
|
title="Toggle Textblocks Menu"
|
||||||
id="toggleTestBlocksMenu"
|
id="toggleTestBlocksMenu"
|
||||||
|
style="display: none;"
|
||||||
><i class="fa fa-plane"></i
|
><i class="fa fa-plane"></i
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
@ -109,6 +101,7 @@
|
|||||||
><i class="fa fa-file"></i
|
><i class="fa fa-file"></i
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
|
id="logo"
|
||||||
href="."
|
href="."
|
||||||
class="w3-left-align w3-button w3-padding-large w3-flat-wet-asphalt"
|
class="w3-left-align w3-button w3-padding-large w3-flat-wet-asphalt"
|
||||||
><img class="logo" src="logo.png" alt="logo" height="30px"
|
><img class="logo" src="logo.png" alt="logo" height="30px"
|
||||||
@ -130,6 +123,7 @@
|
|||||||
<div
|
<div
|
||||||
id="mainForm"
|
id="mainForm"
|
||||||
class="w3-row-padding w3-padding-top-64 w3-container w3-flat-clouds"
|
class="w3-row-padding w3-padding-top-64 w3-container w3-flat-clouds"
|
||||||
|
style="min-height: 600px;"
|
||||||
>
|
>
|
||||||
<div class="w3-content">
|
<div class="w3-content">
|
||||||
<div class="w3-third w3-center">
|
<div class="w3-third w3-center">
|
||||||
@ -273,6 +267,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w3-container w3-flat-clouds w3-padding">
|
<div class="w3-container w3-flat-clouds w3-padding">
|
||||||
|
<div
|
||||||
|
id="outputInfo"
|
||||||
|
class="w3-row-padding w3-padding-64 w3-container w3-flat-clouds"
|
||||||
|
style="margin-bottom: 0px; display: none"
|
||||||
|
></div>
|
||||||
<div
|
<div
|
||||||
id="output"
|
id="output"
|
||||||
class="w3-row-padding w3-padding-64 w3-container w3-flat-clouds"
|
class="w3-row-padding w3-padding-64 w3-container w3-flat-clouds"
|
||||||
@ -355,20 +354,6 @@
|
|||||||
<footer
|
<footer
|
||||||
class="w3-container w3-padding w3-flat-clouds w3-center w3-margin-top"
|
class="w3-container w3-padding w3-flat-clouds w3-center w3-margin-top"
|
||||||
>
|
>
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<div
|
|
||||||
class="upload-btn-wrapper"
|
|
||||||
id="setFormButton"
|
|
||||||
style="display: none"
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
class="w3-button w3-border w3-flat-clouds"
|
|
||||||
id="setFormBtn"
|
|
||||||
>
|
|
||||||
Set input as default
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="w3-container w3-margin-top w3-right-align w3-small" id="currentVersion">
|
<div class="w3-container w3-margin-top w3-right-align w3-small" id="currentVersion">
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -28,6 +28,19 @@ function transformTemplateObject(objects) {
|
|||||||
sidebarSubmitButton.innerHTML = "Save & Copy";
|
sidebarSubmitButton.innerHTML = "Save & Copy";
|
||||||
sidebarList.appendChild(sidebarSubmitButton);
|
sidebarList.appendChild(sidebarSubmitButton);
|
||||||
|
|
||||||
|
//create sidebar set form button
|
||||||
|
let sidebarSetFormButton = document.createElement("li");
|
||||||
|
sidebarSetFormButton.classList.add(
|
||||||
|
"w3-bar-item",
|
||||||
|
"w3-padding-large",
|
||||||
|
"w3-button"
|
||||||
|
);
|
||||||
|
sidebarSetFormButton.style.borderTop = "2px solid #ddd";
|
||||||
|
sidebarSetFormButton.id = "sb-setform";
|
||||||
|
sidebarSetFormButton.innerHTML = "Set input as preset";
|
||||||
|
sidebarList.appendChild(sidebarSetFormButton);
|
||||||
|
|
||||||
|
|
||||||
//add sidebar elemnts to sidebar
|
//add sidebar elemnts to sidebar
|
||||||
document.getElementById("sidebar").appendChild(sidebarList);
|
document.getElementById("sidebar").appendChild(sidebarList);
|
||||||
|
|
||||||
@ -55,6 +68,7 @@ function transformTemplateObject(objects) {
|
|||||||
copyBtn.classList.add("w3-button");
|
copyBtn.classList.add("w3-button");
|
||||||
copyBtn.classList.add("w3-grey");
|
copyBtn.classList.add("w3-grey");
|
||||||
copyBtn.style.margin = "20px 0px";
|
copyBtn.style.margin = "20px 0px";
|
||||||
|
copyBtn.id = "fromCopyBtn";
|
||||||
//append submit button to submitContainer
|
//append submit button to submitContainer
|
||||||
document.getElementById("submitContainer").appendChild(copyBtn);
|
document.getElementById("submitContainer").appendChild(copyBtn);
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
import {setNewTemplate, loadTemplate} from "./web.js";
|
import {setNewTemplate, loadTemplate} from "./web.js";
|
||||||
import { hideMenus, modalNotifier } from "./evts.js";
|
import { hideMenus, modalNotifier, resetNavBar } from "./evts.js";
|
||||||
import { sanitize } from "./scripts.js";
|
import { passwordHash, sanitize } from "./scripts.js";
|
||||||
|
|
||||||
function createTemplate(template = false) {
|
function createTemplate(template = false) {
|
||||||
|
|
||||||
|
|
||||||
//set current page value in activeState object
|
//set current page value in activeState object
|
||||||
activeState.activePage = "createTemplate";
|
activeState.activePage = "createTemplate";
|
||||||
@ -12,10 +11,20 @@ function createTemplate(template = false) {
|
|||||||
document.getElementById("siteTitle").innerHTML = "Manage templates";
|
document.getElementById("siteTitle").innerHTML = "Manage templates";
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("siteTitle").innerHTML = "TG";
|
document.getElementById("siteTitle").innerHTML = "TG";
|
||||||
|
document.getElementById("logo").innerHTML = "TG";
|
||||||
}
|
}
|
||||||
|
|
||||||
//hide set Form button
|
//sessionVerfication check
|
||||||
document.getElementById("setFormButton").style.display = "none";
|
if (!passwordHash.verify()) {
|
||||||
|
modalNotifier("Error: Session is not authenticated...", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//reset navbar if files was used
|
||||||
|
resetNavBar();
|
||||||
|
|
||||||
|
//disable toggleTestBlocksMenu
|
||||||
|
document.getElementById("toggleTestBlocksMenu").style.display = "none";
|
||||||
|
|
||||||
|
|
||||||
if (template) {
|
if (template) {
|
||||||
document.getElementById("templateInput").value = loadTemplate(template, false, "createTemplate");
|
document.getElementById("templateInput").value = loadTemplate(template, false, "createTemplate");
|
||||||
@ -154,7 +163,7 @@ function createTemplate(template = false) {
|
|||||||
}
|
}
|
||||||
let data = document.getElementById("templateInput").value;
|
let data = document.getElementById("templateInput").value;
|
||||||
setNewTemplate(fileName, data);
|
setNewTemplate(fileName, data);
|
||||||
modalNotifier(fileName+" saved!", 2);
|
modalNotifier(fileName+" saved!", activeState.settings.notifierPause);
|
||||||
e.target.className = e.target.className.replace(" w3-grey", " w3-flat-nephritis");
|
e.target.className = e.target.className.replace(" w3-grey", " w3-flat-nephritis");
|
||||||
e.target.style.pointerEvents = "none";
|
e.target.style.pointerEvents = "none";
|
||||||
const timeoutSave = setTimeout(() => {
|
const timeoutSave = setTimeout(() => {
|
||||||
|
|||||||
@ -1,13 +1,11 @@
|
|||||||
import {
|
import {
|
||||||
clearData,
|
clearData,
|
||||||
createStorageObj,
|
|
||||||
createBookShelf,
|
createBookShelf,
|
||||||
importBookShelf,
|
importBookShelf,
|
||||||
} from "./storage.js";
|
} from "./storage.js";
|
||||||
import {
|
import {
|
||||||
loadTemplate,
|
loadTemplate,
|
||||||
storeFilesToServer,
|
storeFilesToServer,
|
||||||
setTemplatePreset,
|
|
||||||
checkForStoredDataOnServer,
|
checkForStoredDataOnServer,
|
||||||
delStoredDataOnServer
|
delStoredDataOnServer
|
||||||
} from "./web.js";
|
} from "./web.js";
|
||||||
@ -82,7 +80,17 @@ function clickClearForm() {
|
|||||||
loadTemplate(lT);
|
loadTemplate(lT);
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideMenus() {
|
function hideMenus(evt) {
|
||||||
|
if (evt === undefined) return;
|
||||||
|
if (evt.target.id == "loadTemplateBtn") return;
|
||||||
|
if (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");
|
let sidebar = document.getElementById("sidebar");
|
||||||
sidebar.style.display = "none";
|
sidebar.style.display = "none";
|
||||||
let navBar = document.getElementById("navMob");
|
let navBar = document.getElementById("navMob");
|
||||||
@ -91,15 +99,13 @@ function hideMenus() {
|
|||||||
tbBar.className = tbBar.className.replace(" w3-show", "");
|
tbBar.className = tbBar.className.replace(" w3-show", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
function modalNotifier(msg, timeout) {
|
function modalNotifier(msg, timeout = 3) {
|
||||||
let modalElement = document.getElementById("modalNotifier");
|
let modalElement = document.getElementById("modalNotifier");
|
||||||
let msgElement = document.getElementById("modalMsg");
|
let msgElement = document.getElementById("modalMsg");
|
||||||
|
|
||||||
modalElement.style.display = "block";
|
modalElement.style.display = "block";
|
||||||
msgElement.innerHTML = msg;
|
msgElement.innerHTML = msg;
|
||||||
if (timeout === undefined) {
|
if (timeout >= 1) {
|
||||||
const run = setTimeout(() => (modalElement.style.display = "none"), 5000);
|
|
||||||
} else if (timeout >= 1) {
|
|
||||||
const run = setTimeout(
|
const run = setTimeout(
|
||||||
() => (modalElement.style.display = "none"),
|
() => (modalElement.style.display = "none"),
|
||||||
timeout * 1000
|
timeout * 1000
|
||||||
@ -107,16 +113,24 @@ function modalNotifier(msg, timeout) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function clickSetForm(e) {
|
function printVersion(msg = "") {
|
||||||
e.preventDefault;
|
const scripts = document.getElementsByTagName("script");
|
||||||
let dataArray = parseFormOnSubmit(true);
|
const versionSpan = document.getElementById("currentVersion").lastChild;
|
||||||
let lT = activeState.loadedTemplate;
|
|
||||||
setTemplatePreset(lT, JSON.stringify(dataArray));
|
for (var i = 0; i < scripts.length; i++) {
|
||||||
modalNotifier("Form Saved", 2);
|
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() {
|
function clickImportFiles() {
|
||||||
if (activeState.localOnly) {
|
if (activeState.settings.localOnly == "true") {
|
||||||
createBookShelfDownload();
|
createBookShelfDownload();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -135,7 +149,7 @@ function clickImportFiles() {
|
|||||||
case "Yes":
|
case "Yes":
|
||||||
importBookShelf();
|
importBookShelf();
|
||||||
modal.replaceWith(modal.cloneNode(true));
|
modal.replaceWith(modal.cloneNode(true));
|
||||||
modalNotifier("Imported!", 2);
|
modalNotifier("Imported!", activeState.settings.notifierPause);
|
||||||
break;
|
break;
|
||||||
case "Cancel":
|
case "Cancel":
|
||||||
modal.replaceWith(modal.cloneNode(true));
|
modal.replaceWith(modal.cloneNode(true));
|
||||||
@ -206,6 +220,20 @@ function createBookShelfDownload() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
hideMenus,
|
hideMenus,
|
||||||
showMenu,
|
showMenu,
|
||||||
@ -215,6 +243,7 @@ export {
|
|||||||
handleOnBlur,
|
handleOnBlur,
|
||||||
clickClearForm,
|
clickClearForm,
|
||||||
modalNotifier,
|
modalNotifier,
|
||||||
clickSetForm,
|
clickImportFiles,
|
||||||
clickImportFiles
|
resetNavBar,
|
||||||
|
printVersion
|
||||||
};
|
};
|
||||||
|
|||||||
@ -2,24 +2,23 @@ import {
|
|||||||
storeData,
|
storeData,
|
||||||
clearData,
|
clearData,
|
||||||
retrieveData,
|
retrieveData,
|
||||||
createStorageObj,
|
|
||||||
} from "./storage.js";
|
} from "./storage.js";
|
||||||
import { loadTemplate } from "./web.js";
|
import { loadTemplate } from "./web.js";
|
||||||
import parseFormOnSubmit from "./parseForm.js";
|
import parseFormOnSubmit from "./parseForm.js";
|
||||||
import { modalNotifier } from "./evts.js";
|
import { modalNotifier, resetNavBar } from "./evts.js";
|
||||||
|
import { passwordHash } from "./scripts.js";
|
||||||
|
|
||||||
function buildFile() {
|
function buildFile() {
|
||||||
createStorageObj();
|
|
||||||
|
|
||||||
//set current page value in activeState object
|
//set current page value in activeState object
|
||||||
activeState.activePage = "files";
|
activeState.activePage = "files";
|
||||||
|
|
||||||
//set templateFiles array
|
//set templateFiles array
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
|
|
||||||
if (tF == null || tF.length == 0) {
|
if (tF == null || tF.length == 0) {
|
||||||
//console.log("none yet");
|
//console.log("none yet");
|
||||||
modalNotifier("there are no saved texts yet");
|
modalNotifier("there are no saved texts yet", activeState.settings.notifierPause);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,16 +26,33 @@ function buildFile() {
|
|||||||
document.getElementById("siteTitle").innerHTML = "Saved files";
|
document.getElementById("siteTitle").innerHTML = "Saved files";
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("siteTitle").innerHTML = "TG";
|
document.getElementById("siteTitle").innerHTML = "TG";
|
||||||
|
document.getElementById("logo").innerHTML = "TG";
|
||||||
}
|
}
|
||||||
|
|
||||||
//hide set Form button
|
//sessionVerfication check
|
||||||
document.getElementById("setFormButton").style.display = "none";
|
if (!passwordHash.verify()) {
|
||||||
|
modalNotifier("Error: Session is not authenticated...", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//disable 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 = 'background-color:#9e9e9e !important';
|
||||||
|
target.style.borderBottom = "4px solid #9e9e9e";
|
||||||
|
|
||||||
|
//disable toggleTestBlocksMenu
|
||||||
|
document.getElementById("toggleTestBlocksMenu").style.display = "none";
|
||||||
|
|
||||||
//reset page and event listeners
|
//reset page and event listeners
|
||||||
let mainFormDiv = document.getElementById("mainForm");
|
let mainFormDiv = document.getElementById("mainForm");
|
||||||
let outputDiv = document.getElementById("output");
|
let outputDiv = document.getElementById("output");
|
||||||
let submitContainerDiv = document.getElementById("submitContainer");
|
let submitContainerDiv = document.getElementById("submitContainer");
|
||||||
let sidebarDiv = document.getElementById("sidebar");
|
let sidebarDiv = document.getElementById("sidebar");
|
||||||
|
let fileInfoDiv = document.getElementById("outputInfo");
|
||||||
|
|
||||||
mainFormDiv.innerHTML = "";
|
mainFormDiv.innerHTML = "";
|
||||||
mainFormDiv.replaceWith(mainFormDiv.cloneNode(true));
|
mainFormDiv.replaceWith(mainFormDiv.cloneNode(true));
|
||||||
@ -46,6 +62,8 @@ function buildFile() {
|
|||||||
submitContainerDiv.replaceWith(submitContainerDiv.cloneNode(true));
|
submitContainerDiv.replaceWith(submitContainerDiv.cloneNode(true));
|
||||||
sidebarDiv.innerHTML = "";
|
sidebarDiv.innerHTML = "";
|
||||||
sidebarDiv.replaceWith(sidebarDiv.cloneNode(true));
|
sidebarDiv.replaceWith(sidebarDiv.cloneNode(true));
|
||||||
|
fileInfoDiv.innerHTML = "";
|
||||||
|
fileInfoDiv.replaceWith(fileInfoDiv.cloneNode(true));
|
||||||
|
|
||||||
document.getElementById("mainForm").innerHTML = mainFormPlaceholder();
|
document.getElementById("mainForm").innerHTML = mainFormPlaceholder();
|
||||||
|
|
||||||
@ -54,23 +72,33 @@ function buildFile() {
|
|||||||
if (e.target && e.target.matches("li.w3-bar-item")) {
|
if (e.target && e.target.matches("li.w3-bar-item")) {
|
||||||
let fileName = e.target.dataset.file;
|
let fileName = e.target.dataset.file;
|
||||||
let template = e.target.dataset.template;
|
let template = e.target.dataset.template;
|
||||||
clickLoadFileDiv(fileName, template);
|
let pos = e.target.dataset.tfpos;
|
||||||
|
clickLoadFileDiv(fileName, template, pos);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadFileDiv(fileName, template) {
|
function loadFileDiv(fileName, template, pos) {
|
||||||
activeState.fileName = fileName;
|
activeState.fileName = fileName;
|
||||||
activeState.loadedTemplate = template;
|
activeState.loadedTemplate = template;
|
||||||
|
|
||||||
storeData("userInputForce", retrieveData(fileName, template));
|
storeData("userInputForce", retrieveData(fileName, template));
|
||||||
|
|
||||||
loadTemplate(template, false, true);
|
loadTemplate(template, false, true);
|
||||||
|
|
||||||
|
//append TS info
|
||||||
|
let fileInfoDiv = document.getElementById("outputInfo");
|
||||||
|
let tF = retrieveData("templateFiles");
|
||||||
|
|
||||||
|
let ts = tF[pos].metadata.ts_create;
|
||||||
|
ts = ts.current_time_long+" "+ts.current_date+"."+ts.current_year;
|
||||||
|
fileInfoDiv.innerHTML = "<p>created at: "+ts+" | template: "+template+"</p>";
|
||||||
|
fileInfoDiv.style.display = "block";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadFileDivCallBack() {
|
function loadFileDivCallBack() {
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
document.getElementById("sidebar").appendChild(loadFileSidebar(tF));
|
document.getElementById("sidebar").appendChild(loadFileSidebar(tF));
|
||||||
|
|
||||||
let lT = activeState.loadedTemplate;
|
let lT = activeState.loadedTemplate;
|
||||||
@ -133,17 +161,28 @@ function loadFileDivCallBack() {
|
|||||||
let div = document.createElement("div");
|
let div = document.createElement("div");
|
||||||
let parsedTemplate = parseFormOnSubmit(false, true);
|
let parsedTemplate = parseFormOnSubmit(false, true);
|
||||||
div.appendChild(parsedTemplate);
|
div.appendChild(parsedTemplate);
|
||||||
|
|
||||||
fileDisplay.appendChild(div);
|
fileDisplay.appendChild(div);
|
||||||
|
|
||||||
|
let ts = document.createElement("p");
|
||||||
|
ts.innerHTML = ""
|
||||||
|
|
||||||
|
//fileDisplay.appendChild(ts);
|
||||||
document.getElementById("mainForm").appendChild(fileDisplay);
|
document.getElementById("mainForm").appendChild(fileDisplay);
|
||||||
|
|
||||||
|
//fix min height of file display
|
||||||
|
try {
|
||||||
|
document.getElementById("fileDisplay").style.cssText = "min-height: 300px;";
|
||||||
|
} catch (e) {}
|
||||||
//fix fontsize for display
|
//fix fontsize for display
|
||||||
document.getElementById("fileDisplay").firstChild.style.fontSize = "1em";
|
try {
|
||||||
|
document.getElementById("fileDisplay").firstChild.style.fontSize = "1em";
|
||||||
|
} catch (e) {}
|
||||||
//add events
|
//add events
|
||||||
formEvts(storageName);
|
formEvts(storageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
function clickLoadFileDiv(fileName, template) {
|
function clickLoadFileDiv(fileName, template, pos) {
|
||||||
if (fileName == "_overflow") return;
|
if (fileName == "_overflow") return;
|
||||||
|
|
||||||
if (fileName == "_clearAll") {
|
if (fileName == "_clearAll") {
|
||||||
@ -152,20 +191,20 @@ function clickLoadFileDiv(fileName, template) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("mainForm").innerHTML = "";
|
document.getElementById("mainForm").innerHTML = "";
|
||||||
loadFileDiv(fileName, template);
|
loadFileDiv(fileName, template, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearFileData(storData) {
|
function clearFileData(storData) {
|
||||||
let fileName = storData.split("_m21_")[0];
|
let fileName = storData.split("_m21_")[0];
|
||||||
|
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
let newArray = [];
|
let newArray = [];
|
||||||
for (let obj of tF) {
|
for (let obj of tF) {
|
||||||
if (obj.fileName != fileName) {
|
if (obj.fileName != fileName) {
|
||||||
newArray.push(obj);
|
newArray.push(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
storeData("templateFiles", JSON.stringify(newArray));
|
storeData("templateFiles", newArray);
|
||||||
|
|
||||||
clearData(fileName);
|
clearData(fileName);
|
||||||
clearData("userInput");
|
clearData("userInput");
|
||||||
@ -181,9 +220,19 @@ function clearFileData(storData) {
|
|||||||
function loadFileSidebar(tF) {
|
function loadFileSidebar(tF) {
|
||||||
let sidebarList = document.createElement("ul");
|
let sidebarList = document.createElement("ul");
|
||||||
sidebarList.classList.add("w3-ul");
|
sidebarList.classList.add("w3-ul");
|
||||||
|
|
||||||
|
let sidebarListItem = document.createElement("li");
|
||||||
|
|
||||||
|
sidebarListItem.classList.add(
|
||||||
|
"w3-padding-large",
|
||||||
|
);
|
||||||
|
sidebarListItem.style.borderBottom = "1px solid #ddd";
|
||||||
|
sidebarListItem.id = "sb-title";
|
||||||
|
sidebarListItem.innerHTML = "Saved Files:"
|
||||||
|
sidebarList.appendChild(sidebarListItem);
|
||||||
|
|
||||||
let c = 0;
|
let c = 0;
|
||||||
let sidebarItemsAmount = 10;
|
let sidebarItemsAmount = 10;
|
||||||
let sidebarListItem;
|
|
||||||
for (let obj of tF.reverse()) {
|
for (let obj of tF.reverse()) {
|
||||||
sidebarListItem = document.createElement("li");
|
sidebarListItem = document.createElement("li");
|
||||||
sidebarListItem.classList.add(
|
sidebarListItem.classList.add(
|
||||||
@ -209,6 +258,7 @@ function loadFileSidebar(tF) {
|
|||||||
sidebarListItem.innerHTML = obj.fileName.replace(/_/g, " ");
|
sidebarListItem.innerHTML = obj.fileName.replace(/_/g, " ");
|
||||||
sidebarListItem.setAttribute("data-file", obj.fileName);
|
sidebarListItem.setAttribute("data-file", obj.fileName);
|
||||||
sidebarListItem.setAttribute("data-template", obj.template);
|
sidebarListItem.setAttribute("data-template", obj.template);
|
||||||
|
sidebarListItem.setAttribute("data-tFPos", obj.pos);
|
||||||
sidebarList.appendChild(sidebarListItem);
|
sidebarList.appendChild(sidebarListItem);
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
@ -287,7 +337,7 @@ function formEvts(storageName) {
|
|||||||
if (e.target && e.target.tagName === "INPUT") {
|
if (e.target && e.target.tagName === "INPUT") {
|
||||||
switch (e.target.value) {
|
switch (e.target.value) {
|
||||||
case "Edit":
|
case "Edit":
|
||||||
loadSpecificTemplate(storageName);
|
editSpecificTemplate(storageName);
|
||||||
break;
|
break;
|
||||||
case "Copy":
|
case "Copy":
|
||||||
copyFileToClipboard();
|
copyFileToClipboard();
|
||||||
@ -303,19 +353,21 @@ function formEvts(storageName) {
|
|||||||
);
|
);
|
||||||
e.target.style.pointerEvents = "auto";
|
e.target.style.pointerEvents = "auto";
|
||||||
}, 250);
|
}, 250);
|
||||||
modalNotifier(activeState.fileName + " copied to clipboard", 2);
|
modalNotifier(activeState.fileName + " copied to clipboard", activeState.settings.notifierPause);
|
||||||
break;
|
break;
|
||||||
case "Delete":
|
case "Delete":
|
||||||
|
console.log(storageName);
|
||||||
let previousFile = getPreviousFile(storageName);
|
let previousFile = getPreviousFile(storageName);
|
||||||
clearFileData(storageName);
|
clearFileData(storageName);
|
||||||
|
let delFileName = activeState.fileName;
|
||||||
document.getElementById("mainForm").innerHTML = "";
|
document.getElementById("mainForm").innerHTML = "";
|
||||||
if (previousFile) {
|
if (previousFile) {
|
||||||
loadFileDiv(previousFile.fileName, previousFile.template);
|
loadFileDiv(previousFile.fileName, previousFile.template, previousFile.pos);
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("mainForm").innerHTML =
|
document.getElementById("mainForm").innerHTML =
|
||||||
mainFormPlaceholder("No file yet");
|
mainFormPlaceholder("No file yet");
|
||||||
}
|
}
|
||||||
modalNotifier(activeState.fileName + " deleted!", 2);
|
modalNotifier(delFileName + " deleted!", activeState.settings.notifierPause);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -325,7 +377,7 @@ function formEvts(storageName) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSpecificTemplate(storageName) {
|
function editSpecificTemplate(storageName) {
|
||||||
storeData(
|
storeData(
|
||||||
"userInputForce",
|
"userInputForce",
|
||||||
retrieveData(storageName.split("_m21_")[0], storageName.split("_m21_")[1])
|
retrieveData(storageName.split("_m21_")[0], storageName.split("_m21_")[1])
|
||||||
@ -334,6 +386,9 @@ function loadSpecificTemplate(storageName) {
|
|||||||
let sidebarDiv = document.getElementById("sidebar");
|
let sidebarDiv = document.getElementById("sidebar");
|
||||||
sidebarDiv.replaceWith(sidebarDiv.cloneNode(true));
|
sidebarDiv.replaceWith(sidebarDiv.cloneNode(true));
|
||||||
|
|
||||||
|
//reset navbar above all else
|
||||||
|
resetNavBar();
|
||||||
|
|
||||||
//reset correct activePage
|
//reset correct activePage
|
||||||
activeState.activePage = "template";
|
activeState.activePage = "template";
|
||||||
|
|
||||||
@ -342,7 +397,7 @@ function loadSpecificTemplate(storageName) {
|
|||||||
|
|
||||||
function getPreviousFile(storageName) {
|
function getPreviousFile(storageName) {
|
||||||
let orgFileName = storageName.split("_m21_")[0];
|
let orgFileName = storageName.split("_m21_")[0];
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
let i = 0;
|
let i = 0;
|
||||||
let previousFile;
|
let previousFile;
|
||||||
|
|
||||||
@ -371,7 +426,7 @@ function clickClearAllFiles() {
|
|||||||
case "Delete":
|
case "Delete":
|
||||||
clearAllFiles();
|
clearAllFiles();
|
||||||
modal.replaceWith(modal.cloneNode(true));
|
modal.replaceWith(modal.cloneNode(true));
|
||||||
modalNotifier("All files deleted!", 2);
|
modalNotifier("All files deleted!", activeState.settings.notifierPause);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
e.preventDefault;
|
e.preventDefault;
|
||||||
@ -386,9 +441,9 @@ function clickClearAllFiles() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
function clearAllFiles() {
|
function clearAllFiles() {
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
if (tF == null || tF.length == 0) {
|
if (tF == null || tF.length == 0) {
|
||||||
modalNotifier("there are no saved texts yet", 2);
|
modalNotifier("there are no saved texts yet", activeState.settings.notifierPause);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (let storageName of tF) {
|
for (let storageName of tF) {
|
||||||
|
|||||||
@ -2,20 +2,24 @@
|
|||||||
import { storeData, createStorageObj } from "./storage.js";
|
import { storeData, createStorageObj } from "./storage.js";
|
||||||
import parseInput from "./parseTemplate.js";
|
import parseInput from "./parseTemplate.js";
|
||||||
import transformTemplateObject from "./buildForm.js";
|
import transformTemplateObject from "./buildForm.js";
|
||||||
import { showSidebar, handleOnBlur, modalNotifier } from "./evts.js";
|
import { handleOnBlur, modalNotifier } from "./evts.js";
|
||||||
import parseFormOnSubmit, { parseTextMarkups } from "./parseForm.js";
|
import parseFormOnSubmit, { parseTextMarkups } from "./parseForm.js";
|
||||||
|
import { setTemplatePreset } from "./web.js";
|
||||||
|
|
||||||
function buildForm(templateInput, loadOnly = false) {
|
function buildForm(templateInput, loadOnly = false) {
|
||||||
var wordArray = [];
|
var wordArray = [];
|
||||||
|
|
||||||
//display set Form button
|
|
||||||
if (!loadOnly) document.getElementById("setFormButton").style.display = "block";
|
|
||||||
|
|
||||||
//check for presets in "-form.txt" file; indicated by !JSON_placeholder
|
//check for presets in "-form.txt" file; indicated by !JSON_placeholder
|
||||||
if (templateInput.indexOf("!JSON_placeholder:") !== -1) {
|
if (templateInput.indexOf("!JSON_placeholder:") !== -1) {
|
||||||
let jsonPlaceholder = templateInput.split("!JSON_placeholder:")[1];
|
let jsonPlaceholder = templateInput.split("!JSON_placeholder:")[1];
|
||||||
|
let placeholder;
|
||||||
|
try {
|
||||||
|
placeholder = JSON.parse(jsonPlaceholder);
|
||||||
|
} catch (e) {
|
||||||
|
placeholder = ""
|
||||||
|
}
|
||||||
templateInput = templateInput.split("!JSON_placeholder:")[0];
|
templateInput = templateInput.split("!JSON_placeholder:")[0];
|
||||||
storeData("templatePreset", jsonPlaceholder);
|
storeData("templatePreset", placeholder);
|
||||||
}
|
}
|
||||||
//start building wordArray by splitting input by line win/unix and define eol char for recreating templateInput
|
//start building wordArray by splitting input by line win/unix and define eol char for recreating templateInput
|
||||||
let eol;
|
let eol;
|
||||||
@ -61,18 +65,15 @@ function buildForm(templateInput, loadOnly = false) {
|
|||||||
setStringPos(objects, templateInput);
|
setStringPos(objects, templateInput);
|
||||||
|
|
||||||
//save objects array and template file string for web.js in session storage
|
//save objects array and template file string for web.js in session storage
|
||||||
window.sessionStorage.setItem("templateObjects", JSON.stringify(objects));
|
activeState.templateObjects = objects;
|
||||||
window.sessionStorage.setItem("fullString", templateInput);
|
activeState.fullString = templateInput;
|
||||||
|
|
||||||
//sort objects array by words prio
|
//sort objects array by words prio
|
||||||
objects = prioritizeArray(objects);
|
objects = prioritizeArray(objects);
|
||||||
|
|
||||||
//remove non display objects and safe it to session storage
|
//remove non display objects and safe it to session storage
|
||||||
let objectsPurified = purifyObjects(objects);
|
let objectsPurified = purifyObjects(objects);
|
||||||
window.sessionStorage.setItem(
|
activeState.templateObjectsPurified = objectsPurified;
|
||||||
"templateObjectsPurified",
|
|
||||||
JSON.stringify(objectsPurified)
|
|
||||||
);
|
|
||||||
|
|
||||||
//reset page and event listeners
|
//reset page and event listeners
|
||||||
let mainFormDiv = document.getElementById("mainForm");
|
let mainFormDiv = document.getElementById("mainForm");
|
||||||
@ -107,7 +108,6 @@ function prioritizeArray(objects) {
|
|||||||
prioArray.sort(function (a, b) {
|
prioArray.sort(function (a, b) {
|
||||||
return a - b;
|
return a - b;
|
||||||
});
|
});
|
||||||
//console.log(prioArray);
|
|
||||||
for (let valSorted of prioArray) {
|
for (let valSorted of prioArray) {
|
||||||
for (let obj of objects) {
|
for (let obj of objects) {
|
||||||
if (valSorted === obj.prio) {
|
if (valSorted === obj.prio) {
|
||||||
@ -225,17 +225,19 @@ function formEvts() {
|
|||||||
parseFormOnSubmit();
|
parseFormOnSubmit();
|
||||||
e.target.className = e.target.className.replace(" w3-grey", " w3-flat-carrot");
|
e.target.className = e.target.className.replace(" w3-grey", " w3-flat-carrot");
|
||||||
e.target.style.pointerEvents = "none";
|
e.target.style.pointerEvents = "none";
|
||||||
modalNotifier(activeState.fileName + " copied to clipboard", 2);
|
e.target.value = "Copied";
|
||||||
|
modalNotifier(activeState.fileName + " copied to clipboard", activeState.settings.notifierPause);
|
||||||
const timeoutCopy = setTimeout(() => {
|
const timeoutCopy = setTimeout(() => {
|
||||||
e.target.className = e.target.className.replace(" w3-flat-carrot"," w3-grey");
|
//e.target.className = e.target.className.replace(" w3-flat-carrot"," w3-grey");
|
||||||
|
//e.target.value = "Copy";
|
||||||
e.target.style.pointerEvents = "auto";
|
e.target.style.pointerEvents = "auto";
|
||||||
}, 250);
|
}, 5000);
|
||||||
break;
|
break;
|
||||||
case "Save":
|
case "Save":
|
||||||
createStorageObj();
|
createStorageObj();
|
||||||
e.target.className = e.target.className.replace(" w3-grey", " w3-flat-nephritis");
|
e.target.className = e.target.className.replace(" w3-grey", " w3-flat-nephritis");
|
||||||
e.target.style.pointerEvents = "none";
|
e.target.style.pointerEvents = "none";
|
||||||
modalNotifier(activeState.fileName + " saved", 2);
|
modalNotifier(activeState.fileName + " saved", activeState.settings.notifierPause);
|
||||||
const timeoutSave = setTimeout(() => {
|
const timeoutSave = setTimeout(() => {
|
||||||
e.target.className = e.target.className.replace(" w3-flat-nephritis"," w3-grey");
|
e.target.className = e.target.className.replace(" w3-flat-nephritis"," w3-grey");
|
||||||
e.target.style.pointerEvents = "auto";
|
e.target.style.pointerEvents = "auto";
|
||||||
@ -252,7 +254,13 @@ function formEvts() {
|
|||||||
if (e.target) {
|
if (e.target) {
|
||||||
if (e.target.id == "sb-submit") {
|
if (e.target.id == "sb-submit") {
|
||||||
parseFormOnSubmit();
|
parseFormOnSubmit();
|
||||||
modalNotifier("File saved and copied to clipboard", 2);
|
modalNotifier("File saved and copied to clipboard", activeState.settings.notifierPause);
|
||||||
|
}
|
||||||
|
if (e.target.id == "sb-setform") {
|
||||||
|
let dataArray = parseFormOnSubmit(true);
|
||||||
|
let lT = activeState.loadedTemplate;
|
||||||
|
setTemplatePreset(lT, JSON.stringify(dataArray));
|
||||||
|
modalNotifier("Input saved as preset", activeState.settings.notifierPause);
|
||||||
}
|
}
|
||||||
if (e.target.id == "sb-item") {
|
if (e.target.id == "sb-item") {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -276,7 +284,6 @@ function formEvts() {
|
|||||||
function focusOnField(id) {
|
function focusOnField(id) {
|
||||||
let targetElement = document.getElementById(id);
|
let targetElement = document.getElementById(id);
|
||||||
if (targetElement == null) return;
|
if (targetElement == null) return;
|
||||||
|
|
||||||
document.activeElement.blur();
|
document.activeElement.blur();
|
||||||
targetElement.focus();
|
targetElement.focus();
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
|
|||||||
@ -3,31 +3,40 @@ import {
|
|||||||
showMenu,
|
showMenu,
|
||||||
showSidebar,
|
showSidebar,
|
||||||
showTextBlocks,
|
showTextBlocks,
|
||||||
clickSetForm,
|
|
||||||
clickImportFiles,
|
clickImportFiles,
|
||||||
modalNotifier,
|
modalNotifier,
|
||||||
|
printVersion,
|
||||||
} from "./evts.js";
|
} from "./evts.js";
|
||||||
import { buildFile } from "./files.js";
|
import { buildFile } from "./files.js";
|
||||||
import setPassword, {
|
import setPassword, {
|
||||||
passwordHash,
|
passwordHash,
|
||||||
sessionVerification,
|
|
||||||
inputRead,
|
inputRead,
|
||||||
|
getUsrId,
|
||||||
} from "./scripts.js";
|
} from "./scripts.js";
|
||||||
import { getUsrId, logout } from "./scripts.js";
|
|
||||||
import parseFormOnSubmit from "./parseForm.js";
|
import parseFormOnSubmit from "./parseForm.js";
|
||||||
import { createStorageObj } from "./storage.js";
|
import { createStorageObj, storeSettings } from "./storage.js";
|
||||||
import XORCipher from "./xorc.js";
|
|
||||||
import sha256 from "./sha256.min.js";
|
|
||||||
import { loadNavBar, initTextBlocks } from "./web.js";
|
import { loadNavBar, initTextBlocks } from "./web.js";
|
||||||
|
|
||||||
window.activeState = {
|
window.activeState = {
|
||||||
userId: getUsrId(),
|
userId: "",
|
||||||
|
sessionToken: "",
|
||||||
activePage: "landing",
|
activePage: "landing",
|
||||||
loadedTemplate: "",
|
loadedTemplate: "",
|
||||||
fileName: "",
|
fileName: "",
|
||||||
lastElement: "",
|
lastElement: "",
|
||||||
serverFilesTs: "",
|
serverFilesTs: "",
|
||||||
|
settings: {
|
||||||
|
localOnly: "true",
|
||||||
|
lineBreak: 120,
|
||||||
|
font: "Arial",
|
||||||
|
fontSize: "10px",
|
||||||
|
notifierPause: 1,
|
||||||
|
persistentStorage: "false"
|
||||||
|
},
|
||||||
templates: [],
|
templates: [],
|
||||||
|
templateObjectsPurified: [],
|
||||||
|
templateObjects: [],
|
||||||
|
fullString: "",
|
||||||
templateFieldTypes: [
|
templateFieldTypes: [
|
||||||
"simpleInput",
|
"simpleInput",
|
||||||
"longText",
|
"longText",
|
||||||
@ -37,27 +46,42 @@ window.activeState = {
|
|||||||
"markup",
|
"markup",
|
||||||
],
|
],
|
||||||
markups: ["title", "link", "italic", "green_highlighted", "highlighted"],
|
markups: ["title", "link", "italic", "green_highlighted", "highlighted"],
|
||||||
|
storage: []
|
||||||
};
|
};
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
//load settings into activeState
|
|
||||||
for (let setting of Object.entries(window.settings)) {
|
//check if localStorage is available
|
||||||
activeState[setting[0]] = setting[1];
|
try {
|
||||||
|
window.localStorage.getItem("test")
|
||||||
|
} catch (e) {
|
||||||
|
activeState.settings.persistentStorage = "false";
|
||||||
}
|
}
|
||||||
|
|
||||||
//check if user is logged in
|
//init passwordhash to retrieve cookie info
|
||||||
sessionVerification();
|
passwordHash.init();
|
||||||
let verfiedStatus = window.sessionStorage.getItem(sha256("verified"));
|
|
||||||
if (verfiedStatus != null) {
|
|
||||||
//user logged in
|
|
||||||
|
|
||||||
//write verifiedStatus content into passwordHash for decode check later
|
//set user id
|
||||||
passwordHash.set(XORCipher.decode(sha256("passwordHash"), verfiedStatus));
|
activeState.userId = getUsrId();
|
||||||
|
|
||||||
|
|
||||||
|
//check if user is logged in
|
||||||
|
if (passwordHash.verify()) {
|
||||||
|
//user logged in
|
||||||
document.getElementById("login").style.display = "none";
|
document.getElementById("login").style.display = "none";
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("login").style.display = "block";
|
document.getElementById("login").style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//load settings from storage
|
||||||
|
let settings = storeSettings("getInit", true);
|
||||||
|
|
||||||
|
if (settings != "") {
|
||||||
|
for (let setting of Object.entries(settings)) {
|
||||||
|
activeState.settings[setting[0]] = setting[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//load NavigationBar with templates according to server
|
//load NavigationBar with templates according to server
|
||||||
loadNavBar();
|
loadNavBar();
|
||||||
|
|
||||||
@ -67,8 +91,9 @@ function init() {
|
|||||||
//add event listeners to document and window
|
//add event listeners to document and window
|
||||||
eventListeners();
|
eventListeners();
|
||||||
|
|
||||||
//print current version to footer
|
//print current version and storage mode to footer
|
||||||
printVersion();
|
let msg = (activeState.settings.persistentStorage == "false") ? "temporary" : "persistent";
|
||||||
|
printVersion("storage mode: "+msg+" |");
|
||||||
|
|
||||||
//adjust title for mobile use
|
//adjust title for mobile use
|
||||||
if (screen.width < 993) {
|
if (screen.width < 993) {
|
||||||
@ -79,8 +104,8 @@ function init() {
|
|||||||
function eventListeners() {
|
function eventListeners() {
|
||||||
//add hideMenu to Body
|
//add hideMenu to Body
|
||||||
document
|
document
|
||||||
.getElementsByClassName("w3-main")[0]
|
.body
|
||||||
.addEventListener("click", hideMenus);
|
.addEventListener("click", (e) => hideMenus(e));
|
||||||
|
|
||||||
//add set Password to loginForm
|
//add set Password to loginForm
|
||||||
document
|
document
|
||||||
@ -105,20 +130,12 @@ function eventListeners() {
|
|||||||
document
|
document
|
||||||
.getElementById("toggleFilesMenu")
|
.getElementById("toggleFilesMenu")
|
||||||
.addEventListener("click", buildFile);
|
.addEventListener("click", buildFile);
|
||||||
//add load template sidebar entry
|
|
||||||
document
|
|
||||||
.getElementById("loadTemplateBtn")
|
|
||||||
.addEventListener("click", showMenu);
|
|
||||||
//add toggle textBLocks Menu
|
//add toggle textBLocks Menu
|
||||||
document
|
document
|
||||||
.getElementById("toggleTestBlocksMenu")
|
.getElementById("toggleTestBlocksMenu")
|
||||||
.addEventListener("click", showTextBlocks);
|
.addEventListener("click", showTextBlocks);
|
||||||
|
|
||||||
//add setFormBtn for use in form
|
|
||||||
document
|
|
||||||
.getElementById("setFormBtn")
|
|
||||||
.addEventListener("click", (e) => clickSetForm(e));
|
|
||||||
|
|
||||||
//add saveFiles to server listener on launch page
|
//add saveFiles to server listener on launch page
|
||||||
document
|
document
|
||||||
.getElementById("importFilesSB")
|
.getElementById("importFilesSB")
|
||||||
@ -132,27 +149,14 @@ function eventListeners() {
|
|||||||
if (e.ctrlKey && e.key == "s") {
|
if (e.ctrlKey && e.key == "s") {
|
||||||
createStorageObj();
|
createStorageObj();
|
||||||
parseFormOnSubmit();
|
parseFormOnSubmit();
|
||||||
modalNotifier("File copied to clipboard", 1);
|
modalNotifier("File copied to clipboard", activeState.settings.notifierPause);
|
||||||
|
let copyButton = document.getElementById("fromCopyBtn");
|
||||||
|
copyButton.className.replace(" w3-grey", " w3-flat-carrot");
|
||||||
|
copyButton.value = "Copied";
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function printVersion() {
|
|
||||||
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 = "version: " + pathVersion;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { sanitize } from "./scripts.js";
|
import { sanitize, getCurrentDate } from "./scripts.js";
|
||||||
import { storeData, clearData, retrieveData } from "./storage.js";
|
import { storeData, clearData, retrieveData } from "./storage.js";
|
||||||
|
|
||||||
function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
||||||
@ -9,23 +9,17 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
if (parseOnly) {
|
if (parseOnly) {
|
||||||
let lT = activeState.loadedTemplate;
|
let lT = activeState.loadedTemplate;
|
||||||
dataArray = retrieveData("userInputForce", lT);
|
dataArray = retrieveData("userInputForce", lT);
|
||||||
if (dataArray != "") {
|
|
||||||
try {
|
|
||||||
dataArray = JSON.parse(dataArray);
|
|
||||||
} catch (e) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dataArray == null) {
|
if (dataArray == null) {
|
||||||
let wrapper = document.createElement("div");
|
let wrapper = document.createElement("div");
|
||||||
wrapper.innerHTML = mainFormPlaceholder();
|
wrapper.innerHTML = mainFormPlaceholder("Error: file empty");
|
||||||
let div = wrapper.firstChild;
|
let div = wrapper.firstChild;
|
||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataArray.length <= 0) {
|
if (dataArray.length <= 0) {
|
||||||
let wrapper = document.createElement("div");
|
let wrapper = document.createElement("div");
|
||||||
wrapper.innerHTML = mainFormPlaceholder();
|
wrapper.innerHTML = mainFormPlaceholder("File empty");
|
||||||
let div = wrapper.firstChild;
|
let div = wrapper.firstChild;
|
||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
@ -55,10 +49,10 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
|
|
||||||
|
|
||||||
//get original objects from sessionstorage gen from loadTemplate
|
//get original objects from sessionstorage gen from loadTemplate
|
||||||
let objects = JSON.parse(window.sessionStorage.getItem("templateObjects"));
|
let objects = activeState.templateObjects;
|
||||||
|
|
||||||
//get the complete unparsed template string from sessionstorage from loadTemplate
|
//get the complete unparsed template string from sessionstorage from loadTemplate
|
||||||
let fullString = window.sessionStorage.getItem("fullString");
|
let fullString = activeState.fullString;
|
||||||
|
|
||||||
//define output buffer
|
//define output buffer
|
||||||
let b = "";
|
let b = "";
|
||||||
@ -95,8 +89,9 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//if field matches current object
|
//if field matches current object
|
||||||
if (obj.word.replace(/ /g, "_") === data.name) {
|
if (obj.word.replace(/ /g, "_") == data.name) {
|
||||||
let value = parseDataForResult(obj, data.value);
|
let value = parseDataForResult(obj, data.value);
|
||||||
|
if (value == "!none") value = "";
|
||||||
obj.result = value;
|
obj.result = value;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -104,12 +99,12 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
//handle conlist elements for parsing each element
|
//handle conlist elements for parsing each element
|
||||||
if (conListFlag && obj.type == "conList") {
|
if (conListFlag && obj.type == "conList") {
|
||||||
let value = parseConListForResult(obj, data, dataArray);
|
let value = parseConListForResult(obj, data, dataArray);
|
||||||
|
if (value == "!none") value = "";
|
||||||
obj.result = value;
|
obj.result = value;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log(this, dataArray);
|
|
||||||
|
|
||||||
b = fullString.substring(0, objects[0].spos);
|
b = fullString.substring(0, objects[0].spos);
|
||||||
for (let i = 0; i < objects.length; i++) {
|
for (let i = 0; i < objects.length; i++) {
|
||||||
@ -131,8 +126,8 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
bHtml = bHtml.replace(/ /g, " ");
|
bHtml = bHtml.replace(/ /g, " ");
|
||||||
|
|
||||||
let divContent = document.createElement("div");
|
let divContent = document.createElement("div");
|
||||||
divContent.style.fontFamily = activeState.font + ", Helvetica, sans-serif";
|
divContent.style.fontFamily = activeState.settings.font + ", Helvetica, sans-serif";
|
||||||
divContent.style.fontSize = activeState.fontSize;
|
divContent.style.fontSize = activeState.settings.fontSize;
|
||||||
divContent.innerHTML = bHtml;
|
divContent.innerHTML = bHtml;
|
||||||
|
|
||||||
let div = document.createElement("div");
|
let div = document.createElement("div");
|
||||||
@ -144,13 +139,7 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
// let p = document.createElement("p");
|
storeData("userInput", dataArray);
|
||||||
// p.innerHTML = "Copied to Clipboard:";
|
|
||||||
// document.getElementById("output").innerHTML = "";
|
|
||||||
// document.getElementById("output").appendChild(p);
|
|
||||||
// document.getElementById("output").appendChild(div);
|
|
||||||
|
|
||||||
storeData("userInput", JSON.stringify(dataArray));
|
|
||||||
clearData("userInput");
|
clearData("userInput");
|
||||||
|
|
||||||
if (returnJSON) {
|
if (returnJSON) {
|
||||||
@ -322,7 +311,7 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
//parse each line of input with parseLineBreak return condensed string with newlines
|
//parse each line of input with parseLineBreak return condensed string with newlines
|
||||||
let parsedData = '';
|
let parsedData = '';
|
||||||
for (let line of data.split('\n')) {
|
for (let line of data.split('\n')) {
|
||||||
let parsedLine = parseLineBreak(line, 0, activeState.lineBreak);
|
let parsedLine = parseLineBreak(line, 0, activeState.settings.lineBreak);
|
||||||
if (parsedData != '') {
|
if (parsedData != '') {
|
||||||
parsedData = parsedData + '\n' + parsedLine;
|
parsedData = parsedData + '\n' + parsedLine;
|
||||||
} else {
|
} else {
|
||||||
@ -332,7 +321,7 @@ function parseFormOnSubmit(returnJSON = false, parseOnly = false) {
|
|||||||
return parsedData
|
return parsedData
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseLineBreak(line, intendation = 0, lineBreak = activeState.lineBreak - 5) {
|
function parseLineBreak(line, intendation = 0, lineBreak = activeState.settings.lineBreak - 5) {
|
||||||
//add 5 chars buffer to fix list intendation issue
|
//add 5 chars buffer to fix list intendation issue
|
||||||
//each input field gets parsed line by line twice once for list inputs and a second time for each input
|
//each input field gets parsed line by line twice once for list inputs and a second time for each input
|
||||||
let lines;
|
let lines;
|
||||||
@ -435,8 +424,8 @@ function loadTextBlocks() {
|
|||||||
document.body.removeChild(container);
|
document.body.removeChild(container);
|
||||||
}
|
}
|
||||||
|
|
||||||
function mainFormPlaceholder() {
|
function mainFormPlaceholder(msg) {
|
||||||
return "<div class='w3-row-padding w3-padding-24 w3-container w3-flat-clouds'><div class='w3-code notranslate w3-border-white' style='font-family: Arial, Helvetica, sans-serif;'><p>Select a file</p><br><br><br><br><br><br><br><br><br><br><br></div></div>";
|
return "<div class='w3-row-padding w3-padding-24 w3-container w3-flat-clouds'><div class='w3-code notranslate w3-border-white' style='font-family: Arial, Helvetica, sans-serif;'><p>" + msg + "</p><br><br><br><br><br><br><br><br><br><br><br></div></div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
export default parseFormOnSubmit;
|
export default parseFormOnSubmit;
|
||||||
@ -4,47 +4,37 @@ import XORCipher from "./xorc.js";
|
|||||||
import getBrowserFingerprint from "./identify.js"
|
import getBrowserFingerprint from "./identify.js"
|
||||||
|
|
||||||
export const passwordHash = {
|
export const passwordHash = {
|
||||||
name: "anae3Iegbai1ahLu",
|
name: cyrb53("m21_"+getBrowserFingerprint( { hardwareOnly: true } )),
|
||||||
fp: getBrowserFingerprint( { hardwareOnly: true } ),
|
|
||||||
toString: () => {
|
toString: () => {
|
||||||
let data;
|
let token = window.activeState.sessionToken;
|
||||||
try {
|
if (token === null) return "none";
|
||||||
data = window.sessionStorage.getItem(sha256(passwordHash.name));
|
if (token == "") return "none"
|
||||||
} catch (e) {
|
return XORCipher.decode(passwordHash.name, token);
|
||||||
return "none";
|
|
||||||
}
|
|
||||||
if (data === null) return "none";
|
|
||||||
return XORCipher.decode(passwordHash.name, data);
|
|
||||||
},
|
|
||||||
getId: () => {
|
|
||||||
return passwordHash.fp;
|
|
||||||
},
|
},
|
||||||
set: (pw) => {
|
set: (pw) => {
|
||||||
window.sessionStorage.setItem(sha256(passwordHash.name), XORCipher.encode(passwordHash.name, pw));
|
activeState.sessionToken = XORCipher.encode(passwordHash.name, pw);
|
||||||
|
},
|
||||||
|
init: function () {
|
||||||
|
//check if cookie exists
|
||||||
|
if (getCookie(sha256(passwordHash.name)) != null) {
|
||||||
|
passwordHash.set(XORCipher.decode(sha256(passwordHash.name), getCookie(sha256(passwordHash.name))));
|
||||||
|
}
|
||||||
|
let verifiedStatus = false;
|
||||||
|
let tF = retrieveData("templateFiles");
|
||||||
|
if (tF != null) {verifiedStatus = true}
|
||||||
|
|
||||||
|
if (verifiedStatus == true) {
|
||||||
|
setCookie(sha256(passwordHash.name), XORCipher.encode(sha256(passwordHash.name), passwordHash), 10)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
verify: function () {
|
||||||
|
let verifiedStatus = false;
|
||||||
|
let tF = retrieveData("templateFiles");
|
||||||
|
if (tF != null) {verifiedStatus = true}
|
||||||
|
return verifiedStatus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//export const passwordHash = {
|
|
||||||
// toString: () => {
|
|
||||||
// let fp = getBrowserFingerprint( { hardwareOnly: true } );
|
|
||||||
// let data;
|
|
||||||
// try {
|
|
||||||
// data = window.sessionStorage.getItem(sha256(fp));
|
|
||||||
// } catch (e) {
|
|
||||||
// return "none";
|
|
||||||
// }
|
|
||||||
// if (data === null) return "none";
|
|
||||||
// return XORCipher.decode(fp, data);
|
|
||||||
// },
|
|
||||||
//
|
|
||||||
// set: (pw) => {
|
|
||||||
// let fp = getBrowserFingerprint( { hardwareOnly: true } );
|
|
||||||
// window.sessionStorage.setItem(sha256(fp), XORCipher.encode(fp, pw));
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function setPassword() {
|
function setPassword() {
|
||||||
let x = document.getElementById("loginForm");
|
let x = document.getElementById("loginForm");
|
||||||
let pw = sanitize(x.elements[0].value);
|
let pw = sanitize(x.elements[0].value);
|
||||||
@ -53,72 +43,23 @@ function setPassword() {
|
|||||||
let pwOld = pw;
|
let pwOld = pw;
|
||||||
passwordHash.set(sha256(pw));
|
passwordHash.set(sha256(pw));
|
||||||
let templateFiles = retrieveData("templateFiles");
|
let templateFiles = retrieveData("templateFiles");
|
||||||
if (templateFiles != "") {
|
if (templateFiles == null) {
|
||||||
try {
|
document.getElementById("wrongPWAlert").style.display = "block";
|
||||||
JSON.parse(templateFiles);
|
const alertTimeout = setTimeout(() => {
|
||||||
} catch (e) {
|
document.getElementById("wrongPWAlert").style.display = "none";
|
||||||
document.getElementById("wrongPWAlert").style.display = "block";
|
}, 5000);
|
||||||
const alertTimeout = setTimeout(() => {
|
passwordHash.set(pwOld);
|
||||||
document.getElementById("wrongPWAlert").style.display = "none";
|
x.elements[0].value = "";
|
||||||
}, 5000);
|
return;
|
||||||
passwordHash.set(pwOld);
|
|
||||||
x.elements[0].value = "";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//user logged in
|
//user logged in
|
||||||
|
|
||||||
document.getElementById("login").style.display = "none";
|
document.getElementById("login").style.display = "none";
|
||||||
window.sessionStorage.setItem(sha256("verified"), XORCipher.encode(sha256("passwordHash"), passwordHash));
|
setCookie(sha256(passwordHash.name), XORCipher.encode(sha256(passwordHash.name), passwordHash), 10)
|
||||||
setCookie(sha256("verified"), XORCipher.encode(sha256("passwordHash"), passwordHash), 10)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUsrId() {
|
function cyrb53(str, seed = 21) {
|
||||||
const fingerprint = getBrowserFingerprint( { hardwareOnly: true } );
|
|
||||||
return cyrb53(fingerprint + passwordHash);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function sessionVerification() {
|
|
||||||
|
|
||||||
//check if cookie exists
|
|
||||||
if (getCookie(sha256("verified")) != null) {
|
|
||||||
passwordHash.set(XORCipher.decode(sha256("passwordHash"), getCookie(sha256("verified"))));
|
|
||||||
window.sessionStorage.setItem(sha256("verified"), XORCipher.encode(sha256("passwordHash"), passwordHash));
|
|
||||||
}
|
|
||||||
|
|
||||||
let verfiedStatus = window.sessionStorage.getItem(sha256("verified"));
|
|
||||||
let data;
|
|
||||||
try {
|
|
||||||
data = window.sessionStorage.getItem(sha256(passwordHash.name));
|
|
||||||
} catch (e) {
|
|
||||||
verfiedStatus = null;
|
|
||||||
}
|
|
||||||
if (data === null) verfiedStatus = null;
|
|
||||||
|
|
||||||
//if (verfiedStatus != data) verfiedStatus = null
|
|
||||||
let vsString;
|
|
||||||
let pnString;
|
|
||||||
try {
|
|
||||||
vsString = XORCipher.decode(sha256("passwordHash"), verfiedStatus);
|
|
||||||
pnString = XORCipher.decode(passwordHash.name, data);
|
|
||||||
if (vsString != pnString) verfiedStatus = null;
|
|
||||||
} catch (e) {
|
|
||||||
verfiedStatus = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let tF = retrieveData("templateFiles");
|
|
||||||
try {
|
|
||||||
tF = JSON.parse(tF);
|
|
||||||
} catch(e) {
|
|
||||||
//verfiedStatus = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (verfiedStatus == null) ? false : true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const cyrb53 = (str, seed = 21) => {
|
|
||||||
let h1 = 0xdeadbeef ^ seed,
|
let h1 = 0xdeadbeef ^ seed,
|
||||||
h2 = 0x41c6ce57 ^ seed;
|
h2 = 0x41c6ce57 ^ seed;
|
||||||
for (let i = 0, ch; i < str.length; i++) {
|
for (let i = 0, ch; i < str.length; i++) {
|
||||||
@ -131,7 +72,12 @@ const cyrb53 = (str, seed = 21) => {
|
|||||||
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
||||||
|
|
||||||
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
|
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
|
||||||
};
|
}
|
||||||
|
|
||||||
|
export function getUsrId() {
|
||||||
|
const fingerprint = getBrowserFingerprint( { hardwareOnly: true } );
|
||||||
|
return cyrb53(fingerprint + passwordHash);
|
||||||
|
}
|
||||||
|
|
||||||
function setCookie(cname, cvalue, exdays) {
|
function setCookie(cname, cvalue, exdays) {
|
||||||
const d = new Date();
|
const d = new Date();
|
||||||
@ -140,7 +86,7 @@ function setCookie(cname, cvalue, exdays) {
|
|||||||
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
|
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCookie(cname) {
|
function getCookie(cname) {
|
||||||
let name = cname + "=";
|
let name = cname + "=";
|
||||||
let ca = document.cookie.split(';');
|
let ca = document.cookie.split(';');
|
||||||
for(let i = 0; i < ca.length; i++) {
|
for(let i = 0; i < ca.length; i++) {
|
||||||
@ -156,10 +102,10 @@ export function getCookie(cname) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function logout() {
|
export function logout() {
|
||||||
let id = sha256("verified");
|
let id = sha256(passwordHash.name);
|
||||||
window.sessionStorage.setItem(id, "");
|
activeState.sessionToken = "";
|
||||||
|
setCookie(sha256(passwordHash.name), "", 1);
|
||||||
document.cookie = id + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
document.cookie = id + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
||||||
sessionVerification();
|
|
||||||
document.getElementById("passwordField").value = "";
|
document.getElementById("passwordField").value = "";
|
||||||
document.getElementById("login").style.display = "block";
|
document.getElementById("login").style.display = "block";
|
||||||
}
|
}
|
||||||
@ -202,6 +148,7 @@ export const inputRead = {
|
|||||||
this.source = "";
|
this.source = "";
|
||||||
this.inputContent = "";
|
this.inputContent = "";
|
||||||
this.lastRunTime = new Date();
|
this.lastRunTime = new Date();
|
||||||
|
this.target = document.getElementById("toggleFilesMenu");
|
||||||
this.lastExecId = "";
|
this.lastExecId = "";
|
||||||
},
|
},
|
||||||
read: function (event) {
|
read: function (event) {
|
||||||
@ -220,12 +167,48 @@ export const inputRead = {
|
|||||||
this.lastRunTime = new Date();
|
this.lastRunTime = new Date();
|
||||||
clearTimeout(this.lastExecId);
|
clearTimeout(this.lastExecId);
|
||||||
|
|
||||||
document.getElementById("toggleFilesMenu").style.backgroundColor = "#c0392b";
|
this.target.style.borderBottom = "3px solid #c0392b";
|
||||||
|
this.target.innerHTML = "";
|
||||||
|
let i = document.createElement("i");
|
||||||
|
i.classList.add("fa", "fa-save");
|
||||||
|
this.target.appendChild(i);
|
||||||
this.lastExecId = setTimeout(() => {
|
this.lastExecId = setTimeout(() => {
|
||||||
createStorageObj();
|
createStorageObj();
|
||||||
document.getElementById("toggleFilesMenu").style.backgroundColor = "#34495e"
|
this.target.style.borderBottom = "none";
|
||||||
|
this.target.innerHTML = "";
|
||||||
|
let i = document.createElement("i");
|
||||||
|
i.classList.add("fa", "fa-file");
|
||||||
|
this.target.appendChild(i);
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getCurrentDate() {
|
||||||
|
let date = new Date();
|
||||||
|
let uts = Date.now();
|
||||||
|
let current_hour = date.getHours();
|
||||||
|
current_hour = current_hour <= 9 ? "0" + current_hour : current_hour;
|
||||||
|
let current_minute = date.getMinutes();
|
||||||
|
current_minute = current_minute <= 9 ? "0" + current_minute : current_minute;
|
||||||
|
let current_second = date.getSeconds();
|
||||||
|
current_second = current_second <= 9 ? "0" + current_second : current_second;
|
||||||
|
let current_month = date.getMonth() + 1;
|
||||||
|
current_month = current_month <= 9 ? "0" + current_month : current_month;
|
||||||
|
let current_day = date.getDate();
|
||||||
|
current_day = current_day <= 9 ? "0" + current_day : current_day;
|
||||||
|
let current_year = date.getFullYear();
|
||||||
|
|
||||||
|
|
||||||
|
let current_time = current_hour + ":" + current_minute;
|
||||||
|
let current_time_long = current_hour + ":" + current_minute + ":" + current_second;
|
||||||
|
let current_date = current_day + "." + current_month;
|
||||||
|
return {
|
||||||
|
current_time: current_time,
|
||||||
|
current_time_long: current_time_long,
|
||||||
|
current_date: current_date,
|
||||||
|
current_year: current_year,
|
||||||
|
uts: uts
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export default setPassword;
|
export default setPassword;
|
||||||
|
|||||||
207
js/9.9.9/settings.js
Normal file
207
js/9.9.9/settings.js
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
import { hideMenus, modalNotifier, printVersion, resetNavBar } from "./evts.js";
|
||||||
|
import { passwordHash, sanitize } from "./scripts.js";
|
||||||
|
import sha256 from "./sha256.min.js";
|
||||||
|
import { retrieveData, storeData, storeSettings } from "./storage.js";
|
||||||
|
|
||||||
|
const buildSettings = () => {
|
||||||
|
//set current page value in activeState object
|
||||||
|
activeState.activePage = "settings";
|
||||||
|
|
||||||
|
if (screen.width > 992) {
|
||||||
|
document.getElementById("siteTitle").innerHTML = "Settings";
|
||||||
|
} else {
|
||||||
|
document.getElementById("siteTitle").innerHTML = "TG";
|
||||||
|
document.getElementById("logo").innerHTML = "TG";
|
||||||
|
}
|
||||||
|
|
||||||
|
//sessionVerfication check
|
||||||
|
if (!passwordHash.verify()) {
|
||||||
|
modalNotifier("Error: Session is not authenticated...", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//reset navbar if files was used
|
||||||
|
resetNavBar();
|
||||||
|
|
||||||
|
//disable toggleTestBlocksMenu
|
||||||
|
document.getElementById("toggleTestBlocksMenu").style.display = "none";
|
||||||
|
|
||||||
|
//reset page and event listeners
|
||||||
|
|
||||||
|
hideMenus();
|
||||||
|
|
||||||
|
let mainFormDiv = document.getElementById("mainForm");
|
||||||
|
let outputDiv = document.getElementById("output");
|
||||||
|
let submitContainerDiv = document.getElementById("submitContainer");
|
||||||
|
let sidebarDiv = document.getElementById("sidebar");
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
|
addSidebar();
|
||||||
|
|
||||||
|
buildForm();
|
||||||
|
|
||||||
|
//add events
|
||||||
|
formEvts();
|
||||||
|
};
|
||||||
|
|
||||||
|
function formEvts() {
|
||||||
|
//add event listener to submitContainer
|
||||||
|
document.getElementById("submitContainer").addEventListener("click", (e) => {
|
||||||
|
if (e.target && e.target.tagName === "INPUT") {
|
||||||
|
switch (e.target.value) {
|
||||||
|
case "Save":
|
||||||
|
saveSettings();
|
||||||
|
modalNotifier(
|
||||||
|
"Settings saved!",
|
||||||
|
activeState.settings.notifierPause
|
||||||
|
);
|
||||||
|
e.target.className = e.target.className.replace(
|
||||||
|
" w3-grey",
|
||||||
|
" w3-flat-nephritis"
|
||||||
|
);
|
||||||
|
e.target.style.pointerEvents = "none";
|
||||||
|
const timeoutSave = setTimeout(() => {
|
||||||
|
e.target.className = e.target.className.replace(
|
||||||
|
" w3-flat-nephritis",
|
||||||
|
" w3-grey"
|
||||||
|
);
|
||||||
|
e.target.style.pointerEvents = "auto";
|
||||||
|
}, 250);
|
||||||
|
e.preventDefault;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
e.preventDefault;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function buildForm() {
|
||||||
|
let form = document.createElement("FORM");
|
||||||
|
form.setAttribute("method", "post");
|
||||||
|
form.setAttribute("action", "javascript:void(0)");
|
||||||
|
form.setAttribute("id", "mainFormObj");
|
||||||
|
form.classList.add("w3-row");
|
||||||
|
|
||||||
|
let settings = storeSettings("get", true);
|
||||||
|
if (settings == "") settings = activeState.settings;
|
||||||
|
|
||||||
|
for (let setting of Object.entries(settings)) {
|
||||||
|
buildField(setting, form);
|
||||||
|
}
|
||||||
|
|
||||||
|
//add form to mainForm Div
|
||||||
|
document.getElementById("mainForm").appendChild(form);
|
||||||
|
|
||||||
|
// create a Save button
|
||||||
|
let saveBtn = document.createElement("input");
|
||||||
|
saveBtn.setAttribute("type", "submit");
|
||||||
|
saveBtn.setAttribute("value", "Save");
|
||||||
|
saveBtn.classList.add("w3-button");
|
||||||
|
saveBtn.classList.add("w3-grey");
|
||||||
|
saveBtn.style.margin = "20px";
|
||||||
|
//append submit button to submitContainer
|
||||||
|
|
||||||
|
document.getElementById("submitContainer").appendChild(saveBtn);
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildField(obj, form) {
|
||||||
|
|
||||||
|
//create template Input fields
|
||||||
|
let divContainer = document.createElement("DIV");
|
||||||
|
divContainer.classList.add("w3-half");
|
||||||
|
divContainer.classList.add("w3-container");
|
||||||
|
|
||||||
|
let div = document.createElement("DIV");
|
||||||
|
div.classList.add("w3-section");
|
||||||
|
div.classList.add("w3-left-align");
|
||||||
|
|
||||||
|
div.setAttribute("style", "padding: 10px");
|
||||||
|
|
||||||
|
let label = document.createElement("LABEL");
|
||||||
|
label.style.display = "inline-block";
|
||||||
|
label.style.width = "100%";
|
||||||
|
label.style.paddingBottom = "5px";
|
||||||
|
label.style.borderBottom = "thin solid #9e9e9e";
|
||||||
|
label.style.fontWeight = "800";
|
||||||
|
|
||||||
|
let input = document.createElement("input");
|
||||||
|
input.setAttribute("type", "text");
|
||||||
|
input.setAttribute("name", obj[0]);
|
||||||
|
input.setAttribute("id", obj[0]);
|
||||||
|
input.classList.add("w3-input");
|
||||||
|
input.id = obj[0];
|
||||||
|
input.value = obj[1];
|
||||||
|
label.innerHTML = obj[0];
|
||||||
|
div.appendChild(label);
|
||||||
|
div.appendChild(input);
|
||||||
|
//append field to wrapper and add to mainForm
|
||||||
|
divContainer.appendChild(div);
|
||||||
|
form.appendChild(divContainer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSidebar() {
|
||||||
|
let sidebarList = document.createElement("ul");
|
||||||
|
sidebarList.classList.add("w3-ul");
|
||||||
|
|
||||||
|
let sidebarListItem = document.createElement("li");
|
||||||
|
|
||||||
|
sidebarListItem.classList.add(
|
||||||
|
"w3-bar-item",
|
||||||
|
"w3-padding-large",
|
||||||
|
"w3-button"
|
||||||
|
);
|
||||||
|
sidebarListItem.style.borderBottom = "1px solid #ddd";
|
||||||
|
sidebarListItem.id = "sb-title";
|
||||||
|
sidebarListItem.innerHTML = "Edit Settings"
|
||||||
|
sidebarList.appendChild(sidebarListItem);
|
||||||
|
|
||||||
|
document.getElementById("sidebar").appendChild(sidebarList);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSettings() {
|
||||||
|
let x = document.getElementById("mainFormObj");
|
||||||
|
let obj = {};
|
||||||
|
if (x == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < x.length; i++) {
|
||||||
|
let name = x.elements[i].name;
|
||||||
|
let value = x.elements[i].value;
|
||||||
|
obj[name] = sanitize(value);
|
||||||
|
}
|
||||||
|
for (let setting of Object.entries(obj)) {
|
||||||
|
if (activeState.settings[setting[0]] != setting[1]) {
|
||||||
|
//change detected
|
||||||
|
if (setting[0] == "persistentStorage") {
|
||||||
|
let tF = retrieveData("templateFiles");
|
||||||
|
let settings = storeSettings("get", true);
|
||||||
|
activeState.settings[setting[0]] = setting[1];
|
||||||
|
|
||||||
|
if (setting[1] == "false") {
|
||||||
|
try {
|
||||||
|
window.localStorage.removeItem(sha256("settings_m21_"));
|
||||||
|
} catch (e) {}
|
||||||
|
let msg = (activeState.settings.persistentStorage == "false") ? "temporary" : "persistent";
|
||||||
|
printVersion("storage mode: "+msg+" |");
|
||||||
|
}
|
||||||
|
if (settings != "") storeSettings(settings);
|
||||||
|
if (tF != null) storeData("templateFiles", tF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activeState.settings[setting[0]] = setting[1];
|
||||||
|
}
|
||||||
|
storeSettings(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default buildSettings;
|
||||||
@ -1,7 +1,37 @@
|
|||||||
import XORCipher from "./xorc.js";
|
import XORCipher from "./xorc.js";
|
||||||
import sha256 from "./sha256.min.js";
|
import sha256 from "./sha256.min.js";
|
||||||
import { getUsrId, passwordHash, sanitize } from "./scripts.js";
|
import { getCurrentDate, getUsrId, passwordHash, sanitize } from "./scripts.js";
|
||||||
|
import { printVersion } from "./evts.js";
|
||||||
|
|
||||||
|
const store = {
|
||||||
|
getItem: function (key) {return getStor().getItem(key)},
|
||||||
|
setItem: function (key, data) {getStor().setItem(key, data)},
|
||||||
|
removeItem: function (key) {getStor().removeItem(key)},
|
||||||
|
clear: function () {getStor().clear()},
|
||||||
|
};
|
||||||
|
|
||||||
|
const tempStore = {
|
||||||
|
setItem: function (key, data) {
|
||||||
|
globalThis.activeState.storage[key] = data;
|
||||||
|
},
|
||||||
|
getItem: function (key) {
|
||||||
|
return globalThis.activeState.storage[key];
|
||||||
|
},
|
||||||
|
removeItem: function (key) {
|
||||||
|
globalThis.activeState.storage[key] = "";
|
||||||
|
},
|
||||||
|
clear: function () {
|
||||||
|
globalThis.activeState.storage = "";
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function getStor() {
|
||||||
|
if (window.activeState.settings.persistentStorage == "true") {
|
||||||
|
return window.localStorage;
|
||||||
|
} else {
|
||||||
|
return tempStore;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function createStorageObj() {
|
function createStorageObj() {
|
||||||
let x = document.getElementById("mainFormObj");
|
let x = document.getElementById("mainFormObj");
|
||||||
@ -30,16 +60,16 @@ function createStorageObj() {
|
|||||||
}
|
}
|
||||||
} else if (userFileNamePH.length != 0) {
|
} else if (userFileNamePH.length != 0) {
|
||||||
activeState.fileName = userFileNamePH;
|
activeState.fileName = userFileNamePH;
|
||||||
}
|
}
|
||||||
|
|
||||||
storeData("userInput", JSON.stringify(dataArray));
|
storeData("userInput", dataArray, "save");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function storeData(name, data) {
|
function storeData(name, data, ref) {
|
||||||
|
data = JSON.stringify(data);
|
||||||
//setCookie(name, btoa(data), 7);
|
//setCookie(name, btoa(data), 7);
|
||||||
if (name == "userInput") {
|
if (name == "userInput") {
|
||||||
name = getFileName();
|
name = getFileName(ref);
|
||||||
}
|
}
|
||||||
if (name == "userInputForce") {
|
if (name == "userInputForce") {
|
||||||
name = "userInput";
|
name = "userInput";
|
||||||
@ -49,147 +79,141 @@ function storeData(name, data) {
|
|||||||
if (name == "templateFiles") {
|
if (name == "templateFiles") {
|
||||||
key = sha256(name + "_m21_");
|
key = sha256(name + "_m21_");
|
||||||
}
|
}
|
||||||
window.localStorage.setItem(key, obfuscate(data));
|
store.setItem(key, obfuscate(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
function retrieveData(type, template = "none") {
|
function retrieveData(name, template = "none") {
|
||||||
if (type == "userInput") {
|
if (name == "userInput") {
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
if (tF == null) {
|
if (tF == null) {
|
||||||
return "";
|
return [];
|
||||||
} else {
|
} else {
|
||||||
type = tF[tF.length - 1].fileName;
|
name = tF[tF.length - 1].fileName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type == "userInputForce") {
|
if (name == "userInputForce") {
|
||||||
type = "userInput";
|
name = "userInput";
|
||||||
}
|
}
|
||||||
let cdata;
|
let cdata;
|
||||||
|
let key;
|
||||||
if (template == "none") {
|
if (template == "none") {
|
||||||
let lT = activeState.loadedTemplate;
|
let lT = activeState.loadedTemplate;
|
||||||
let key = sha256(type + "_m21_" + lT);
|
key = sha256(name + "_m21_" + lT);
|
||||||
if (type == "templateFiles") {
|
if (name == "templateFiles") {
|
||||||
key = sha256(type + "_m21_");
|
key = sha256(name + "_m21_");
|
||||||
}
|
}
|
||||||
cdata = window.localStorage.getItem(key);
|
|
||||||
} else {
|
} else {
|
||||||
let key = sha256(type + "_m21_" + template);
|
key = sha256(name + "_m21_" + template);
|
||||||
cdata = window.localStorage.getItem(key);
|
|
||||||
}
|
}
|
||||||
|
cdata = store.getItem(key);
|
||||||
|
|
||||||
if (cdata != null) {
|
if (cdata != null) {
|
||||||
return obfuscate(cdata, false);
|
cdata = obfuscate(cdata, false);
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
data = JSON.parse(cdata);
|
||||||
|
} catch (e) {
|
||||||
|
data = null;
|
||||||
|
}
|
||||||
|
return data;
|
||||||
} else {
|
} else {
|
||||||
return "[]";
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearData(type, template = "none") {
|
function clearData(name, template = "none") {
|
||||||
let lT;
|
let lT;
|
||||||
let key;
|
let key;
|
||||||
if (template == "none") {
|
if (template == "none") {
|
||||||
lT = activeState.loadedTemplate;
|
lT = activeState.loadedTemplate;
|
||||||
key = sha256(type + "_m21_" + lT);
|
key = sha256(name + "_m21_" + lT);
|
||||||
if (type == "templateFiles") {
|
if (name == "templateFiles") {
|
||||||
key = sha256(type + "_m21_");
|
key = sha256(name + "_m21_");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lT = template;
|
lT = template;
|
||||||
key = sha256(type + "_m21_" + template);
|
key = sha256(name + "_m21_" + template);
|
||||||
}
|
}
|
||||||
window.localStorage.removeItem(key);
|
store.removeItem(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFileName() {
|
function getFileName(ref = "none") {
|
||||||
let currentFileName = activeState.fileName;
|
let currentFileName = activeState.fileName;
|
||||||
let lT = activeState.loadedTemplate;
|
let lT = activeState.loadedTemplate;
|
||||||
if (currentFileName == "none" || currentFileName == "") {
|
if (currentFileName == "none" || currentFileName == "") {
|
||||||
let date = new Date();
|
let date = getCurrentDate();
|
||||||
let current_hour = date.getHours();
|
currentFileName = date.current_time + "_" + date.current_date + " " + lT;
|
||||||
current_hour = current_hour <= 9 ? "0" + current_hour : current_hour;
|
|
||||||
let current_minute = date.getMinutes();
|
|
||||||
current_minute =
|
|
||||||
current_minute <= 9 ? "0" + current_minute : current_minute;
|
|
||||||
let current_month = date.getMonth() + 1;
|
|
||||||
current_month = current_month <= 9 ? "0" + current_month : current_month;
|
|
||||||
let current_year = date.getDate();
|
|
||||||
current_year = current_year <= 9 ? "0" + current_year : current_year;
|
|
||||||
|
|
||||||
let current_time = current_hour + ":" + current_minute;
|
|
||||||
let current_date = current_year + "." + current_month;
|
|
||||||
currentFileName = current_time + "_" + current_date + " " + lT;
|
|
||||||
//console.log(currentFileName);
|
//console.log(currentFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
let tF = null;
|
let tF = retrieveData("templateFiles");
|
||||||
try {
|
const metadata = {
|
||||||
tF = JSON.parse(retrieveData("templateFiles"));
|
ts_create: getCurrentDate(),
|
||||||
} catch(e) {
|
ts_save: "",
|
||||||
tF = null;
|
id: sha256(currentFileName),
|
||||||
}
|
};
|
||||||
|
|
||||||
if (tF != null) {
|
if (tF.length != 0) {
|
||||||
for (let tFi of tF) {
|
for (let tFi of tF) {
|
||||||
if (tFi.fileName == currentFileName) {return currentFileName};
|
if (tFi.fileName == currentFileName) {
|
||||||
|
tFi.metadata.ts_save = getCurrentDate();
|
||||||
|
return currentFileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tF.push({ fileName: currentFileName, template: lT });
|
tF.push({
|
||||||
|
fileName: currentFileName,
|
||||||
|
template: lT,
|
||||||
|
metadata: metadata,
|
||||||
|
pos: tF.length - 1,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
tF = [{ fileName: currentFileName, template: lT }];
|
tF = [
|
||||||
|
{ fileName: currentFileName, template: lT, metadata: metadata, pos: 0 },
|
||||||
|
];
|
||||||
}
|
}
|
||||||
storeData("templateFiles", JSON.stringify(tF));
|
storeData("templateFiles", tF);
|
||||||
activeState.fileName = currentFileName;
|
activeState.fileName = currentFileName;
|
||||||
return currentFileName;
|
return currentFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
function obfuscate(data, mode = true) {
|
function obfuscate(data, mode = true) {
|
||||||
if (mode) {
|
if (mode) {
|
||||||
return XORCipher.encode(sha256(passwordHash), data);
|
return XORCipher.encode(sha256(passwordHash), data);
|
||||||
} else {
|
} else {
|
||||||
return XORCipher.decode(sha256(passwordHash), data);
|
return XORCipher.decode(sha256(passwordHash), data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function popFromTemplateFiles(fileName) {
|
function popFromTemplateFiles(fileName) {
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
let newArray = [];
|
let newArray = [];
|
||||||
for (let obj of tF) {
|
for (let obj of tF) {
|
||||||
if (obj.fileName != fileName) {
|
if (obj.fileName != fileName) {
|
||||||
newArray.push(obj);
|
newArray.push(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
storeData("templateFiles", JSON.stringify(newArray));
|
storeData("templateFiles", newArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createBookShelf() {
|
function createBookShelf() {
|
||||||
let tF = JSON.parse(retrieveData("templateFiles"));
|
let tF = retrieveData("templateFiles");
|
||||||
let bookShelf = {};
|
let bookShelf = {};
|
||||||
let date = new Date();
|
let date = getCurrentDate();
|
||||||
let current_hour = date.getHours();
|
let saveFileName = date.current_time + "_" + date.current_date;
|
||||||
current_hour = current_hour <= 9 ? "0" + current_hour : current_hour;
|
|
||||||
let current_minute = date.getMinutes();
|
|
||||||
current_minute =
|
|
||||||
current_minute <= 9 ? "0" + current_minute : current_minute;
|
|
||||||
let current_month = date.getMonth() + 1;
|
|
||||||
current_month = current_month <= 9 ? "0" + current_month : current_month;
|
|
||||||
let current_year = date.getDate();
|
|
||||||
current_year = current_year <= 9 ? "0" + current_year : current_year;
|
|
||||||
|
|
||||||
let current_time = current_hour + ":" + current_minute;
|
|
||||||
let current_date = current_year + "." + current_month;
|
|
||||||
let saveFileName = current_time + "_" + current_date;
|
|
||||||
|
|
||||||
if (tF != null) {
|
if (tF != null) {
|
||||||
bookShelf[0] = {name: "hash", data: getUsrId(), ts: saveFileName};
|
bookShelf[0] = { name: "hash", data: getUsrId(), ts: saveFileName };
|
||||||
let i = 1;
|
let i = 1;
|
||||||
for (let tFi of tF) {
|
for (let tFi of tF) {
|
||||||
let data = retrieveData(tFi.fileName, tFi.template);
|
let data = retrieveData(tFi.fileName, tFi.template);
|
||||||
bookShelf[i] = {};
|
bookShelf[i] = {};
|
||||||
bookShelf[i].name = tFi.fileName + "_m21_" + tFi.template;
|
bookShelf[i].name = tFi.fileName + "_m21_" + tFi.template;
|
||||||
if (activeState.localOnly) {
|
if (activeState.settings.localOnly == "true") {
|
||||||
bookShelf[i].data = data;
|
bookShelf[i].data = data;
|
||||||
} else {
|
} else {
|
||||||
bookShelf[i].data = obfuscate(data);
|
bookShelf[i].data = obfuscate(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,8 +221,7 @@ function createBookShelf() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function importBookShelf() {
|
function importBookShelf() {
|
||||||
|
localStorage.clear();
|
||||||
localStorage.clear()
|
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.onreadystatechange = function () {
|
xhttp.onreadystatechange = function () {
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
@ -210,16 +233,52 @@ function importBookShelf() {
|
|||||||
let templateFilesArray = [];
|
let templateFilesArray = [];
|
||||||
for (let file of mainArray) {
|
for (let file of mainArray) {
|
||||||
if (file.name == "hash") continue;
|
if (file.name == "hash") continue;
|
||||||
window.localStorage.setItem(sha256(file.name), file.data);
|
store.setItem(sha256(file.name), file.data);
|
||||||
templateFilesArray.push({ fileName: file.name.split("_m21_")[0], template: file.name.split("_m21_")[1] });
|
templateFilesArray.push({
|
||||||
|
fileName: file.name.split("_m21_")[0],
|
||||||
|
template: file.name.split("_m21_")[1],
|
||||||
|
});
|
||||||
}
|
}
|
||||||
window.localStorage.setItem(sha256("templateFiles-"), obfuscate(JSON.stringify(templateFilesArray)));
|
store.setItem(
|
||||||
|
sha256("templateFiles-"),
|
||||||
|
obfuscate(JSON.stringify(templateFilesArray))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
xhttp.open("GET", "php/?getStoredFiles="+getUsrId(), true);
|
xhttp.open("GET", "php/?getStoredFiles=" + getUsrId(), true);
|
||||||
xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
|
xhttp.setRequestHeader(
|
||||||
|
"Content-type",
|
||||||
|
"application/x-www-form-urlencoded; charset=UTF-8"
|
||||||
|
);
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
export { createStorageObj, storeData, retrieveData, clearData, getFileName, createBookShelf, importBookShelf};
|
function storeSettings(data, get = false) {
|
||||||
|
let key = sha256("settings_m21_");
|
||||||
|
|
||||||
|
if (get) {
|
||||||
|
let cdata = "";
|
||||||
|
if (data == "getInit") {activeState.settings.persistentStorage = "true"}
|
||||||
|
try {
|
||||||
|
cdata = JSON.parse(obfuscate(store.getItem(key), false));
|
||||||
|
} catch (e) {
|
||||||
|
cdata = "";
|
||||||
|
}
|
||||||
|
if (data == "getInit") {activeState.settings.persistentStorage = "false"};
|
||||||
|
return cdata;
|
||||||
|
} else {
|
||||||
|
store.setItem(key, obfuscate(JSON.stringify(data)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
createStorageObj,
|
||||||
|
storeData,
|
||||||
|
retrieveData,
|
||||||
|
clearData,
|
||||||
|
getFileName,
|
||||||
|
createBookShelf,
|
||||||
|
importBookShelf,
|
||||||
|
storeSettings,
|
||||||
|
};
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
import buildForm from "./form.js";
|
import buildForm from "./form.js";
|
||||||
import { loadFileDivCallBack } from "./files.js";
|
import { loadFileDivCallBack } from "./files.js";
|
||||||
import { retrieveData, clearData, getFileName, importBookShelf } from "./storage.js";
|
import { retrieveData, clearData, getFileName } from "./storage.js";
|
||||||
import { insertTextBlocks, modalNotifier } from "./evts.js";
|
import { insertTextBlocks, modalNotifier, resetNavBar } from "./evts.js";
|
||||||
import { createTemplate, createTemplateCallBack} from "./createTemplate.js";
|
import { createTemplate, createTemplateCallBack} from "./createTemplate.js";
|
||||||
import { getUsrId, logout, sessionVerification } from "./scripts.js";
|
import { getUsrId, logout, passwordHash } from "./scripts.js";
|
||||||
|
import buildSettings from "./settings.js";
|
||||||
|
|
||||||
|
|
||||||
function loadTemplate(template, newFlag = false, loadOnly = false) {
|
function loadTemplate(template, newFlag = false, loadOnly = false) {
|
||||||
document.getElementById("siteTitle").innerHTML = template.replace(/_/g, " ");
|
document.getElementById("siteTitle").innerHTML = template.replace(/_/g, " ");
|
||||||
@ -18,10 +20,12 @@ function loadTemplate(template, newFlag = false, loadOnly = false) {
|
|||||||
document.getElementById("navMob").className = document
|
document.getElementById("navMob").className = document
|
||||||
.getElementById("navMob")
|
.getElementById("navMob")
|
||||||
.className.replace(" w3-show", "");
|
.className.replace(" w3-show", "");
|
||||||
|
|
||||||
if (screen.width < 993) {
|
if (screen.width < 993) {
|
||||||
let sidebar = document.getElementById("sidebar");
|
let sidebar = document.getElementById("sidebar");
|
||||||
sidebar.style.display = "none";
|
sidebar.style.display = "none";
|
||||||
document.getElementById("siteTitle").innerHTML = "TG";
|
document.getElementById("siteTitle").innerHTML = "TG";
|
||||||
|
document.getElementById("logo").innerHTML = "TG";
|
||||||
}
|
}
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.onreadystatechange = function () {
|
xhttp.onreadystatechange = function () {
|
||||||
@ -44,21 +48,12 @@ function loadTemplate(template, newFlag = false, loadOnly = false) {
|
|||||||
} else {
|
} else {
|
||||||
cdata = retrieveData("userInputForce");
|
cdata = retrieveData("userInputForce");
|
||||||
}
|
}
|
||||||
if (cdata != "") {
|
if (cdata != "" || cdata == null) {
|
||||||
let res = "";
|
retrieveForm(cdata);
|
||||||
try {
|
|
||||||
res = JSON.parse(cdata);
|
|
||||||
} catch (e) {
|
|
||||||
console.log("error", cdata);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
retrieveForm(res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//select first object and focus on it
|
//select first object and focus on it
|
||||||
let obj = JSON.parse(
|
let obj = activeState.templateObjectsPurified;
|
||||||
window.sessionStorage.getItem("templateObjectsPurified")
|
|
||||||
);
|
|
||||||
let firstElement = document.getElementById(obj[0].word.replace(/ /g, "_"));
|
let firstElement = document.getElementById(obj[0].word.replace(/ /g, "_"));
|
||||||
if (firstElement != null) firstElement.focus();
|
if (firstElement != null) firstElement.focus();
|
||||||
|
|
||||||
@ -71,8 +66,11 @@ function loadTemplate(template, newFlag = false, loadOnly = false) {
|
|||||||
|
|
||||||
function loadNewTemplate(template) {
|
function loadNewTemplate(template) {
|
||||||
|
|
||||||
|
//reset navbar above all else
|
||||||
|
resetNavBar();
|
||||||
|
|
||||||
//sessionVerfication check
|
//sessionVerfication check
|
||||||
if (!sessionVerification()) {
|
if (!passwordHash.verify()) {
|
||||||
modalNotifier("Error: Session is not authenticated...", 0);
|
modalNotifier("Error: Session is not authenticated...", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +117,13 @@ function loadNavBar() {
|
|||||||
createEntry.innerHTML = "Manage templates";
|
createEntry.innerHTML = "Manage templates";
|
||||||
divMob.appendChild(createEntry);
|
divMob.appendChild(createEntry);
|
||||||
|
|
||||||
|
createEntry = document.createElement("a");
|
||||||
|
createEntry.setAttribute("href", "#");
|
||||||
|
createEntry.setAttribute("data-template", "!settings");
|
||||||
|
createEntry.classList.add("w3-bar-item", "w3-button", "w3-padding-large");
|
||||||
|
createEntry.innerHTML = "Settings";
|
||||||
|
divMob.appendChild(createEntry);
|
||||||
|
|
||||||
createEntry = document.createElement("a");
|
createEntry = document.createElement("a");
|
||||||
createEntry.setAttribute("href", "#");
|
createEntry.setAttribute("href", "#");
|
||||||
createEntry.setAttribute("data-template", "!logout");
|
createEntry.setAttribute("data-template", "!logout");
|
||||||
@ -137,6 +142,10 @@ function loadNavBar() {
|
|||||||
logout();
|
logout();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (template == "!settings") {
|
||||||
|
buildSettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
loadNewTemplate(template);
|
loadNewTemplate(template);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -275,6 +284,7 @@ function delStoredDataOnServer() {
|
|||||||
|
|
||||||
|
|
||||||
function retrieveForm(arr) {
|
function retrieveForm(arr) {
|
||||||
|
|
||||||
for (let i = 0; i < arr.length; i++) {
|
for (let i = 0; i < arr.length; i++) {
|
||||||
|
|
||||||
let e = document.getElementById(arr[i].name);
|
let e = document.getElementById(arr[i].name);
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
var XORCipher = {
|
const XORCipher = {
|
||||||
encode: function (key, data, seed) {
|
encode: function (key, data, seed) {
|
||||||
data = xor_encrypt(key, data, seed);
|
data = xor_encrypt(key, data, seed);
|
||||||
return b64_encode(data);
|
return b64_encode(data);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user