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?
 | 
			
		||||
>
 | 
			
		||||
> > [!todo]- Yes!, they can.
 | 
			
		||||
> > [!todo]- Yes!, they can. And collapsed!
 | 
			
		||||
> >
 | 
			
		||||
> > > [!example] You can even use multiple layers of nesting.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,12 @@ const isLocalUrl = (href: string) => {
 | 
			
		|||
  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 => {
 | 
			
		||||
  if (!isElement(target)) return
 | 
			
		||||
  if (target.attributes.getNamedItem("target")?.value === "_blank") return
 | 
			
		||||
| 
						 | 
				
			
			@ -93,8 +99,16 @@ function createRouter() {
 | 
			
		|||
  if (typeof window !== "undefined") {
 | 
			
		||||
    window.addEventListener("click", async (event) => {
 | 
			
		||||
      const { url } = getOpts(event) ?? {}
 | 
			
		||||
      // dont hijack behaviour, just let browser act normally
 | 
			
		||||
      if (!url || event.ctrlKey || event.metaKey) return
 | 
			
		||||
      event.preventDefault()
 | 
			
		||||
 | 
			
		||||
      if (isSamePage(url) && url.hash) {
 | 
			
		||||
        const el = document.getElementById(decodeURIComponent(url.hash.substring(1)))
 | 
			
		||||
        el?.scrollIntoView()
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
        navigate(url, false)
 | 
			
		||||
      } catch (e) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue