|
|
@ -1,5 +1,8 @@ |
|
|
|
// Giscus functionality
|
|
|
|
// Giscus functionality
|
|
|
|
function loadGiscus() { |
|
|
|
function loadGiscus() { |
|
|
|
|
|
|
|
const giscusContainer = document.getElementById("giscus-container"); |
|
|
|
|
|
|
|
if (!giscusContainer || giscusContainer.querySelector("script")) return; |
|
|
|
|
|
|
|
|
|
|
|
const script = document.createElement("script"); |
|
|
|
const script = document.createElement("script"); |
|
|
|
script.src = "https://giscus.app/client.js"; |
|
|
|
script.src = "https://giscus.app/client.js"; |
|
|
|
script.setAttribute("data-repo", "ultralytics/ultralytics"); |
|
|
|
script.setAttribute("data-repo", "ultralytics/ultralytics"); |
|
|
@ -17,47 +20,61 @@ function loadGiscus() { |
|
|
|
script.setAttribute("crossorigin", "anonymous"); |
|
|
|
script.setAttribute("crossorigin", "anonymous"); |
|
|
|
script.setAttribute("async", ""); |
|
|
|
script.setAttribute("async", ""); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
giscusContainer.appendChild(script); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Synchronize Giscus theme with palette
|
|
|
|
|
|
|
|
var palette = __md_get("__palette"); |
|
|
|
|
|
|
|
if (palette && typeof palette.color === "object") { |
|
|
|
|
|
|
|
var theme = palette.color.scheme === "slate" ? "dark" : "light"; |
|
|
|
|
|
|
|
script.setAttribute("data-theme", theme); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Register event handlers for theme changes
|
|
|
|
|
|
|
|
var ref = document.querySelector("[data-md-component=palette]"); |
|
|
|
|
|
|
|
if (ref) { |
|
|
|
|
|
|
|
ref.addEventListener("change", function () { |
|
|
|
|
|
|
|
var palette = __md_get("__palette"); |
|
|
|
|
|
|
|
if (palette && typeof palette.color === "object") { |
|
|
|
|
|
|
|
var theme = palette.color.scheme === "slate" ? "dark" : "light"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Instruct Giscus to change theme
|
|
|
|
|
|
|
|
var frame = document.querySelector(".giscus-frame"); |
|
|
|
|
|
|
|
if (frame) { |
|
|
|
|
|
|
|
frame.contentWindow.postMessage( |
|
|
|
|
|
|
|
{ giscus: { setConfig: { theme } } }, |
|
|
|
|
|
|
|
"https://giscus.app", |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Use Intersection Observer to load Giscus when the container is visible
|
|
|
|
|
|
|
|
function setupGiscusLoader() { |
|
|
|
const giscusContainer = document.getElementById("giscus-container"); |
|
|
|
const giscusContainer = document.getElementById("giscus-container"); |
|
|
|
|
|
|
|
|
|
|
|
if (giscusContainer) { |
|
|
|
if (giscusContainer) { |
|
|
|
giscusContainer.appendChild(script); |
|
|
|
const observer = new IntersectionObserver((entries) => { |
|
|
|
|
|
|
|
entries.forEach((entry) => { |
|
|
|
// Synchronize Giscus theme with palette
|
|
|
|
if (entry.isIntersecting) { |
|
|
|
var palette = __md_get("__palette"); |
|
|
|
loadGiscus(); |
|
|
|
if (palette && typeof palette.color === "object") { |
|
|
|
observer.unobserve(entry.target); |
|
|
|
var theme = palette.color.scheme === "slate" ? "dark" : "light"; |
|
|
|
|
|
|
|
script.setAttribute("data-theme", theme); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Register event handlers for theme changes
|
|
|
|
|
|
|
|
var ref = document.querySelector("[data-md-component=palette]"); |
|
|
|
|
|
|
|
if (ref) { |
|
|
|
|
|
|
|
ref.addEventListener("change", function () { |
|
|
|
|
|
|
|
var palette = __md_get("__palette"); |
|
|
|
|
|
|
|
if (palette && typeof palette.color === "object") { |
|
|
|
|
|
|
|
var theme = palette.color.scheme === "slate" ? "dark" : "light"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Instruct Giscus to change theme
|
|
|
|
|
|
|
|
var frame = document.querySelector(".giscus-frame"); |
|
|
|
|
|
|
|
if (frame) { |
|
|
|
|
|
|
|
frame.contentWindow.postMessage( |
|
|
|
|
|
|
|
{ giscus: { setConfig: { theme } } }, |
|
|
|
|
|
|
|
"https://giscus.app", |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
}, { threshold: 0.1 }); // Trigger when 10% of the element is visible
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
observer.observe(giscusContainer); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MkDocs specific: Load Giscus when the page content is fully loaded
|
|
|
|
// Hook into MkDocs' navigation system
|
|
|
|
document.addEventListener("DOMContentLoaded", function () { |
|
|
|
if (typeof document$ !== "undefined") { |
|
|
|
var observer = new MutationObserver(function (mutations) { |
|
|
|
document$.subscribe(() => { |
|
|
|
if (document.getElementById("giscus-container")) { |
|
|
|
// This function is called on every page load/change
|
|
|
|
loadGiscus(); |
|
|
|
setupGiscusLoader(); |
|
|
|
observer.disconnect(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
} else { |
|
|
|
observer.observe(document.body, { childList: true, subtree: true }); |
|
|
|
console.warn("MkDocs document$ not found. Falling back to DOMContentLoaded."); |
|
|
|
}); |
|
|
|
document.addEventListener("DOMContentLoaded", setupGiscusLoader); |
|
|
|
|
|
|
|
} |
|
|
|