The event list summarised the retained placement by its distance to a redundancy target, a figure the operator does not act on. It now shows the retained placement's cumulated collisions (pair and round), the same number as the proposals table. The target setting, which only fed that column, is removed: a file or journal that still carries it opens and replays without error and drops it at the next write. Undo and redo now step past an entry that changes nothing, instead of refusing it, so old journals stay undoable. Checked: node 5130, browser 1145, long 129; captures stable on two passes. --- FR --- [IMP] liste des événements : collisions du retenu, cible retirée La liste résumait le retenu par son écart à une cible de redondance, un chiffre sur lequel l'opérateur n'agit pas. Elle montre désormais les collisions cumulées (paire et tour) du retenu, le nombre du tableau des propositions. Le réglage de la cible, qui ne servait qu'à cette colonne, est retiré : un fichier ou un journal qui le porte s'ouvre et se rejoue sans erreur et le perd à la prochaine écriture. Défaire et refaire passent une entrée sans effet au lieu de la refuser : un ancien journal reste défaisable. Vérifié : node 5130, navigateur 1145, longues 129 ; captures stables, 2 passes. Assisted-by: Claude Opus 5.5
238 lines
17 KiB
JavaScript
238 lines
17 KiB
JavaScript
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
||
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
||
|
||
// Les désignations stables de l'interface (contrainte 16) : la liste fermée
|
||
// des attributs data-… que src/interface pose — gabarit ou script d'un
|
||
// composant, code d'un module —, et par lesquels les épreuves atteignent un
|
||
// élément sans lire sa classe ni son texte traduit.
|
||
// test/sources_interface.test.js la compare au code dans les deux sens : un
|
||
// attribut posé hors de la liste se relève, une entrée que rien ne pose
|
||
// aussi. Un attribut nouveau entre ici avec le code qui le pose.
|
||
//
|
||
// Chaque entrée : attribut → { porteur, valeurs }. porteur dit l'élément qui
|
||
// le porte ; valeurs vaut null quand la valeur se calcule — un identifiant,
|
||
// un code, une clé —, sinon la liste fermée des valeurs littérales que le
|
||
// code écrit, '' pour un attribut posé sans valeur. Une liste fermée ne vaut
|
||
// que pour un attribut dont chaque pose est littérale ; la garde le vérifie.
|
||
// Le module est pur : il se lit sous node comme dans le navigateur.
|
||
|
||
// [attribut, porteur, valeurs], dans l'ordre des attributs.
|
||
const ENTREES = [
|
||
['data-affichee', 'import : la valeur affichée d’une cellule de l’aperçu', ['']],
|
||
['data-annonce-planche', 'badges : l’annonce de la planche, avant de produire', ['']],
|
||
['data-annonces', 'événement : la zone des annonces à côté de la tête', ['']],
|
||
['data-apercu', 'import : l’aperçu d’un fichier ou d’un collage', ['']],
|
||
['data-attente-demonstration', 'accueil : le message d’une démonstration cliquée pendant un chargement', ['']],
|
||
['data-autre', 'accueil : le choix d’un autre dossier de travail', ['']],
|
||
['data-autre-chemin', 'accueil : le chemin de l’autre dossier de travail', ['']],
|
||
['data-avancement', 'génération : la barre d’avancement', ['']],
|
||
['data-avertissement', 'un avertissement, par son code', null],
|
||
['data-bandeau', 'le bandeau d’application', ['']],
|
||
['data-bandeau-plan', 'plan : le bandeau au-dessus de la surface', ['']],
|
||
['data-bloc', 'à propos : le bloc de version à copier', ['']],
|
||
['data-cartouche', 'aperçu : le cartouche de repérage d’une page du plan imprimé', ['']],
|
||
['data-case', 'qualité : une case d’une grille de graphique, par « ligne:colonne »', null],
|
||
['data-cellule', 'import : une cellule de l’aperçu, par son champ', null],
|
||
['data-champ', 'un champ de saisie ou un sélecteur, par son nom', null],
|
||
['data-chargement', 'accueil : le signe d’un calcul en cours', ['']],
|
||
['data-chargement-liste', 'accueil : l’annonce du calcul des colonnes de la liste', ['']],
|
||
['data-chargement-section', 'événement : l’attente d’une section chargée à part, par son nom', null],
|
||
['data-chemin-planche', 'badges : le chemin de la planche produite, ou son nom téléchargé', ['']],
|
||
['data-choix-siege', 'plan : un siège offert par le panneau d’une table, par son rang', null],
|
||
['data-cible', 'la cible d’une commande : section, groupe, colonne, vue imprimée ou papier', null],
|
||
['data-classement', 'propositions : les lignes classées', ['']],
|
||
['data-coeurs', 'génération : le réglage des cœurs de calcul', ['']],
|
||
['data-coeurs-disponibles', 'génération : la valeur automatique des cœurs', ['']],
|
||
['data-collage', 'import : l’origine collage de l’aperçu', ['']],
|
||
['data-colonne', 'une colonne d’un tableau, par son nom', null],
|
||
['data-colonnes', 'import : l’association des colonnes', ['']],
|
||
['data-contenu', 'aperçu : la zone de contenu d’une feuille imprimée', ['']],
|
||
['data-commande', 'un bouton de commande, par son nom', null],
|
||
['data-compte', 'import : un compte du rapport, par son nom', null],
|
||
['data-compte-pire', 'qualité : le compte du pire, ou de la ligne, sous un pourcentage, dans le même composant', ['']],
|
||
['data-conflit', 'participants : une ligne de conflit d’un groupe', ['']],
|
||
['data-conflit-personne', 'participants : les règles d’une personne en conflit', ['']],
|
||
['data-conflits', 'participants : les conflits d’un groupe, par sa clé', null],
|
||
['data-conversion', 'plan : une conversion offerte par une liste de travail', null],
|
||
['data-corbeille', 'accueil : la corbeille', ['']],
|
||
['data-corbeille-dossier', 'accueil : un dossier de la corbeille', null],
|
||
['data-course', 'qualité : la ligne de tête de la performance du calcul', ['']],
|
||
['data-critere', 'propositions : un nom de la phrase de l’ordre, par le critère qui classe sa valeur, objectifs et animateurs compris', null],
|
||
['data-defaut', 'tables : le réglage du défaut de places', ['']],
|
||
['data-demonstration', 'accueil : une démonstration, par sa clé', null],
|
||
['data-derive', 'événement : un placement en dérive, par son identifiant', null],
|
||
['data-dernier-changement', 'qualité : la phrase du dernier changement de la performance du calcul', ['']],
|
||
['data-dessin-differe', 'qualité : le <svg> d’un graphique dont les marques attendent d’approcher de la zone visible, posé sans valeur', null],
|
||
['data-devient', 'import : ce que devient une ligne', ['']],
|
||
['data-donnee', 'diagnostic : une donnée nommée dans une phrase', ['']],
|
||
['data-dossier', 'accueil : le dossier de travail montré', ['']],
|
||
['data-dossier-travail', 'accueil : le bloc du dossier de travail', ['']],
|
||
['data-doublon', 'un doublon : base de la liste, ou ligne de l’aperçu', null],
|
||
['data-doublons', 'import : les doublons de l’aperçu', ['']],
|
||
['data-duree', 'génération : la durée estimée', ['']],
|
||
['data-echec-section', 'événement : la phrase d’une section chargée à part qui ne s’est pas chargée, par son nom', null],
|
||
['data-ecran', 'un écran de l’application', ['accueil', 'apercu', 'apropos', 'evenement', 'recuperation']],
|
||
['data-encodage', 'import : l’encodage nommé', ['']],
|
||
['data-enonce', 'un énoncé : diagnostic, ou défaut des tables', null],
|
||
['data-enregistre', 'import : le chemin des refus enregistrés', ['']],
|
||
['data-entete', 'import : la ligne d’en-tête lue', ['']],
|
||
['data-entete-liste', 'aperçu : l’en-tête d’une liste imprimée — titre et têtes de colonnes —, répété sur chaque feuille', ['']],
|
||
['data-equite', 'qualité : les trois nombres d’une colonne de la diversité par animateur, par sa grandeur', ['appartenances', 'etiquettes']],
|
||
['data-estimation', 'génération : l’estimation de la durée', ['']],
|
||
['data-etat', 'événement : un état du plan dans la tête', null],
|
||
['data-etat-table', 'tables : l’état d’une table', ['']],
|
||
['data-etendue', 'propositions : l’étendue d’une page du classement', ['']],
|
||
['data-etiquettes', 'participants : les étiquettes de la fiche, leurs pastilles et leur saisie', ['']],
|
||
['data-evenement', 'accueil : une ligne de la liste, par sa base', null],
|
||
['data-evidence', 'plan : la personne mise en évidence', null],
|
||
['data-fantome', 'plan : le fantôme d’une personne glissée', ['']],
|
||
['data-fautive', 'événement : une proposition fautive', null],
|
||
['data-feuille', 'aperçu : une feuille du document imprimé, une page, par son rang', null],
|
||
['data-fiche', 'participants : la fiche d’une personne', null],
|
||
['data-filigrane', 'aperçu : le filigrane BROUILLON d’une feuille', ['']],
|
||
['data-fichier', 'import : le fichier lu', ['']],
|
||
['data-focus-initial', 'plan : le siège qui reçoit le focus à l’ouverture du panneau', null],
|
||
['data-fusion', 'import : un groupe d’orthographes fondu', ['']],
|
||
['data-fusions', 'import : les groupes d’orthographes', ['']],
|
||
['data-fusions-etiquettes', 'import : les étiquettes fondues, à part des appartenances', ['']],
|
||
['data-graphique', 'qualité : le <svg> d’un graphique, par son nom', null],
|
||
['data-groupe', 'participants : l’en-tête d’un groupe, par sa clé', null],
|
||
['data-groupe-compte', 'participants : le compte d’un groupe', ['']],
|
||
['data-groupe-conflits', 'participants : la marque de conflit d’un groupe', ['']],
|
||
['data-groupe-etat', 'participants : l’état replié ou déplié d’un groupe', ['']],
|
||
['data-groupe-libelle', 'participants : le libellé d’un groupe', ['']],
|
||
['data-groupe-ligne', 'participants : le groupe qui compte une ligne', null],
|
||
['data-historique', 'événement : la commande de l’historique', ['']],
|
||
['data-homonyme', 'import : une ligne homonyme', null],
|
||
['data-impression', 'aperçu : le document imprimé', ['']],
|
||
['data-hors-classement', 'propositions : les lignes hors classement', ['']],
|
||
['data-issue', 'génération : l’issue de la dernière génération', ['']],
|
||
['data-jamais-servies', 'qualité : la liste des personnes jamais servies, ou sa phrase quand elle est vide', ['']],
|
||
['data-jumeau', 'qualité : un tableau jumeau ouvert, par son rang dans le jumeau', null],
|
||
['data-legende', 'plan : la légende des conflits', ['']],
|
||
['data-legende-etiquettes', 'participants : la légende des étiquettes', ['']],
|
||
['data-legende-pastille', 'plan : la pastille de la légende', ['']],
|
||
['data-legende-regle', 'plan : une entrée de la légende, par sa règle', null],
|
||
['data-ligne', 'import : une ligne de l’aperçu, par son rang', null],
|
||
['data-ligne-graphique', 'qualité : une ligne de barres, par l’identifiant de ce qu’elle porte', null],
|
||
['data-ligne-imprimee', 'aperçu : une ligne d’une liste imprimée, par son rang dans la liste', null],
|
||
['data-lignes', 'import : le tableau des lignes', ['']],
|
||
['data-liste', 'plan : la liste de noms d’une table', null],
|
||
['data-liste-imprimee', 'aperçu : une liste imprimée — l’accueil, ou une table —, par son rang dans le document', null],
|
||
['data-liste-travail', 'plan : une liste de travail', ['pressentis', 'titres']],
|
||
['data-marque', 'une marque porteuse d’information, par son nom au registre', null],
|
||
['data-meilleure', 'la meilleure proposition : accueil ou génération', ['']],
|
||
['data-meilleure-collisions', 'génération : les collisions de la meilleure proposition', ['']],
|
||
['data-meilleure-id', 'l’identifiant de la meilleure proposition', ['']],
|
||
['data-meilleure-libelle-id', 'génération : le libellé de l’identifiant de la meilleure', ['']],
|
||
['data-meilleure-vide', 'génération : la meilleure absente', ['']],
|
||
['data-mention', 'aperçu : une mention d’une page du plan imprimé — disposition relative, listes hors d’échelle', ['listes', 'relative']],
|
||
['data-menu', 'plan : le menu d’une personne', null],
|
||
['data-mode', 'événement : la barre, la tête et la surface de l’événement, par son mode', null],
|
||
['data-mode-libelle', 'le libellé de mode', ['bandeau', 'barre']],
|
||
['data-mode-objectifs', 'génération : le groupe du choix du mode des objectifs', ['']],
|
||
['data-motif', 'import : le motif d’une ligne refusée', ['']],
|
||
['data-multiligne', 'import : une ligne sur plusieurs lignes de texte', null],
|
||
['data-nature-import', 'import : le choix de la nature du fichier', ['']],
|
||
['data-niveau', 'participants : le niveau d’un groupe ou d’un sélecteur', null],
|
||
['data-nom-imprime', 'aperçu : le nom entier d’une personne sur une liste imprimée', ['']],
|
||
['data-nombre', 'import : un nombre affiché', ['']],
|
||
['data-objectif', 'tables : l’objectif d’une table, par sa table, et son tour pour un tour désigné', null],
|
||
['data-ordre', 'propositions : la phrase de l’ordre', ['']],
|
||
['data-orthographe', 'import : une orthographe d’un groupe', ['']],
|
||
['data-pages', 'propositions : une nav des pages du classement, haut ou bas', null],
|
||
['data-paire', 'qualité : une ligne du tableau des paires répétées, par « a:b » des identifiants', null],
|
||
['data-palier', 'génération : un palier de l’éditeur des priorités, par son index', null],
|
||
['data-panneau', 'plan : un panneau', ['place', 'table']],
|
||
['data-panneau-diagnostic', 'plan : le panneau du diagnostic', ['']],
|
||
['data-papier', 'le papier de la machine : la question, ou le papier choisi', ['choisi', 'question']],
|
||
['data-participant', 'une personne, par son identifiant', null],
|
||
['data-partie', 'plan : une partie d’une ligne de liste ou du fantôme', null],
|
||
['data-pastille', 'plan : la pastille d’une table', null],
|
||
['data-phrase', 'une phrase : diagnostic ou défaut des tables', ['']],
|
||
['data-phrase-qualite', 'qualité : la phrase d’un cas de la page, par son code', null],
|
||
['data-pied', 'aperçu : le pied d’une feuille imprimée', ['']],
|
||
['data-place-fixe', 'événement : la place fixe de la barre de l’événement', ['']],
|
||
['data-place-vide', 'aperçu : une place vide de la feuille par table', ['']],
|
||
['data-plan', 'plan : le <svg> du plan', ['']],
|
||
['data-plancher-objectifs', 'diagnostic : la phrase d’un plancher des objectifs, par la valeur que le mode compare', null],
|
||
['data-poignee', 'plan : la poignée d’une table', null],
|
||
['data-point-releve', 'qualité : un point de relevé d’un petit multiple, par ses mouvements évalués', null],
|
||
['data-portee', 'tables : la portée d’un objectif, tous pour la soirée, tour pour un tour désigné', ['tous', 'tour']],
|
||
['data-position-tables', 'qualité : un bouton radio du sélecteur du mélange des tables, par sa position', ['sieges', 'assis', 'doublons']],
|
||
['data-pourcentage', 'qualité : un pourcentage rendu, que suit son compte', ['']],
|
||
['data-priorite', 'génération : un critère de l’éditeur des priorités, par son nom', null],
|
||
['data-priorites', 'génération : la liste des paliers de l’éditeur des priorités', ['']],
|
||
['data-proposition', 'propositions : une ligne, par son identifiant', null],
|
||
['data-question', 'une question posée : dossier de travail ou durée longue', null],
|
||
['data-rang', 'qualité : la désignation de la cible pointée d’un graphique, par son rang à partir de 1', null],
|
||
['data-rapport', 'import : le rapport', ['']],
|
||
['data-refus', 'un refus, par son code ou sa place', null],
|
||
['data-refus-realigner', 'tables : le refus du réalignement', ['']],
|
||
['data-refusees', 'import : les lignes refusées', ['']],
|
||
['data-reglages', 'génération : les réglages', ['']],
|
||
['data-regle-objectifs', 'tables : la règle par défaut des objectifs', ['']],
|
||
['data-remede', 'diagnostic : un remède', ['']],
|
||
['data-repere', 'qualité : le tracé d’un repère — plafond, borne ou règle à 100 % (cent) —, par son genre', null],
|
||
['data-reserve', 'plan : la réserve d’un tour', null],
|
||
['data-retenu', 'propositions : la ligne du retenu', null],
|
||
['data-rubrique-rencontres', 'participants : la rubrique « Rencontres » de la fiche', ['']],
|
||
['data-secours', 'récupération : une source de secours', null],
|
||
['data-segment', 'qualité : un segment de barre, par son genre', null],
|
||
['data-section', 'une section de l’événement', ['badges', 'diagnostic', 'generation', 'import', 'participants', 'plan', 'propositions', 'qualite', 'tables']],
|
||
['data-separateur', 'import : le séparateur nommé', ['']],
|
||
['data-serie', 'qualité : le tracé d’une série, serie1 ou serie2', null],
|
||
['data-siege', 'plan : un siège, par sa table et son numéro', null],
|
||
['data-sieges-retires', 'tables : les sièges retirés', ['']],
|
||
['data-signalement', 'accueil : un signalement d’une ligne', null],
|
||
['data-socle', 'plan : le socle d’une pastille', ['']],
|
||
['data-soiree-objectifs', 'qualité : la soirée des objectifs, en texte', ['']],
|
||
['data-source', 'plan : le placement montré, dans la barre de vue', ['']],
|
||
['data-source-qualite', 'qualité : la ligne de source, le placement que la page mesure', ['']],
|
||
['data-support-rompu', 'événement : le message du support rompu', ['']],
|
||
['data-surface', 'plan : la surface du plan', ['']],
|
||
['data-table', 'une table, par son identifiant', null],
|
||
['data-table-panneau', 'plan : la table d’un panneau', null],
|
||
['data-terme', 'un terme expliqué par une infobulle', null],
|
||
['data-texte', 'import : le texte d’une ligne', ['']],
|
||
['data-theme', '<html> : le thème, clair ou sombre, que pose le script d’App', null],
|
||
['data-theme-choix', 'le bandeau : un choix de thème', null],
|
||
['data-titre', 'plan : un titre non pourvu d’une liste de travail', null],
|
||
['data-tours', 'tables : le réglage du nombre de tours', ['']],
|
||
['data-tuile', 'qualité : une tuile de l’en-tête chiffré, par le nom de sa colonne', null],
|
||
['data-valides', 'import : le compte des lignes valides', ['']],
|
||
['data-verrou', 'événement : le verrou d’une autre séance', ['']],
|
||
['data-verrou-depuis', 'événement : l’instant du verrou', ['']],
|
||
['data-verrou-seance', 'événement : la séance du verrou', ['']],
|
||
['data-version', 'accueil : la version affichée', ['']],
|
||
['data-vue', 'plan : le groupe de la vue', ['']],
|
||
['data-vue-impression', 'aperçu : la vue du document imprimé — plan, accueil ou tables', null],
|
||
[
|
||
'data-vue-qualite',
|
||
'qualité : le <div> qui enveloppe la carte d’une vue',
|
||
['entete', 'profil', 'collisions', 'tables', 'paires', 'objectifs', 'animateurs', 'diversite', 'performance'],
|
||
],
|
||
];
|
||
|
||
// La Map des entrées, gelée : Object.freeze ne gèle pas le contenu d'une
|
||
// Map, et ses modificateurs lèvent ici.
|
||
function geler(carte) {
|
||
for (const nom of ['set', 'delete', 'clear']) {
|
||
Object.defineProperty(carte, nom, {
|
||
value: () => {
|
||
throw new TypeError(`DESIGNATIONS est gelée : ${nom} refusé`);
|
||
},
|
||
});
|
||
}
|
||
return Object.freeze(carte);
|
||
}
|
||
|
||
/** Les désignations stables : attribut → { porteur, valeurs }, gelées. */
|
||
export const DESIGNATIONS = geler(
|
||
new Map(
|
||
ENTREES.map(([attribut, porteur, valeurs]) => [
|
||
attribut,
|
||
Object.freeze({ porteur, valeurs: valeurs === null ? null : Object.freeze([...valeurs]) }),
|
||
]),
|
||
),
|
||
);
|