Corrige la comparaison booléenne : "Oui"/"Non" n'était pas reconnu comme valeur vraie/fausse
Bug remonté avec une "Mail card" (icône enveloppe fermée si is_opened
est à "Non", ouverte si "Oui") : les DEUX variantes s'affichaient (ou
aucune), selon la ligne.
Cause : _compare() (filter_repeater_rows.py, utilisé par la condition de
visibilité, le Répéteur et Donnée liée) ne reconnaissait "1"/"true"/"vrai"
comme valeur vraie pour un champ booléen — jamais "oui", pourtant le SEUL
vocabulaire que l'app affiche elle-même pour ce type de champ partout
ailleurs (voir data_list.html : "Oui" si vrai sinon "Non"). Une valeur de
comparaison fixe tapée "Oui" retombait donc silencieusement à "faux",
et comme l'opérateur et le champ étaient par ailleurs corrects, ça
donnait l'impression que la condition "ne voyait" rien : sur la ligne où
is_opened=faux, les DEUX cartes ("égal à Oui" et "égal à Non", toutes
deux évaluées comme "égal à faux") s'affichaient ensemble ; sur la ligne
où is_opened=vrai, aucune des deux.
Fix : "oui" ajouté à l'ensemble des valeurs reconnues comme vraies,
côté Python (_compare) ET côté JS (compareValues() dans play.html, qui
doit rester alignée — utilisée par les nœuds Condition de la Logique de
la scène), cette dernière au passage rendue insensible à la casse comme
son équivalent Python (elle ne l'était pas du tout).
Ajoute un test de régression dédié à ce cas précis.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
a28cc5881e
commit
baa3da1035
+7
-1
@@ -557,7 +557,13 @@
|
||||
function compareValues(actual, operator, expected, fieldType) {
|
||||
if (fieldType === 'booleen') {
|
||||
const a = actual ? 1 : 0;
|
||||
const e = (expected === '1' || expected === 'true' || expected === true) ? 1 : 0;
|
||||
// "oui"/"non" (voir data_list.html) est le vocabulaire affiché
|
||||
// partout ailleurs pour un champ booléen — une valeur de comparaison
|
||||
// fixe tapée "Oui" doit donc être reconnue vraie ici aussi, pas
|
||||
// seulement "1"/"true" (et insensible à la casse, aligné avec
|
||||
// _compare() côté Python, voir filter_repeater_rows.py).
|
||||
const expectedStr = String(expected).trim().toLowerCase();
|
||||
const e = (expected === true || ['1', 'true', 'vrai', 'oui'].includes(expectedStr)) ? 1 : 0;
|
||||
return operator === 'different' ? a !== e : a === e;
|
||||
}
|
||||
const an = parseFloat(actual), en = parseFloat(expected);
|
||||
|
||||
Reference in New Issue
Block a user