// modules/core/navigateTo.js import { getPrefetched } from './ClickManager.js'; /** * Funktion für SPA-Navigation mit optionaler ViewTransition * Diese Funktion kann als generische Utility überall eingebunden werden! * * @param {string} href - Die Ziel-URL * @param {object} options - Steueroptionen * @param {boolean} [options.replace=false] - history.replaceState statt push * @param {boolean} [options.viewTransition=false] - ViewTransition API verwenden * @param {Function} [options.onUpdate] Wird nach Laden des HTML aufgerufen (html) * @param {Function} [options.getPrefetched] Funktion zum Abrufen gecachter Daten (optional) */ export async function navigateTo(href, options = {}) { const { replace = false, viewTransition = false, onUpdate = html => {}, getPrefetched = null /*onUpdate = (html) => { const container = document.querySelector('main'); if (container) container.innerHTML = html; }*/ } = options; const fetchHtml = async () => { let html = ''; if(getPrefetched) { html = getPrefetched(href) || ''; } if(!html) { html = await fetch(href).then(r => r.text()); } onUpdate(html); if(replace) { history.replaceState(null, '', href); } else { history.pushState(null, '', href); } }; if (viewTransition && document.startViewTransition) { document.startViewTransition(fetchHtml); } else { await fetchHtml(); } }