mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 13:01:31 +08:00 
			
		
		
		
	find widget readonly notes
This commit is contained in:
		
							parent
							
								
									f250b72563
								
							
						
					
					
						commit
						ade77e5fb8
					
				| @ -5,6 +5,7 @@ export default class ScrollingContainer extends Container { | |||||||
|         super(); |         super(); | ||||||
| 
 | 
 | ||||||
|         this.css('overflow', 'auto'); |         this.css('overflow', 'auto'); | ||||||
|  |         this.css('position', 'relative'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     setNoteContextEvent({noteContext}) { |     setNoteContextEvent({noteContext}) { | ||||||
| @ -35,7 +36,7 @@ export default class ScrollingContainer extends Container { | |||||||
| 
 | 
 | ||||||
|             const promise = super.handleEventInChildren(name, data); |             const promise = super.handleEventInChildren(name, data); | ||||||
| 
 | 
 | ||||||
|             // there seems to be some asynchronicity and we need to wait a bit before scrolling
 |             // there seems to be some asynchronicity, and we need to wait a bit before scrolling
 | ||||||
|             promise.then(() => setTimeout(() => this.$widget.scrollTop(scrollTop), 500)); |             promise.then(() => setTimeout(() => this.$widget.scrollTop(scrollTop), 500)); | ||||||
| 
 | 
 | ||||||
|             return promise; |             return promise; | ||||||
| @ -44,4 +45,8 @@ export default class ScrollingContainer extends Container { | |||||||
|             return super.handleEventInChildren(name, data); |             return super.handleEventInChildren(name, data); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     scrollContainerToCommand({position}) { | ||||||
|  |         this.$widget.scrollTop(position); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -123,7 +123,11 @@ export default class FindWidget extends NoteContextAwareWidget { | |||||||
|                 await this.findNext(e?.shiftKey ? -1 : 1); |                 await this.findNext(e?.shiftKey ? -1 : 1); | ||||||
|                 e.preventDefault(); |                 e.preventDefault(); | ||||||
|                 return false; |                 return false; | ||||||
|             } else if (e.key === 'Escape') { |             } | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         this.$findBox.keydown(async e => { | ||||||
|  |             if (e.key === 'Escape') { | ||||||
|                 await this.closeSearch(); |                 await this.closeSearch(); | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
| @ -239,11 +243,9 @@ export default class FindWidget extends NoteContextAwareWidget { | |||||||
|             const totalFound = parseInt(this.$totalFound.text()); |             const totalFound = parseInt(this.$totalFound.text()); | ||||||
|             const currentFound = parseInt(this.$currentFound.text()) - 1; |             const currentFound = parseInt(this.$currentFound.text()) - 1; | ||||||
| 
 | 
 | ||||||
|             if (totalFound > 0) { |  | ||||||
|                 await this.handler.cleanup(totalFound, currentFound); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             this.searchTerm = null; |             this.searchTerm = null; | ||||||
|  | 
 | ||||||
|  |             await this.handler.findBoxClosed(totalFound, currentFound); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -169,7 +169,7 @@ export default class FindInCode { | |||||||
|         codeEditor.scrollIntoView(pos.from); |         codeEditor.scrollIntoView(pos.from); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async cleanup(totalFound, currentFound) { |     async findBoxClosed(totalFound, currentFound) { | ||||||
|         const codeEditor = await this.getCodeEditor(); |         const codeEditor = await this.getCodeEditor(); | ||||||
| 
 | 
 | ||||||
|         if (totalFound > 0) { |         if (totalFound > 0) { | ||||||
| @ -190,10 +190,7 @@ export default class FindInCode { | |||||||
|         // Restore the highlightSelectionMatches setting
 |         // Restore the highlightSelectionMatches setting
 | ||||||
|         codeEditor.setOption("highlightSelectionMatches", this.oldHighlightSelectionMatches); |         codeEditor.setOption("highlightSelectionMatches", this.oldHighlightSelectionMatches); | ||||||
|         this.findResult = null; |         this.findResult = null; | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     async close() { |  | ||||||
|         const codeEditor = await this.getCodeEditor(); |  | ||||||
|         codeEditor.focus(); |         codeEditor.focus(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ | |||||||
| // for consistency
 | // for consistency
 | ||||||
| import libraryLoader from "../services/library_loader.js"; | import libraryLoader from "../services/library_loader.js"; | ||||||
| import utils from "../services/utils.js"; | import utils from "../services/utils.js"; | ||||||
|  | import appContext from "../services/app_context.js"; | ||||||
| 
 | 
 | ||||||
| const FIND_RESULT_SELECTED_CSS_CLASSNAME = "ck-find-result_selected"; | const FIND_RESULT_SELECTED_CSS_CLASSNAME = "ck-find-result_selected"; | ||||||
| const FIND_RESULT_CSS_CLASSNAME = "ck-find-result"; | const FIND_RESULT_CSS_CLASSNAME = "ck-find-result"; | ||||||
| @ -11,6 +12,8 @@ export default class FindInHtml { | |||||||
|     constructor(parent) { |     constructor(parent) { | ||||||
|         /** @property {FindWidget} */ |         /** @property {FindWidget} */ | ||||||
|         this.parent = parent; |         this.parent = parent; | ||||||
|  |         this.currentIndex = 0; | ||||||
|  |         this.$results = null; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async getInitialSearchTerm() { |     async getInitialSearchTerm() { | ||||||
| @ -22,15 +25,69 @@ export default class FindInHtml { | |||||||
| 
 | 
 | ||||||
|         const $content = await this.parent.noteContext.getContentElement(); |         const $content = await this.parent.noteContext.getContentElement(); | ||||||
| 
 | 
 | ||||||
|         $content.markRegExp(new RegExp(utils.escapeRegExp(searchTerm), "gi")); |         const wholeWordChar = wholeWord ? "\\b" : ""; | ||||||
|  |         const regExp = new RegExp(wholeWordChar + utils.escapeRegExp(searchTerm) + wholeWordChar, matchCase ? "g" : "gi"); | ||||||
|  | 
 | ||||||
|  |         return new Promise(res => { | ||||||
|  |             $content.unmark({ | ||||||
|  |                 done: () => { | ||||||
|  |                     $content.markRegExp(regExp, { | ||||||
|  |                         element: "span", | ||||||
|  |                         className: FIND_RESULT_CSS_CLASSNAME, | ||||||
|  |                         separateWordSearch: false, | ||||||
|  |                         caseSensitive: matchCase, | ||||||
|  |                         done: async () => { | ||||||
|  |                             this.$results = $content.find("." + FIND_RESULT_CSS_CLASSNAME); | ||||||
|  |                             this.currentIndex = 0; | ||||||
|  |                             await this.jumpTo(); | ||||||
|  | 
 | ||||||
|  |                             res({ | ||||||
|  |                                 totalFound: this.$results.length, | ||||||
|  |                                 currentFound: 1 | ||||||
|  |                             }); | ||||||
|  |                         } | ||||||
|  |                     }); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async findNext(direction, currentFound, nextFound) { |     async findNext(direction, currentFound, nextFound) { | ||||||
|  |         if (this.$results.length) { | ||||||
|  |             this.currentIndex += direction; | ||||||
|  | 
 | ||||||
|  |             if (this.currentIndex < 0) { | ||||||
|  |                 this.currentIndex = this.$results.length - 1; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|     async cleanup(totalFound, currentFound) { |             if (this.currentIndex > this.$results.length - 1) { | ||||||
|  |                 this.currentIndex = 0; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|     async close() { |             await this.jumpTo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async findBoxClosed(totalFound, currentFound) { | ||||||
|  |         const $content = await this.parent.noteContext.getContentElement(); | ||||||
|  |         $content.unmark(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async jumpTo() { | ||||||
|  |         if (this.$results.length) { | ||||||
|  |             const offsetTop = 100; | ||||||
|  |             const $current = this.$results.eq(this.currentIndex); | ||||||
|  |             this.$results.removeClass(FIND_RESULT_SELECTED_CSS_CLASSNAME); | ||||||
|  | 
 | ||||||
|  |             if ($current.length) { | ||||||
|  |                 $current.addClass(FIND_RESULT_SELECTED_CSS_CLASSNAME); | ||||||
|  |                 const position = $current.position().top - offsetTop; | ||||||
|  | 
 | ||||||
|  |                 const $content = await this.parent.noteContext.getContentElement(); | ||||||
|  |                 const $contentWiget = appContext.getComponentByEl($content); | ||||||
|  | 
 | ||||||
|  |                 $contentWiget.triggerCommand("scrollContainerTo", {position}); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -91,9 +91,10 @@ export default class FindInText { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async cleanup(totalFound, currentFound) { |     async findBoxClosed(totalFound, currentFound) { | ||||||
|         if (totalFound > 0) { |  | ||||||
|         const textEditor = await this.getTextEditor(); |         const textEditor = await this.getTextEditor(); | ||||||
|  | 
 | ||||||
|  |         if (totalFound > 0) { | ||||||
|             // Clear the markers and set the caret to the
 |             // Clear the markers and set the caret to the
 | ||||||
|             // current occurrence
 |             // current occurrence
 | ||||||
|             const model = textEditor.model; |             const model = textEditor.model; | ||||||
| @ -112,10 +113,7 @@ export default class FindInText { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         this.findResult = null; |         this.findResult = null; | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     async close() { |  | ||||||
|         const textEditor = await this.getTextEditor(); |  | ||||||
|         textEditor.focus(); |         textEditor.focus(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ const TPL = ` | |||||||
|         padding-top: 10px; |         padding-top: 10px; | ||||||
|         font-family: var(--detail-font-family); |         font-family: var(--detail-font-family); | ||||||
|         min-height: 50px; |         min-height: 50px; | ||||||
|  |         position: relative; | ||||||
|     } |     } | ||||||
|          |          | ||||||
|     .note-detail-readonly-text p:first-child, .note-detail-readonly-text::before { |     .note-detail-readonly-text p:first-child, .note-detail-readonly-text::before { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 zadam
						zadam