FRAGO : French governmental Reports for Accessibility compliance with goHugo
Le thème Frago a pour objectif d’aider à la génération de synthèses pour la documentation du suivi d’amélioration des démarches en ligne du gouvernement français.
Le thème a été conçu pour être multi-projets. Pourquoi ? Parce que dans le cadre d’un défi de mise en conformité, l’équipe peut être amenée à travailler sur des sujets connexes, des interfaces intermédiaires/liées sur lesquelles il est nécessaire de fournir un audit en particulier… de plus le projet peut aider à suivre aussi plusieurs défis en parallèle.
Attention, goHugo est très sensible à l’architecture des contenus. Si les contenus sont absents ou présentent des erreurs le site peut planter. Si l’architecture du thème change, de même, il n’est plus possible d’utiliser les dernières versions du thème (sans modifier l’architecture de contenu).
.
├── config.toml
└── content
├── _index.md // Page d’accueil
└── audits
├── projet1
│ ├── _index.md // Pour lister les pages sur l’accueil et avoir la page intermédiaire qui liste tous les rapports :: ajouter une entête
│ ├── accessibility.md
│ └── accessibility
│ ├── 2020-10-15.csv
│ └── 2020-11-15.csv
└── projet2
├── _index.md // Pour lister les pages sur l’accueil et avoir la page intermédiaire qui liste tous les rapports :: ajouter une entête
├── accessibility.md
└── accessibility
├── 2020-10-15.csv
└── 2020-11-15.csv
[module]
[[module.imports]]
path = "github.com/disic/frago"
title = "Mon administration"
theme = "frago"
[params]
organisation = "Le nom complet de mon administration"hugo mod init github.com/disic/fragoModifier le contenu du fichier go.mod (Ajouter https://) :
module github.com/DISIC/frago => module https://github.com/DISIC/frago
hugo mod get -u https://github.com/disic/fragogit submodule add https://github.com/disic/frago.git/ themes/frago && git submodule update --init --recursiveLigne de commande pour construire les pages du site.
hugo --buildFuture --gc --minify--buildFuturepermet de publier des éléments avec une date future dans la partie phase (optionnel).--gcpermet de remettre à jour le répertoire de génération du code (au cas ou du code d’une précédente génération serait encore présent).--minifypermet de compresser le codeHTMLen ligne.
Consulter la page Host on GitHub pour plus d‘informations.
Github utilise son système interne GitHub Action. Un exemple de fichier de configuration est disponible : gh-pages.yml.
Consulter la page Host on Gitlab pour plus d‘informations
Github utilise son système interne Gitlab CI. Un exemple de fichier de configuration est disponible : .gitlab-ci.yml.
Le thème interprète un fichier d’audit csv avec une structure fixe. Les intitulés de colonnes doivent respecter un nommage précis (Thématiques, Critères, Tests,… puis le titre de chaque page).
Le titre d’une page peut être suivi de l’URL de la page ; titre et URL séparés par le caractère |.
Exemple d’un tableau avec uniquement la prise en compte des critères
| Thématiques | Critères | Accueil।https://monsite.fr |
|---|---|---|
| 1 | 1 | nc |
| 1 | 2 | c |
| 1 | 3 | na |
| 1 | 4 | nt |
| … | … | … |
| 13 | 12 | nc |
Liste des fichiers exemples à télécharger
Dans chacun des ces fichiers figurent des numéros qui correspondent aux notions d’audit rapide (25 critères), intermédiaire (50 critères), complémentaire (81 critères).
Exemple, Pour un audit rapide, ne traiter que les cases avec le numéro 25.
Pour exposer l’API, le fichier config.toml doit être compléter, voici un exemple de fichier pour avoir un fichier index.json ainsi que des déclarations pour chaque page d’audit (un fichier de contenu brut, et une page HTML liée à chaque page accessibility.md).
[outputs]
home = ["HTML","JSON"]
page = ["HTML","JSON","declaration","declarationpage"]
Les différents types de contenus servent à la publication d’audits, l’analyse de résultats ou la présentation de la démarche UX. L’objectif est de synthétiser de l’information technique pour des personnes éloignées du développement de sites web.
.
├── config.toml
└── content
├── _index.md // page d’accueil du site :: ⚠️ Ajouter `type: projects` dans l'entête du fichier en cas de mono projet => va afficher directement la page de synthèse de tous les audits
├── audits // Les pages pour afficher les audits (accessibilité, qualité, performance…) pour chaque projet
│ ├── projet1
│ │ ├── _index.md // ⚠️ pour avoir lister les pages sur l’accueil et avoir la page intermédiaire qui liste tous les rapports
│ │ ├── accessibility.md
│ │ ├── quality.md
│ │ ├── performance.md
│ │ ├── accessibility
│ │ │ ├── 2020-10-15.csv
│ │ │ └── 2020-11-15.csv
│ │ ├── lighthouse
│ │ │ ├── 2020-10-15.csv
│ │ │ └── 2020-11-15.csv
│ │ └── quality
│ │ ├── 2020-10-15.csv
│ │ └── 2020-11-15.csv
│ │
│ └── projet2
│ ├── _index.md
│ ├── accessibility.md
│ ├── quality.md
│ ├── performance.md
│ ├── accessibility
│ │ ├── 2020-10-15.csv
│ │ └── 2020-11-15.csv
│ ├── lighthouse
│ │ ├── 2020-10-15.csv
│ │ └── 2020-11-15.csv
│ └── quality
│ ├── 2020-10-15.csv
│ └── 2020-11-15.csv
┋
┋ ⚠️ Autre choix d’arborescence avec un seul projet ⚠️
┋
└── audits // Les pages pour afficher les audits (accessibilité, qualité, performance…)
├── accessibility.md
├── quality.md
├── performance.md
├── accessibility
│ ├── 2020-10-15.csv
│ └── 2020-11-15.csv
├── lighthouse
│ ├── 2020-10-15.csv
│ └── 2020-11-15.csv
└── quality
├── 2020-10-15.csv
└── 2020-11-15.csv
Architecture complète (⚠️ Ancienne présente une architecture alternative, elle doit évoluer pour correspondre à tous les types de contenus)
Attention dans ce cas de figure:
⚠️ Le nom des pages projetscontent/projects/projets1.md, des répertoires projetsstatic/projet1/et des répertoires des pages d’auditscontent/audits/projets1/accessibility.mddoivent bien comporter la même clef ou slug, ici :projet1.⚠️
Un script devrait permettre de créer ces fichiers automatiquement à partir du moment un répertoire dansstaticest créé, mais il n’existe pas encore. La création doit se faire manuellement.
.
├── config.toml
├── content
│ ├── _index.md // page d’accueil du site :: ⚠️ Ajouter `type: projects` dans l'entête du fichier en cas de mono projet => va afficher directement la page de synthèse de tous les audits
│ ├── audits // Les pages pour afficher les audits (accessibilité, qualité, performance…) pour chaque projet
│ │ ├── projet1 // Doit reprendre le nom du répertoire donné au projet dans `static`
│ │ │ ├── _index.md // ⚠️ pour avoir lister les pages sur l’accueil et avoir la page intermédiaire qui liste tous les rapports
│ │ │ ├── accessibility.md
│ │ │ ├── quality.md
│ │ │ └── performance.md
│ │ └── projet2 // Doit reprendre le nom du répertoire donné au projet dans `static`
│ │ ├── _index.md
│ │ ├── accessibility.md
│ │ ├── quality.md
│ │ └── performance.md
│ ├── meetings
│ │ ├── _index.md // liste les réunions
│ │ └── 2020-10-22-reunion1.md // On indique la date dans le nom de fichier pour ranger les fichiers visuellement, il faut la répéter dans l’entête YML du fichier pour afficher les réunions sur la page dans un ordre par date.
│ ├── personas // ⚠️ Ne fonctionne pas en mono projet
│ │ ├── _index.md // Liste tous les personas
│ │ ├── simon.md
│ │ ├── annie.md
│ │ └── projet1
│ │ ├── _index.md // liste tous les personas
│ │ ├── simon.md
│ │ └── annie.md
┋ ┋
┋ ┋ ⚠️ Autre choix d’arborescence avec un seul projet ⚠️
┋ ┋
│ ├── audits // Les pages pour afficher les audits (accessibilité, qualité, performance…)
│ ├── accessibility.md
│ ├── quality.md
│ └── performance.md
└── static
├── projet1
│ ├── accessibility
│ │ ├── 2020-10-15.csv
│ │ └── 2020-11-15.csv
│ ├── lighthouse
│ │ ├── 2020-10-15.json
│ │ └── 2020-11-15.json
│ ├── quality
│ │ ├── 2020-10-15.yml
│ │ └── 2020-11-15.yml
│ ├── usertests
│ │ ├── test1.json
│ │ └── test2.json
│ ├── backlinks.json
│ ├── personas.json
│ └── similary.json
├── projet2
│ └── accessibility
│ ├── 2020-10-15.csv
│ └── 2020-11-15.csv
┋
┋ ⚠️ Autre choix d’arborescence avec un seul projet ⚠️
┋
├── accessibility
│ ├── 2020-10-15.csv
│ └── 2020-11-15.csv
├── quality // Ne fonctionne pas complètement en mono projet
│ ├── 2020-10-15.yml
│ └── 2020-11-15.yml
├── usertests // Ne fonctionne pas en mono projet
│ ├── test1.json
│ └── test2.json
├── directory.json // Annuaire de contacts
└── images
├── projet1 // Doit reprendre le nom du répertoire donné au projet dans `static`
│ ├── benchmark
│ │ ├── titresiteweb-titreelementacomparer.png // nommage précis disponible sur la page rapport générée par Hugo
│ │ ├── ojdcourtsepay.tylerhost.net-navigation-step.png
│ │ ├── pages.fivepointpayments.com-navigation-step.png
│ │ └── finepayment.saskatchewan.ca-navigation-step.png
│ └── quality
│ └── 2020-10-16 // Les titre formant les noms d‘images doivent correspondre à des termes existant dans le fichier `.yml`
│ ├── titrepage-[before ou after].png
│ ├── titrepage-titrebloc-titreerreur-[before ou after].png
│ ├── accueil-before.png
│ ├── accueil-after.png
│ ├── accueil-banniere-titres-before.png
│ └── accueil-banniere-titres-after.png
├── projet2
└── personas
Exemple de fichier de configuration : config.toml
title = "Mon administration"
theme = "fargo"
[params]
organisation = "Le nom complet de mon administration"
[params.strategy]
schema = "https://www.monadministration.gouv.fr/schema_pluriannuel_2020-2022.pdf" // Optionnel
plan = "https://www.monadministration.gouv.fr/plan_annuel_2020.pdf" // OptionnelHugo permet de surcharger les fichiers présents dans le thème, la condition est de respecter la même arborescence. Ainsi pour surcharger un thème avec :
- Sa police
- Son logo
- Ses couleurs *…
Il suffit de créer tout ces fichiers dans le répertoire static. Le thème appelle automatiquement les polices contenus dans le répertoire static/assets/fonts (à la place de la police Marianne).
static
└── assets
├── css
│ ├── fonts.css
│ └── main.css
├── favicons
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ └── site.webmanifest
├── fonts
│ ├── open-sans-bold.woff2
│ └── open-sans-regular.woff2
└── images
├── logo.svg
└── logodark.svg
La page d’accueil présente la liste de tous les projets existants dans content/projects. Si le défi ne présente qu’un seul projet, et que la type de la page d'accueil est type: "projects", alors la page affiche la page de résumé du projet.
La page de projets doit servir à présenter l’état de la démarche, puis le planning d’avancée du commando et enfin lister éventuellement des liens vers des billets de types : réunions ou actions (à insérer dans dans content/meetings et content/actions).
L’audit d’accessibilité peut être de conformité ou d’accompagnement. L’audit de conformité peut-être unique (évoluera au cours du projet) ou daté (ex: 2021-03-12.csv) et présent dans le répertoire static/accessibility/.
L’audit d’accompagnement a pour but de lister tous les types d’erreurs afin de faire un suivi des éléments à corriger avec une équipe de développement.
Éditer : static/nomdelademarche/accessibility/YYYY-MM-JJ.csv
L'audit accessibilité est généré à partir d‘un .csv (fichier à plat). Les données relatives au test (optionnelles) peuvent être indiquées dans l’entête du fichier .md de l’audit dans content/audits/nomdelademarche/accessibility.md.
---
type: accessibility // appel le gabarit accessibility :: static/nomdelademarche/accessibility/YYYY-MM-JJ.csv (fichier le plus récent)
accessibility:
website: "amendes.gouv.fr"
guidelines: "RGAA 4.0"
condition: "Auto-évaluation" // ou audit externe avec le nom de la structure qui a procédé à l’audit
technologies: ["HTML", "CSS", "JS"]
tools: ["Wave", "AXE", "MOZ DevTools"]
environment: ["MacOS", "Chrome", "ChromeVox"]
contact:
email: [email protected]
address : 139 rue de Bercy, 75572 Paris, Cedex 12
------
type: quality // appelle le gabarit quality :: avec les données du fichier plus récent dans static/nomdelademarche/quality/YYYY-MM-JJ.yml
datafilename: YYYY-MM-JJ // appel le fichier avec la date correspondante
---Lister les personnes contactées pendant la durée du défi de mise en conformité. Cet annuaire permet de partager les contacts dans le temps de l’amélioration de la démarche.
Éditer : static/directory.json
Les tests utilisateurs de type quantitatifs consistent à poser des questions similaires à un panel important d’usagers. Pour le service usertests, il existe une mise en forme pour l’analyse rapide de ces résultats.
Fonctionne à partir d'une JSON, mais pourrait marcher avec du CSV directement (Ici, penser à convertir le CSV en JSON).
Éditer : static/nomdelademarche/usertests/nometude.json (à faire évoluer)
Ajouter à l'entête du fichier de contenu :
---
type: usertests // appel le gabarit usertests
datafilename: etudiants // appelle le fichier nommé etudiants :: dans static/nomdelademarche/usertests/etudiants.json
---L’audit de performance apporte une complémentarité à l’audit d’accessibilité en listant de manière automatique des éléments à optimiser. Il peut être reproduit de manière régulière. Le dernier test vient surcharger les autres sur la page projet. Il n'existe pas encore de gabarits d'analyse graphique dans le temps.
Éditer : static/nomdelademarche/lighthouse/YYYY-MM-JJ.json
Définir des personas et les afficher sur une même page pour les partager à l’équipe projet. On peut sélectionner les profils retenus pour les tests.
Hugo nécessite de créer les pages correspondantes pour chaque personas ; si on veut afficher les personas en détail. Créer les pages dans
content/personas/nomdelademarche/prenom-nom.md.
Éditer : static/nomdelademarche/personas.json
Ajouter un parcours type par personas pour fournir une base visuelle à l’équipe projet de ce qui est testé. Le gabarit permet de partir d’un élément parent unique puis de développer autant de sous branches possibles dans la limite de 4 niveaux de profondeur (compatible mobile).
Éditer : static/nomdelademarche/personas.json
Nécessite d’ajouter un type de catégorie dans le config.toml ; et d’ajouter le tag dans chacun des contenus qu’on souhaite voir afficher dans une phase.
Les contenus listés sont donc hétérogènes.
Afficher une liste de captures d’écran pour illustrer une étude comparative.
{{< benchmark datafile="amendes" src="-explications" >}}{{< /benchmark >}}Afficher la liste des sites similaires à la démarche (action de benchmarking). Les sites sont rangés par pays.
Éditer : static/nomdelademarche/similary.json
{{< similary project="amendes" >}}{{< /similary >}}Appel de la librairie mermaid.JS. Ajouter la syntaxe Mermaid dans le contenu du shortcode.
{{< mermaid >}}
graph TD
A(Je reçois un avis)
A --> B{Je paye une amende}
B --> |Carte Bancaire| C(Site web)
B --> |Carte Bancaire| D(Application)
B --> |Chèque| E(Courrier)
B --> |Chèque/Espèce/CB| F(Buraliste)
B --> |Carte Bancaire| G(Téléphone)
B --> |Chèque/Espèce/CB| H(Trésor Public)
B --> |Virement pour étrangers| I(Site web)
{{< /mermaid >}}Petit aide pour l’affichage de graphiques. Passer les données dans le contenu du shortcode. Choisir le titre et le type de graphique à afficher : bar, line, donut…
{{< graphic title="Ventilation des paiements dans l’année (en milliers)" type="bar">}}
{
labels: ["Vitesse", "PV électronique", "Feux rouges"],
datasets: [
{
name: "Internet",
values: [3351, 2482, 85],
},
{
name: "Smartphone",
values: [492, 497, 12]
}
]
}
{{< /graphic >}}Afficher les personas sur la page de son choix en fonction du projet de son choix.
{{< personas project="amendes" >}} {{< /personas >}}Afficher les parcours sur la page de son choix en fonction du projet de son choix.
{{< parcours project="amendes" >}} {{< /parcours >}}Site officiel : https://gohugo.io/hugo-modules/use-modules/#use-a-module-for-a-theme
-
Initialiser votre projet pour utiliser les modules hugo :
$ hugo mod init [MON_GESTIONNAIRE_DE_DEPOT]/[MON_COMPTE]/[MON_PROJET]par exemple :$ hugo mod init github.com/disic/frago -
Importer ce module dans le fichier
config.toml:
[module]
[[module.imports]]
path = "github.com/disic/frago"- C’est installé ?
- En mode dev, lancer
hugo server. Mais préférer :HUGO_ENV=production hugo server --buildFuture, pour le mode production. - Mettre à jour le thème, lancer:
hugo mod get -u github.com/disic/frago/ou justehugo mod get -u. - L’appel de thème n'est pas possible avec Netlify, il est nécessaire d’indiquer cette commande dans l’interface
git submodule add https://github.com/disic/frago.git/ themes/frago -f && git submodule update --init --recursive && hugo --gc --minify --buildFuture --templateMetrics
Le code source de ce dépôt est publié sous licence MIT.
La marque d'État est à usage exclusif des acteurs de la sphère étatique. En particulier, la typographie Marianne© est protégée par le droit d'auteur.
Lire les explications sur le site de la marque d’État.
Le thème Frago utilise cette liste de bibliothèques :
- Frappe Charts (MIT) : https://github.com/frappe/charts - https://github.com/frappe/charts
- Mermaid (MIT) : https://github.com/mermaid-js/mermaid
- Highlight.js (MIT) : https://github.com/highlightjs/highlight.js
- simplelightbox (MIT) : https://github.com/andreknieriem/simplelightbox
- Van11y accessible tabs panel system (MIT) : https://github.com/nico3333fr/van11y-accessible-tab-panel-aria
- Checka11y.css (MIT) : https://github.com/jackdomleo7/Checka11y.css
2020-2021, Bertrand Keller pour le ministère de l’économie, des finances et de la relance.












