--- const { currentEntry, allEntries = [], } = Astro.props; const slugOf = (entry) => String(entry.id).replace(/\.(md|mdx)$/i, ""); const hrefOf = (entry) => `/glossaire/${slugOf(entry)}/`; const collator = new Intl.Collator("fr", { sensitivity: "base", numeric: true }); const bySlug = new Map(allEntries.map((entry) => [slugOf(entry), entry])); const currentSlug = slugOf(currentEntry); const fondamentauxWanted = [ "archicratie", "tension", "arcalite", "cratialite", "archicration", "co-viabilite", ]; const fondamentaux = fondamentauxWanted .map((slug) => bySlug.get(slug)) .filter(Boolean); function resolveList(slugs = []) { return slugs .map((slug) => bySlug.get(slug)) .filter(Boolean); } function uniqueBySlug(entries) { const seen = new Set(); const out = []; for (const entry of entries) { const slug = slugOf(entry); if (seen.has(slug)) continue; seen.add(slug); out.push(entry); } return out; } const relatedEntries = uniqueBySlug(resolveList(currentEntry.data.related ?? [])) .sort((a, b) => collator.compare(a.data.term, b.data.term)); const opposedEntries = uniqueBySlug(resolveList(currentEntry.data.opposedTo ?? [])) .sort((a, b) => collator.compare(a.data.term, b.data.term)); const seeAlsoEntries = uniqueBySlug(resolveList(currentEntry.data.seeAlso ?? [])) .sort((a, b) => collator.compare(a.data.term, b.data.term)); const paradigmes = [...allEntries] .filter((e) => e.data.kind === "paradigme" && slugOf(e) !== currentSlug) .sort((a, b) => collator.compare(a.data.term, b.data.term)); function contextualParadigmsFor(entry) { const relatedParadigms = (entry.data.related ?? []) .map((slug) => bySlug.get(slug)) .filter((e) => e && e.data.kind === "paradigme"); const seeAlsoParadigms = (entry.data.seeAlso ?? []) .map((slug) => bySlug.get(slug)) .filter((e) => e && e.data.kind === "paradigme"); const opposedParadigms = (entry.data.opposedTo ?? []) .map((slug) => bySlug.get(slug)) .filter((e) => e && e.data.kind === "paradigme"); const merged = uniqueBySlug([ ...relatedParadigms, ...seeAlsoParadigms, ...opposedParadigms, ]); if (merged.length > 0) { return merged.slice(0, 5); } if (entry.data.kind === "paradigme") { const preferred = [ "gouvernementalite", "gouvernementalite-algorithmique", "cybernetique", "biopolitique", "domination-legale-rationnelle", "democratie-deliberative", "gouvernance-des-communs", "agencement-machinique", "pharmacologie-technique", "preemption-algorithmique", "dissensus-politique", "lieu-vide-du-pouvoir", "habitus-et-violence-symbolique", "theorie-de-la-resonance", "conatus-et-multitude", "configuration-et-interdependance", "technodiversite-et-cosmotechnie", "grammatisation-et-proletarisation-cognitive", ]; return uniqueBySlug( preferred .filter((slug) => slug !== currentSlug) .map((slug) => bySlug.get(slug)) .filter(Boolean) ).slice(0, 6); } return paradigmes.slice(0, 5); } const contextualParadigms = contextualParadigmsFor(currentEntry); const kindLabels = { concept: "Concept", diagnostic: "Diagnostic", topologie: "Topologie", verbe: "Verbe", paradigme: "Paradigme", doctrine: "Doctrine", }; const domainLabels = { transversal: "Transversal", theorie: "Théorie", "cas-ia": "Cas IA", }; const levelLabels = { fondamental: "Fondamental", intermediaire: "Intermédiaire", avance: "Avancé", }; const metaLabel = [ kindLabels[currentEntry.data.kind] ?? currentEntry.data.kind, domainLabels[currentEntry.data.domain] ?? currentEntry.data.domain, levelLabels[currentEntry.data.level] ?? currentEntry.data.level, ].join(" · "); ---