Files
agent0_homepage/docs/assets/javascript/body-classes.js
T
tfw 1bc8a2b6cb Update team images, logo, and stylesheets
Updated team member images, refined the SVG logo, and adjusted styles in the CSS for improved layout, typography, and hover effects. These changes enhance the visual design and user experience across the site.
2025-04-25 08:52:28 +02:00

101 lines
3.8 KiB
JavaScript

// Funktion zum Aktualisieren der Body-Klassen basierend auf dem aktuellen Pfad
function updateBodyClasses() {
// Aktuelle URL-Pfad ohne Domain
const path = window.location.pathname;
// Entferne führende und abschließende Schrägstriche
const cleanPath = path.replace(/^\/|\/$/g, '');
// Entferne alle vorherigen dynamischen Klassen
// (wir müssen eine Liste der zu entfernenden Klassen erstellen, da sich die classList während der Iteration ändert)
const classesToRemove = [];
for (let i = 0; i < document.body.classList.length; i++) {
const className = document.body.classList[i];
// Bewahre nur bestimmte MkDocs-spezifische Klassen
if (!className.startsWith('md-') &&
className !== 'no-js' &&
className !== 'js') {
classesToRemove.push(className);
}
}
// Entferne die Klassen
classesToRemove.forEach(className => {
document.body.classList.remove(className);
});
// Wenn der Pfad leer ist (Startseite), füge die Klasse 'home' hinzu
if (cleanPath === '') {
document.body.classList.add('home');
} else {
// Teile den Pfad in Segmente auf
const segments = cleanPath.split('/');
// Füge Klassen für jedes Segment hinzu
segments.forEach(function(segment) {
if (segment) {
document.body.classList.add(segment);
}
});
}
// Optional: Debug-Ausgabe in der Konsole
console.log('Updated body classes:', document.body.className);
}
// Initial beim Laden der Seite
document.addEventListener('DOMContentLoaded', updateBodyClasses);
// Bei Navigation innerhalb der MkDocs-Seite
// Wir müssen auf das MkDocs-spezifische Event hören
document.addEventListener('DOMContentLoaded', function() {
// Warte kurz, bis MkDocs vollständig initialisiert ist
setTimeout(function() {
// Finde alle internen Links
const internalLinks = document.querySelectorAll('a[href^="/"]:not([target]), a[href^="./"]:not([target]), a[href^="../"]:not([target])');
// Füge Event-Listener für Klicks auf interne Links hinzu
internalLinks.forEach(link => {
link.addEventListener('click', function() {
// Kurze Verzögerung, um der Navigation Zeit zu geben
setTimeout(updateBodyClasses, 100);
});
});
// Beobachte Änderungen an der URL (History API)
if (window.MutationObserver) {
// Beobachte Änderungen am Titel, was oft ein Indikator für Seitenwechsel ist
const titleObserver = new MutationObserver(updateBodyClasses);
if (document.querySelector('title')) {
titleObserver.observe(document.querySelector('title'), { childList: true });
}
// Beobachte Änderungen am Hauptinhalt
const contentObserver = new MutationObserver(function(mutations) {
for (const mutation of mutations) {
if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
updateBodyClasses();
break;
}
}
});
if (document.querySelector('.md-content')) {
contentObserver.observe(document.querySelector('.md-content'), {
childList: true,
subtree: true
});
}
}
// Fallback: Regelmäßige Überprüfung auf URL-Änderungen
let lastPath = window.location.pathname;
setInterval(function() {
if (window.location.pathname !== lastPath) {
lastPath = window.location.pathname;
updateBodyClasses();
}
}, 200);
}, 500);
});