Afficher_si côté JS: optimiser encore un peu les choses
Tentative de synthèse suite discussion IRC avec @tcharlss et @rastapopoulos.
Résumé
Il faudrait modifier la manière dont les afficher_si sont gérés côté JS histoire de pouvoir trouver automatiquement la valeur des champs à comparer.
Limite du système actuel
Avec le système actuel, si on crée un nouvel saisie qui ne produit pas un bete input html, il faut nécessairement déclarer "à la main" le type d'input, via un pipeline, car la détermination du test JS à effectuer se fait en PHP, dans la fonction saisies_afficher_si_js()
. Cette fonction renvoie un test js qui est stocké dans data-afficher-si. Ce test JS est ensuite evaluer avec eval()
en JS.
Le pipeline en question est saisies_afficher_si_js_type
.
https://git.spip.net/spip-contrib-extensions/agenda/pulls/26/files
On a également besoin du pipeline saisies_afficher_si_js_saisies_form
pour les pseudos-saisies comme @evenement_xxx_liste_attente@
(pseudo saisie : saisie qui n'est pas décrite dans le formulaire, mais qui est "intégré" dans une saisie standard, généralement variante en JS, et qui est dynamique).
Proposition
- La fonction PHP
saisies_afficher_si_js()
renverrait plutôt une expression js de typeafficher_si(<paramètres>)
ou encoreafficher_si(<paramètres tests 1>) || afficher_si(<paramètres tests 2>)
dans le cas des tests composés. a. La liste des paramètres de cette fonction dépend de la syntaxe officielle des tests https://contrib.spip.net/Affichage-conditionnel-de-saisie-syntaxe-des-tests b. Il est assez facile de trouver ces paramètres, vu que c'est plus ou moins ce que renvoie saisies_parser_condition_afficher_si(). - La fonction JS afficher_si(paramètres) a. Renvoi un booléen b. S'appuie sur la fonction jQuery https://api.jquery.com/serializearray/ c. Repère les saisies à partir du data-id plutôt que du name directement pour répondre à #45 (closed)
Limites de la proposition
Je vois pour l'heure 2 limites, mais elles sont mineures :
- serializeArray() ne gère pas les input de type file, mais bon ca à la limite on peut sans doute trouver un code dérogatoire
- le pipeline
saisies_afficher_si_js_saisies_form
sert aussi dans FORMIDABLE pour permettre d'afficher les pseudo saisies dans l'aide memoire depuis formidable@dd673b6b
cf capture d'écran