| | |
| | | import micromorph from "micromorph" |
| | | import { CanonicalSlug, RelativeURL } from "../../path" |
| | | |
| | | // adapted from `micromorph` |
| | | // https://github.com/natemoo-re/micromorph |
| | |
| | | return { url: new URL(href), scroll: 'routerNoscroll' in a.dataset ? false : undefined } |
| | | } |
| | | |
| | | function notifyNav(slug: string) { |
| | | const event = new CustomEvent("nav", { detail: { slug } }) |
| | | function notifyNav(url: CanonicalSlug) { |
| | | const event: CustomEventMap["nav"] = new CustomEvent("nav", { detail: { url } }) |
| | | document.dispatchEvent(event) |
| | | } |
| | | |
| | |
| | | delete announcer.dataset.persist |
| | | } |
| | | |
| | | window.spaNavigate = navigate |
| | | |
| | | function createRouter() { |
| | | if (typeof window !== "undefined") { |
| | | window.addEventListener("click", async (event) => { |
| | |
| | | } |
| | | |
| | | return new class Router { |
| | | go(pathname: string) { |
| | | go(pathname: RelativeURL) { |
| | | const url = new URL(pathname, window.location.toString()) |
| | | return navigate(url, false) |
| | | } |