mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	Add full text search in autocomplete
This commit is contained in:
		| @@ -32,8 +32,7 @@ async function autocompleteSourceForCKEditor(queryText) { | ||||
| async function autocompleteSource(term, cb, options = {}) { | ||||
|     const activeNoteId = appContext.tabManager.getActiveContextNoteId(); | ||||
|  | ||||
|     let results = await server.get(`autocomplete?query=${encodeURIComponent(term)}&activeNoteId=${activeNoteId}`); | ||||
|  | ||||
|     let results = await server.get(`autocomplete?query=${encodeURIComponent(term)}&activeNoteId=${activeNoteId}&fastSearch=${options.fastSearch}`); | ||||
|     if (term.trim().length >= 1 && options.allowCreatingNotes) { | ||||
|         results = [ | ||||
|             { | ||||
| @@ -103,6 +102,15 @@ function showRecentNotes($el) { | ||||
|     $el.trigger(e); | ||||
| } | ||||
|  | ||||
| function fullTextSearch($el,options){ | ||||
|     const searchString = $el.autocomplete("val") | ||||
|         clearText($el); | ||||
|         options.fastSearch = false; | ||||
|         $el.autocomplete("val", searchString); | ||||
|         $el.autocomplete('open'); | ||||
|         options.fastSearch = true; | ||||
| } | ||||
|  | ||||
| function initNoteAutocomplete($el, options) { | ||||
|     if ($el.hasClass("note-autocomplete-input") || utils.isMobile()) { | ||||
|         // clear any event listener added in previous invocation of this function | ||||
| @@ -123,10 +131,14 @@ function initNoteAutocomplete($el, options) { | ||||
|         .addClass("input-group-text show-recent-notes-button bx bx-time") | ||||
|         .prop("title", "Show recent notes"); | ||||
|  | ||||
|     const $fullTextSearchButton = $("<button>") | ||||
|         .addClass("input-group-text full-text-search-button bx bx-search") | ||||
|         .prop("title", "Full text search. (Shift+Enter)");     | ||||
|  | ||||
|     const $goToSelectedNoteButton = $("<button>") | ||||
|         .addClass("input-group-text go-to-selected-note-button bx bx-arrow-to-right"); | ||||
|  | ||||
|     $el.after($clearTextButton).after($showRecentNotesButton); | ||||
|     $el.after($clearTextButton).after($showRecentNotesButton).after($fullTextSearchButton); | ||||
|  | ||||
|     if (!options.hideGoToSelectedNoteButton) { | ||||
|         $el.after($goToSelectedNoteButton); | ||||
| @@ -142,6 +154,10 @@ function initNoteAutocomplete($el, options) { | ||||
|         return false; | ||||
|     }); | ||||
|  | ||||
|     $fullTextSearchButton.on('click', e => { | ||||
|         fullTextSearch($el, options); | ||||
|     }); | ||||
|  | ||||
|     let autocompleteOptions = {}; | ||||
|     if (options.container) { | ||||
|         autocompleteOptions.dropdownMenuContainer = options.container; | ||||
| @@ -158,7 +174,16 @@ function initNoteAutocomplete($el, options) { | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     $el.on('keydown', async (event) => { | ||||
|         if (event.shiftKey && event.key === 'Enter') { | ||||
|             // Prevent Enter from triggering autoComplete. | ||||
|             event.stopImmediatePropagation(); | ||||
|             event.preventDefault(); | ||||
|             fullTextSearch($el,options) | ||||
|         } | ||||
|     }); | ||||
|      | ||||
|     options.fastSearch = true; // Perform fast search by default | ||||
|     $el.autocomplete({ | ||||
|         ...autocompleteOptions, | ||||
|         appendTo: document.querySelector('body'), | ||||
|   | ||||
| @@ -14,6 +14,8 @@ function getAutocomplete(req: Request) { | ||||
|         throw new ValidationError("Invalid query data type."); | ||||
|     } | ||||
|     const query = (req.query.query || "").trim(); | ||||
|     const fastSearch = String(req.query.fastSearch).toLowerCase() === "false" ? false : true; | ||||
|      | ||||
|     const activeNoteId = req.query.activeNoteId || 'none'; | ||||
|  | ||||
|     let results; | ||||
| @@ -24,7 +26,7 @@ function getAutocomplete(req: Request) { | ||||
|         results = getRecentNotes(activeNoteId); | ||||
|     } | ||||
|     else { | ||||
|         results = searchService.searchNotesForAutocomplete(query); | ||||
|         results = searchService.searchNotesForAutocomplete(query, fastSearch); | ||||
|     } | ||||
|  | ||||
|     const msTaken = Date.now() - timestampStarted; | ||||
|   | ||||
| @@ -340,9 +340,9 @@ function findFirstNoteWithQuery(query: string, searchContext: SearchContext): BN | ||||
|     return searchResults.length > 0 ? becca.notes[searchResults[0].noteId] : null; | ||||
| } | ||||
|  | ||||
| function searchNotesForAutocomplete(query: string) { | ||||
| function searchNotesForAutocomplete(query: string, fastSearch: boolean = true) { | ||||
|     const searchContext = new SearchContext({ | ||||
|         fastSearch: true, | ||||
|         fastSearch: fastSearch, | ||||
|         includeArchivedNotes: false, | ||||
|         includeHiddenNotes: true, | ||||
|         fuzzyAttributeSearch: true, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user