This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-site.git


The following commit(s) were added to refs/heads/main by this push:
     new a8f8ae6  make `giscus` comment section opt-in to comply with ASF 
policy (#106)
a8f8ae6 is described below

commit a8f8ae68d3791f84a93df6caca20b7c60909d0ca
Author: Kevin Liu <kevinjq...@users.noreply.github.com>
AuthorDate: Mon Sep 8 10:23:18 2025 -0700

    make `giscus` comment section opt-in to comply with ASF policy (#106)
    
    * make giscus opt-in to comply with ASF policy
    
    * new line
    
    * Update content/theme/templates/comments.html
    
    Co-authored-by: Andrew Lamb <and...@nerdnetworks.org>
    
    * typo
    
    ---------
    
    Co-authored-by: Andrew Lamb <and...@nerdnetworks.org>
---
 content/js/giscus-consent.js          | 102 ++++++++++++++++++++++++++++++++++
 content/theme/templates/comments.html |  50 +++++++++--------
 2 files changed, 129 insertions(+), 23 deletions(-)

diff --git a/content/js/giscus-consent.js b/content/js/giscus-consent.js
new file mode 100644
index 0000000..e675281
--- /dev/null
+++ b/content/js/giscus-consent.js
@@ -0,0 +1,102 @@
+(() => {
+  const container  = document.getElementById('comment-thread');
+  const btnLoad    = document.getElementById('giscus-load');
+  const btnRevoke  = document.getElementById('giscus-revoke');
+  const consentKey = 'apache_datafusion_giscus_consent';
+
+  if (!container || !btnLoad || !btnRevoke) return;
+
+  // Giscus configuration 
+  // 
+  // <script src="https://giscus.app/client.js";
+  //     data-repo="apache/datafusion-site"
+  //     data-repo-id="R_kgDOL8FTzw"
+  //     data-category="Announcements"
+  //     data-category-id="DIC_kwDOL8FTz84Csqua"
+  //     data-mapping="title"
+  //     data-strict="1"
+  //     data-reactions-enabled="1"
+  //     data-emit-metadata="0"
+  //     data-input-position="bottom"
+  //     data-theme="light"
+  //     data-lang="en"
+  //     data-loading="lazy"
+  //     crossorigin="anonymous"
+  //     async>
+  // </script>
+
+  function injectGiscus() {
+    // Avoid double-injection if already present
+    if (document.querySelector('script[data-giscus]') ||
+        container.querySelector('iframe.giscus-frame')) {
+      btnLoad.hidden = true;
+      btnRevoke.hidden = false;
+      return;
+    }
+
+    btnLoad.disabled = true;
+
+    const s = document.createElement('script');
+    s.setAttribute('data-giscus', ''); // marker attribute to identify the 
script
+    s.src = 'https://giscus.app/client.js';
+    s.setAttribute('data-repo', 'apache/datafusion-site');
+    s.setAttribute('data-repo-id', 'R_kgDOL8FTzw');
+    s.setAttribute('data-category', 'Announcements');
+    s.setAttribute('data-category-id', 'DIC_kwDOL8FTz84Csqua');
+    s.setAttribute('data-mapping', 'title');
+    s.setAttribute('data-strict', '1');
+    s.setAttribute('data-reactions-enabled', '1');
+    s.setAttribute('data-emit-metadata', '0');
+    s.setAttribute('data-input-position', 'bottom');
+    s.setAttribute('data-theme', 'light');
+    s.setAttribute('data-lang', 'en');
+    s.setAttribute('data-loading', 'lazy');
+    s.crossOrigin = 'anonymous';
+    s.async = true;
+
+    s.addEventListener('error', () => {
+      btnLoad.disabled = false;
+    });
+
+    const observer = new MutationObserver(() => {
+      if (container.querySelector('iframe.giscus-frame')) {
+        btnLoad.hidden = true;
+        btnRevoke.hidden = false;
+        btnLoad.disabled = false;
+        observer.disconnect();
+      }
+    });
+    observer.observe(container, { childList: true, subtree: true });
+
+    container.appendChild(s);
+  }
+
+  function removeGiscus() {
+    container.querySelectorAll('iframe.giscus-frame').forEach((el) => 
el.remove());
+    container.querySelectorAll('.giscus').forEach((el) => el.remove());
+    document.querySelectorAll('script[data-giscus], 
script[src^="https://giscus.app";]').forEach((el) => el.remove());
+    container.replaceChildren();
+
+    btnLoad.hidden = false;
+    btnLoad.disabled = false;
+    btnRevoke.hidden = true;
+  }
+
+  btnLoad.addEventListener('click', () => {
+    try { localStorage.setItem(consentKey, 'true'); } catch {}
+    injectGiscus();
+  });
+
+  btnRevoke.addEventListener('click', () => {
+    try { localStorage.removeItem(consentKey); } catch {}
+    removeGiscus();
+  });
+
+  try {
+    if (localStorage.getItem(consentKey) === 'true') {
+      injectGiscus();
+    }
+  } catch {
+    // Storage unavailable; require click each time.
+  }
+})();
diff --git a/content/theme/templates/comments.html 
b/content/theme/templates/comments.html
index abdca9a..2e74571 100644
--- a/content/theme/templates/comments.html
+++ b/content/theme/templates/comments.html
@@ -1,26 +1,30 @@
-    <!--
-        Enable giscuss comments: Allows comments on the blogs posted as
-        https://github.com/apache/datafusion-site/discussions
+<!--
+  Comments Section
+  Loaded only after explicit visitor consent to comply with ASF policy.
+-->
 
-        More details on https://github.com/apache/datafusion-site/issues/80
-    -->
-    <div id="article_comments">
-        <div id="comment_thread"></div>
+<div id="comments">
+  <hr>
+  <h3>Comments</h3>
 
-        <script src="https://giscus.app/client.js";
-            data-repo="apache/datafusion-site"
-            data-repo-id="R_kgDOL8FTzw"
-            data-category="Announcements"
-            data-category-id="DIC_kwDOL8FTz84Csqua"
-            data-mapping="title"
-            data-strict="1"
-            data-reactions-enabled="1"
-            data-emit-metadata="0"
-            data-input-position="bottom"
-            data-theme="preferred_color_scheme"
-            data-lang="en"
-            data-loading="lazy"
-            crossorigin="anonymous"
-            async>
-        </script>
+  <!-- Local loader script -->
+  <script src="/content/js/giscus-consent.js" defer></script>
+
+  <!-- Consent UI -->
+  <div id="giscus-consent">
+    <p>
+        We use <a href="https://giscus.app/";>Giscus</a> for comments, powered 
by GitHub Discussions.
+        To respect your privacy, Giscus and comments will load only if you 
click "Show Comments"
+    </p>
+
+    <div class="consent-actions">
+      <button id="giscus-load" type="button">Show Comments</button>
+      <button id="giscus-revoke" type="button" hidden>Hide Comments</button>
     </div>
+
+    <noscript>JavaScript is required to load comments from Giscus.</noscript>
+  </div>
+
+  <!-- Container where Giscus will render -->
+  <div id="comment-thread"></div>
+</div>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org
For additional commands, e-mail: commits-h...@datafusion.apache.org

Reply via email to