gestion_table_tournante_libre/test/navigateur/feuilles.js
Mathieu Benoit 43dbfad8a5 [ADD] docs: photographed walkthrough publishes doc/captures
The screenshots must come from the tested walkthrough, not from a separate
script that can drift. The browser walkthrough runs on the simulated file
system with a driven clock and the direct executor, light theme, 1366 x
700 at scale 1, transitions off, and photographs each step once its
condition holds. make captures writes the images and the manifest; the
plain test run compares them instead. Eighteen captures are published, the
later ones named as postponed. The forged-names scan skips the manifest,
which records the demo names shown on screen.
Checked: red first; 3620 node, 681 browser and 101 long tests green from
the index alone.

--- FR ---

[ADD] docs : parcours photographié, publication de doc/captures

Les captures doivent venir du parcours éprouvé, non d'un script à part qui
dérive. Le parcours navigateur joue sur le système de fichiers simulé,
l'horloge pilotée et l'exécuteur direct, thème clair, 1366 × 700 au facteur
1, transitions coupées, et photographie chaque étape quand sa condition
tient. make captures écrit les images et le manifeste ; la série ordinaire
les compare au lieu de les écrire. Dix-huit captures sont publiées, les
suivantes nommées reportées. Le balayage des noms forgés saute le
manifeste, qui relève les noms de démonstration affichés.
Vérifié : rouge d'abord ; 3620 node, 681 navigateur et 101 longues vertes
depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-09 15:33:59 -04:00

40 lines
1.8 KiB
JavaScript

// © 2026 TechnoLibre (http://www.technolibre.ca)
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
// La feuille de style que le pilotage injecte (§ 19.2, § 19.4) : elle annule
// toute transition et toute animation, l'icône de chargement de l'accueil
// comprise. Une capture d'écran prise à mi-transition serait une image
// différente à chaque exécution, et un écran qui attendrait transitionend
// ne viendrait jamais : le parcours photographié et l'épreuve transversale
// posent la même feuille, d'ici seul.
//
// La feuille posée porte l'attribut data-feuille-capture : photographier
// (captures.js) la cherche dans le document et refuse une capture sans elle.
/** Le texte de la feuille : transitions et animations annulées sur tout
* élément et ses pseudo-éléments. */
export const SANS_MOUVEMENT = '*,*::before,*::after{transition:none!important;animation:none!important}';
/** L'attribut qui désigne la feuille posée. */
export const ATTRIBUT_FEUILLE = 'data-feuille-capture';
/**
* Pose la feuille dans <head> et rend la fonction qui la retire. Deux poses
* posent deux feuilles, chacune retirée par sa propre fonction.
*
* @param {Document} [document]
* @returns {() => void}
*/
export function poserFeuille(document = globalThis.document) {
const feuille = document.createElement('style');
feuille.setAttribute(ATTRIBUT_FEUILLE, '');
feuille.textContent = SANS_MOUVEMENT;
document.head.append(feuille);
return () => feuille.remove();
}
/** Vrai quand une feuille posée par poserFeuille est dans le document, au
* texte de SANS_MOUVEMENT. */
export function feuillePosee(document = globalThis.document) {
return [...document.head.querySelectorAll(`style[${ATTRIBUT_FEUILLE}]`)].some((feuille) => feuille.textContent === SANS_MOUVEMENT);
}