added: download note with merged subnotes
added: merge subnote fixed: duplpicate in connections
This commit is contained in:
parent
860f41a38e
commit
1455c01695
127
main.js
127
main.js
|
@ -222,6 +222,10 @@ var commands = [
|
||||||
hint: "Download note",
|
hint: "Download note",
|
||||||
action: downloadnote
|
action: downloadnote
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
hint: "Download note with subnotes",
|
||||||
|
action: downloadnotewithsubs
|
||||||
|
},
|
||||||
{
|
{
|
||||||
hint: "Download local data",
|
hint: "Download local data",
|
||||||
action: downloadlocal,
|
action: downloadlocal,
|
||||||
|
@ -265,8 +269,8 @@ var commands = [
|
||||||
allowunsaved: true
|
allowunsaved: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
hint: "Internal and back links",
|
hint: "Show connected notes",
|
||||||
action: showinternallinks,
|
action: shownotelinks,
|
||||||
shortcut: "ctrl+l"
|
shortcut: "ctrl+l"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -301,6 +305,14 @@ var commands = [
|
||||||
action: togglespellcheck,
|
action: togglespellcheck,
|
||||||
allowunsaved: true,
|
allowunsaved: true,
|
||||||
shortcut: "F7"
|
shortcut: "F7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hint: "Create subnote from selection",
|
||||||
|
action: createsubnote
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hint: "Include subnote",
|
||||||
|
action: includesub
|
||||||
}];
|
}];
|
||||||
|
|
||||||
var snippets = [
|
var snippets = [
|
||||||
|
@ -335,6 +347,56 @@ var snippets = [
|
||||||
cursor: 0
|
cursor: 0
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
function getnote(title)
|
||||||
|
{
|
||||||
|
return localdata.find(note => note.title == title);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createsubnote()
|
||||||
|
{
|
||||||
|
var range = getlinesrange();
|
||||||
|
var content = md.value.substring(range.start, range.end);
|
||||||
|
searchinlist([], null, "Title...")
|
||||||
|
.then(title =>
|
||||||
|
{
|
||||||
|
if (getnote(title))
|
||||||
|
{
|
||||||
|
showtemporaryinfo("'" + title + "' already exists");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var newnote =
|
||||||
|
{
|
||||||
|
title: title,
|
||||||
|
content: content
|
||||||
|
}
|
||||||
|
localdata.unshift(newnote);
|
||||||
|
md.value = md.value.substring(0, range.start)
|
||||||
|
+ "[[" + title + "]]"
|
||||||
|
+ md.value.substring(range.end);
|
||||||
|
datachanged();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function includesub()
|
||||||
|
{
|
||||||
|
var range = linkrangeatpos();
|
||||||
|
if (range)
|
||||||
|
{
|
||||||
|
var title = linkatpos();
|
||||||
|
if (confirm("Replace [[" + title + "]] by its content?"))
|
||||||
|
{
|
||||||
|
md.value =
|
||||||
|
md.value.substring(0, range.start)
|
||||||
|
+ getnote(title).content
|
||||||
|
+ md.value.substring(range.end);
|
||||||
|
|
||||||
|
datachanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function togglespellcheck()
|
function togglespellcheck()
|
||||||
{
|
{
|
||||||
md.spellcheck = !md.spellcheck;
|
md.spellcheck = !md.spellcheck;
|
||||||
|
@ -412,7 +474,7 @@ function switchvault()
|
||||||
|
|
||||||
function ancestors(note)
|
function ancestors(note)
|
||||||
{
|
{
|
||||||
var list = parents(note);
|
var list = [... new Set(parents(note))];
|
||||||
list.forEach(title =>
|
list.forEach(title =>
|
||||||
{
|
{
|
||||||
var parent = localdata.find(n => n.title == title);
|
var parent = localdata.find(n => n.title == title);
|
||||||
|
@ -426,7 +488,7 @@ function ancestors(note)
|
||||||
|
|
||||||
function descendants(note)
|
function descendants(note)
|
||||||
{
|
{
|
||||||
var list = children(note);
|
var list = [... new Set(children(note))];
|
||||||
list.forEach(title =>
|
list.forEach(title =>
|
||||||
{
|
{
|
||||||
var child = localdata.find(n => n.title == title);
|
var child = localdata.find(n => n.title == title);
|
||||||
|
@ -452,7 +514,7 @@ function parents(note)
|
||||||
.map(n => n.title);
|
.map(n => n.title);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showinternallinks()
|
function shownotelinks()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -461,14 +523,12 @@ function showinternallinks()
|
||||||
list.push(currentnote.title);
|
list.push(currentnote.title);
|
||||||
list = list.concat(descendants(currentnote));
|
list = list.concat(descendants(currentnote));
|
||||||
|
|
||||||
//[...new Set(internal.concat(backlinks))]
|
|
||||||
|
|
||||||
searchinlist(list, null, index)
|
searchinlist(list, null, index)
|
||||||
.then(loadnote);
|
.then(loadnote);
|
||||||
}
|
}
|
||||||
catch(err)
|
catch(err)
|
||||||
{
|
{
|
||||||
showtemporaryinfo("Loop, cannot show links");
|
showtemporaryinfo("Loop detected");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -495,15 +555,28 @@ function showoutline()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function linkatpos()
|
function linkrangeatpos()
|
||||||
{
|
{
|
||||||
var start = md.value.lastIndexOf("[[", md.selectionStart);
|
var start = md.value.lastIndexOf("[[", md.selectionStart);
|
||||||
if (start == -1 || md.value.substring(start, md.selectionStart).indexOf("\n") != -1) return "";
|
if (start == -1 || md.value.substring(start, md.selectionStart).indexOf("\n") != -1) return null
|
||||||
|
|
||||||
var end = md.value.indexOf("]]", md.selectionStart);
|
var end = md.value.indexOf("]]", md.selectionStart);
|
||||||
if (end == -1 || md.value.substring(md.selectionStart, end).indexOf("\n") != -1) return "";
|
if (end == -1 || md.value.substring(md.selectionStart, end).indexOf("\n") != -1) return null;
|
||||||
|
|
||||||
return md.value.substring(start + 2, end);
|
return {
|
||||||
|
start: start,
|
||||||
|
end: end + 2
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function linkatpos()
|
||||||
|
{
|
||||||
|
var range = linkrangeatpos();
|
||||||
|
if (range)
|
||||||
|
{
|
||||||
|
return md.value.substring(range.start + 2, range.end - 2);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function tagatpos()
|
function tagatpos()
|
||||||
|
@ -711,6 +784,36 @@ function downloadlocal()
|
||||||
download(timestamp() + " notes.json", JSON.stringify(data));
|
download(timestamp() + " notes.json", JSON.stringify(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function downloadnotewithsubs()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
descendants(currentnote);
|
||||||
|
}
|
||||||
|
catch (err)
|
||||||
|
{
|
||||||
|
showtemporaryinfo("Loop detected");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tempnote =
|
||||||
|
{
|
||||||
|
title: currentnote.title + " (with sub notes)",
|
||||||
|
content: getnotecontent()
|
||||||
|
};
|
||||||
|
|
||||||
|
var kids = children(tempnote);
|
||||||
|
while (kids.length)
|
||||||
|
{
|
||||||
|
kids.forEach(t =>
|
||||||
|
{
|
||||||
|
tempnote.content = tempnote.content.replaceAll("[[" + t + "]]", getnote(t).content);
|
||||||
|
});
|
||||||
|
kids = children(tempnote);
|
||||||
|
}
|
||||||
|
download(tempnote.title + ".md", tempnote.content);
|
||||||
|
}
|
||||||
|
|
||||||
function downloadnote()
|
function downloadnote()
|
||||||
{
|
{
|
||||||
download(currentnote.title + ".md", getnotecontent());
|
download(currentnote.title + ".md", getnotecontent());
|
||||||
|
|
Loading…
Reference in New Issue