Récupère les 3 numéros de Gong-Information depuis l'API Strapi
Les documents réels du GONG (journal Gong-Information) vivaient uniquement sur l'API Strapi en ligne (api.gong.gp), pas dans le dépôt. Ils sont maintenant récupérés et intégrés en dur (le back-office Strapi peut être définitivement retiré) : - n° 16 (Mai-Juin 1966), n° spécial (Janv-Fév 1967), n° 19 (Mars-Avril-Mai 1967). - Transcription intégrale (contenu first-party) + couverture optimisée WebP (~40 Ko). - Scans PDF recompressés via Ghostscript (176 Mo → 28 Mo, 150 dpi lisibles). - Nouvelle section /archives (index + fiche par numéro), schema Article/CreativeWork. - Liens depuis nav, footer, accueil, publications ; ajout au sitemap ; PWA globIgnores. npm run check : 0/0 · build : 32 pages. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
9669edf8bc
commit
8ba1c2757a
@@ -17,6 +17,7 @@
|
||||
{
|
||||
titre: 'Documents',
|
||||
liens: [
|
||||
{ href: '/archives/', label: 'Archives — Gong-Information' },
|
||||
{ href: '/charte/', label: 'Charte de 1963' },
|
||||
{ href: '/orientation/', label: 'Orientation & stratégie' },
|
||||
{ href: '/publications/', label: 'Publications' },
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
];
|
||||
const secondaires = [
|
||||
{ href: '/proces-1968/', label: 'Procès de 1968' },
|
||||
{ href: '/archives/', label: 'Archives — Gong-Information' },
|
||||
{ href: '/publications/', label: 'Publications' },
|
||||
{ href: '/charte/', label: 'Charte de 1963' },
|
||||
{ href: '/orientation/', label: 'Orientation & stratégie' },
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
// Archives numérisées : les numéros du journal « Gong-Information » (sources primaires
|
||||
// récupérées depuis l'ancien back-office Strapi). Transcriptions HTML first-party + PDF + couverture.
|
||||
// $lib/server → chargé au build ; pages 100 % prérendues.
|
||||
|
||||
const contenus = import.meta.glob('/content/archives/*.html', {
|
||||
query: '?raw',
|
||||
import: 'default',
|
||||
eager: true
|
||||
}) as Record<string, string>;
|
||||
|
||||
export interface Archive {
|
||||
slug: string;
|
||||
numero: string;
|
||||
titre: string;
|
||||
date: string; // libellé d'époque (ex. « Mai-Juin 1966 »)
|
||||
iso: string; // pour tri et lastmod
|
||||
chapeau: string;
|
||||
couverture: string; // webp
|
||||
pdf: string;
|
||||
html: string; // transcription first-party
|
||||
}
|
||||
|
||||
const META: Omit<Archive, 'html'>[] = [
|
||||
{
|
||||
slug: 'gong-information-16',
|
||||
numero: 'N° 16',
|
||||
titre: 'Gong-Information n° 16',
|
||||
date: 'Mai-Juin 1966',
|
||||
iso: '1966-05-01',
|
||||
chapeau:
|
||||
"En Guadeloupe, les connaissances intellectuelles jouissent d'une grande faveur. Par extension les masses laborieuses attribuent un grand prestige aux intellectuels.",
|
||||
couverture: '/images/archives/gong-info-16.webp',
|
||||
pdf: '/archives/gong-information-16.pdf'
|
||||
},
|
||||
{
|
||||
slug: 'gong-information-special',
|
||||
numero: 'N° spécial',
|
||||
titre: 'Gong-Information n° spécial',
|
||||
date: 'Janvier-Février 1967',
|
||||
iso: '1967-01-01',
|
||||
chapeau: "Un peuple qui décide de se gouverner est un peuple qui entreprend de se critiquer et de s'organiser.",
|
||||
couverture: '/images/archives/gong-info-special.webp',
|
||||
pdf: '/archives/gong-information-special.pdf'
|
||||
},
|
||||
{
|
||||
slug: 'gong-information-19',
|
||||
numero: 'N° 19',
|
||||
titre: 'Gong-Information n° 19',
|
||||
date: 'Mars-Avril-Mai 1967',
|
||||
iso: '1967-03-01',
|
||||
chapeau:
|
||||
"À l'intimidation constituée par l'envoi des « troupes d'intervention » colonialistes françaises, au chantage exercé par les services de la préfecture, à la corruption…",
|
||||
couverture: '/images/archives/gong-info-19.webp',
|
||||
pdf: '/archives/gong-information-19.pdf'
|
||||
}
|
||||
];
|
||||
|
||||
function html(slug: string): string {
|
||||
return (contenus[`/content/archives/${slug}.html`] ?? '').trim();
|
||||
}
|
||||
|
||||
export function getArchives(): Archive[] {
|
||||
return META.map((m) => ({ ...m, html: html(m.slug) })).sort((a, b) => (a.iso < b.iso ? -1 : 1));
|
||||
}
|
||||
|
||||
export function getArchive(slug: string): Archive | undefined {
|
||||
return getArchives().find((a) => a.slug === slug);
|
||||
}
|
||||
@@ -14,7 +14,8 @@
|
||||
{ href: '/proces-1968/', icon: 'scale', titre: 'Procès de 1968', desc: '18 Guadeloupéens jugés à Paris ; Sartre et Césaire témoignent.' },
|
||||
{ href: '/militants/', icon: 'users', titre: 'Militants', desc: 'Sainton, Nestor, Manville, Bangou, Glaude… les femmes et les hommes du GONG.' },
|
||||
{ href: '/ideologie/', icon: 'glo', titre: 'Idéologie', desc: "Marxisme-léninisme, tiers-mondisme et lutte de libération nationale." },
|
||||
{ href: '/heritage/', icon: 'memory', titre: 'Héritage', desc: 'UPLG, UGTG, mémoire de Mé 67 : ce que le GONG a laissé.' }
|
||||
{ href: '/heritage/', icon: 'memory', titre: 'Héritage', desc: 'UPLG, UGTG, mémoire de Mé 67 : ce que le GONG a laissé.' },
|
||||
{ href: '/archives/', icon: 'book', titre: 'Archives', desc: 'Les numéros numérisés du journal Gong-Information (1966-1967).' }
|
||||
];
|
||||
|
||||
const webPage = [
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { getArchives } from '$lib/server/archives';
|
||||
|
||||
export function load() {
|
||||
const archives = getArchives().map(({ slug, numero, titre, date, iso, chapeau, couverture }) => ({
|
||||
slug,
|
||||
numero,
|
||||
titre,
|
||||
date,
|
||||
iso,
|
||||
chapeau,
|
||||
couverture
|
||||
}));
|
||||
return { archives };
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
<script lang="ts">
|
||||
import Seo from '$lib/components/Seo.svelte';
|
||||
import Breadcrumb from '$lib/components/Breadcrumb.svelte';
|
||||
import Resume from '$lib/components/Resume.svelte';
|
||||
import Icon from '$lib/components/Icon.svelte';
|
||||
import { reveal } from '$lib/motion/reveal';
|
||||
import { webPage } from '$lib/seo';
|
||||
|
||||
let { data } = $props();
|
||||
|
||||
const crumbs = [
|
||||
{ name: 'Accueil', path: '/' },
|
||||
{ name: 'Archives', path: '/archives/' }
|
||||
];
|
||||
</script>
|
||||
|
||||
<Seo
|
||||
title="Archives — Gong-Information"
|
||||
description="Les numéros numérisés du journal Gong-Information (« Journal du patriote guadeloupéen »), organe du GONG : n° 16 (1966), n° spécial (1967) et n° 19 (1967). Transcriptions et scans PDF."
|
||||
path="/archives/"
|
||||
graph={[webPage('/archives/', 'Archives — Gong-Information', 'Numéros numérisés du journal du GONG.')]}
|
||||
breadcrumb={crumbs}
|
||||
/>
|
||||
|
||||
<main id="contenu" class="section">
|
||||
<div class="container">
|
||||
<Breadcrumb items={crumbs} />
|
||||
<h1>Archives — Gong-Information</h1>
|
||||
|
||||
<div class="lecture">
|
||||
<Resume
|
||||
lead="« Gong-Information — Journal du patriote guadeloupéen » était l'organe politique et théorique du GONG. Imprimé clandestinement en Belgique et diffusé de 1964 à 1967, il portait les analyses et mots d'ordre du mouvement. Voici les numéros numérisés, transcription et scan à l'appui."
|
||||
points={[
|
||||
'Sources primaires : les numéros mêmes du journal.',
|
||||
'Transcription intégrale + scan PDF téléchargeable de chaque numéro.',
|
||||
'« Un peuple qui décide de se gouverner est un peuple qui entreprend de se critiquer et de s’organiser. »'
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<ul class="grille">
|
||||
{#each data.archives as a, i (a.slug)}
|
||||
<li>
|
||||
<a class="card card--link" href="/archives/{a.slug}/" use:reveal={i}>
|
||||
<img class="cover" src={a.couverture} alt="Couverture de {a.titre}" width="800" height="612" loading="lazy" decoding="async" />
|
||||
<span class="num">{a.numero} · {a.date}</span>
|
||||
<h2>{a.titre}</h2>
|
||||
<p>{a.chapeau}</p>
|
||||
<span class="more">Lire le numéro <Icon name="arrow-right" size="1em" /></span>
|
||||
</a>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
|
||||
<p class="lecture note">
|
||||
Documents issus du fonds du GONG, numérisés et transcrits. Voir aussi la présentation des
|
||||
<a href="/publications/">publications du mouvement</a>.
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<style>
|
||||
.grille {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
||||
gap: var(--space-3);
|
||||
}
|
||||
.cover {
|
||||
width: calc(100% + 2 * var(--space-3));
|
||||
margin: calc(-1 * var(--space-3)) calc(-1 * var(--space-3)) var(--space-2);
|
||||
border-radius: var(--radius-md) var(--radius-md) 0 0;
|
||||
aspect-ratio: 800 / 612;
|
||||
object-fit: cover;
|
||||
object-position: top;
|
||||
background: var(--noir-profond);
|
||||
}
|
||||
.num {
|
||||
font-family: var(--font-display);
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.8rem;
|
||||
letter-spacing: 0.04em;
|
||||
color: var(--accent);
|
||||
}
|
||||
.grille h2 {
|
||||
font-size: 1.15rem;
|
||||
text-transform: none;
|
||||
margin: 0.3rem 0;
|
||||
}
|
||||
.grille p {
|
||||
color: var(--muted);
|
||||
margin: 0;
|
||||
font-size: 0.94rem;
|
||||
}
|
||||
.more {
|
||||
margin-top: 0.8rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.35rem;
|
||||
font-family: var(--font-display);
|
||||
text-transform: uppercase;
|
||||
font-size: 0.75rem;
|
||||
letter-spacing: 0.05em;
|
||||
color: var(--accent);
|
||||
}
|
||||
.note {
|
||||
margin-top: var(--space-4);
|
||||
color: var(--muted-fort);
|
||||
font-size: 0.88rem;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,11 @@
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { getArchives, getArchive } from '$lib/server/archives';
|
||||
import type { EntryGenerator } from './$types';
|
||||
|
||||
export const entries: EntryGenerator = () => getArchives().map((a) => ({ slug: a.slug }));
|
||||
|
||||
export function load({ params }) {
|
||||
const archive = getArchive(params.slug);
|
||||
if (!archive) error(404, 'Numéro introuvable');
|
||||
return { archive };
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<script lang="ts">
|
||||
import Seo from '$lib/components/Seo.svelte';
|
||||
import Breadcrumb from '$lib/components/Breadcrumb.svelte';
|
||||
import Icon from '$lib/components/Icon.svelte';
|
||||
import { SITE } from '$lib/data/gong';
|
||||
|
||||
let { data } = $props();
|
||||
const a = $derived(data.archive);
|
||||
|
||||
const crumbs = $derived([
|
||||
{ name: 'Accueil', path: '/' },
|
||||
{ name: 'Archives', path: '/archives/' },
|
||||
{ name: a.titre, path: `/archives/${a.slug}/` }
|
||||
]);
|
||||
|
||||
const articleNode = $derived({
|
||||
'@type': ['Article', 'CreativeWork'],
|
||||
'@id': `${SITE.url}/archives/${a.slug}/#document`,
|
||||
headline: a.titre,
|
||||
alternativeHeadline: 'Gong-Information — Journal du patriote guadeloupéen',
|
||||
description: a.chapeau,
|
||||
datePublished: a.iso,
|
||||
inLanguage: 'fr-FR',
|
||||
image: SITE.url + a.couverture,
|
||||
isPartOf: { '@id': `${SITE.url}/#website` },
|
||||
publisher: { '@id': `${SITE.url}/#organization` },
|
||||
about: { '@id': `${SITE.url}/#organization` },
|
||||
associatedMedia: { '@type': 'MediaObject', contentUrl: SITE.url + a.pdf, encodingFormat: 'application/pdf' }
|
||||
});
|
||||
</script>
|
||||
|
||||
<Seo
|
||||
title={a.titre}
|
||||
description={a.chapeau}
|
||||
path={`/archives/${a.slug}/`}
|
||||
type="article"
|
||||
image={a.couverture}
|
||||
imageAlt={`Couverture de ${a.titre}`}
|
||||
publishedTime={a.iso}
|
||||
graph={[articleNode]}
|
||||
breadcrumb={crumbs}
|
||||
/>
|
||||
|
||||
<main id="contenu" class="section">
|
||||
<div class="container">
|
||||
<Breadcrumb items={crumbs} />
|
||||
|
||||
<article>
|
||||
<header class="doc-head">
|
||||
<p class="kicker"><span class="flag-chip" aria-hidden="true"></span> Gong-Information · {a.date}</p>
|
||||
<h1>{a.titre}</h1>
|
||||
<p class="chapeau">{a.chapeau}</p>
|
||||
<a class="btn btn--ghost" href={a.pdf} rel="external noopener noreferrer" target="_blank">
|
||||
Télécharger le scan (PDF) <Icon name="download" size="1em" />
|
||||
</a>
|
||||
</header>
|
||||
|
||||
<div class="doc-body">
|
||||
<figure class="cover">
|
||||
<img src={a.couverture} alt="Couverture de {a.titre}" width="800" height="612" loading="lazy" decoding="async" />
|
||||
<figcaption>Couverture du numéro. Fonds du GONG.</figcaption>
|
||||
</figure>
|
||||
|
||||
<div class="prose transcription">
|
||||
<h2 class="sr-only">Transcription</h2>
|
||||
<!-- Contenu first-party (transcription du journal, fonds du GONG). -->
|
||||
{@html a.html}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<p><a class="btn btn--ghost" href="/archives/">← Tous les numéros</a></p>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<style>
|
||||
.doc-head {
|
||||
max-width: var(--container-lecture);
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
.kicker {
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
font-family: var(--font-display);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
font-size: 0.85rem;
|
||||
color: var(--muted);
|
||||
}
|
||||
.chapeau {
|
||||
font-size: 1.15rem;
|
||||
color: var(--muted);
|
||||
font-style: italic;
|
||||
margin-bottom: var(--space-2);
|
||||
}
|
||||
.doc-body {
|
||||
display: grid;
|
||||
grid-template-columns: 300px 1fr;
|
||||
gap: var(--space-4);
|
||||
align-items: start;
|
||||
}
|
||||
.cover {
|
||||
margin: 0;
|
||||
position: sticky;
|
||||
top: calc(var(--nav-h) + 1rem);
|
||||
}
|
||||
.cover img {
|
||||
width: 100%;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--noir-profond);
|
||||
}
|
||||
.cover figcaption {
|
||||
margin-top: 0.5rem;
|
||||
font-size: 0.8rem;
|
||||
color: var(--muted-fort);
|
||||
}
|
||||
.transcription {
|
||||
max-width: none;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
.doc-body {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.cover {
|
||||
position: static;
|
||||
max-width: 300px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -38,6 +38,11 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<p class="lecture cta-archives">
|
||||
<Icon name="book" size="1.2rem" /> Les numéros de <strong>Gong-Information</strong> ont été numérisés :
|
||||
<a href="/archives/">consulter les archives</a> (transcription + scan PDF).
|
||||
</p>
|
||||
|
||||
<ul class="pubs">
|
||||
{#each pubs as p, i (p.titre)}
|
||||
<li class="card" use:reveal={i}>
|
||||
@@ -58,6 +63,17 @@
|
||||
</main>
|
||||
|
||||
<style>
|
||||
.cta-archives {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
background: color-mix(in srgb, var(--accent) 8%, transparent);
|
||||
border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
|
||||
border-radius: var(--radius-md);
|
||||
padding: var(--space-2) var(--space-3);
|
||||
margin-bottom: var(--space-4);
|
||||
}
|
||||
.pubs {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { SITE, membres } from '$lib/data/gong';
|
||||
import { getActualites } from '$lib/server/actualites';
|
||||
import { getArchives } from '$lib/server/archives';
|
||||
|
||||
export const prerender = true;
|
||||
|
||||
@@ -12,6 +13,7 @@ const statiques: { path: string; priority: string; changefreq: string }[] = [
|
||||
{ path: '/ideologie/', priority: '0.7', changefreq: 'yearly' },
|
||||
{ path: '/heritage/', priority: '0.7', changefreq: 'yearly' },
|
||||
{ path: '/publications/', priority: '0.6', changefreq: 'yearly' },
|
||||
{ path: '/archives/', priority: '0.8', changefreq: 'yearly' },
|
||||
{ path: '/charte/', priority: '0.7', changefreq: 'yearly' },
|
||||
{ path: '/orientation/', priority: '0.7', changefreq: 'yearly' },
|
||||
{ path: '/sources/', priority: '0.6', changefreq: 'yearly' },
|
||||
@@ -36,6 +38,9 @@ export function GET() {
|
||||
for (const a of getActualites()) {
|
||||
urls.push(`<url><loc>${SITE.url}/actualites/${a.slug}/</loc><lastmod>${a.iso}</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url>`);
|
||||
}
|
||||
for (const a of getArchives()) {
|
||||
urls.push(`<url><loc>${SITE.url}/archives/${a.slug}/</loc><lastmod>${a.iso}</lastmod><changefreq>yearly</changefreq><priority>0.6</priority></url>`);
|
||||
}
|
||||
|
||||
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
|
||||
Reference in New Issue
Block a user