| 
									
										
										
										
											2017-11-04 19:38:50 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | const link = (function() { | 
					
						
							| 
									
										
										
										
											2017-11-19 20:36:13 -05:00
										 |  |  |     function getNotePathFromLink(url) { | 
					
						
							| 
									
										
										
										
											2017-12-17 17:37:19 -05:00
										 |  |  |         const notePathMatch = /#([A-Za-z0-9/]+)$/.exec(url); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-19 20:36:13 -05:00
										 |  |  |         if (notePathMatch === null) { | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |             return null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							| 
									
										
										
										
											2017-11-19 20:36:13 -05:00
										 |  |  |             return notePathMatch[1]; | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-19 20:36:13 -05:00
										 |  |  |     function getNodePathFromLabel(label) { | 
					
						
							|  |  |  |         const notePathMatch = / \(([A-Za-z0-9/]+)\)/.exec(label); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-19 20:36:13 -05:00
										 |  |  |         if (notePathMatch !== null) { | 
					
						
							|  |  |  |             return notePathMatch[1]; | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-29 22:03:03 -05:00
										 |  |  |     function createNoteLink(notePath, noteTitle) { | 
					
						
							| 
									
										
										
										
											2017-11-21 20:04:06 -05:00
										 |  |  |         if (!noteTitle) { | 
					
						
							| 
									
										
										
										
											2017-11-29 22:03:03 -05:00
										 |  |  |             const noteId = treeUtils.getNoteIdFromNotePath(notePath); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-21 20:04:06 -05:00
										 |  |  |             noteTitle = noteTree.getNoteTitle(noteId); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         const noteLink = $("<a>", { | 
					
						
							|  |  |  |             href: 'javascript:', | 
					
						
							| 
									
										
										
										
											2017-11-21 20:04:06 -05:00
										 |  |  |             text: noteTitle | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         }).attr('action', 'note') | 
					
						
							| 
									
										
										
										
											2017-11-29 22:03:03 -05:00
										 |  |  |             .attr('note-path', notePath); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return noteLink; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |     function goToLink(e) { | 
					
						
							|  |  |  |         e.preventDefault(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         const linkEl = $(e.target); | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |         const notePath = linkEl.attr("note-path") ? linkEl.attr("note-path") : linkEl.attr('href'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!notePath) { | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (notePath.startsWith('http')) { | 
					
						
							|  |  |  |             window.open(notePath, '_blank'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const noteId = getNotePathFromLink(notePath); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!noteId) { | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |             return; | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |         noteTree.activateNode(noteId); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |         // this is quite ugly hack, but it seems like we can't close the tooltip otherwise
 | 
					
						
							|  |  |  |         $("[role='tooltip']").remove(); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |         if (glob.activeDialog) { | 
					
						
							|  |  |  |             try { | 
					
						
							|  |  |  |                 glob.activeDialog.dialog('close'); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |             catch (e) {} | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 14:11:35 -05:00
										 |  |  |     function addLinkToEditor(linkTitle, linkHref) { | 
					
						
							|  |  |  |         const editor = noteEditor.getEditor(); | 
					
						
							|  |  |  |         const doc = editor.document; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         doc.enqueueChanges(() => editor.data.insertLink(linkTitle, linkHref), doc.selection); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 14:17:03 -05:00
										 |  |  |     function addTextToEditor(text) { | 
					
						
							|  |  |  |         const editor = noteEditor.getEditor(); | 
					
						
							|  |  |  |         const doc = editor.document; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         doc.enqueueChanges(() => editor.data.insertText(text), doc.selection); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |     // when click on link popup, in case of internal link, just go the the referenced note instead of default behavior
 | 
					
						
							|  |  |  |     // of opening the link in new window/tab
 | 
					
						
							| 
									
										
										
										
											2017-12-23 07:48:59 -05:00
										 |  |  |     $(document).on('click', "a[action='note']", goToLink); | 
					
						
							|  |  |  |     $(document).on('click', 'div.popover-content a, div.ui-tooltip-content', goToLink); | 
					
						
							|  |  |  |     $(document).on('dblclick', '#note-detail a, div.ui-tooltip-content', goToLink); | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2017-11-19 20:36:13 -05:00
										 |  |  |         getNodePathFromLabel, | 
					
						
							|  |  |  |         getNotePathFromLink, | 
					
						
							| 
									
										
										
										
											2017-12-09 14:11:35 -05:00
										 |  |  |         createNoteLink, | 
					
						
							| 
									
										
										
										
											2017-12-09 14:17:03 -05:00
										 |  |  |         addLinkToEditor, | 
					
						
							|  |  |  |         addTextToEditor | 
					
						
							| 
									
										
										
										
											2017-11-04 17:07:03 -04:00
										 |  |  |     }; | 
					
						
							|  |  |  | })(); |