L'en-tête chargeait alpinux-logo.png — 1024×1024, 175 ko — pour une image affichée en 90 px sur l'accueil et 66 px ailleurs. Le navigateur téléchargeait donc dix fois le poids de la page elle-même, rien que pour la réduire. alpinux-logo-180.png, déposé à côté sur static, fait 23 ko et couvre les écrans à haute densité. Les deux domaines tiers de la page — static et le wiki — gagnent au passage un preconnect : la poignée de main TLS commence pendant que le HTML se lit, au lieu d'attendre la première image. Retire aussi Gitea du menu, comme le wiki et les mises à jour avant lui : le service garde sa carte plus bas. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JYfYUZRcJmmEWJwAxZb4o2
355 lines
11 KiB
HTML
355 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="description" content="Toutes les pages du wiki d'Alpinux, de la plus récemment mise à jour à la plus ancienne.">
|
|
<meta name="robots" content="index, follow">
|
|
<title>Les mises à jour du wiki — Alpinux</title>
|
|
|
|
<link rel="canonical" href="https://alpinux.org/modifications.html">
|
|
|
|
<link rel="preconnect" href="https://static.alpinux.org" crossorigin>
|
|
<link rel="preconnect" href="https://wiki.alpinux.org" crossorigin>
|
|
|
|
<link rel="icon" type="image/x-icon" href="https://static.alpinux.org/logo/favicon.ico">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="https://static.alpinux.org/logo/favicon-32.png">
|
|
<link rel="apple-touch-icon" sizes="192x192" href="https://static.alpinux.org/logo/favicon-192.png">
|
|
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:site_name" content="Alpinux">
|
|
<meta property="og:title" content="Les mises à jour du wiki — Alpinux">
|
|
<meta property="og:description" content="Toutes les pages du wiki d'Alpinux, de la plus récemment mise à jour à la plus ancienne.">
|
|
<meta property="og:url" content="https://alpinux.org/modifications.html">
|
|
<meta property="og:image" content="https://static.alpinux.org/logo/alpinux-logo-512.png">
|
|
<meta property="og:locale" content="fr_FR">
|
|
|
|
<link rel="stylesheet" href="/commun.css">
|
|
<style>
|
|
.barre {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 1rem;
|
|
flex-wrap: wrap;
|
|
margin: 1.8rem 0 1.2rem;
|
|
}
|
|
|
|
.barre input {
|
|
flex: 1 1 260px;
|
|
font: inherit;
|
|
font-size: .95rem;
|
|
padding: .6rem .9rem;
|
|
border: 2px solid #dce8f5;
|
|
border-radius: 8px;
|
|
background: #fff;
|
|
color: inherit;
|
|
min-width: 0;
|
|
}
|
|
|
|
.barre input:focus {
|
|
outline: none;
|
|
border-color: #1a6bbf;
|
|
}
|
|
|
|
.compte {
|
|
font-size: .85rem;
|
|
color: #7a8ba0;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.mois {
|
|
font-size: .78rem;
|
|
font-weight: 700;
|
|
letter-spacing: .08em;
|
|
text-transform: uppercase;
|
|
color: #0f4e8f;
|
|
background: #e8f1fb;
|
|
border-radius: 4px;
|
|
padding: .3rem .6rem;
|
|
display: inline-block;
|
|
margin: 1.8rem 0 .8rem;
|
|
}
|
|
|
|
.pages { list-style: none; }
|
|
|
|
.page-ligne {
|
|
display: grid;
|
|
grid-template-columns: 5.5rem 1fr;
|
|
gap: 1rem;
|
|
align-items: baseline;
|
|
background: #fff;
|
|
border-radius: 10px;
|
|
border-left: 4px solid #9fc5e8;
|
|
box-shadow: 0 2px 10px rgba(26,107,191,.08);
|
|
padding: .85rem 1.1rem;
|
|
margin-bottom: .6rem;
|
|
text-decoration: none;
|
|
color: inherit;
|
|
transition: transform .15s, box-shadow .15s;
|
|
}
|
|
|
|
.page-ligne:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(26,107,191,.18);
|
|
}
|
|
|
|
.page-ligne:hover .page-titre { color: #1a6bbf; }
|
|
|
|
.page-date {
|
|
font-size: .8rem;
|
|
font-weight: 700;
|
|
color: #7a8ba0;
|
|
letter-spacing: .04em;
|
|
text-transform: uppercase;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.page-titre {
|
|
display: block;
|
|
font-size: 1rem;
|
|
font-weight: 600;
|
|
line-height: 1.35;
|
|
}
|
|
|
|
.page-rubrique {
|
|
display: block;
|
|
font-size: .8rem;
|
|
color: #7a8ba0;
|
|
margin-top: .15rem;
|
|
}
|
|
|
|
.badge {
|
|
background: #f5a623;
|
|
color: #fff;
|
|
font-size: .66rem;
|
|
font-weight: 700;
|
|
text-transform: uppercase;
|
|
letter-spacing: .06em;
|
|
padding: .1rem .45rem;
|
|
border-radius: 3px;
|
|
margin-left: .5rem;
|
|
vertical-align: .1em;
|
|
}
|
|
|
|
.etat {
|
|
background: #fff;
|
|
border-radius: 10px;
|
|
box-shadow: 0 2px 10px rgba(26,107,191,.08);
|
|
padding:1.4rem;
|
|
font-size: .95rem;
|
|
color: #4a5a6a;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.etat a { color: #1a6bbf; }
|
|
|
|
.genere {
|
|
margin-top: 2rem;
|
|
font-size: .8rem;
|
|
color: #93a2b3;
|
|
}
|
|
|
|
@media (max-width: 560px) {
|
|
.page-ligne { grid-template-columns: 1fr; gap: .25rem; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<header>
|
|
<a href="/" class="logo-wrap">
|
|
<img src="https://static.alpinux.org/logo/alpinux-logo-180.png"
|
|
alt="Logo Alpinux — LUG de Savoie"
|
|
class="logo-img" width="66" height="66">
|
|
<span class="logo-text">
|
|
<span class="brand">
|
|
<span class="light">A</span><span class="bold">l</span><span class="light">p</span><span class="bold">inux</span>
|
|
</span>
|
|
<span class="tagline">le LUG de Savoie</span>
|
|
</span>
|
|
</a>
|
|
</header>
|
|
|
|
<nav aria-label="Navigation principale">
|
|
<a href="/">Accueil</a>
|
|
<a href="https://wiki.alpinux.org">Wiki</a>
|
|
<a href="/modifications.html" aria-current="page">Mises à jour</a>
|
|
<a href="https://portail.alpinux.org">Portail membres</a>
|
|
<a href="https://installparty.alpinux.org">Install Party</a>
|
|
<a href="https://messagerie.alpinux.org">Listes de diffusion</a>
|
|
</nav>
|
|
|
|
<main>
|
|
<h1>Les mises à jour du wiki</h1>
|
|
<p class="chapeau">
|
|
Toutes les pages de <a href="https://wiki.alpinux.org">wiki.alpinux.org</a>, de la
|
|
plus récemment retouchée à la plus ancienne. Les dates viennent de l'historique du
|
|
dépôt : c'est le jour où le texte a changé, pas celui où le fichier a été recopié.
|
|
Déplacer une page ne la fait donc pas remonter ici.
|
|
</p>
|
|
|
|
<div class="barre">
|
|
<label for="filtre" class="sr-only" hidden>Filtrer les pages</label>
|
|
<input id="filtre" type="search" placeholder="Filtrer par titre ou rubrique…"
|
|
autocomplete="off" hidden>
|
|
<span class="compte" id="compte"></span>
|
|
</div>
|
|
|
|
<div id="etat" class="etat">Chargement de la liste…</div>
|
|
<ol class="pages" id="pages"></ol>
|
|
<p class="genere" id="genere" hidden></p>
|
|
</main>
|
|
|
|
<footer>
|
|
<p>© Alpinux — Association loi 1901 · Chambéry, Savoie</p>
|
|
<p style="margin-top:.4rem;">
|
|
<a href="https://wiki.alpinux.org/alpinux/">À propos</a> ·
|
|
<a href="https://wiki.alpinux.org/alpinux/faq/">FAQ</a> ·
|
|
<a href="https://wiki.alpinux.org/alpinux/donnees-personnelles/">Vos données</a> ·
|
|
<a href="https://messagerie.alpinux.org/archives">Archives des listes</a> ·
|
|
<a href="https://www.helloasso.com/associations/alpinux-le-lug-de-savoie">Adhérer</a>
|
|
</p>
|
|
</footer>
|
|
|
|
<script>
|
|
(function () {
|
|
'use strict';
|
|
|
|
/* Le wiki publie l'inventaire complet à chaque build. Le second fichier est celui
|
|
que lit l'accueil : il ne porte que vingt entrées, mais il existe depuis plus
|
|
longtemps — s'en contenter vaut mieux qu'une page vide. */
|
|
var SOURCES = [
|
|
{ url: 'https://wiki.alpinux.org/toutes-les-pages.json', clef: 'pages', partiel: false },
|
|
{ url: 'https://wiki.alpinux.org/derniers-articles.json', clef: 'articles', partiel: true }
|
|
];
|
|
|
|
var etat = document.getElementById('etat');
|
|
var liste = document.getElementById('pages');
|
|
var compte = document.getElementById('compte');
|
|
var filtre = document.getElementById('filtre');
|
|
var genere = document.getElementById('genere');
|
|
|
|
var MOIS = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
|
|
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'];
|
|
|
|
var toutes = [];
|
|
|
|
function echappe(texte) {
|
|
var d = document.createElement('div');
|
|
d.textContent = texte;
|
|
return d.innerHTML;
|
|
}
|
|
|
|
function sansAccent(texte) {
|
|
return texte.normalize ? texte.normalize('NFD').replace(/[̀-ͯ]/g, '') : texte;
|
|
}
|
|
|
|
function ligne(page) {
|
|
var a = document.createElement('a');
|
|
a.className = 'page-ligne';
|
|
a.href = page.url;
|
|
a.innerHTML =
|
|
'<time class="page-date" datetime="' + echappe(page.date) + '">' +
|
|
page.d.getDate() + ' ' + MOIS[page.d.getMonth()].slice(0, 4) + '.' +
|
|
'</time>' +
|
|
'<span>' +
|
|
'<span class="page-titre">' + echappe(page.titre) +
|
|
(page.nouveau ? '<span class="badge">Nouveau</span>' : '') +
|
|
'</span>' +
|
|
(page.rubrique ? '<span class="page-rubrique">' + echappe(page.rubrique) + '</span>' : '') +
|
|
'</span>';
|
|
return a;
|
|
}
|
|
|
|
function dessiner(pages) {
|
|
liste.textContent = '';
|
|
var moisCourant = '';
|
|
|
|
pages.forEach(function (page) {
|
|
var cle = page.d.getFullYear() + '-' + page.d.getMonth();
|
|
if (cle !== moisCourant) {
|
|
moisCourant = cle;
|
|
var titre = document.createElement('li');
|
|
titre.className = 'mois';
|
|
titre.textContent = MOIS[page.d.getMonth()] + ' ' + page.d.getFullYear();
|
|
liste.appendChild(titre);
|
|
}
|
|
var li = document.createElement('li');
|
|
li.appendChild(ligne(page));
|
|
liste.appendChild(li);
|
|
});
|
|
|
|
compte.textContent = pages.length + (pages.length > 1 ? ' pages' : ' page') +
|
|
(pages.length !== toutes.length ? ' sur ' + toutes.length : '');
|
|
}
|
|
|
|
function appliquerLeFiltre() {
|
|
var q = sansAccent(filtre.value.trim().toLowerCase());
|
|
if (!q) return dessiner(toutes);
|
|
dessiner(toutes.filter(function (page) {
|
|
return sansAccent((page.titre + ' ' + (page.rubrique || '')).toLowerCase()).indexOf(q) !== -1;
|
|
}));
|
|
}
|
|
|
|
async function lire(source) {
|
|
var r = await fetch(source.url, { cache: 'no-cache' });
|
|
if (!r.ok) throw new Error(r.status);
|
|
var data = await r.json();
|
|
var brut = data[source.clef];
|
|
if (!Array.isArray(brut) || !brut.length) throw new Error('vide');
|
|
return { data: data, brut: brut };
|
|
}
|
|
|
|
async function charger() {
|
|
var lu = null, source = null;
|
|
|
|
for (var i = 0; i < SOURCES.length && !lu; i++) {
|
|
try {
|
|
lu = await lire(SOURCES[i]);
|
|
source = SOURCES[i];
|
|
} catch (_) { /* on essaie la source suivante */ }
|
|
}
|
|
|
|
if (!lu) {
|
|
etat.innerHTML = 'La liste n\'a pas pu être chargée. ' +
|
|
'Le wiki reste consultable sur <a href="https://wiki.alpinux.org">wiki.alpinux.org</a>.';
|
|
return;
|
|
}
|
|
|
|
toutes = lu.brut
|
|
.map(function (page) {
|
|
var d = new Date(page.date);
|
|
return (page && page.titre && page.url && !isNaN(d)) ?
|
|
{ titre: page.titre, url: page.url, date: page.date,
|
|
nouveau: !!page.nouveau, rubrique: page.rubrique || '', d: d } : null;
|
|
})
|
|
.filter(Boolean)
|
|
.sort(function (a, b) { return b.d - a.d; });
|
|
|
|
if (!toutes.length) {
|
|
etat.textContent = 'Le wiki n\'annonce aucune page pour le moment.';
|
|
return;
|
|
}
|
|
|
|
etat.hidden = true;
|
|
filtre.hidden = false;
|
|
filtre.addEventListener('input', appliquerLeFiltre);
|
|
dessiner(toutes);
|
|
|
|
var quand = new Date(lu.data.genere);
|
|
genere.textContent =
|
|
(source.partiel
|
|
? 'Le wiki ne publie pour l\'instant que ses vingt dernières pages. '
|
|
: '') +
|
|
(isNaN(quand) ? '' : 'Liste publiée par le wiki le ' +
|
|
quand.toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' }) +
|
|
' à ' + quand.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }) + '.');
|
|
genere.hidden = !genere.textContent;
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', charger);
|
|
})();
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|