first refactor: load and save
This commit is contained in:
parent
3e15377b57
commit
090c04eedd
158
main.js
158
main.js
|
@ -24,11 +24,11 @@ var codelanguages = ["xml", "js", "sql"];
|
|||
var tagmark = "+";
|
||||
|
||||
// globals
|
||||
var currentnote = null;
|
||||
var currentguid = null;
|
||||
var notesindex = null;
|
||||
var fileindex = 0;
|
||||
var workerid = null;
|
||||
var backup = "";
|
||||
var localdata = null;
|
||||
var saved = true;
|
||||
var lastsaved = "";
|
||||
var pending = false;
|
||||
|
@ -380,11 +380,6 @@ function decryptstring(str)
|
|||
})
|
||||
}
|
||||
|
||||
function getnote(title)
|
||||
{
|
||||
return localdata.find(note => note.title == title);
|
||||
}
|
||||
|
||||
function getrangecontent(range)
|
||||
{
|
||||
return md.value.substring(range.start, range.end);
|
||||
|
@ -878,7 +873,7 @@ function restoresettings()
|
|||
|
||||
function editsettings()
|
||||
{
|
||||
bindfile(
|
||||
bind(
|
||||
{
|
||||
title: "settings.json",
|
||||
content: JSON.stringify(settings, null, " ")
|
||||
|
@ -933,7 +928,7 @@ function decryptnote()
|
|||
|
||||
function editpgpkeys()
|
||||
{
|
||||
bindfile(
|
||||
bind(
|
||||
{
|
||||
title: "pgpkeys",
|
||||
content: localStorage.getItem("pgpkeys") || ""
|
||||
|
@ -992,13 +987,13 @@ function searchtags()
|
|||
.then(loadnote);
|
||||
}
|
||||
|
||||
function gettags(note)
|
||||
function gettags(content)
|
||||
{
|
||||
var i = note.content.indexOf("tags: ");
|
||||
var i = content.indexOf("tags: ");
|
||||
if (i > -1)
|
||||
{
|
||||
var j = note.content.indexOf("\n", i);
|
||||
return note.content.substring(i + 6, j)
|
||||
var j = content.indexOf("\n", i);
|
||||
return content.substring(i + 6, j)
|
||||
.split(",")
|
||||
.map(t => t.toLowerCase().trim())
|
||||
.filter(t => t.length);
|
||||
|
@ -1180,8 +1175,21 @@ function gotoline(line)
|
|||
|
||||
function loadstorage()
|
||||
{
|
||||
var item = window.localStorage.getItem("data");
|
||||
localdata = item ? JSON.parse(item) : [];
|
||||
notesindex = JSON.parse(localStorage.getItem("index"));
|
||||
if (!notesindex)
|
||||
{
|
||||
notesindex = {};
|
||||
// todo: refactor in "add new note"
|
||||
var guid = crypto.randomUUID();
|
||||
var content = defaultheaders();
|
||||
var item = {
|
||||
title: timestamp(),
|
||||
pos: content.length
|
||||
};
|
||||
notesindex[guid] = item;
|
||||
localStorage.setItem("index", JSON.stringify(notesindex));
|
||||
localStorage.setItem(guid, content);
|
||||
}
|
||||
|
||||
var params = new URLSearchParams(window.location.search);
|
||||
var title = params.get("n") || params.get("name");
|
||||
|
@ -1201,7 +1209,8 @@ function loadstorage()
|
|||
inserttodo("@clip " + clip).then(window.close);
|
||||
}
|
||||
|
||||
if (currentnote)
|
||||
// when multiple tabs or split?
|
||||
/*if (currentnote)
|
||||
{
|
||||
currentnote = getnote(currentnote.title);
|
||||
}
|
||||
|
@ -1214,11 +1223,11 @@ function loadstorage()
|
|||
currentnote = {title: title, content: newcontent, pos: newcontent.length};
|
||||
localdata.unshift(currentnote);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
if (currentnote)
|
||||
if (currentguid)
|
||||
{
|
||||
bindfile(currentnote);
|
||||
bind(currentguid);
|
||||
if (line)
|
||||
{
|
||||
gotoline(line);
|
||||
|
@ -1288,8 +1297,29 @@ function initsnippets()
|
|||
});
|
||||
}
|
||||
|
||||
function migratelegacystorage()
|
||||
{
|
||||
var legacy = localStorage.getItem("data");
|
||||
if (legacy)
|
||||
{
|
||||
var legacy = JSON.parse(legacy);
|
||||
var index = {};
|
||||
legacy.forEach(note =>
|
||||
{
|
||||
var guid = crypto.randomUUID();
|
||||
localStorage.setItem(guid, note.content);
|
||||
note.tags = gettags(note.content);
|
||||
delete note.content;
|
||||
index[guid] = note;
|
||||
});
|
||||
localStorage.setItem("index", JSON.stringify(index));
|
||||
localStorage.removeItem("data");
|
||||
}
|
||||
}
|
||||
|
||||
function init()
|
||||
{
|
||||
migratelegacystorage();
|
||||
loadsettings();
|
||||
|
||||
window.onbeforeunload = checksaved;
|
||||
|
@ -1349,14 +1379,14 @@ function init()
|
|||
}
|
||||
}
|
||||
|
||||
function getorcreate(title, content)
|
||||
function getorcreate(guid, content)
|
||||
{
|
||||
var note = getnote(title);
|
||||
if (!note)
|
||||
var note = getnote(guid);
|
||||
/*if (!note)
|
||||
{
|
||||
note = {title: title, content: content, pos: content.length};
|
||||
localdata.push(note)
|
||||
}
|
||||
}*/
|
||||
|
||||
return note;
|
||||
}
|
||||
|
@ -1514,7 +1544,7 @@ function md2html(content)
|
|||
|
||||
function loadlast()
|
||||
{
|
||||
loadnote(localdata.length ? localdata[0].title : timestamp());
|
||||
loadnote(Object.keys(notesindex)[0]);
|
||||
}
|
||||
|
||||
function loadprevious()
|
||||
|
@ -1578,7 +1608,7 @@ function showgrepresult(needle, grepresult)
|
|||
grepcontent.push("No result.");
|
||||
}
|
||||
|
||||
bindfile(
|
||||
bind(
|
||||
{
|
||||
title: "Search result",
|
||||
content: grepcontent.join("\n")
|
||||
|
@ -1796,11 +1826,8 @@ function resize()
|
|||
|
||||
function putontop()
|
||||
{
|
||||
if (localdata.find(n => n == currentnote))
|
||||
{
|
||||
localdata.splice(localdata.indexOf(currentnote), 1);
|
||||
localdata.unshift(currentnote);
|
||||
}
|
||||
console.warn("todo: put on top");
|
||||
return;
|
||||
}
|
||||
|
||||
function postpone()
|
||||
|
@ -1819,13 +1846,27 @@ function setsaved()
|
|||
lastsaved = timestamp();
|
||||
}
|
||||
|
||||
function serialize()
|
||||
{
|
||||
// serialize all gui stuff to local storage
|
||||
var item = notesindex[currentguid];
|
||||
item.title = title.value;
|
||||
item.pos = md.selectionStart;
|
||||
item.tags = gettags(md.value);
|
||||
putontop();
|
||||
|
||||
localStorage.setItem("index", JSON.stringify(notesindex));
|
||||
localStorage.setItem(currentguid, md.value);
|
||||
|
||||
}
|
||||
|
||||
function save()
|
||||
{
|
||||
return new Promise(function(resolve, reject)
|
||||
{
|
||||
clearTimeout(workerid);
|
||||
|
||||
if (currentnote.title == "settings.json")
|
||||
if (title.value == "settings.json")
|
||||
{
|
||||
settings = JSON.parse(md.value);
|
||||
savesettings();
|
||||
|
@ -1833,17 +1874,12 @@ function save()
|
|||
setsaved();
|
||||
resolve();
|
||||
}
|
||||
else if (currentnote.title == "pgpkeys")
|
||||
else if (title.value == "pgpkeys")
|
||||
{
|
||||
localStorage.setItem("pgpkeys", md.value);
|
||||
setsaved();
|
||||
resolve();
|
||||
}
|
||||
else if (!localdata)
|
||||
{
|
||||
showtemporaryinfo("cannot push empty data");
|
||||
reject();
|
||||
}
|
||||
else if (pending)
|
||||
{
|
||||
console.log("pending query: save cancelled");
|
||||
|
@ -1859,16 +1895,12 @@ function save()
|
|||
var content = md.value;
|
||||
if ((content == "" && backup != "") || content == "null" || content == "undefined")
|
||||
{
|
||||
showtemporaryinfo("Invalid content '" + content + "', file '" + currentnote.title + "' not saved");
|
||||
showtemporaryinfo("Invalid content '" + content + "', file '" + title.value + "' not saved");
|
||||
reject();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentnote.pos = md.selectionStart;
|
||||
currentnote.content = content;
|
||||
putontop();
|
||||
|
||||
window.localStorage.setItem("data", JSON.stringify(localdata));
|
||||
serialize();
|
||||
|
||||
if (settings.sync)
|
||||
{
|
||||
|
@ -2246,7 +2278,7 @@ function showhelp()
|
|||
help.push("##Sources");
|
||||
help.push("https://github.com/quenousimporte/notes");
|
||||
|
||||
bindfile(
|
||||
bind(
|
||||
{
|
||||
title: "Help",
|
||||
content: help.join("\n")
|
||||
|
@ -2307,7 +2339,8 @@ function istodo(note)
|
|||
|
||||
function currentistodo()
|
||||
{
|
||||
return istodo(currentnote);
|
||||
//return istodo(currentnote);
|
||||
return title.value.includes("todo") || gettags(md.value).includes("todo");
|
||||
}
|
||||
|
||||
function sorttodotxt(note)
|
||||
|
@ -2648,7 +2681,7 @@ function mainkeydownhandler()
|
|||
|
||||
function setwindowtitle()
|
||||
{
|
||||
document.title = currentnote.title;
|
||||
document.title = title.value;
|
||||
}
|
||||
|
||||
function ontitlechange()
|
||||
|
@ -2862,16 +2895,15 @@ function togglepreviewwithsubs()
|
|||
}
|
||||
}
|
||||
|
||||
function bindfile(note)
|
||||
function bind(title, content, pos)
|
||||
{
|
||||
var changed = currentnote != note;
|
||||
var changed = title.value != title;
|
||||
|
||||
backup = note.content;
|
||||
currentnote = note;
|
||||
title.value = note.title;
|
||||
backup = content;
|
||||
title.value = title;
|
||||
setwindowtitle();
|
||||
|
||||
seteditorcontent(note.content || "", true);
|
||||
seteditorcontent(content || "", true);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
|
@ -2879,7 +2911,7 @@ function bindfile(note)
|
|||
}
|
||||
resize();
|
||||
|
||||
setpos(note.pos || 0);
|
||||
setpos(pos || 0);
|
||||
|
||||
if (!issplit() && searchdialog.hidden)
|
||||
{
|
||||
|
@ -2899,14 +2931,16 @@ function defaultheaders(tags = "")
|
|||
"",""].join("\n");
|
||||
}
|
||||
|
||||
function loadnote(name)
|
||||
function loadnote(guid)
|
||||
{
|
||||
var note = getorcreate(name, defaultheaders());
|
||||
currentguid = guid;
|
||||
var content = localStorage.getItem(guid);
|
||||
var item = notesindex[guid];
|
||||
|
||||
if (gettags(note).includes("journal"))
|
||||
/*if (gettags(content).includes("journal"))
|
||||
{
|
||||
// remove empty entries
|
||||
note.content = note.content.replace(/\d{4}-\d{2}-\d{2}\n*(\d{4}-\d{2}-\d{2})/g, "$1");
|
||||
content = content.replace(/\d{4}-\d{2}-\d{2}\n*(\d{4}-\d{2}-\d{2})/g, "$1");
|
||||
|
||||
// create new entry for today
|
||||
var hat = headerandtext(note);
|
||||
|
@ -2916,20 +2950,20 @@ function loadnote(name)
|
|||
note.content = hat.header + "\n" + today + "\n\n" + hat.text;
|
||||
note.pos = hat.header.length + 12;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
if (settings.autosorttodo && istodo(note))
|
||||
/*if (settings.autosorttodo && istodo(note))
|
||||
{
|
||||
sorttodotxt(note);
|
||||
}
|
||||
}*/
|
||||
|
||||
bindfile(note);
|
||||
bind(item.title, content, item.pos);
|
||||
|
||||
stat.cur.q = 0;
|
||||
stat.cur.d = 0;
|
||||
stat.cur.t = timestamp();
|
||||
|
||||
if (!preview.hidden || (preview.hidden && (gettags(note).indexOf("preview") !== -1)))
|
||||
if (!preview.hidden || (preview.hidden && (gettags(md.value).indexOf("preview") !== -1)))
|
||||
{
|
||||
togglepreview();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue