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:
sucupira
2026-07-25 00:31:39 -04:00
co-authored by Claude Opus 4.8
parent 9669edf8bc
commit 8ba1c2757a
20 changed files with 367 additions and 2 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
<p>GONG INFORMATION</p><p>JOURNAL DU PATRIOTE GUADELOUPÉEN</p><p>Un peuple qui décide de se gouverner est un peuple qui entreprend de se critiquer et de sorganiser.</p><p>EDITORIAL</p><p>LA LUTTE POUR NOTRE INDÉPENDANCE NATIONALE SE DÉVELOPPE AVEC IMPÉTUOSITÉ</p><p>La dégradation de la situation politico-sociale, laction révolutionnaire développée par le GONG au cours de 1966 et au début de 1967, ont sensiblement élevé le niveau de la lutte du peuple pour lindépendance nationale.</p><p>Limpérialisme français, aidé de ses valets, les révisionnistes et les réactionnaires ont essayé toutes les méthodes pour endiguer le flot impétueux de la lutte&nbsp;; ils ont cru trouvé une occasion inespérée dans le cyclone Ines qui au mois de Septembre 1966, dévasta complètement notre pays.</p><p>En associant le chantage, la menace, ils espéraient que notre peuple viendrait se prosterner devant les urnes colonialistes le 5 mars, au prix de quelques billets de 10 Frs.</p><p>Mais ils se sont grossièrement trompés notre peuple leur a infligé une cuisante défaite&nbsp;:</p><p>À lintimidation constituées par lenvoi des «&nbsp;troupes dintervention&nbsp;» colonialistes françaises, au chantage exercé par les services de la préfecture, à la corruption organisée par les laquais de limpérialisme, aux vaines et éternelles promesses faites par les révisionnistes du P.C.G, notre peuple, dans sa grande majorité, sous la direction politique de son avant-garde LE GONG a répondu dignement et fermement par lAbstention Révolutionnaire.</p><p><br>- 53&nbsp;% de la population ont ainsi exprimé le profond mépris quils avaient pour ces mascarades, ces courses aux miettes, que constituent ces élections.</p><p>- 53&nbsp;% de la population ont ainsi exprimé leur ferme volonté de se débarrasser de la tutelle de limpérialisme français.</p><p>- 53&nbsp;% de la population ont ainsi exprimé le profond mépris quils avaient pour ces vieillards qui courbent l’échine pour lécher les quelques os infectes, lâchés par les colonialistes français, ces hommes qui ont renoncé au droit à la souveraineté de leur peuple.</p><p>- 53&nbsp;% de la population ont répondu à lappel du GONG, en pratiquant lABSTENTION RÉVOLUTIONNAIRE.</p><p>Les réactionnaires n’étaient pas encore relevé de leur défaite, que le peuple de BASEE-TERRE passait à loffensive, et maîtrisait la ville pendant 4 jours (du 20 au 24 mars).</p><p>Ainsi, lannée 1967 à peine entamée, le peuple Guadeloupéen, sous la direction du GONG a remporté deux éclatantes victoires sur les forces réactionnaires, les forces des ténèbres.</p><hr><p><i>! EN COURS D'ÉDITION !</i></p>
@@ -0,0 +1 @@
<p>GONG INFORMATION</p><p>JOURNAL DU PATRIOTE GUADELOUPÉEN</p><p>Un peuple qui décide de se gouverner est un peuple qui entreprend de se critiquer et de sorganiser.</p><p>N° SPACIAL</p><p>UN DOCUMENT QUE TOUT</p><p>Groupe dOrganisation Nationale de la Guadeloupe</p><p>À PROPOS DE LARTICLE DE L’ÉTINCELLE&nbsp;: «&nbsp;QUELS INTÉRÊTS SERT LE G.O.N.G&nbsp;»</p><hr><p>! EN COURS D'ÉDITION !</p>
+1
View File
@@ -17,6 +17,7 @@
{ {
titre: 'Documents', titre: 'Documents',
liens: [ liens: [
{ href: '/archives/', label: 'Archives — Gong-Information' },
{ href: '/charte/', label: 'Charte de 1963' }, { href: '/charte/', label: 'Charte de 1963' },
{ href: '/orientation/', label: 'Orientation & stratégie' }, { href: '/orientation/', label: 'Orientation & stratégie' },
{ href: '/publications/', label: 'Publications' }, { href: '/publications/', label: 'Publications' },
+1
View File
@@ -12,6 +12,7 @@
]; ];
const secondaires = [ const secondaires = [
{ href: '/proces-1968/', label: 'Procès de 1968' }, { href: '/proces-1968/', label: 'Procès de 1968' },
{ href: '/archives/', label: 'Archives — Gong-Information' },
{ href: '/publications/', label: 'Publications' }, { href: '/publications/', label: 'Publications' },
{ href: '/charte/', label: 'Charte de 1963' }, { href: '/charte/', label: 'Charte de 1963' },
{ href: '/orientation/', label: 'Orientation & stratégie' }, { href: '/orientation/', label: 'Orientation & stratégie' },
+68
View File
@@ -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);
}
+2 -1
View File
@@ -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: '/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: '/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: '/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 = [ const webPage = [
+14
View File
@@ -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 };
}
+114
View File
@@ -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 sorganiser. »'
]}
/>
</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 };
}
+131
View File
@@ -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>
+16
View File
@@ -38,6 +38,11 @@
/> />
</div> </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"> <ul class="pubs">
{#each pubs as p, i (p.titre)} {#each pubs as p, i (p.titre)}
<li class="card" use:reveal={i}> <li class="card" use:reveal={i}>
@@ -58,6 +63,17 @@
</main> </main>
<style> <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 { .pubs {
list-style: none; list-style: none;
margin: 0; margin: 0;
+5
View File
@@ -1,5 +1,6 @@
import { SITE, membres } from '$lib/data/gong'; import { SITE, membres } from '$lib/data/gong';
import { getActualites } from '$lib/server/actualites'; import { getActualites } from '$lib/server/actualites';
import { getArchives } from '$lib/server/archives';
export const prerender = true; export const prerender = true;
@@ -12,6 +13,7 @@ const statiques: { path: string; priority: string; changefreq: string }[] = [
{ path: '/ideologie/', priority: '0.7', changefreq: 'yearly' }, { path: '/ideologie/', priority: '0.7', changefreq: 'yearly' },
{ path: '/heritage/', priority: '0.7', changefreq: 'yearly' }, { path: '/heritage/', priority: '0.7', changefreq: 'yearly' },
{ path: '/publications/', priority: '0.6', changefreq: 'yearly' }, { path: '/publications/', priority: '0.6', changefreq: 'yearly' },
{ path: '/archives/', priority: '0.8', changefreq: 'yearly' },
{ path: '/charte/', priority: '0.7', changefreq: 'yearly' }, { path: '/charte/', priority: '0.7', changefreq: 'yearly' },
{ path: '/orientation/', priority: '0.7', changefreq: 'yearly' }, { path: '/orientation/', priority: '0.7', changefreq: 'yearly' },
{ path: '/sources/', priority: '0.6', changefreq: 'yearly' }, { path: '/sources/', priority: '0.6', changefreq: 'yearly' },
@@ -36,6 +38,9 @@ export function GET() {
for (const a of getActualites()) { 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>`); 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"?> const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

+1 -1
View File
@@ -15,7 +15,7 @@ export default defineConfig({
globPatterns: ['**/*.{js,css,html,svg,woff2,webp,avif,png,ico}'], globPatterns: ['**/*.{js,css,html,svg,woff2,webp,avif,png,ico}'],
navigateFallback: '/offline/index.html', navigateFallback: '/offline/index.html',
navigateFallbackDenylist: [/\.(?:pdf|mp4|webm|mp3)$/i], navigateFallbackDenylist: [/\.(?:pdf|mp4|webm|mp3)$/i],
globIgnores: ['**/assets/*.pdf'], globIgnores: ['**/assets/*.pdf', '**/archives/*.pdf'],
maximumFileSizeToCacheInBytes: 3 * 1024 * 1024, maximumFileSizeToCacheInBytes: 3 * 1024 * 1024,
cleanupOutdatedCaches: true, cleanupOutdatedCaches: true,
clientsClaim: true, clientsClaim: true,