mirror of
				https://github.com/zopiya/x-eden-quartz.git
				synced 2025-11-04 06:46:48 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			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))
 | 
						|
})
 |