1224c7d32f
* refactor(comments): move script to files for LSP, treesitter, and the whole galore. Signed-off-by: Aaron Pham <contact@aarnphm.xyz> * fix(type): support removeEventListener with CustomEventMap Signed-off-by: Aaron Pham <contact@aarnphm.xyz> * fix: parse bool to string first Signed-off-by: Aaron Pham <contact@aarnphm.xyz> * chore: address comments and test on branch Signed-off-by: Aaron Pham <contact@aarnphm.xyz> * revert: remove comments section from main quartz pages Signed-off-by: Aaron Pham <contact@aarnphm.xyz> --------- Signed-off-by: Aaron Pham <contact@aarnphm.xyz>
68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
const changeTheme = (e: CustomEventMap["themechange"]) => {
|
|
const theme = e.detail.theme
|
|
const iframe = document.querySelector("iframe.giscus-frame") as HTMLIFrameElement
|
|
if (!iframe) {
|
|
return
|
|
}
|
|
|
|
if (!iframe.contentWindow) {
|
|
return
|
|
}
|
|
|
|
iframe.contentWindow.postMessage(
|
|
{
|
|
giscus: {
|
|
setConfig: {
|
|
theme: theme,
|
|
},
|
|
},
|
|
},
|
|
"https://giscus.app",
|
|
)
|
|
}
|
|
|
|
type GiscusElement = Omit<HTMLElement, "dataset"> & {
|
|
dataset: DOMStringMap & {
|
|
repo: `${string}/${string}`
|
|
repoId: string
|
|
category: string
|
|
categoryId: string
|
|
mapping: "url" | "title" | "og:title" | "specific" | "number" | "pathname"
|
|
strict: string
|
|
reactionsEnabled: string
|
|
inputPosition: "top" | "bottom"
|
|
}
|
|
}
|
|
|
|
document.addEventListener("nav", () => {
|
|
const giscusContainer = document.querySelector(".giscus") as GiscusElement
|
|
if (!giscusContainer) {
|
|
return
|
|
}
|
|
|
|
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", giscusContainer.dataset.repo)
|
|
giscusScript.setAttribute("data-repo-id", giscusContainer.dataset.repoId)
|
|
giscusScript.setAttribute("data-category", giscusContainer.dataset.category)
|
|
giscusScript.setAttribute("data-category-id", giscusContainer.dataset.categoryId)
|
|
giscusScript.setAttribute("data-mapping", giscusContainer.dataset.mapping)
|
|
giscusScript.setAttribute("data-strict", giscusContainer.dataset.strict)
|
|
giscusScript.setAttribute("data-reactions-enabled", giscusContainer.dataset.reactionsEnabled)
|
|
giscusScript.setAttribute("data-input-position", giscusContainer.dataset.inputPosition)
|
|
|
|
const theme = document.documentElement.getAttribute("saved-theme")
|
|
if (theme) {
|
|
giscusScript.setAttribute("data-theme", theme)
|
|
}
|
|
|
|
giscusContainer.appendChild(giscusScript)
|
|
|
|
document.addEventListener("themechange", changeTheme)
|
|
window.addCleanup(() => document.removeEventListener("themechange", changeTheme))
|
|
})
|