Les couleurs de matière
Six cartes savent colorer une matière : Vue journée,
Emploi du temps, Devoirs,
Notes, Prochain cours et
Évaluations. Elles partagent une seule option,
subject_colors, et exactement les mêmes règles. Cette page les décrit une
fois pour toutes.
La couleur vient du serveur, et ça vient de changer
C'est la première chose à savoir, et elle explique la plupart des surprises. Depuis la version 0.0.13 de l'intégration, vous n'avez plus rien à écrire pour voir les couleurs de votre établissement — celles que l'élève connaît déjà de l'interface officielle de PRONOTE.
Cette page a longtemps dit l'inverse, et pour une bonne raison : c'était vrai. L'intégration décodait la couleur sur quatre chemins de sa passerelle et ne l'exposait sur aucune entité — la chaîne était cassée au dernier mètre. Elle est réparée.
Mais elle ne l'est pas partout, et le détail décide de ce que vous avez à écrire :
| ce qui porte une matière | couleur du serveur | comment on le sait |
|---|---|---|
| créneaux d'emploi du temps | oui | mesuré, 27 sur 27 |
| devoirs | oui | mesuré, 12 sur 12 |
| moyennes par matière | publiée, jamais observée | l'intégration pose bien la clé (vérifié deux fois dans son code) ; personne n'a encore vu la valeur, la liste étant vide |
| prochain cours | non | mesuré : la clé est absente des attributs |
| évaluations | non | lu dans le code de l'intégration, liste vide à la mesure |
| notes individuelles, bulletin | jamais | PRONOTE colore la matière, pas la note |
La distinction entre « mesuré » et « lu dans le code » n'est pas de la coquetterie. Les deux premières lignes ont été vérifiées sur une instance réelle ; les deux du milieu ne peuvent pas l'être tant que les listes sont vides. Une page qui rangerait les six ensemble vous ferait retirer une table qui sert peut-être encore.
Écrire la table
type: custom:pronote-ng-journee
device_id: <appareil de l'enfant>
subject_colors:
MATHEMATIQUES: '#1e88e5'
histoire-géographie: '#8d6e63'
Sciences: '#43a047'
L'option n'existe qu'en YAML, et c'est délibéré : un dictionnaire dont les clés sont les matières de votre établissement ne se modélise pas dans un formulaire Home Assistant. Ouvrez l'éditeur de la carte, passez en Afficher l'éditeur de code, et ajoutez le bloc. Les autres options restent modifiables dans le formulaire ensuite.
Les trois rangs
La couleur d'une matière se prend dans cet ordre :
- la couleur publiée par le serveur, selon le tableau ci-dessus ;
- sinon votre table ;
- sinon rien.
Le rang 1 gagne, et il rend votre table muette sans vous le dire. Si vous aviez écrit une table pour compenser l'absence de couleur, elle ne s'applique plus qu'aux matières que le serveur ne colore pas — donc, sur l'emploi du temps et les devoirs d'un établissement qui colore tout, à aucune. Le bloc reste dans votre YAML et ne fait plus rien : c'est le genre de configuration qui trompe celui qui l'édite, et il trompe dans les deux sens — vous ne voyez pas que votre table a cessé de servir, et vous ne voyez pas pourquoi la couleur a changé.
Ce qu'il y a à faire, et ce qu'il ne faut pas faire :
- l'emploi du temps et les devoirs : la table ne sert plus qu'aux matières que votre établissement laisse sans couleur, et à remplacer une teinte qui vous déplaît. Vous pouvez la retirer ;
- le prochain cours et les évaluations : gardez-la. C'est le seul moyen d'y obtenir un accent, puisque le serveur ne colore pas ces deux entités ;
- les notes : ne la retirez pas encore, et la raison mérite d'être précise. Ce n'est pas l'intégration qui est en doute — elle pose la clé sur les moyennes par matière comme sur les deux autres paliers. C'est le serveur : sur ce palier-là il n'écrit pas la couleur sous le même nom de champ que sur les créneaux et les devoirs, et personne n'a encore pu observer un bulletin non vide pour vérifier qu'il l'écrit tout court. La carte ne colore que les moyennes ; retirer la table sur une déduction la laisserait entièrement grise, sans un mot. Retirez-la le jour où vous voyez les moyennes colorées sans elle.
Où la couleur se place, carte par carte. Le placement n'est pas uniforme, et ce n'est pas un oubli :
| carte | placement |
|---|---|
| emploi du temps, notes, prochain cours, évaluations | gouttière à gauche de la ligne |
| devoirs | gouttière à gauche du bloc, la matière en titre |
| vue journée | filet entre l'heure et la matière |
La journée est l'exception assumée. Sa colonne d'horaires se lit seule — on la consulte pour savoir où en est la journée — donc un filet posé à sa gauche colorerait l'heure autant que la matière, alors que la couleur n'appartient qu'à la seconde. Les deux placements ont été rendus et comparés ; celui-ci a été retenu.
Deuxième différence, plus discrète : sur les cinq cartes à gouttière, une ligne sans couleur garde une gouttière réservée et transparente, pour que rien ne se décale. Sur la journée, le filet d'un créneau sans couleur est gris — la colonne est fixe, donc rien ne se décale de toute façon, et le gris dit « cette matière n'a pas de couleur » là où le transparent ne dit rien.
Il n'y a pas de quatrième rang, et surtout pas une couleur calculée à partir du nom. C'est le rang qui n'existe pas, volontairement. Une couleur déclarée est assumée et corrigible ; une couleur dérivée d'un hachage aurait l'apparence d'une information sans en porter aucune — deux matières prendraient deux teintes qu'un lecteur lirait comme une catégorie, et le jour où le serveur publierait ses vraies couleurs, elles contrediraient l'habitude prise.
Hexadécimal strict, et rien d'autre
Quatre formes sont acceptées, le # étant facultatif : #1e88e5, 1e88e5,
#f80 et f80. Le dièse est ajouté s'il manque, et rien d'autre n'est
normalisé — ni la casse, ni la forme à trois chiffres.
red, rgb(30, 136, 229) et var(--primary-color) sont refusés sans un
mot : la ligne s'affiche simplement sans couleur, et aucun message ne vous dit
pourquoi. Si une matière reste grise alors que vous l'avez renseignée, c'est la
première chose à vérifier.
Le filtre est étroit parce que la valeur finit dans un attribut style : une
chaîne non filtrée y ajouterait des propriétés CSS arbitraires. La règle vaut
aussi pour votre table — l'origine d'une valeur ne dit rien de son
innocuité.
La casse et les accents sont ignorés
histoire-géographie, HISTOIRE-GEOGRAPHIE et Histoire-Geographie désignent
la même matière. La comparaison retire les signes diacritiques, coupe les
espaces de bord et passe en minuscules.
Ce n'est pas un confort. PRONOTE écrit souvent les matières en capitales accentuées, et sans ce repliement une table rédigée sans accents laissait la ligne grise sans un mot — rien ne distinguait alors « j'ai mal écrit la matière » de « cette matière n'a pas de couleur ». Le risque inverse, deux matières d'un même établissement ne différant que par un accent, n'existe pas.
Un filet, jamais un aplat
Une couleur derrière du texte casse le contraste dès qu'un thème sombre est actif, et votre thème n'y peut alors plus rien. En filet, le pire cas est un accent peu visible.
Le filet ne porte aucune information à lui seul. Il situe et il décore ; les horaires, l'intitulé et les pastilles informent. Une carte lue par quelqu'un qui ne distingue pas ces teintes ne perd donc rien.
La même règle s'appliquait aux pastilles, et personne ne l'avait vue
Cette section n'a longtemps parlé que de la couleur venue du serveur. Or les pastilles d'état des cartes — « en retard », « annulé », « à jour » — faisaient exactement ce qu'elle interdit : du texte blanc sur un aplat de couleur. Mesuré dans un thème aux valeurs par défaut :
| pastille | avant | après |
|---|---|---|
| avertissement (ambre) | 1,96:1 | 4,59 en clair, 7,59 en sombre |
| problème (rouge) | 4,29:1 | 7,23 / 5,70 |
| succès (vert) | 3,30:1 | 6,25 / 6,46 |
La règle de contraste des textes demande 4,5:1, et les trois étaient dessous. Le pire n'était pas le rouge mais l'ambre, dont la luminance est proche de celle du blanc : à 1,96 ce n'est plus une question d'accessibilité, c'est difficile à lire pour tout le monde.
Les pastilles colorées sont donc devenues des teintes : un fond de la couleur mélangée à celle de la carte, et un texte de la même couleur fondue vers celle du thème. Elles gardent leur identité de couleur et perdent leur aplat. Trois autres dosages ont été mesurés avant celui-là ; deux laissaient l'ambre sous le seuil en thème clair.
Ce que ça change pour vous : une pastille est plus discrète qu'avant, et son libellé se lit. Le libellé portait déjà toute l'information — la couleur ne faisait que la répéter — donc rien ne disparaît. Un navigateur trop ancien pour mélanger des couleurs affiche une pastille neutre : elle perd sa teinte, jamais sa lisibilité.
Ce qu'il faut retenir au-delà du correctif : la règle était écrite, elle était juste, et elle n'avait été appliquée qu'à la couleur pour laquelle on l'avait écrite. Une règle rangée sous « couleurs de matière » ne se relit pas quand on dessine une pastille d'état.
Ce que l'option ne fait pas
Il n'y a pas de réglage global. La table est une option par carte : un tableau de bord qui affiche l'emploi du temps, la journée, les devoirs et les notes la répète quatre fois. Avec deux tableaux de bord, huit fois.
Et il n'y a pas d'astuce pour l'éviter : les ancres YAML ne survivent pas à un tableau de bord en mode stockage, qui est enregistré en JSON. Elles ne fonctionneraient que sur un tableau de bord en mode YAML, et se perdraient au premier passage par l'éditeur.
Cette page a affirmé que deux cartes affichaient une matière sans avoir l'option — le prochain cours et les évaluations. C'était faux : les six cartes ont l'option et la traitent à l'identique. L'erreur avait le pire effet possible, puisque ces deux-là sont précisément celles où la table reste indispensable : elle décourageait le seul usage encore valable.
Ce que cette page a promis, et qui ne s'est pas produit
Elle annonçait, sous le titre « le jour où l'intégration publiera la couleur » : « le rang 1 prendra le dessus tout seul, il n'y aura rien à défaire, rien à retirer, et rien à réécrire ».
Ce jour est arrivé, et la promesse était fausse. Il y a quelque chose à retirer : une table écrite pour compenser l'absence du champ est devenue inerte le jour où le champ est arrivé, silencieusement, en restant dans le YAML. C'est le seul point de cette page qui vaille un avertissement, et il est en tête de la section Les trois rangs.
La promesse est conservée ici plutôt que supprimée, parce que l'effacer laisserait croire que personne ne s'est trompé. Ce qui l'a rendue fausse est identifiable : elle raisonnait sur le mécanisme — le rang 1 bat bien le rang 2 tout seul, c'est exact — et non sur ce qu'un utilisateur a dans son fichier. Un mécanisme correct peut laisser derrière lui une configuration qui ne correspond plus à rien.