mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-11-04 15:11:31 +08:00 
			
		
		
		
	highlight the first visible find result in scrolling container.
This commit is contained in:
		
							parent
							
								
									67e84d921f
								
							
						
					
					
						commit
						aecde9656b
					
				@ -38,25 +38,16 @@ export default class FindInHtml {
 | 
			
		||||
                        caseSensitive: matchCase,
 | 
			
		||||
                        done: async () => {
 | 
			
		||||
                            this.$results = $content.find(`.${FIND_RESULT_CSS_CLASSNAME}`);
 | 
			
		||||
                            let closestIndex = 0;
 | 
			
		||||
                            let minTop = Infinity;
 | 
			
		||||
                            const scrollingContainer = $content[0].closest('.scrolling-container');
 | 
			
		||||
                            const containerTop = scrollingContainer?.getBoundingClientRect().top ?? 0;
 | 
			
		||||
                            const closestIndex = this.$results.toArray().findIndex(el => el.getBoundingClientRect().top >= containerTop);
 | 
			
		||||
                            this.currentIndex = closestIndex >= 0 ? closestIndex : 0;
 | 
			
		||||
                            
 | 
			
		||||
                            this.$results.each((i, el) => {
 | 
			
		||||
                                const rect = el.getBoundingClientRect();
 | 
			
		||||
                                const top = rect.top;
 | 
			
		||||
 | 
			
		||||
                                if (top >= 0 && top < minTop) {
 | 
			
		||||
                                    minTop = top;
 | 
			
		||||
                                    closestIndex = i;
 | 
			
		||||
                                }
 | 
			
		||||
                            });
 | 
			
		||||
 | 
			
		||||
                            this.currentIndex = closestIndex;
 | 
			
		||||
                            await this.jumpTo();
 | 
			
		||||
 | 
			
		||||
                            res({
 | 
			
		||||
                                totalFound: this.$results.length,
 | 
			
		||||
                                currentFound: this.$results.length > 0 ? closestIndex + 1 : 0
 | 
			
		||||
                                currentFound: this.$results.length > 0 ? this.currentIndex + 1 : 0
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
@ -54,8 +54,11 @@ export default class FindInText {
 | 
			
		||||
            const options = { matchCase: matchCase, wholeWords: wholeWord };
 | 
			
		||||
            findResult = textEditor.execute<CKFindResult>("find", searchTerm, options);
 | 
			
		||||
            totalFound = findResult.results.length;
 | 
			
		||||
            // Find the result beyond the cursor
 | 
			
		||||
            const cursorPos = model.document.selection.getLastPosition();
 | 
			
		||||
            const selection = model.document.selection;
 | 
			
		||||
            // If text is selected, highlight the corresponding result;
 | 
			
		||||
            // otherwise, highlight the first visible result in the scrolling container.
 | 
			
		||||
            if (!selection.isCollapsed) {
 | 
			
		||||
                const cursorPos = selection.getFirstPosition();
 | 
			
		||||
                for (let i = 0; i < findResult.results.length; ++i) {
 | 
			
		||||
                    const marker = findResult.results.get(i).marker;
 | 
			
		||||
                    const fromPos = marker.getStart();
 | 
			
		||||
@ -64,6 +67,14 @@ export default class FindInText {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                const editorEl = textEditor?.sourceElement;
 | 
			
		||||
                const findResultElement = editorEl.querySelectorAll(".ck-find-result");
 | 
			
		||||
                const scrollingContainer = editorEl.closest('.scrolling-container');
 | 
			
		||||
                const containerTop = scrollingContainer?.getBoundingClientRect().top ?? 0;
 | 
			
		||||
                const closestIndex = Array.from(findResultElement ?? []).findIndex((el) => el.getBoundingClientRect().top >= containerTop);
 | 
			
		||||
                currentFound = closestIndex >= 0 ? closestIndex : 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.findResult = findResult;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user