added: light mode for old device
changed: shortcuts refactor: serialization and push to server changed: add current tag filter in window title
This commit is contained in:
parent
af55cd2d1d
commit
cbd45a13f8
155
main.js
155
main.js
|
@ -9,7 +9,8 @@ var defaultsettings =
|
||||||
foldmarkstart: 22232,
|
foldmarkstart: 22232,
|
||||||
defaultpreviewinsplit: false,
|
defaultpreviewinsplit: false,
|
||||||
enablefolding: false,
|
enablefolding: false,
|
||||||
tagautocomplete: false
|
tagautocomplete: false,
|
||||||
|
light: false
|
||||||
};
|
};
|
||||||
|
|
||||||
//builtin
|
//builtin
|
||||||
|
@ -76,7 +77,7 @@ var commands = [
|
||||||
action: loadquicknote
|
action: loadquicknote
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
shortcut: "ctrl+shift+F",
|
shortcut: "ctrl+g",
|
||||||
hint: "Find in notes",
|
hint: "Find in notes",
|
||||||
savedonly: true,
|
savedonly: true,
|
||||||
action: showgrep
|
action: showgrep
|
||||||
|
@ -150,7 +151,7 @@ var commands = [
|
||||||
}*/,
|
}*/,
|
||||||
{
|
{
|
||||||
hint: "Force push",
|
hint: "Force push",
|
||||||
action: push,
|
action: pushtoremote,
|
||||||
shortcut: "ctrl+s"
|
shortcut: "ctrl+s"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -214,7 +215,9 @@ var commands = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
hint: "Add tag filter",
|
hint: "Add tag filter",
|
||||||
action: addtagfilter
|
action: addtagfilter,
|
||||||
|
shortcut: "ctrl+shift+F",
|
||||||
|
savedonly: true
|
||||||
}];
|
}];
|
||||||
|
|
||||||
var snippets = [
|
var snippets = [
|
||||||
|
@ -260,12 +263,14 @@ function addtagfilter()
|
||||||
{
|
{
|
||||||
currenttag = t;
|
currenttag = t;
|
||||||
command.hint = "Remove tag filter '" + currenttag + "'";
|
command.hint = "Remove tag filter '" + currenttag + "'";
|
||||||
|
setwindowtitle();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
currenttag = "";
|
currenttag = "";
|
||||||
command.hint = "Add tag filter";
|
command.hint = "Add tag filter";
|
||||||
|
setwindowtitle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -403,12 +408,6 @@ function editsettings()
|
||||||
|
|
||||||
function showtemporaryinfo(str)
|
function showtemporaryinfo(str)
|
||||||
{
|
{
|
||||||
/*var prev = mark.textContent;
|
|
||||||
mark.textContent = str;
|
|
||||||
setTimeout(function()
|
|
||||||
{
|
|
||||||
mark.textContent = prev;
|
|
||||||
}, 5000);*/
|
|
||||||
alert(str);
|
alert(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -550,26 +549,44 @@ function downloadnote()
|
||||||
download(currentnote.title + ".md", getnotecontent());
|
download(currentnote.title + ".md", getnotecontent());
|
||||||
}
|
}
|
||||||
|
|
||||||
function serialize()
|
function delay()
|
||||||
{
|
{
|
||||||
putontop();
|
return new Promise(function(apply)
|
||||||
|
|
||||||
window.localStorage.setItem(currentvault, JSON.stringify(localdata));
|
|
||||||
|
|
||||||
if (currentnote.title == "settings.json")
|
|
||||||
{
|
|
||||||
window.localStorage.setItem("settings", getnotecontent());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isremote())
|
|
||||||
{
|
{
|
||||||
clearTimeout(timeoutid);
|
clearTimeout(timeoutid);
|
||||||
timeoutid = setTimeout(push, settings.savedelay);
|
timeoutid = setTimeout(apply, settings.savedelay);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function save()
|
||||||
|
{
|
||||||
|
var content = getnotecontent();
|
||||||
|
|
||||||
|
if ((content == "" && backup != "") || content == "null" || content == "undefined")
|
||||||
|
{
|
||||||
|
console.warn("Invalid content '" + content + "', file '" + currentnote.title + "' not saved");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
marksaved();
|
currentnote.content = content;
|
||||||
|
window.localStorage.setItem(currentvault, JSON.stringify(localdata));
|
||||||
|
|
||||||
|
if (currentnote.title == "settings.json")
|
||||||
|
{
|
||||||
|
window.localStorage.setItem("settings", content);
|
||||||
|
}
|
||||||
|
console.log("data serialized in local storage")
|
||||||
|
|
||||||
|
if (isremote())
|
||||||
|
{
|
||||||
|
pushtoremote();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
marksaved();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function remotecallfailed(error)
|
function remotecallfailed(error)
|
||||||
|
@ -693,7 +710,6 @@ function init()
|
||||||
|
|
||||||
if (isremote())
|
if (isremote())
|
||||||
{
|
{
|
||||||
markunsaved("*");
|
|
||||||
queryremote({action: "fetch"})
|
queryremote({action: "fetch"})
|
||||||
.then(data =>
|
.then(data =>
|
||||||
{
|
{
|
||||||
|
@ -731,13 +747,14 @@ function togglepassword()
|
||||||
password.focus();
|
password.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
function push()
|
function pushtoremote()
|
||||||
{
|
{
|
||||||
if (!isremote())
|
if (!isremote())
|
||||||
{
|
{
|
||||||
console.log("local vault, no push");
|
console.log("local vault, no push");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
console.log("sending data to php server");
|
||||||
|
|
||||||
if (localdata)
|
if (localdata)
|
||||||
{
|
{
|
||||||
|
@ -745,15 +762,15 @@ function push()
|
||||||
var content = getnotecontent();
|
var content = getnotecontent();
|
||||||
queryremote({action: "push", data: JSON.stringify(localdata)})
|
queryremote({action: "push", data: JSON.stringify(localdata)})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log("Data sent to server");
|
console.log("data saved on server");
|
||||||
if (getnotecontent() == content)
|
if (getnotecontent() == content)
|
||||||
{
|
{
|
||||||
marksaved();
|
marksaved();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
console.warn("Content changed in the meantime, mark as not saved");
|
console.warn("Content changed in the meantime, keep as unsaved");
|
||||||
timeoutid = setTimeout(push, settings.savedelay);
|
save();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(remotecallfailed);
|
.catch(remotecallfailed);
|
||||||
|
@ -1193,7 +1210,6 @@ function searchinlist(list)
|
||||||
|
|
||||||
filteredlist.innerHTML = "";
|
filteredlist.innerHTML = "";
|
||||||
filter.value = "";
|
filter.value = "";
|
||||||
filter.focus();
|
|
||||||
|
|
||||||
list.forEach(item =>
|
list.forEach(item =>
|
||||||
{
|
{
|
||||||
|
@ -1220,6 +1236,8 @@ function searchinlist(list)
|
||||||
selectitem(selected ? selected.textContent : filter.value);
|
selectitem(selected ? selected.textContent : filter.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filter.focus();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1282,50 +1300,42 @@ function putontop()
|
||||||
|
|
||||||
function notecontentchanged()
|
function notecontentchanged()
|
||||||
{
|
{
|
||||||
markunsaved("*");
|
if (!settings.light)
|
||||||
|
|
||||||
// check snippets and autocomplete
|
|
||||||
// should we move this on key down? to cancel when backspace?
|
|
||||||
if (before(2) == "[[")
|
|
||||||
{
|
{
|
||||||
searchautocomplete();
|
// check snippets and autocomplete
|
||||||
}
|
// should we move this on key down? to cancel when backspace?
|
||||||
else if (settings.tagautocomplete && md.value.substring(0, getpos()).split("\n").pop().startsWith("tags: "))
|
if (before(2) == "[[")
|
||||||
{
|
|
||||||
// search in tags list
|
|
||||||
if (before(2) == ", ")
|
|
||||||
{
|
{
|
||||||
console.log(event.key);
|
searchautocomplete();
|
||||||
tagslist()
|
}
|
||||||
.then(tag =>
|
else if (settings.tagautocomplete && md.value.substring(0, getpos()).split("\n").pop().startsWith("tags: "))
|
||||||
|
{
|
||||||
|
// search in tags list
|
||||||
|
if (before(2) == ", ")
|
||||||
{
|
{
|
||||||
insert(tag);
|
console.log(event.key);
|
||||||
notecontentchanged();
|
tagslist()
|
||||||
md.focus();
|
.then(tag =>
|
||||||
})
|
{
|
||||||
|
insert(tag);
|
||||||
|
notecontentchanged();
|
||||||
|
md.focus();
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else
|
|
||||||
{
|
|
||||||
var snippet = snippets.find(s => before(s.command.length) == s.command);
|
|
||||||
if (snippet)
|
|
||||||
{
|
{
|
||||||
insert(snippet.insert, snippet.cursor, snippet.command.length);
|
var snippet = snippets.find(s => before(s.command.length) == s.command);
|
||||||
|
if (snippet)
|
||||||
|
{
|
||||||
|
insert(snippet.insert, snippet.cursor, snippet.command.length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resize();
|
|
||||||
|
|
||||||
// save
|
resize();
|
||||||
var content = getnotecontent();
|
markunsaved("*");
|
||||||
if ((content == "" && backup != "") || content == "null" || content == "undefined")
|
delay().then(save);
|
||||||
{
|
|
||||||
console.warn("Invalid content '" + content + "', file '" + currentnote.title + "' not saved");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
currentnote.content = content;
|
|
||||||
serialize();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadtodo()
|
function loadtodo()
|
||||||
|
@ -1434,7 +1444,7 @@ function rename(newname)
|
||||||
currentnote.title = newname;
|
currentnote.title = newname;
|
||||||
|
|
||||||
markunsaved("*");
|
markunsaved("*");
|
||||||
serialize();
|
save();
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1533,6 +1543,15 @@ function mainkeydownhandler()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setwindowtitle()
|
||||||
|
{
|
||||||
|
document.title = title.value;
|
||||||
|
if (currenttag)
|
||||||
|
{
|
||||||
|
document.title = "tag:" + currenttag + " - " + document.title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function ontitlechange()
|
function ontitlechange()
|
||||||
{
|
{
|
||||||
var oldname = currentnote.title;
|
var oldname = currentnote.title;
|
||||||
|
@ -1541,7 +1560,7 @@ function ontitlechange()
|
||||||
if (!error)
|
if (!error)
|
||||||
{
|
{
|
||||||
console.log("'" + oldname + "' renamed to '" + currentnote.title + "'");
|
console.log("'" + oldname + "' renamed to '" + currentnote.title + "'");
|
||||||
document.title = title.value;
|
setwindowtitle();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1640,7 +1659,7 @@ function bindfile(note)
|
||||||
backup = note.content;
|
backup = note.content;
|
||||||
currentnote = note;
|
currentnote = note;
|
||||||
title.value = note.title;
|
title.value = note.title;
|
||||||
document.title = note.title;
|
setwindowtitle();
|
||||||
|
|
||||||
setnotecontent(note.content || "");
|
setnotecontent(note.content || "");
|
||||||
preview.innerHTML = md2html(getnotecontent());
|
preview.innerHTML = md2html(getnotecontent());
|
||||||
|
|
Loading…
Reference in New Issue