Browse Source

Affichage des étapes : si on sait qu'une étape future n'est conditionnée

par AUCUN champ de l'étape courante, alors on effectue directement le
tests d'afficher_si côté PHP, et, selon le résultat, on indique ou pas
l'étape dans la liste.
pull/112/head
Maïeul 1 year ago
parent
commit
79ae906199
  1. 12
      formulaires/inc-saisies-cvt-etapes-defaut.html
  2. 24
      inc/saisies_afficher_si_js.php

12
formulaires/inc-saisies-cvt-etapes-defaut.html

@ -3,9 +3,17 @@
<nav class="formulaire_spip__etapes etapes" aria-label="<:saisies:etapes_formulaire:>">
<ol class="etapes__items">
<BOUCLE_etapes(DATA){source table, #ENV{etapes}}>
#SET{etape,#CLE|replace{etape_,''}}
#SET{afficher_si,#VALEUR{options/afficher_si}|saisies_afficher_si_js{#ENV{etapes}}}
#SET{afficher,non}
[(#VALEUR|in_any{#GET{afficher_si_masquees}}|non|ou{#ENV{_etape}|<{#GET{etape}}})
#SET{etape,#CLE|replace{etape_,''}}
<li [data-afficher_si="(#VALEUR{options/afficher_si}|saisies_afficher_si_js{#ENV{etapes}})"] class="etapes__item"[(#ENV{_etape}|=={#GET{etape}}|oui) aria-current="step"]>
#SET{afficher,oui}
[(#GET{afficher_si}|saisies_afficher_si_js_est_statique|oui)
#SET{afficher,#GET{afficher_si}|saisies_evaluer_afficher_si}
]
]
[(#GET{afficher}|oui)
<li [data-afficher_si="(#GET{afficher_si})"] class="etapes__item"[(#ENV{_etape}|=={#GET{etape}}|oui) aria-current="step"]>
[(#ENV{_etape}|>{#GET{etape}}|oui)<button type="submit" class="submit" name="aller_a_etape" value="#GET{etape}">#VALEUR{options/label}</button>]
[(#ENV{_etape}|=={#GET{etape}}|oui)<em>#VALEUR{options/label}</em>]
[(#ENV{_etape}|<{#GET{etape}}|oui)<span>#VALEUR{options/label}</span>]

24
inc/saisies_afficher_si_js.php

@ -85,3 +85,27 @@ function saisies_afficher_si_js($condition, $saisies_par_etapes = array()) {
return str_replace('"', "&quot;", $condition);
}
/**
* Vérifier qu'une test JS d'afficher si est statique, c'est à dire qu'il ne dépend d'aucune saisie de l'étape en court.
*
* Exemple
* `false && false` => statique, la fonction renvoie true
* `true && afficher_si(...)` => pas statique, la fonction renvoie
* @param string $afficher_si
* @return bool
**/
function saisies_afficher_si_js_est_statique($test) {
$test = str_replace('false', '', $test);
$test = str_replace('true', '', $test);
$test = str_replace('&&', '', $test);
$test = str_replace('||', '', $test);
$test = str_replace('(', '', $test);
$test = str_replace(')', '', $test);
$test = str_replace('!', '', $test);
$test = trim($test);
if ($test) {//S'il reste encore quelque chose, c'est qu'on a des choses variables
return false;
} else {
return true;
}
}

Loading…
Cancel
Save