From 951d1dec24eb8e0bea4ec548cc79c5ce718bf02f Mon Sep 17 00:00:00 2001
From: fl0werpowers <47599466+fl0werpowers@users.noreply.github.com>
Date: Wed, 28 May 2025 08:40:51 +0000
Subject: [PATCH] chore(deps): replace `chalk` and `rimraf` with builtin functions (#1879)
---
quartz/components/scripts/spa.inline.ts | 38 +++++++++++++++++++++++++-------------
1 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/quartz/components/scripts/spa.inline.ts b/quartz/components/scripts/spa.inline.ts
index b67dad0..22fcd72 100644
--- a/quartz/components/scripts/spa.inline.ts
+++ b/quartz/components/scripts/spa.inline.ts
@@ -1,5 +1,6 @@
import micromorph from "micromorph"
import { FullSlug, RelativeURL, getFullSlug, normalizeRelativeURLs } from "../../util/path"
+import { fetchCanonical } from "./util"
// adapted from `micromorph`
// https://github.com/natemoo-re/micromorph
@@ -55,11 +56,13 @@
}, 100)
}
+let isNavigating = false
let p: DOMParser
-async function navigate(url: URL, isBack: boolean = false) {
+async function _navigate(url: URL, isBack: boolean = false) {
+ isNavigating = true
startLoading()
p = p || new DOMParser()
- const contents = await fetch(`${url}`)
+ const contents = await fetchCanonical(url)
.then((res) => {
const contentType = res.headers.get("content-type")
if (contentType?.startsWith("text/html")) {
@@ -74,6 +77,10 @@
if (!contents) return
+ // notify about to nav
+ const event: CustomEventMap["prenav"] = new CustomEvent("prenav", { detail: {} })
+ document.dispatchEvent(event)
+
// cleanup old
cleanupFns.forEach((fn) => fn())
cleanupFns.clear()
@@ -107,7 +114,7 @@
}
}
- // now, patch head
+ // now, patch head, re-executing scripts
const elementsToRemove = document.head.querySelectorAll(":not([spa-preserve])")
elementsToRemove.forEach((el) => el.remove())
const elementsToAdd = html.head.querySelectorAll(":not([spa-preserve])")
@@ -123,6 +130,19 @@
delete announcer.dataset.persist
}
+async function navigate(url: URL, isBack: boolean = false) {
+ if (isNavigating) return
+ isNavigating = true
+ try {
+ await _navigate(url, isBack)
+ } catch (e) {
+ console.error(e)
+ window.location.assign(url)
+ } finally {
+ isNavigating = false
+ }
+}
+
window.spaNavigate = navigate
function createRouter() {
@@ -140,21 +160,13 @@
return
}
- try {
- navigate(url, false)
- } catch (e) {
- window.location.assign(url)
- }
+ navigate(url, false)
})
window.addEventListener("popstate", (event) => {
const { url } = getOpts(event) ?? {}
if (window.location.hash && window.location.pathname === url?.pathname) return
- try {
- navigate(new URL(window.location.toString()), true)
- } catch (e) {
- window.location.reload()
- }
+ navigate(new URL(window.location.toString()), true)
return
})
}
--
Gitblit v1.10.0