added: experimental newtwork feature
added: preview with subnotes
This commit is contained in:
		
							parent
							
								
									cba4848da0
								
							
						
					
					
						commit
						276e4a0eff
					
				| 
						 | 
					@ -16,6 +16,12 @@
 | 
				
			||||||
		<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js" integrity="sha512-LhccdVNGe2QMEfI3x4DVV3ckMRe36TfydKss6mJpdHjNFiV07dFpS2xzeZedptKZrwxfICJpez09iNioiSZ3hA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
 | 
							<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js" integrity="sha512-LhccdVNGe2QMEfI3x4DVV3ckMRe36TfydKss6mJpdHjNFiV07dFpS2xzeZedptKZrwxfICJpez09iNioiSZ3hA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
 | 
				
			||||||
		<script src="main.js"></script>
 | 
							<script src="main.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<script type="text/javascript" src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<div id="networkpage" hidden>
 | 
				
			||||||
 | 
								<div id="network"></div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<div id="authentpage" hidden>
 | 
							<div id="authentpage" hidden>
 | 
				
			||||||
			<div id="bigtitle">notes</div>
 | 
								<div id="bigtitle">notes</div>
 | 
				
			||||||
			<div>
 | 
								<div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										163
									
								
								main.js
								
								
								
								
							
							
						
						
									
										163
									
								
								main.js
								
								
								
								
							| 
						 | 
					@ -13,7 +13,8 @@ var defaultsettings =
 | 
				
			||||||
	defaultpreviewinsplit: false,
 | 
						defaultpreviewinsplit: false,
 | 
				
			||||||
	enablefolding: false,
 | 
						enablefolding: false,
 | 
				
			||||||
	tagautocomplete: false,
 | 
						tagautocomplete: false,
 | 
				
			||||||
	titleinaccentcolor: false
 | 
						titleinaccentcolor: false,
 | 
				
			||||||
 | 
						enablenetwork: false
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//builtin
 | 
					//builtin
 | 
				
			||||||
| 
						 | 
					@ -186,6 +187,12 @@ var commands = [
 | 
				
			||||||
	action: togglepreview,
 | 
						action: togglepreview,
 | 
				
			||||||
	allowunsaved: true
 | 
						allowunsaved: true
 | 
				
			||||||
},
 | 
					},
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						shortcut: "ctrl+shift+M",
 | 
				
			||||||
 | 
						hint: "Toggle preview with merged subnotes",
 | 
				
			||||||
 | 
						action: togglepreviewwithsubs,
 | 
				
			||||||
 | 
						allowunsaved: true
 | 
				
			||||||
 | 
					},
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	shortcut: "ctrl+d",
 | 
						shortcut: "ctrl+d",
 | 
				
			||||||
	hint: "Delete note",
 | 
						hint: "Delete note",
 | 
				
			||||||
| 
						 | 
					@ -638,8 +645,82 @@ function connected(note)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function shownotelinks()
 | 
					function shownotelinks()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	searchinlist(connected(currentnote).map(n => n.title))
 | 
						if (settings.enablenetwork)
 | 
				
			||||||
	.then(loadnote);
 | 
						{
 | 
				
			||||||
 | 
							networkpage.hidden = false;
 | 
				
			||||||
 | 
							function id(note)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return localdata.indexOf(note);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var nodes = [];
 | 
				
			||||||
 | 
							var edges = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var list = [currentnote];
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							while (list.length)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var current = list.shift();
 | 
				
			||||||
 | 
								if (!nodes.find(n => n.id == id(current)))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									nodes.push(
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											id: id(current),
 | 
				
			||||||
 | 
											label: current.title
 | 
				
			||||||
 | 
										});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									var buddies = children(current).concat(parents(current));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									list = list.concat(buddies);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									buddies.
 | 
				
			||||||
 | 
									forEach(buddy => {
 | 
				
			||||||
 | 
										if (!edges.find(edge => (edge.to == id(current) && edge.from == id(buddy)) || (edge.to == id(buddy) && edge.from == id(current))))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											edges.push({
 | 
				
			||||||
 | 
												from: id(current),
 | 
				
			||||||
 | 
												to: id(buddy)
 | 
				
			||||||
 | 
											});
 | 
				
			||||||
 | 
										}				
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var data = {
 | 
				
			||||||
 | 
								nodes: nodes,
 | 
				
			||||||
 | 
								edges: edges
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var options = 
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								nodes:
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									color:
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										background: settings.bgcolor,
 | 
				
			||||||
 | 
										border: settings.fontcolor,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									font:
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										color: settings.fontcolor,
 | 
				
			||||||
 | 
										size: 16,
 | 
				
			||||||
 | 
										face: settings.fontfamily
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							var graph = new vis.Network(network, data, options);
 | 
				
			||||||
 | 
							graph.on("click", function(event)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								loadnote(nodes.find(n => n.id == event.nodes[0]).label);
 | 
				
			||||||
 | 
								networkpage.hidden = true;
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							searchinlist(connected(currentnote).map(n => n.title))
 | 
				
			||||||
 | 
							.then(loadnote);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -933,32 +1014,11 @@ function downloadvault()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function downloadnotewithsubs()
 | 
					function downloadnotewithsubs()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	try
 | 
						var note = withsubs();
 | 
				
			||||||
 | 
						if (note)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		descendants(currentnote);	
 | 
							download(note.title + ".md", note.content);	
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
	catch (err)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		showtemporaryinfo("Loop detected");
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var tempnote = 
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		title: currentnote.title + " (with subnotes)",
 | 
					 | 
				
			||||||
		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()
 | 
				
			||||||
| 
						 | 
					@ -1807,6 +1867,7 @@ function showhelp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	help.push("## Libs");
 | 
						help.push("## Libs");
 | 
				
			||||||
	help.push("[Showdown](https://showdownjs.com/)");
 | 
						help.push("[Showdown](https://showdownjs.com/)");
 | 
				
			||||||
 | 
						help.push("[vis-network](https://visjs.org/)");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	help.push("## Fonts");
 | 
						help.push("## Fonts");
 | 
				
			||||||
	help.push("[Inconsolata](https://levien.com/type/myfonts/inconsolata.html)");
 | 
						help.push("[Inconsolata](https://levien.com/type/myfonts/inconsolata.html)");
 | 
				
			||||||
| 
						 | 
					@ -2154,6 +2215,54 @@ function togglepreview()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function withsubs()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						try
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							descendants(currentnote);	
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						catch (err)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							showtemporaryinfo(err);
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var tempnote = 
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: currentnote.title + " (with subnotes)",
 | 
				
			||||||
 | 
							content: getnotecontent()
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var kids = children(tempnote);
 | 
				
			||||||
 | 
						while (kids.length)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							kids.forEach(kid =>
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								tempnote.content = tempnote.content.replaceAll("[[" + kid.title + "]]", kid.content);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							kids = children(tempnote);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return tempnote;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function togglepreviewwithsubs()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						var note = withsubs();
 | 
				
			||||||
 | 
						if (note)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							preview.innerHTML = md2html(note.content);
 | 
				
			||||||
 | 
							md.hidden = !md.hidden;
 | 
				
			||||||
 | 
							preview.hidden = !preview.hidden;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (preview.hidden)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								resize();
 | 
				
			||||||
 | 
								md.focus();
 | 
				
			||||||
 | 
							}	
 | 
				
			||||||
 | 
						}	
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function resetfolds()
 | 
					function resetfolds()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	folds = [];
 | 
						folds = [];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue