fix giscus

This commit is contained in:
Jacky Zhao 2024-07-30 01:11:26 -07:00
parent 52e31600a6
commit 45133e472f
3 changed files with 30 additions and 44 deletions

View File

@ -19,31 +19,9 @@ function boolToStringBool(b: boolean): string {
} }
export default ((opts: Options) => { export default ((opts: Options) => {
const Comments: QuartzComponent = (props: QuartzComponentProps) => { const Comments: QuartzComponent = (_props: QuartzComponentProps) => <div class="giscus"></div>
props.externalResources.js.push({
loadTime: "afterDOMReady",
spaPreserve: true,
contentType: "inline",
script: `
const giscusScript = document.createElement("script")
giscusScript.src = "https://giscus.app/client.js"
giscusScript.async = true
giscusScript.crossOrigin = "anonymous"
giscusScript.setAttribute("data-loading", "lazy")
giscusScript.setAttribute("data-emit-metadata", "0")
giscusScript.setAttribute("data-repo", "${opts.options.repo}")
giscusScript.setAttribute("data-repo-id", "${opts.options.repoId}")
giscusScript.setAttribute("data-category", "${opts.options.category}")
giscusScript.setAttribute("data-category-id", "${opts.options.categoryId}")
giscusScript.setAttribute("data-mapping", "${opts.options.mapping ?? "url"}")
giscusScript.setAttribute("data-strict", "${boolToStringBool(opts.options.strict ?? true)}")
giscusScript.setAttribute("data-reactions-enabled", "${boolToStringBool(opts.options.reactionsEnabled ?? true)}")
giscusScript.setAttribute("data-input-position", "${opts.options.inputPosition ?? "bottom"}")
const theme = document.documentElement.getAttribute("saved-theme")
giscusScript.setAttribute("data-theme", theme)
document.head.appendChild(giscusScript)
Comments.afterDOMLoaded = `
const changeTheme = (e) => { const changeTheme = (e) => {
const theme = e.detail.theme const theme = e.detail.theme
const iframe = document.querySelector('iframe.giscus-frame') const iframe = document.querySelector('iframe.giscus-frame')
@ -61,21 +39,29 @@ export default ((opts: Options) => {
} }
document.addEventListener("nav", () => { document.addEventListener("nav", () => {
iframe.contentWindow.postMessage({ const giscusContainer = document.querySelector(".giscus")
giscus: { const giscusScript = document.createElement("script")
setConfig: { giscusScript.src = "https://giscus.app/client.js"
term: window.document.body.dataset.slug giscusScript.async = true
}, giscusScript.crossOrigin = "anonymous"
}, giscusScript.setAttribute("data-loading", "lazy")
}, 'https://giscus.app') giscusScript.setAttribute("data-emit-metadata", "0")
giscusScript.setAttribute("data-repo", "${opts.options.repo}")
giscusScript.setAttribute("data-repo-id", "${opts.options.repoId}")
giscusScript.setAttribute("data-category", "${opts.options.category}")
giscusScript.setAttribute("data-category-id", "${opts.options.categoryId}")
giscusScript.setAttribute("data-mapping", "${opts.options.mapping ?? "url"}")
giscusScript.setAttribute("data-strict", "${boolToStringBool(opts.options.strict ?? true)}")
giscusScript.setAttribute("data-reactions-enabled", "${boolToStringBool(opts.options.reactionsEnabled ?? true)}")
giscusScript.setAttribute("data-input-position", "${opts.options.inputPosition ?? "bottom"}")
const theme = document.documentElement.getAttribute("saved-theme")
giscusScript.setAttribute("data-theme", theme)
giscusContainer.appendChild(giscusScript)
document.addEventListener("themechange", changeTheme) document.addEventListener("themechange", changeTheme)
window.addCleanup(() => document.removeEventListener("themechange", changeTheme)) window.addCleanup(() => document.removeEventListener("themechange", changeTheme))
})`, })`
})
return <div class="giscus"></div>
}
return Comments return Comments
}) satisfies QuartzComponentConstructor<Options> }) satisfies QuartzComponentConstructor<Options>

View File

@ -1,4 +1,4 @@
import type { ContentDetails, ContentIndex } from "../../plugins/emitters/contentIndex" import type { ContentDetails } from "../../plugins/emitters/contentIndex"
import * as d3 from "d3" import * as d3 from "d3"
import { registerEscapeHandler, removeAllChildren } from "./util" import { registerEscapeHandler, removeAllChildren } from "./util"
import { FullSlug, SimpleSlug, getFullSlug, resolveRelative, simplifySlug } from "../../util/path" import { FullSlug, SimpleSlug, getFullSlug, resolveRelative, simplifySlug } from "../../util/path"