Une exécution du modèle de recherche multi-sources a produit un bon rapport sur les instruments d'investissement, puis l'a mal imprimé. Quatre-vingt-quinze marqueurs de la forme [^1] se trouvaient dans le corps du texte, et neuf lignes de la forme [^1] : s'entassaient en dessous. Sur le web comme sur le téléphone.
La cause, c'est que les notes de bas de page ne font pas partie de markdown. C'est une extension, et aucun des deux moteurs markdown que nous livrons — l'un sur le web, un autre sur mobile — ne l'implémente. Nous demandions au modèle exactement cette forme, puis nous la rendions comme du texte littéral.
Un seul réécrivain, deux moteurs
Plutôt que d'apprendre la même extension aux deux moteurs de rendu, les marqueurs sont réécrits avant que l'un ou l'autre ne les voie, en un simple lien que les deux rendent déjà de manière identique. Les définitions sont extraites et renvoyées séparément, et ce qui les suivait reste comme la fin du document. Les crochets restent dans le texte du lien, de sorte que des citations empilées se lisent [1][2], et non 12.
Sur le web, la citation est dessinée en exposant, les définitions sont rendues sous forme de liste avec de vraies ancres, cliquer sur l'une défile jusqu'à elle et fait clignoter la ligne, et le numéro dans la liste rebondit vers le premier endroit où elle a été citée. Survoler affiche la définition sans bouger. Sur le téléphone, les mêmes marqueurs sont dessinés dans la couleur d'accent, et toucher l'un fait défiler le volet jusqu'à la ligne correspondante. Les liens qui ne sont pas des citations continuent de s'ouvrir dans un navigateur, comme avant.
Les fiches sources sous un rapport n'ont jamais été touchées — elles viennent d'ailleurs et étaient toujours correctes.
Et dans le téléchargement
Un rapport que tu télécharges en .docx, .pdf ou .md passait par un autre convertisseur, qui imprimait les marqueurs bruts directement dans le document. Une spécification de document n'a pas d'exposant, donc une citation s'imprime [3], et chaque définition ouvre sa propre ligne commençant par [3]. Les lignes de continuation indentées rejoignent leur définition. Les numéros du fichier sont les numéros de l'écran.
La première tentative était fausse d'une manière contre laquelle nous avions déjà une protection
La première version faisait des numéros de note de bas de page de simples liens de fragment — href="#fn-3". Sous le <base href="/"> dont a besoin une application monopage, un fragment nu se résout par rapport à la racine du site, donc le lien pointe vers la page d'accueil. Le gestionnaire de clic annulait la navigation, donc ça fonctionnait — et ça aurait continué de fonctionner jusqu'à ce que quelqu'un touche au gestionnaire.
Une vérification que nous avions déjà exactement pour ce motif est passée au rouge lors de l'exécution locale avant le push. Les numéros sont désormais des boutons ; ils défilent, déplacent le focus et respectent la préférence de mouvement réduit du lecteur.