| | |
| | | async function navigate(url: URL, isBack: boolean = false) { |
| | | p = p || new DOMParser() |
| | | const contents = await fetch(`${url}`) |
| | | .then((res) => res.text()) |
| | | .then((res) => { |
| | | const contentType = res.headers.get("content-type") |
| | | if (contentType?.startsWith("text/html")) { |
| | | return res.text() |
| | | } else { |
| | | window.location.assign(url) |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | window.location.assign(url) |
| | | }) |
| | |
| | | if (isSamePage(url) && url.hash) { |
| | | const el = document.getElementById(decodeURIComponent(url.hash.substring(1))) |
| | | el?.scrollIntoView() |
| | | history.pushState({}, "", url) |
| | | return |
| | | } |
| | | |
| | |
| | | style: |
| | | "position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px", |
| | | } |
| | | |
| | | |
| | | customElements.define( |
| | | "route-announcer", |
| | | class RouteAnnouncer extends HTMLElement { |