fix: anchors links shouldnt cause reload (closes #574)
This commit is contained in:
		@@ -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) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user