From 431fe2dd55da3b5d726eface62c376a1201bdca5 Mon Sep 17 00:00:00 2001 From: LATCHIMY Nicolas Date: Mon, 9 Feb 2026 14:12:44 +0400 Subject: [PATCH] lore --- src/components/ContentSearch.astro | 46 ++++++++--- src/components/Footer.astro | 104 +++++++++++++++++++++++++ src/components/Timeline.astro | 89 ++++++++++++++++++++++ src/components/ui/CodexCard.astro | 118 ----------------------------- src/components/ui/GoldButton.astro | 14 ---- src/content/journal/eveil.md | 6 ++ src/content/journal/inconnu.md | 5 ++ src/content/journal/initiation.md | 5 ++ src/content/journal/obscur.md | 3 + src/content/journal/sang.md | 14 +++- src/layouts/GameLayout.astro | 24 +++++- src/pages/index.astro | 95 ++++++++++++++++++++--- src/pages/journal/tags/[tag].astro | 18 +++-- 13 files changed, 375 insertions(+), 166 deletions(-) create mode 100644 src/components/Footer.astro create mode 100644 src/components/Timeline.astro delete mode 100644 src/components/ui/CodexCard.astro delete mode 100644 src/components/ui/GoldButton.astro create mode 100644 src/content/journal/inconnu.md create mode 100644 src/content/journal/initiation.md diff --git a/src/components/ContentSearch.astro b/src/components/ContentSearch.astro index 45b6ecc..6308a8d 100644 --- a/src/components/ContentSearch.astro +++ b/src/components/ContentSearch.astro @@ -7,7 +7,7 @@ interface Props { } const { posts, tags, basePath } = Astro.props; -// Groupement des tags par catégorie +// Groupement des tags par catégorie (ton code actuel) const groupedTags: Record = { Général: [] }; tags.forEach((tag) => { if (tag.includes(":")) { @@ -67,7 +67,11 @@ tags.forEach((tag) => {
{ posts.map((post) => ( - +
{post.data.title}

Publié le{" "} @@ -98,7 +102,10 @@ tags.forEach((tag) => { if (!bridge || !input || !container) return; const posts = JSON.parse(bridge.getAttribute("data-posts") || "[]"); + + // --- ÉTATS DES FILTRES --- let activeTag = "all"; + let activeEra = "all"; function update() { const query = input.value @@ -106,18 +113,18 @@ tags.forEach((tag) => { .normalize("NFD") .replace(/[\u0300-\u036f]/g, ""); - const filtered = posts.filter((p) => { + const filtered = posts.filter((p: any) => { const mQuery = p.data.title.toLowerCase().includes(query); const mTag = activeTag === "all" || p.data.tags?.includes(activeTag); - return mQuery && mTag; + const mEra = activeEra === "all" || p.data.era === activeEra; + return mQuery && mTag && mEra; }); - // Reconstruction propre du HTML des cartes container.innerHTML = filtered .map( - (p) => ` - + (p: any) => ` +

Publié le ${new Date(p.data.publishDate).toLocaleDateString("fr-FR")}

@@ -126,22 +133,39 @@ tags.forEach((tag) => { .join(""); } + // --- ÉCOUTEUR POUR LA TIMELINE (INDEX) --- + // On écoute les clics sur les chips de la Timeline qui sont hors du composant + document.addEventListener("click", (e) => { + const target = e.target as HTMLElement; + const eraBtn = target.closest(".era-chip"); + + if (eraBtn) { + activeEra = eraBtn.getAttribute("data-era") || "all"; + + // On gère la classe active visuellement + document + .querySelectorAll(".era-chip") + .forEach((btn) => btn.classList.remove("active")); + eraBtn.classList.add("active"); + + update(); + } + }); + + // --- TES ÉCOUTEURS ACTUELS --- input.addEventListener("input", update); - // Gestion de la navigation par catégories document.querySelectorAll(".cat-nav-btn").forEach((btn) => { btn.addEventListener("click", () => { document .querySelectorAll(".cat-nav-btn") .forEach((b) => b.classList.remove("active")); btn.classList.add("active"); - const target = btn.getAttribute("data-target"); document.querySelectorAll(".tag-subgroup").forEach((g) => { (g as HTMLElement).style.display = g.id === `group-${target}` ? "block" : "none"; }); - if (target === "all") { activeTag = "all"; document @@ -152,7 +176,6 @@ tags.forEach((tag) => { }); }); - // Gestion des filtres par tags document.querySelectorAll(".js-tag-filter").forEach((t) => { t.addEventListener("click", () => { document @@ -165,7 +188,6 @@ tags.forEach((tag) => { }); } - // Ré-initialisation lors du changement de page (Astro View Transitions) document.addEventListener("astro:page-load", init); diff --git a/src/components/Footer.astro b/src/components/Footer.astro new file mode 100644 index 0000000..53fe2b8 --- /dev/null +++ b/src/components/Footer.astro @@ -0,0 +1,104 @@ +--- +// On remonte de src/components vers la racine pour trouver le package.json +import packageInfo from "../../package.json" with { type: "json" }; + +const authorInfo = { + pseudo: "G'Mas", + role: "Artisan du Sable & Aventurier", + repoName: "sweet", + repoUrl: "https://git.liestral.io/chim1chim2/sweet", +}; + +const currentYear = new Date().getFullYear(); +--- + +
+ +
+ + diff --git a/src/components/Timeline.astro b/src/components/Timeline.astro new file mode 100644 index 0000000..3ce11be --- /dev/null +++ b/src/components/Timeline.astro @@ -0,0 +1,89 @@ +--- +// src/components/Timeline.astro +interface Props { + eras: { + id: string; + title: string; + }[]; +} +const { eras } = Astro.props; +--- + +
+
+ + + { + eras.map((era) => ( + + )) + } +
+
+ + diff --git a/src/components/ui/CodexCard.astro b/src/components/ui/CodexCard.astro deleted file mode 100644 index dd930e6..0000000 --- a/src/components/ui/CodexCard.astro +++ /dev/null @@ -1,118 +0,0 @@ ---- -import type { CollectionEntry } from "astro:content"; - -interface Props { - entry: CollectionEntry<"codex">; -} - -const { entry } = Astro.props; ---- - - -
-
{entry.data.title}
-
{entry.data.subtitle}
- - {entry.data.status} - -
-
-
Compétence
-

{entry.data.mecanique}

-
Application Concrète
-

{entry.data.vision3D}

-
-
- - diff --git a/src/components/ui/GoldButton.astro b/src/components/ui/GoldButton.astro deleted file mode 100644 index 1a7a947..0000000 --- a/src/components/ui/GoldButton.astro +++ /dev/null @@ -1,14 +0,0 @@ ---- -interface Props { - href: string; - title: string; - body: string; -} - -const { href, title, body } = Astro.props; ---- - - -
{title}
-

{body}

-
diff --git a/src/content/journal/eveil.md b/src/content/journal/eveil.md index c7d5fdf..9fe9147 100644 --- a/src/content/journal/eveil.md +++ b/src/content/journal/eveil.md @@ -35,6 +35,7 @@ tags: [ "lore:Legendes-de-Kouel", "lore:Bataille-du-Grand-Chêne" ] +era: "initiation" --- ### Chroniques de Yeuze-sur-Chenarde @@ -65,6 +66,7 @@ A l'intérieur, l'obscurité y était totale, une gueule noire dévorant la lumi C’est ainsi que **Gurdil**, désormais baptisé **"Cul Brillant"**, est devenu notre phare, notre cap, que dis-je notre firmament. Et c'est guidés par son postérieur rayonnant que nous nous sommes enfoncés dans les entrailles de la terre, prêts à affronter l'obscurité. +--- ### Aventuriers @@ -76,6 +78,8 @@ C’est ainsi que **Gurdil**, désormais baptisé **"Cul Brillant"**, est devenu | **Gurdil** | Nain | Désormais surnommé "Cul Brillant" à cause du sort de Bulle. | | **Jinn** | Genasi | Musicien du groupe ; a payé sa chambre d'auberge en jouant. | +--- + ### Personnages | **Nom** | **Race / Rôle** | **Relation / Détails** | @@ -96,6 +100,8 @@ C’est ainsi que **Gurdil**, désormais baptisé **"Cul Brillant"**, est devenu | **Ran & Zas** | Gobelins | Enfants de Tritte et Iben. | | **Alvin** | Gnome | Enfant du village. | +--- + ### Les légendes de Kouel le Sang-dragon Kouel semble être une source d'informations aussi riche qu'incertaine. Voici les détails de ses récits : diff --git a/src/content/journal/inconnu.md b/src/content/journal/inconnu.md new file mode 100644 index 0000000..63e8eab --- /dev/null +++ b/src/content/journal/inconnu.md @@ -0,0 +1,5 @@ +--- +title: "inconnu" +publishDate: 2026-02-08 +isEra: true +--- diff --git a/src/content/journal/initiation.md b/src/content/journal/initiation.md new file mode 100644 index 0000000..d21774a --- /dev/null +++ b/src/content/journal/initiation.md @@ -0,0 +1,5 @@ +--- +title: "initiation" +publishDate: 2026-01-10 +isEra: true +--- diff --git a/src/content/journal/obscur.md b/src/content/journal/obscur.md index e816c99..7ed61b4 100644 --- a/src/content/journal/obscur.md +++ b/src/content/journal/obscur.md @@ -19,6 +19,7 @@ tags: [ "plot:Cul-Brillant", "event:Combat-Mine" ] +era: "initiation" --- ### Les Griffes de l'Obscurité @@ -37,6 +38,8 @@ Le groupe réagit alors avec une coordination héroïque. **Gurdil** pulvérisa Le calme revenu, nous avons secouru **Jinn**. Stabilisé par Bulle et soigné par Maielan, le Génasi reprit connaissance. Nyrae se contenta d'un simple "Mouais..." laconique en croisant son regard, soulignant le poids de l'épreuve. Après s'être lui même soigné, Jinn retrouva assez de forces pour continuer. Nous avons repris la marche jusqu'au bout du couloir. Là, un **mur maçonné**, étrangement propre et hors de place, nous barrait la route. Une partie de son centre est effondrée. C'est de l'autre côté, dans ce vide inconnu, que nous entendons enfin les voix des enfants. Qu'est-ce qui a bien pu être enfermé ici ? +--- + ### État du Groupe - **Jinn :** Affaibli mais conscient (récupération en cours). diff --git a/src/content/journal/sang.md b/src/content/journal/sang.md index c643edc..8a67a39 100644 --- a/src/content/journal/sang.md +++ b/src/content/journal/sang.md @@ -21,6 +21,7 @@ tags: [ "event:Combat-Vampire", "event:Level-Up" ] +era: "initiation" --- ## L'Ombre de Constantia @@ -47,6 +48,8 @@ Nous sommes sortis de la mine en héros, accueillis par le village entier. Les e Le village a célébré notre victoire par un festin, mais le repos fut de courte durée. Tandis que Gurdil se noyait dans la bière et que **Kouel** s'appropriait nos exploits à l'auberge, le sommeil loin d'être léger m'accueilli en son ceint pour me délivrer un message nocturne en rêve. La fée du **Grand Chêne** m'a appelé à l'aide : Ce souffle de vie si cher à mon cœur, est menacé. Dans cette vision, Nyrae et Bulle apparaissaient comme les messagères les plus aptes à communiquer avec cette force ancienne. +--- + ### L'Entité : Constantia Denney - **Identité :** Vampire et Chevalier de la Couronne d'Argent. @@ -55,7 +58,8 @@ Le village a célébré notre victoire par un festin, mais le repos fut de court - **Charme :** Peut transformer un adversaire en "ami dévoué", neutralisant ainsi toute hostilité (testé sur G'mas). - **Drain de vie :** Recouvre sa puissance en s'abreuvant de sang frais (victime : Nyrae). - **Statut :** En fuite via un portail dimensionnel. - + +--- ### Mécanismes & Mystères @@ -63,14 +67,20 @@ Le village a célébré notre victoire par un festin, mais le repos fut de court - **L'Incident Diplomatique :** Gurdil a rompu l'hypnose de Zajic par un choc d'éveil, créant une tension avec la Bourgmestre Maielan. - **Le Paradoxe :** Bien que Constantia prétende que son apparence féerique était fortuite, l'appel de détresse du **Grand Chêne** a suivi immédiatement sa libération. +--- + ### Le Souffle de Vie - **Localisation :** Le cœur du Grand Chêne, l'arbre millénaire du village. - **État :** Menacé par une force obscure. La fée protectrice de l'arbre a envoyé un appel au secours onirique. - **Émissaires :** Nyrae et Bulle sont identifiées comme les vecteurs de communication prioritaires avec l'essence de l'Arbre. +--- + ### Évolution des Aventuriers (Niveau 2) +--- + |**Nom**|**Action Marquante**|**État**| |---|---|---| |**G'mas**|A tenté la diplomatie ; charmé par la vampire.|Troublé, en quête de réponses oniriques.| @@ -79,6 +89,8 @@ Le village a célébré notre victoire par un festin, mais le repos fut de court |**Bulle**|Diagnostic magique et éclair dévastateur.|Prête pour la mission féerique.| |**Jinn**|Soutien au combat malgré la régénération de l'ennemi.|Prêt pour la suite.| +--- + ### Métadonnées - **Lieu :** Conduit Nord-Est, Secteur Maçonné (facture humaine médiocre). diff --git a/src/layouts/GameLayout.astro b/src/layouts/GameLayout.astro index 534f26b..82abbf2 100644 --- a/src/layouts/GameLayout.astro +++ b/src/layouts/GameLayout.astro @@ -1,8 +1,11 @@ --- import { ClientRouter } from "astro:transitions"; +import Footer from "../components/Footer.astro"; + interface Props { title: string; } + const { title } = Astro.props; --- @@ -18,10 +21,12 @@ const { title } = Astro.props;
+