summaryrefslogtreecommitdiff
path: root/static/giscus-loader.js
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-02-09 01:24:23 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-02-09 01:24:23 +0300
commit3955fbabc9ed05116be07c9f659cd550734f8593 (patch)
tree109ebc5e0946d44b4766219a02b74dac36795300 /static/giscus-loader.js
parentf2bb77e460acfd5929ecc6de053b68932f2c8121 (diff)
go FAST
Diffstat (limited to 'static/giscus-loader.js')
-rw-r--r--static/giscus-loader.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/static/giscus-loader.js b/static/giscus-loader.js
new file mode 100644
index 0000000..b671859
--- /dev/null
+++ b/static/giscus-loader.js
@@ -0,0 +1,90 @@
+(() => {
+ if (window.__wsapGiscusInitialized) return;
+ window.__wsapGiscusInitialized = true;
+
+ const initContainer = (root) => {
+ if (!(root instanceof HTMLElement) || root.dataset.giscusInit === "1")
+ return;
+ root.dataset.giscusInit = "1";
+
+ const toggle = root.querySelector(".comments-toggle");
+ const trigger = root.querySelector(".giscus-trigger");
+ const slot = root.querySelector(".giscus-slot");
+
+ if (
+ !(toggle instanceof HTMLButtonElement) ||
+ !(slot instanceof HTMLElement)
+ ) {
+ return;
+ }
+
+ let isLoading = false;
+ let hasLoaded = false;
+ let observer = null;
+
+ const loadComments = () => {
+ if (isLoading || hasLoaded) return;
+
+ isLoading = true;
+ toggle.disabled = true;
+ toggle.textContent = "Loading comments...";
+
+ const script = document.createElement("script");
+ script.src = "https://giscus.app/client.js";
+ script.setAttribute("data-repo", "wenekar/giscus");
+ script.setAttribute("data-repo-id", "R_kgDOREZgEQ");
+ script.setAttribute("data-category", "Announcements");
+ script.setAttribute("data-category-id", "DIC_kwDOREZgEc4C1nRY");
+ script.setAttribute("data-mapping", "pathname");
+ script.setAttribute("data-strict", "0");
+ script.setAttribute("data-reactions-enabled", "1");
+ script.setAttribute("data-emit-metadata", "0");
+ script.setAttribute("data-input-position", "top");
+ script.setAttribute("data-theme", "preferred_color_scheme");
+ script.setAttribute("data-lang", "en");
+ script.setAttribute("data-loading", "lazy");
+ script.crossOrigin = "anonymous";
+ script.async = true;
+
+ script.addEventListener("load", () => {
+ isLoading = false;
+ hasLoaded = true;
+ toggle.remove();
+ });
+
+ script.addEventListener("error", () => {
+ isLoading = false;
+ hasLoaded = false;
+ toggle.disabled = false;
+ toggle.textContent = "Show comments";
+ script.remove();
+ });
+
+ slot.appendChild(script);
+ if (observer) observer.disconnect();
+ };
+
+ toggle.addEventListener("click", loadComments);
+
+ if ("IntersectionObserver" in window && trigger instanceof HTMLElement) {
+ observer = new IntersectionObserver(
+ (entries) => {
+ if (entries.some((entry) => entry.isIntersecting)) loadComments();
+ },
+ { rootMargin: "300px 0px" },
+ );
+ observer.observe(trigger);
+ }
+ };
+
+ const initAll = () => {
+ document.querySelectorAll("[data-giscus-root]").forEach(initContainer);
+ };
+
+ if (document.readyState === "loading") {
+ document.addEventListener("DOMContentLoaded", initAll, { once: true });
+ return;
+ }
+
+ initAll();
+})();