Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
import navaid from "navaid";
|
2026-02-07 08:26:28 +01:00
|
|
|
import { page } from "./page.svelte";
|
|
|
|
|
import { navigation } from "./navigation.svelte";
|
|
|
|
|
import { site } from "./site.svelte";
|
|
|
|
|
import { locale } from "./locale.svelte";
|
Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
|
|
|
|
|
export const router = navaid("/", () => {
|
|
|
|
|
// Default handler
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
async function loadPage(path) {
|
2026-02-07 08:26:28 +01:00
|
|
|
navigation.setLoading(true);
|
|
|
|
|
page.setLoading(true);
|
Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const response = await fetch(`${path}.json`);
|
|
|
|
|
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
throw new Error(`Failed to load page: ${response.status}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
|
|
|
|
|
if (data.site) {
|
2026-02-07 08:26:28 +01:00
|
|
|
site.set(data.site);
|
|
|
|
|
locale.initialize(data.site.language, data.site.languages);
|
Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
}
|
|
|
|
|
|
2026-02-07 08:26:28 +01:00
|
|
|
page.set({
|
Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
data,
|
|
|
|
|
template: data.template || "default",
|
|
|
|
|
url: path,
|
|
|
|
|
loading: false,
|
|
|
|
|
error: null,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("Failed to load page:", error);
|
2026-02-07 08:26:28 +01:00
|
|
|
page.setError(error);
|
Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
} finally {
|
2026-02-07 08:26:28 +01:00
|
|
|
navigation.setLoading(false);
|
Migration vers architecture Svelte + Kirby inspirée de design-to-pack
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:30:15 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Route handlers
|
|
|
|
|
router
|
|
|
|
|
.on("/", () => loadPage("/home"))
|
|
|
|
|
.on("/expertise", () => loadPage("/expertise"))
|
|
|
|
|
.on("/portfolio", () => loadPage("/portfolio"))
|
|
|
|
|
.on("/portfolio/:slug", ({ slug }) => loadPage(`/portfolio/${slug}`))
|
|
|
|
|
.on("/jouer", () => loadPage("/jouer"))
|
|
|
|
|
.on("/jouer/:slug", ({ slug }) => loadPage(`/jouer/${slug}`))
|
|
|
|
|
.on("/a-propos", () => loadPage("/a-propos"))
|
|
|
|
|
.on("/blog", () => loadPage("/blog"))
|
|
|
|
|
.on("/blog/:slug", ({ slug }) => loadPage(`/blog/${slug}`))
|
|
|
|
|
.on("*", (params) => {
|
|
|
|
|
// Fallback for other routes
|
|
|
|
|
loadPage(window.location.pathname);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export function initRouter() {
|
|
|
|
|
// Load initial page data
|
|
|
|
|
loadPage(window.location.pathname);
|
|
|
|
|
|
|
|
|
|
// Start listening to route changes
|
|
|
|
|
router.listen();
|
|
|
|
|
|
|
|
|
|
// Intercept internal link clicks
|
|
|
|
|
document.addEventListener("click", (e) => {
|
|
|
|
|
const link = e.target.closest("a");
|
|
|
|
|
if (!link) return;
|
|
|
|
|
|
|
|
|
|
const url = new URL(link.href, window.location.origin);
|
|
|
|
|
|
|
|
|
|
// Only intercept same-origin links without target attribute
|
|
|
|
|
if (
|
|
|
|
|
url.origin === window.location.origin &&
|
|
|
|
|
!link.target &&
|
|
|
|
|
!link.hasAttribute("download")
|
|
|
|
|
) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
navigateTo(url.pathname);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Handle browser back/forward
|
|
|
|
|
window.addEventListener("popstate", () => {
|
|
|
|
|
loadPage(window.location.pathname);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function navigateTo(path) {
|
|
|
|
|
window.history.pushState({}, "", path);
|
|
|
|
|
loadPage(path);
|
|
|
|
|
}
|