fix: anchors links shouldnt cause reload (closes #574)
This commit is contained in:
		
							parent
							
								
									99e8f5944f
								
							
						
					
					
						commit
						134b6ed582
					
				
					 2 changed files with 15 additions and 1 deletions
				
			
		| 
						 | 
					@ -33,7 +33,7 @@ See [documentation on supported types and syntax here](https://help.obsidian.md
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> [!question]+ Can callouts be nested?
 | 
					> [!question]+ Can callouts be nested?
 | 
				
			||||||
>
 | 
					>
 | 
				
			||||||
> > [!todo]- Yes!, they can.
 | 
					> > [!todo]- Yes!, they can. And collapsed!
 | 
				
			||||||
> >
 | 
					> >
 | 
				
			||||||
> > > [!example] You can even use multiple layers of nesting.
 | 
					> > > [!example] You can even use multiple layers of nesting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,12 @@ const isLocalUrl = (href: string) => {
 | 
				
			||||||
  return false
 | 
					  return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const isSamePage = (url: URL): boolean => {
 | 
				
			||||||
 | 
					  const sameOrigin = url.origin === window.location.origin
 | 
				
			||||||
 | 
					  const samePath = url.pathname === window.location.pathname
 | 
				
			||||||
 | 
					  return sameOrigin && samePath
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const getOpts = ({ target }: Event): { url: URL; scroll?: boolean } | undefined => {
 | 
					const getOpts = ({ target }: Event): { url: URL; scroll?: boolean } | undefined => {
 | 
				
			||||||
  if (!isElement(target)) return
 | 
					  if (!isElement(target)) return
 | 
				
			||||||
  if (target.attributes.getNamedItem("target")?.value === "_blank") return
 | 
					  if (target.attributes.getNamedItem("target")?.value === "_blank") return
 | 
				
			||||||
| 
						 | 
					@ -93,8 +99,16 @@ function createRouter() {
 | 
				
			||||||
  if (typeof window !== "undefined") {
 | 
					  if (typeof window !== "undefined") {
 | 
				
			||||||
    window.addEventListener("click", async (event) => {
 | 
					    window.addEventListener("click", async (event) => {
 | 
				
			||||||
      const { url } = getOpts(event) ?? {}
 | 
					      const { url } = getOpts(event) ?? {}
 | 
				
			||||||
 | 
					      // dont hijack behaviour, just let browser act normally
 | 
				
			||||||
      if (!url || event.ctrlKey || event.metaKey) return
 | 
					      if (!url || event.ctrlKey || event.metaKey) return
 | 
				
			||||||
      event.preventDefault()
 | 
					      event.preventDefault()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (isSamePage(url) && url.hash) {
 | 
				
			||||||
 | 
					        const el = document.getElementById(decodeURIComponent(url.hash.substring(1)))
 | 
				
			||||||
 | 
					        el?.scrollIntoView()
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        navigate(url, false)
 | 
					        navigate(url, false)
 | 
				
			||||||
      } catch (e) {
 | 
					      } catch (e) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue