Fix Giscus load after navigation (#17042)

Signed-off-by: UltralyticsAssistant <web@ultralytics.com>
Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
This commit is contained in:
Glenn Jocher 2024-10-20 04:00:25 +02:00 committed by GitHub
parent 2c8f31c9c0
commit 0535db9885
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,5 +1,8 @@
// Giscus functionality
function loadGiscus() {
const giscusContainer = document.getElementById("giscus-container");
if (!giscusContainer || giscusContainer.querySelector("script")) return;
const script = document.createElement("script");
script.src = "https://giscus.app/client.js";
script.setAttribute("data-repo", "ultralytics/ultralytics");
@ -17,8 +20,6 @@ function loadGiscus() {
script.setAttribute("crossorigin", "anonymous");
script.setAttribute("async", "");
const giscusContainer = document.getElementById("giscus-container");
if (giscusContainer) {
giscusContainer.appendChild(script);
// Synchronize Giscus theme with palette
@ -48,16 +49,32 @@ function loadGiscus() {
});
}
}
}
// MkDocs specific: Load Giscus when the page content is fully loaded
document.addEventListener("DOMContentLoaded", function () {
var observer = new MutationObserver(function (mutations) {
if (document.getElementById("giscus-container")) {
// Use Intersection Observer to load Giscus when the container is visible
function setupGiscusLoader() {
const giscusContainer = document.getElementById("giscus-container");
if (giscusContainer) {
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
loadGiscus();
observer.disconnect();
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1 }); // Trigger when 10% of the element is visible
observer.observe(document.body, { childList: true, subtree: true });
observer.observe(giscusContainer);
}
}
// Hook into MkDocs' navigation system
if (typeof document$ !== "undefined") {
document$.subscribe(() => {
// This function is called on every page load/change
setupGiscusLoader();
});
} else {
console.warn("MkDocs document$ not found. Falling back to DOMContentLoaded.");
document.addEventListener("DOMContentLoaded", setupGiscusLoader);
}