mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	Add full text search in autocomplete
This commit is contained in:
		| @@ -45,6 +45,16 @@ async function autocompleteSource(term, cb, options = {}) { | ||||
|         ].concat(results); | ||||
|     } | ||||
|  | ||||
|     if (term.trim().length >= 1 && options.allowSearchNotes) { | ||||
|         results = results.concat([ | ||||
|             { | ||||
|                 action: 'search-notes', | ||||
|                 noteTitle: term, | ||||
|                 highlightedNotePathTitle: `Search for "${utils.escapeHtml(term)}" <kbd style='color: var(--muted-text-color); background-color: transparent; float: right;'>Ctrl+Enter</kbd>` | ||||
|             } | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     if (term.match(/^[a-z]+:\/\/.+/i) && options.allowExternalLinks) { | ||||
|         results = [ | ||||
|             { | ||||
| @@ -138,6 +148,17 @@ function initNoteAutocomplete($el, options) { | ||||
|         autocompleteOptions.debug = true;   // don't close on blur | ||||
|     } | ||||
|  | ||||
|     if (options.allowSearchNotes) { | ||||
|         $el.on('keydown', (event) => { | ||||
|             if (event.ctrlKey && event.key === 'Enter') { | ||||
|                 // Prevent Ctrl + Enter from triggering autoComplete. | ||||
|                 event.stopImmediatePropagation(); | ||||
|                 event.preventDefault(); | ||||
|                 $el.trigger('autocomplete:selected', { action: 'search-notes', noteTitle: $el.autocomplete("val")}); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     $el.autocomplete({ | ||||
|         ...autocompleteOptions, | ||||
|         appendTo: document.querySelector('body'), | ||||
| @@ -192,6 +213,12 @@ function initNoteAutocomplete($el, options) { | ||||
|             suggestion.notePath = note.getBestNotePathString(hoistedNoteId); | ||||
|         } | ||||
|  | ||||
|         if (suggestion.action === 'search-notes') { | ||||
|             const searchString = suggestion.noteTitle; | ||||
|             appContext.triggerCommand('searchNotes', { searchString }); | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         $el.setSelectedNotePath(suggestion.notePath); | ||||
|         $el.setSelectedExternalLink(null); | ||||
|  | ||||
|   | ||||
| @@ -38,16 +38,6 @@ export default class JumpToNoteDialog extends BasicWidget { | ||||
|         this.modal = bootstrap.Modal.getOrCreateInstance(this.$widget); | ||||
|  | ||||
|         this.$autoComplete = this.$widget.find(".jump-to-note-autocomplete"); | ||||
|         this.$autoComplete.on('keydown',  (event) => { | ||||
|             if (event.ctrlKey && event.key === 'Enter') { | ||||
|                     // Prevent Ctrl + Enter from triggering autoComplete.                     | ||||
|                     event.stopImmediatePropagation();  | ||||
|                     event.preventDefault();   | ||||
|                     const searchString = this.$autoComplete.val(); | ||||
|                     appContext.triggerCommand('searchNotes', { searchString }); | ||||
|                 } | ||||
|              | ||||
|         }); | ||||
|         this.$results = this.$widget.find(".jump-to-note-results"); | ||||
|         this.$showInFullTextButton = this.$widget.find(".show-in-full-text-button"); | ||||
|         this.$showInFullTextButton.on('click', e => this.showInFullText(e)); | ||||
| @@ -68,6 +58,7 @@ export default class JumpToNoteDialog extends BasicWidget { | ||||
|         noteAutocompleteService.initNoteAutocomplete(this.$autoComplete, { | ||||
|             allowCreatingNotes: true, | ||||
|             hideGoToSelectedNoteButton: true, | ||||
|             allowSearchNotes: true, | ||||
|             container: this.$results | ||||
|         }) | ||||
|             // clear any event listener added in previous invocation of this function | ||||
|   | ||||
| @@ -65,23 +65,12 @@ export default class EmptyTypeWidget extends TypeWidget { | ||||
|  | ||||
|         this.$widget = $(TPL); | ||||
|         this.$autoComplete = this.$widget.find(".note-autocomplete"); | ||||
|  | ||||
|         this.$autoComplete.on('keydown',  (event) => { | ||||
|             if (event.ctrlKey && event.key === 'Enter') { | ||||
|                     // Prevent Ctrl + Enter from triggering autoComplete. | ||||
|                     event.stopImmediatePropagation();  | ||||
|                     event.preventDefault();   | ||||
|                     const searchString = this.$autoComplete.val(); | ||||
|                     appContext.triggerCommand('searchNotes', { searchString }); | ||||
|                 } | ||||
|              | ||||
|         }); | ||||
|  | ||||
|         this.$results = this.$widget.find(".note-detail-empty-results"); | ||||
|  | ||||
|         noteAutocompleteService.initNoteAutocomplete(this.$autoComplete, { | ||||
|             hideGoToSelectedNoteButton: true, | ||||
|             allowCreatingNotes: true, | ||||
|             allowSearchNotes: true, | ||||
|             container: this.$results | ||||
|         }) | ||||
|             .on('autocomplete:noteselected', function(event, suggestion, dataset) { | ||||
|   | ||||
| @@ -922,7 +922,7 @@ | ||||
|   }, | ||||
|   "empty": { | ||||
|     "open_note_instruction": "Open a note by typing the note's title into the input below or choose a note in the tree.", | ||||
|     "search_placeholder": "search for a note by its name, Ctrl+Enter for full-text search.", | ||||
|     "search_placeholder": "search for a note by its name", | ||||
|     "enter_workspace": "Enter workspace {{title}}" | ||||
|   }, | ||||
|   "file": { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user