Comment ajouter une page, un article, une entrée changelog, une nouvelle release. Comment modifier les traductions, la navigation, le SEO. Tout ce que tu as besoin de savoir pour faire évoluer le site sans toucher à l'architecture.
Zéro frameworkHTML purCopier-coller ready
01
Vue d'ensemble — Règles de base
Règle 1 — Toujours depuis la racine
Tous les chemins vers les assets CSS/JS/img dans le <head> doivent être relatifs à la profondeur de la page. Une page dans blog/ utilisera ../assets/. Une page dans products/ironlock/ utilisera ../../assets/.
Règle 2 — nav + footer-placeholder
Chaque page DOIT contenir <div id="nav-placeholder"></div> en début de body et <div id="footer-placeholder"></div> avant les scripts. Sans eux, pas de navbar ni de footer.
Règle 3 — Script anti-FOUC
Chaque page DOIT avoir le script inline dans le <head> qui applique le thème avant le rendu. Sans lui, un flash blanc apparaît en thème dark.
Règle 4 — Scripts en fin de body
Toujours charger components.js AVANT main.js. main.js dépend des éléments injectés par components.js (navbar, modal search).
Règle 5 — data-theme sur html
La balise <html> doit avoir data-theme="dark" comme attribut par défaut. Cela garantit que le CSS s'affiche correctement même sans JavaScript.
Règle 6 — skip-link accessibilité
Première ligne après <body> : <a class="skip-link" href="#main-content">Aller au contenu</a>. L'élément principal doit avoir id="main-content".
Dans assets/js/components.js ajouter une entrée dans searchIndex. Dans sitemap.xml ajouter l'URL avec priorité 0.75.
⚠
Ne jamais mettre de guillemets simples ou apostrophes directes dans les chaînes de searchIndex. Utiliser \u2019 pour '.
05
Ajouter une entrée changelog
Dans products/ironlock/changelog.html, les versions sont listées de la plus récente à la plus ancienne. Ajouter une nouvelle version en haut de la div.changelog.
Dans downloads/index.html, déplacer l'ancienne version dans la section "Versions précédentes" avec opacity réduite.
5
Ajouter une entrée changelog
Voir section précédente. Mettre à jour sitemap.xml avec lastmod mis à jour.
07
Modifier les traductions i18n
Ajouter une clé
// 1. Dans assets/i18n/fr.json
{
// ... clés existantes ..."ma.nouvelle.cle": "Texte en français"
}
// 2. Dans assets/i18n/en.json
{
// ... clés existantes ..."ma.nouvelle.cle": "Text in English"
}
// 3. Dans le HTML
<p data-i18n="ma.nouvelle.cle">Texte en français</p>
Clés existantes importantes
Clé
Utilisation
nav.home/products/blog...
Liens navbar
hero.tag / hero.sub
Hero page accueil
footer.copy
Copyright footer (avec {year})
section.newsletter.*
Bloc newsletter
search.placeholder
Placeholder modal recherche
contact.form.*
Labels formulaire contact
ironlock.*
Page produit IronLock
⚠
Si une clé est présente dans fr.json mais absente de en.json, la clé elle-même s'affichera en anglais (ex: "nav.home"). Toujours ajouter les 2 fichiers en même temps.
08
Mettre à jour l'index de recherche
⚠
CRITIQUE : Le fichier assets/js/components.js ne tolère aucune apostrophe directe dans les chaînes de searchIndex. Toujours utiliser les encodages Unicode ci-dessous.
Encodages Unicode à utiliser
Caractère
Encode
Exemple
' apostrophe
\u2019
d\u2019installation
— tiret long
\u2014
IronLock \u2014 V2
– tiret court
\u2013
v1.0 \u2013 v2.0
é
\u00e9
s\u00e9curit\u00e9
è
\u00e8
m\u00e8re
ê
\u00ea
t\u00eate
à
\u00e0
\u00e0 une machine
î
\u00ee
cha\u00eene
Ajouter une entrée
// Dans assets/js/components.js// Section : const searchIndex = [
{
cat: "Blog",
title: "Mon article sur la s\u00e9curit\u00e9",
excerpt: "Description sans apostrophe directe"
+ " — utiliser \u2014 pour les tirets",
url: root + "blog/mon-article.html"
},
💡
Astuce : utiliser des guillemets doubles "..." pour les strings et des Unicode escapes pour tout caractère spécial. Valider avec node --check assets/js/components.js après modification.
09
Modifier la navigation
ℹ
La navbar est définie une seule fois dans assets/js/components.js, dans la constante navHtml. Modifier 1 fichier → toutes les pages mises à jour.
Ajouter un lien de navigation
// Dans components.js, constante navHtml// Section <ul class="nav-links">
<li role="none">
<a href="${root}ma-section/index.html"
role="menuitem"
data-i18n="nav.masection">
Ma Section
</a>
</li>
// Ajouter aussi dans fr.json et en.json :"nav.masection": "Ma Section"
Modifier les liens du footer
// Dans components.js, constante footHtml// 4 colonnes : Produits, Entreprise, Légal// Ajouter un lien dans la colonne Produits :
<li>
<a href="${root}products/ironlock/pricing.html"
data-i18n="footer.pricing">
Tarifs
</a>
</li>