The Badges section follows Propositions. It offers the retained plan by default, or the proposal chosen in Propositions, which always prints as BROUILLON; the announcement names the source, the imposition and the page count before anything is written. The paper question is asked once per machine, refusals sit beside « Produire » with their remedy, and a new production clears the previous sheet's path. Section buttons narrow so eight still fit one line at 1 366 px. Checked: node 3769, browser 745, node-long 101 from the index alone. --- FR --- [ADD] badges : section pour préparer, produire et rééditer la planche La section Badges suit Propositions. Elle offre le retenu par défaut, ou la proposition choisie dans Propositions, toujours BROUILLON ; l'annonce nomme la source, l'imposition et le nombre de pages avant toute écriture. La question du papier se pose une fois par machine, les refus se posent à côté de « Produire » avec leur remède, et une nouvelle production efface le chemin de la précédente. Les boutons de section s'amincissent : huit tiennent sur une ligne à 1 366 px. Vérifié : node 3769, navigateur 745, node-long 101 depuis l'index seul. Assisted-by: Claude Opus 5.5
195 lines
13 KiB
JavaScript
195 lines
13 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-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-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-cible-redondance', 'propositions : le champ de la cible de redondance', ['']],
|
||
['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-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-critere', 'propositions : un nom de critère de la phrase de l’ordre', 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-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-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-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-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-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-legende', 'plan : la légende des conflits', ['']],
|
||
['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-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', '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 : le cadre de mode, par sa forme', null],
|
||
['data-mode-libelle', 'le libellé de mode', ['bandeau', 'cadre']],
|
||
['data-motif', 'import : le motif d’une ligne refusée', ['']],
|
||
['data-multiligne', 'import : une ligne sur plusieurs lignes de texte', null],
|
||
['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-ordre', 'propositions : la phrase de l’ordre', ['']],
|
||
['data-orthographe', 'import : une orthographe d’un groupe', ['']],
|
||
['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-pied', 'aperçu : le pied d’une feuille imprimée', ['']],
|
||
['data-place-fixe', 'événement : la place fixe du cadre de mode', ['']],
|
||
['data-place-vide', 'aperçu : une place vide de la feuille par table', ['']],
|
||
['data-plan', 'plan : le <svg> du plan', ['']],
|
||
['data-poignee', 'plan : la poignée d’une table', null],
|
||
['data-proposition', 'propositions : une ligne, par son identifiant', null],
|
||
['data-question', 'une question posée : dossier de travail ou durée longue', 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-remede', 'diagnostic : un remède', ['']],
|
||
['data-reserve', 'plan : la réserve d’un tour', null],
|
||
['data-retenu', 'propositions : la ligne du retenu', null],
|
||
['data-secours', 'récupération : une source de secours', null],
|
||
['data-section', 'une section de l’événement', ['badges', 'diagnostic', 'generation', 'import', 'participants', 'plan', 'propositions', 'tables']],
|
||
['data-separateur', 'import : le séparateur nommé', ['']],
|
||
['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-source', 'plan : le placement montré, dans la barre de vue', ['']],
|
||
['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-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],
|
||
];
|
||
|
||
// 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]) }),
|
||
]),
|
||
),
|
||
);
|