mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-30 18:05:55 +01:00 
			
		
		
		
	
		
			
	
	
		
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | $(document).bind('keydown', 'alt+l', function() { | ||
|  |     $("#noteAutocomplete").val(''); | ||
|  |     $("#linkTitle").val(''); | ||
|  | 
 | ||
|  |     const noteDetail = $('#noteDetail'); | ||
|  |     noteDetail.summernote('editor.saveRange'); | ||
|  | 
 | ||
|  |     $("#insertLinkDialog").dialog({ | ||
|  |         modal: true, | ||
|  |         width: 500 | ||
|  |     }); | ||
|  | 
 | ||
|  |     function setDefaultLinkTitle(noteId) { | ||
|  |         const note = getNodeByKey(noteId); | ||
|  |         if (!note) { | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         let noteTitle = note.title; | ||
|  | 
 | ||
|  |         if (noteTitle.endsWith(" (clone)")) { | ||
|  |             noteTitle = noteTitle.substr(0, noteTitle.length - 8); | ||
|  |         } | ||
|  | 
 | ||
|  |         $("#linkTitle").val(noteTitle); | ||
|  |     } | ||
|  | 
 | ||
|  |     $("#noteAutocomplete").autocomplete({ | ||
|  |         source: getAutocompleteItems(globalAllNoteIds), | ||
|  |         minLength: 0, | ||
|  |         change: function () { | ||
|  |             const val = $("#noteAutocomplete").val(); | ||
|  |             const noteId = getNodeIdFromLabel(val); | ||
|  | 
 | ||
|  |             if (noteId) { | ||
|  |                 setDefaultLinkTitle(noteId); | ||
|  |             } | ||
|  |         }, | ||
|  |         // this is called when user goes through autocomplete list with keyboard
 | ||
|  |         // at this point the item isn't selected yet so we use supplied ui.item to see where the cursor is
 | ||
|  |         focus: function (event, ui) { | ||
|  |             const noteId = getNodeIdFromLabel(ui.item.value); | ||
|  | 
 | ||
|  |             setDefaultLinkTitle(noteId); | ||
|  |         } | ||
|  |     }); | ||
|  | }); | ||
|  | 
 | ||
|  | $("#insertLinkForm").submit(function() { | ||
|  |     let val = $("#noteAutocomplete").val(); | ||
|  | 
 | ||
|  |     const noteId = getNodeIdFromLabel(val); | ||
|  | 
 | ||
|  |     if (noteId) { | ||
|  |         const linkTitle = $("#linkTitle").val(); | ||
|  |         const noteDetail = $('#noteDetail'); | ||
|  | 
 | ||
|  |         $("#insertLinkDialog").dialog("close"); | ||
|  | 
 | ||
|  |         noteDetail.summernote('editor.restoreRange'); | ||
|  | 
 | ||
|  |         noteDetail.summernote('createLink', { | ||
|  |             text: linkTitle, | ||
|  |             url: 'app#' + noteId, | ||
|  |             isNewWindow: true | ||
|  |         }); | ||
|  |     } | ||
|  | 
 | ||
|  |     return false; | ||
|  | }); | ||
|  | 
 | ||
|  | // 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
 | ||
|  | $(document).on('click', 'div.popover-content a', function(e) { | ||
|  |     const targetUrl = $(e.target).attr("href"); | ||
|  | 
 | ||
|  |     const noteIdMatch = /app#([A-Za-z0-9]{22})/.exec(targetUrl); | ||
|  | 
 | ||
|  |     if (noteIdMatch !== null) { | ||
|  |         const noteId = noteIdMatch[1]; | ||
|  | 
 | ||
|  |         getNodeByKey(noteId).setActive(); | ||
|  | 
 | ||
|  |         e.preventDefault(); | ||
|  |     } | ||
|  | }); | ||
|  | 
 | ||
|  | function getNodeIdFromLabel(label) { | ||
|  |     const noteIdMatch = / \(([A-Za-z0-9]{22})\)/.exec(label); | ||
|  | 
 | ||
|  |     if (noteIdMatch !== null) { | ||
|  |         return noteIdMatch[1]; | ||
|  |     } | ||
|  | 
 | ||
|  |     return null; | ||
|  | } |