From 78f4cdbe109308fa33cb87387952aef5a528ebbe Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sat, 19 Aug 2023 16:40:02 -0700 Subject: [PATCH] avoid 404 on icon for spa navigations with anchors --- quartz/components/Head.tsx | 4 ++-- quartz/components/scripts/spa.inline.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/quartz/components/Head.tsx b/quartz/components/Head.tsx index 5221c29..67f0c02 100644 --- a/quartz/components/Head.tsx +++ b/quartz/components/Head.tsx @@ -1,4 +1,4 @@ -import { pathToRoot } from "../util/path" +import { joinSegments, pathToRoot } from "../util/path" import { JSResourceToScriptElement } from "../util/resources" import { QuartzComponentConstructor, QuartzComponentProps } from "./types" @@ -8,7 +8,7 @@ export default (() => { const description = fileData.description?.trim() ?? "No description provided" const { css, js } = externalResources const baseDir = pathToRoot(fileData.slug!) - const iconPath = baseDir + "/static/icon.png" + const iconPath = joinSegments(baseDir, "static/icon.png") const ogImagePath = `https://${cfg.baseUrl}/static/og-image.png` return ( diff --git a/quartz/components/scripts/spa.inline.ts b/quartz/components/scripts/spa.inline.ts index 0a57a9d..8475a16 100644 --- a/quartz/components/scripts/spa.inline.ts +++ b/quartz/components/scripts/spa.inline.ts @@ -66,7 +66,6 @@ async function navigate(url: URL, isBack: boolean = false) { // scroll into place and add history if (!isBack) { - history.pushState({}, "", url) if (url.hash) { const el = document.getElementById(url.hash.substring(1)) el?.scrollIntoView() @@ -81,6 +80,9 @@ async function navigate(url: URL, isBack: boolean = false) { const elementsToAdd = html.head.querySelectorAll(":not([spa-preserve])") elementsToAdd.forEach((el) => document.head.appendChild(el)) + // delay setting the url until now + // at this point everything is loaded so changing the url should resolve to the correct addresses + history.pushState({}, "", url) notifyNav(getFullSlug(window)) delete announcer.dataset.persist }