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

  1. La fonction PHP saisies_afficher_si_js() renverrait plutôt une expression js de type afficher_si(<paramètres>) ou encore afficher_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().
  2. 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