fixed bug with sidebar click event not being cleared after accessing files and then pressing edit some cosmetic changes animations reimplemented bookshelfexport in localonly mode added logout functionality
226 lines
6.8 KiB
JavaScript
226 lines
6.8 KiB
JavaScript
import XORCipher from "./xorc.js";
|
|
import sha256 from "./sha256.min.js";
|
|
import { getUsrId, passwordHash } from "./scripts.js";
|
|
|
|
|
|
function createStorageObj() {
|
|
let x = document.getElementById("mainFormObj");
|
|
let dataArray = [];
|
|
if (x == null) {
|
|
return;
|
|
}
|
|
for (let i = 0; i < x.length; i++) {
|
|
dataArray.push({
|
|
value: x.elements[i].value,
|
|
name: x.elements[i].name,
|
|
});
|
|
}
|
|
|
|
//console.log(this, dataArray);
|
|
|
|
let userFileNameField = document.getElementById("userFileName");
|
|
let userFileName = userFileNameField.value;
|
|
let userFileNamePH = userFileNameField.getAttribute("placeholder");
|
|
if (userFileName.length != 0) {
|
|
activeState.fileName = userFileName.replace;
|
|
//clear old data as file switches to new filename
|
|
if (userFileNamePH.length != 0) {
|
|
clearData(userFileNamePH);
|
|
popFromTemplateFiles(userFileNamePH);
|
|
}
|
|
} else if (userFileNamePH.length != 0) {
|
|
activeState.fileName = userFileNamePH;
|
|
}
|
|
|
|
storeData("userInput", JSON.stringify(dataArray));
|
|
|
|
}
|
|
|
|
function storeData(name, data) {
|
|
//setCookie(name, btoa(data), 7);
|
|
if (name == "userInput") {
|
|
name = getFileName();
|
|
}
|
|
if (name == "userInputForce") {
|
|
name = "userInput";
|
|
}
|
|
let lT = activeState.loadedTemplate;
|
|
let key = sha256(name + "_m21_" + lT);
|
|
if (name == "templateFiles") {
|
|
key = sha256(name + "_m21_");
|
|
}
|
|
window.localStorage.setItem(key, obfuscate(data));
|
|
}
|
|
|
|
function retrieveData(type, template = "none") {
|
|
if (type == "userInput") {
|
|
let tF = JSON.parse(retrieveData("templateFiles"));
|
|
if (tF == null) {
|
|
return "";
|
|
} else {
|
|
type = tF[tF.length - 1].fileName;
|
|
}
|
|
}
|
|
if (type == "userInputForce") {
|
|
type = "userInput";
|
|
}
|
|
let cdata;
|
|
if (template == "none") {
|
|
let lT = activeState.loadedTemplate;
|
|
let key = sha256(type + "_m21_" + lT);
|
|
if (type == "templateFiles") {
|
|
key = sha256(type + "_m21_");
|
|
}
|
|
cdata = window.localStorage.getItem(key);
|
|
} else {
|
|
let key = sha256(type + "_m21_" + template);
|
|
cdata = window.localStorage.getItem(key);
|
|
}
|
|
if (cdata != null) {
|
|
return obfuscate(cdata, false);
|
|
} else {
|
|
return "[]";
|
|
}
|
|
}
|
|
|
|
function clearData(type, template = "none") {
|
|
let lT;
|
|
let key;
|
|
if (template == "none") {
|
|
lT = activeState.loadedTemplate;
|
|
key = sha256(type + "_m21_" + lT);
|
|
if (type == "templateFiles") {
|
|
key = sha256(type + "_m21_");
|
|
}
|
|
} else {
|
|
lT = template;
|
|
key = sha256(type + "_m21_" + template);
|
|
}
|
|
window.localStorage.removeItem(key);
|
|
}
|
|
|
|
function getFileName() {
|
|
let currentFileName = activeState.fileName;
|
|
let lT = activeState.loadedTemplate;
|
|
if (currentFileName == "none" || currentFileName == "") {
|
|
let date = new Date();
|
|
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_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);
|
|
}
|
|
|
|
let tF = null;
|
|
try {
|
|
tF = JSON.parse(retrieveData("templateFiles"));
|
|
} catch(e) {
|
|
tF = null;
|
|
}
|
|
|
|
if (tF != null) {
|
|
for (let tFi of tF) {
|
|
if (tFi.fileName == currentFileName) {return currentFileName};
|
|
}
|
|
tF.push({ fileName: currentFileName, template: lT });
|
|
} else {
|
|
tF = [{ fileName: currentFileName, template: lT }];
|
|
}
|
|
storeData("templateFiles", JSON.stringify(tF));
|
|
activeState.fileName = currentFileName;
|
|
return currentFileName;
|
|
}
|
|
|
|
function obfuscate(data, mode = true) {
|
|
if (mode) {
|
|
return XORCipher.encode(sha256(passwordHash), data);
|
|
} else {
|
|
return XORCipher.decode(sha256(passwordHash), data);
|
|
}
|
|
}
|
|
|
|
function popFromTemplateFiles(fileName) {
|
|
let tF = JSON.parse(retrieveData("templateFiles"));
|
|
let newArray = [];
|
|
for (let obj of tF) {
|
|
if (obj.fileName != fileName) {
|
|
newArray.push(obj);
|
|
}
|
|
}
|
|
storeData("templateFiles", JSON.stringify(newArray));
|
|
}
|
|
|
|
function createBookShelf() {
|
|
let tF = JSON.parse(retrieveData("templateFiles"));
|
|
let bookShelf = {};
|
|
let date = new Date();
|
|
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_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) {
|
|
bookShelf[0] = {name: "hash", data: getUsrId(), ts: saveFileName};
|
|
let i = 1;
|
|
for (let tFi of tF) {
|
|
let data = retrieveData(tFi.fileName, tFi.template);
|
|
bookShelf[i] = {};
|
|
bookShelf[i].name = tFi.fileName + "_m21_" + tFi.template;
|
|
if (activeState.localOnly) {
|
|
bookShelf[i].data = data;
|
|
} else {
|
|
bookShelf[i].data = obfuscate(data);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
}
|
|
return bookShelf;
|
|
}
|
|
|
|
function importBookShelf() {
|
|
|
|
localStorage.clear()
|
|
var xhttp = new XMLHttpRequest();
|
|
xhttp.onreadystatechange = function () {
|
|
if (this.readyState == 4 && this.status == 200) {
|
|
if (this.responseText == "none") {
|
|
console.log("no files saved on server");
|
|
} else {
|
|
let respText = decodeURIComponent(this.responseText);
|
|
let mainArray = JSON.parse(respText);
|
|
let templateFilesArray = [];
|
|
for (let file of mainArray) {
|
|
if (file.name == "hash") continue;
|
|
window.localStorage.setItem(sha256(file.name), file.data);
|
|
templateFilesArray.push({ fileName: file.name.split("_m21_")[0], template: file.name.split("_m21_")[1] });
|
|
}
|
|
window.localStorage.setItem(sha256("templateFiles-"), obfuscate(JSON.stringify(templateFilesArray)));
|
|
}
|
|
}
|
|
};
|
|
xhttp.open("GET", "php/?getStoredFiles="+getUsrId(), true);
|
|
xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
|
|
xhttp.send();
|
|
}
|
|
|
|
export { createStorageObj, storeData, retrieveData, clearData, getFileName, createBookShelf, importBookShelf};
|