mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 03:29:02 +01:00 
			
		
		
		
	toc scrolls smoothly
This commit is contained in:
		
							parent
							
								
									d7d98b29a7
								
							
						
					
					
						commit
						085c0e76ca
					
				| @ -176,7 +176,9 @@ export default class TocWidget extends RightPanelWidget { | |||||||
|             const headingElement = $container.find(":header")[headingIndex]; |             const headingElement = $container.find(":header")[headingIndex]; | ||||||
| 
 | 
 | ||||||
|             if (headingElement != null) { |             if (headingElement != null) { | ||||||
|                 headingElement.scrollIntoView(); |                 headingElement.scrollIntoView({ | ||||||
|  |                     behavior: 'smooth' | ||||||
|  |                 }); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             const textEditor = await this.noteContext.getTextEditor(); |             const textEditor = await this.noteContext.getTextEditor(); | ||||||
| @ -192,50 +194,9 @@ export default class TocWidget extends RightPanelWidget { | |||||||
|             // navigate (note that the TOC rendering and other TOC
 |             // navigate (note that the TOC rendering and other TOC
 | ||||||
|             // entries' navigation could be wrong too)
 |             // entries' navigation could be wrong too)
 | ||||||
|             if (headingNode != null) { |             if (headingNode != null) { | ||||||
|                 // Setting the selection alone doesn't scroll to the
 |                 $(textEditor.editing.view.domRoots.values().next().value).find(':header')[headingIndex].scrollIntoView({ | ||||||
|                 // caret, needs to be done explicitly and outside of
 |                     behavior: 'smooth' | ||||||
|                 // the writer change callback so the scroll is
 |  | ||||||
|                 // guaranteed to happen after the selection is
 |  | ||||||
|                 // updated.
 |  | ||||||
| 
 |  | ||||||
|                 // In addition, scrolling to a caret later in the
 |  | ||||||
|                 // document (ie "forward scrolls"), only scrolls
 |  | ||||||
|                 // barely enough to place the caret at the bottom of
 |  | ||||||
|                 // the screen, which is a usability issue, you would
 |  | ||||||
|                 // like the caret to be placed at the top or center
 |  | ||||||
|                 // of the screen.
 |  | ||||||
| 
 |  | ||||||
|                 // To work around that issue, first scroll to the
 |  | ||||||
|                 // end of the document, then scroll to the desired
 |  | ||||||
|                 // point. This causes all the scrolls to be
 |  | ||||||
|                 // "backward scrolls" no matter the current caret
 |  | ||||||
|                 // position, which places the caret at the top of
 |  | ||||||
|                 // the screen.
 |  | ||||||
| 
 |  | ||||||
|                 // XXX This could be fixed in another way by using
 |  | ||||||
|                 //     the underlying CKEditor5
 |  | ||||||
|                 //     scrollViewportToShowTarget, which allows to
 |  | ||||||
|                 //     provide a larger "viewportOffset", but that
 |  | ||||||
|                 //     has coding complications (requires calling an
 |  | ||||||
|                 //     internal CKEditor utils funcion and passing
 |  | ||||||
|                 //     an HTML element, not a CKEditor node, and
 |  | ||||||
|                 //     CKEditor5 doesn't seem to have a
 |  | ||||||
|                 //     straightforward way to convert a node to an
 |  | ||||||
|                 //     HTML element? (in CKEditor4 this was done
 |  | ||||||
|                 //     with $(node.$) )
 |  | ||||||
| 
 |  | ||||||
|                 // Scroll to the end of the note to guarantee the
 |  | ||||||
|                 // next scroll is a backwards scroll that places the
 |  | ||||||
|                 // caret at the top of the screen
 |  | ||||||
|                 model.change(writer => { |  | ||||||
|                     writer.setSelection(root.getChild(root.childCount - 1), 0); |  | ||||||
|                 }); |                 }); | ||||||
|                 textEditor.editing.view.scrollToTheSelection(); |  | ||||||
|                 // Backwards scroll to the heading
 |  | ||||||
|                 model.change(writer => { |  | ||||||
|                     writer.setSelection(headingNode, 0); |  | ||||||
|                 }); |  | ||||||
|                 textEditor.editing.view.scrollToTheSelection(); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SnnBcd xt
						SnnBcd xt