8 Commits

Author SHA1 Message Date
Patrick Schurig
2a8eea6cfc style(i18n): un drapeau dans le sélecteur de langue, à la place du 文A
Material affiche son icône `translate` : un idéogramme 文 collé à un A. Elle dit
« traduire », pas « vous êtes en français », et à la taille du bandeau on n'y
voit qu'un symbole asiatique — remarque de Patrick, et elle est juste.

Le bouton affiche désormais le drapeau de la langue courante et son code, comme
sur etm-powersync.fr. Dans la liste déroulante, la langue courante passe en gras
et en couleur d'accent : les trois lignes étaient identiques, on ne savait pas
d'où l'on partait.

Fait entièrement en CSS, sur `html[lang]` que mkdocs-static-i18n pose déjà par
locale (`fr` à la racine, `de` sous /de/, `en` sous /en/). Aucun gabarit du thème
n'est surchargé : rien à reprendre à chaque mise à jour de Material, et l'icône
d'origine est masquée, pas supprimée.

Trois points qui ne sont pas des détails :

- Les drapeaux sont des SVG en `data:`, pas des emojis — un emoji drapeau ne se
  rend pas sous Windows, où Chrome affiche « FR » dans un carré.
- Chaque drapeau porte un liseré : sans lui la bande blanche du français se perd
  dans le bandeau clair, et le noir de l'allemand dans le bandeau sombre.
- Le `aria-label` du bouton (« Sélectionner la langue ») est inchangé et porte
  seul le sens pour les lecteurs d'écran ; il l'emporte sur le contenu, donc le
  « FR » du `::after` ne sera pas annoncé en double.

Vérifié avant le push, faute de mkdocs installé en local : les trois pages
réellement servies ont été rechargées dans Chrome headless avec cette feuille de
style en remplacement, bandeau capturé dans les trois langues, plus la liste
déroulante forcée ouverte pour contrôler les drapeaux et la mise en évidence.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-15 07:15:46 +02:00
Patrick Schurig
95a9edda5a fix(rgpd): polices auto-hébergées — la doc ne transmet plus l'IP du visiteur à Google
`theme.font: {text, code}` faisait injecter par Material, dans le <head> de
chacune des 316 pages, un preconnect vers fonts.gstatic.com et une feuille
depuis fonts.googleapis.com (Sans 300/300i/400/400i/700/700i + Mono
400/400i/700/700i). Chaque visite transmettait donc l'IP du visiteur à Google
AVANT tout consentement.

Ce qui rendait ça gênant n'est pas la règle en soi, c'est l'asymétrie : le site
vitrine a fait exactement l'inverse en T10, délibérément, pour cette raison
(jurisprudence LG München 2022, doctrine CNIL) et pour ne pas contredire « vos
données ne sortent pas de chez vous ». La doc affichait donc le contraire de
l'engagement que le produit met en avant, sur le même nom de domaine.

Correctif : `theme.font: false` retire les deux balises ; les 16 woff2 viennent
du dépôt du site — mêmes fichiers, mêmes unicode-range (latin + latin-ext pour
les accents), déjà éprouvés en production depuis juin. Les 16 blocs @font-face
sont repris tels quels plutôt que réécrits, avec les chemins adaptés. Material
lit `--md-text-font` / `--md-code-font`, qu'extra.css définit.

312 Ko d'actifs, servis localement.

⚠️ LES ITALIQUES SONT DÉSORMAIS SYNTHÉTISÉES, et c'est la contrepartie à
connaître. Google servait 4 fontes italiques que nous n'avons pas (aucun fichier
italique dans le dépôt du site, aucune IBM Plex installée sur la machine de
build) : le navigateur incline donc la romaine. Visible sur les intertitres en
italique des blocs générés — `_Einstellungen:_`, `_Gemessene Größen:_`. Pour y
remédier : récupérer les woff2 italiques depuis le dépôt officiel IBM/plex (OFL)
et ajouter les @font-face correspondants. La méthode est celle déjà documentée
au T10 du site, et je ne l'ai pas prise d'office — c'est un ajout de binaires
depuis Internet.

Vérifié sur le site construit, et pas seulement sur le <head> :
  · 0 url() externe dans toute la CSS
  · 0 preconnect
  · 0 ressource (link/script/img/iframe) chargée depuis un tiers — le seul hôte
    cité est docs.etm-powersync.fr lui-même, par les <link rel="canonical">
  · les 16 woff2 présents dans le build, 16 références, 0 chemin cassé
  · build --strict sans avertissement

La seule mention restante de Google dans le dépôt est le commentaire d'extra.css
qui explique pourquoi elle n'y est plus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 09:14:26 +02:00
Patrick Schurig
be0cbcf42d fix(i18n): drapeaux dans le sélecteur de langue de la doc
Material rend son sélecteur en liste déroulante, chaque entrée portant un
`hreflang` : on l'habille donc en CSS pure, sans toucher au gabarit du thème ni
surcharger de template. Vérifié sur le HTML produit : les trois entrées ont bien
`hreflang="fr|de|en"` et la classe `md-select__link`.

Mêmes choix que sur le site vitrine, et pour les mêmes raisons : SVG inline en
data-URI plutôt qu'emoji (🇫🇷 ne s'affiche pas sous Windows), et le NOM de la
langue conservé à côté du drapeau (un drapeau désigne un pays, pas une langue —
et l'anglais sert ici les deux marchés plus la communauté).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 08:19:53 +02:00
b26274595c feat: référence API JsonRPC générée depuis introspect.json
Some checks failed
Build & Deploy docs / build-deploy (push) Failing after 10m17s
- Nouveau générateur scripts/gen_api_reference.py : 19 namespaces →
  docs/api/metier/ (10) + docs/api/systeme/ (9) + notifications.md +
  types.md (96 types · 55 enums · 4 flags) + SUMMARY.md literate-nav
- Badges permissionScope (perm-none/control/configure/admin) dans extra.css
- Guide docs/integrations/jsonrpc-api.md (connexion TCP/WS, auth, conventions énergie)
- mkdocs.yml : Référence API dans la nav, REST→JsonRPC renommé
- mkdocs build --strict : 0 warnings · --check idempotent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 08:15:37 +02:00
a7dedb3366 feat: badges origine centralisés, TOC masqué sur les index de catégorie
All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 1m54s
- render_header_badges() fonction partagée pour canal + origine + stabilité
- Marqueur __badges_<plugin>__ dans les 9 fiches (5 manuelles + 4 auto)
- Marqueur __index_<cat>__ dans les 3 index manuels (compteurs, bornes, smart)
- Front matter hide: [toc] sur tous les index de catégorie
- .badge.experimental ajouté dans extra.css (waveshare)
- process() gère __badges_ keys via render_header_badges()
- build_category_index_page() inclut hide:toc front matter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 15:42:04 +02:00
0f2be2e000 feat: badge origine + catalogue complet PORTING_STATUS (60 plugins)
All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 1m47s
Partie 1 — Dimension « origine » (3ème badge)
- gen_device_reference.py : ORIGIN_BADGES dict, resolve_origin() déduit
  l'origine depuis repo: (nymea-* → NYMEA, etm-* → ETM) ou champ origin:
  explicite ; colonne Origine ajoutée dans matrice et index de catégorie ;
  badge origine dans l'en-tête des fiches générées
- extra.css : styles .badge.origin-nymea (gris-bleu), .badge.origin-etm
  (vert), .badge.origin-tiers (orange)
- compatibilite.md : légende étendue aux 3 dimensions (canal, origine, stab.)
- Catégorie « generic » ajoutée (Types génériques nymea)

Partie 2 — Catalogue complet PORTING_STATUS.yaml
- 9 entrées validées conservées avec leurs canaux (stable/testing/nightly)
- 41 nouveaux plugins énergie activés (channel: nightly) : onduleurs PV
  (sma, solax, sungrow, huawei, kostal, mtec, wattsonic, sunspec, bosswerk,
  solarlog), IRVE (easee, goecharger, evbox, everest, v2xeamberelectric,
  amperfied, mennekes, webasto, pcelectric, phoenixconnect, inro),
  HVAC (tado, homeconnect, stiebeleltron, idm, drexelundweiss, alphainnotec,
  mypv), compteurs (powerfox, bgetech, inepro, schrack, vestel, senseair),
  smartdevices (shelly, tasmota, tuya, gpio, usbrelay, usbrly82, mqttclient,
  modbuscommander, unipi), tarifs (awattar, tempo, spothinta),
  generic (genericenergy, genericheatingcooling, genericcar)
- 60 plugins domotique/hors-périmètre commentés (réactivables via # → -)
- 50 fiches générées + 2 index créés (tarifs/, generic/)
- mkdocs build --strict OK, --check exit 0 (idempotent)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 15:02:25 +02:00
9eee067829 feat: docs-as-code — générateur, literate-nav, badges, CI Gitea Actions
- PORTING_STATUS.yaml : source de vérité canal APT + placement nav
- scripts/gen_device_reference.py : génération matrice + fiches + SUMMARY.md
  depuis integrationplugin*.json + meta.json ; nightly sans JSON = invisible
- mkdocs.yml : plugin literate-nav, nav 6 sections, Appareils via SUMMARY.md
- .gitea/workflows/docs.yml : CI complet — fetch JSON (branche auto-détectée),
  génération, build --strict, check idempotence, rsync deploy
- Badges HTML (stable/testing/nightly + consumer/community + ok/part/road)
- Fiches appareils : Eastron, ABB B2x, ABB Terra, Keba, Waveshare
- requirements.txt : mkdocs-material, mkdocs-literate-nav, PyYAML

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 08:53:54 +02:00
Patrick Schurig
394d8bc54a docs: <ce qui a changé> 2026-05-28 17:26:17 +02:00