Projet

Général

Profil

Development #436

Affichage conditionnel sur une même page

Ajouté par Benjamin Dauvergne il y a presque 13 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
16 mai 2011
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Je rebondis sur la demande #435, car la demande me semble trop spécifique si on suit l'implémentation voulu par victor pour un coût en développement qui serait le même que quelque chose de plus générique et que victor évoques d'ailleurs, i.e. avoir un affichage/masquage conditionnel en temps réel sur la même page de n'importe quel champ, et donc forcément en javascript.

Je verrai bien un système ultra simple (on peut commencer par /([^=]*)==([^=]*)/ ) pour commencer du même genre que ce qu'on fait actuellement ("f15==oui") qui serait parsé et générerait un code javscript contrôlant l'affichage de n'importe quel champ d'une page..

L'important pour moi n'étant pas la complexité du langage proposé (juste l'égalité c'est parfait) mais l'aide à la rédaction:
  • qu'on écrive 1, oui, ==true, si le champ est booléan, ça marche,
  • on affiche en commentaire la liste des champs disponibles,
  • si la valeur proposée ne peut matcher avec aucune valeur du champ, on affiche un message d'erreur.

L'utilisation d'une syntaxe python ("f15 est vrai" ça le fait aussi) n'ayant pas non plus une grande importance. Encore une fois l'important étant qu'il soit difficile de se tirer une balle dans le pied avec ça, i.e une condition invalide (champ ou valeur qui a disparu) est juste ignorée par exemple, mais ne bloque pas l'utilisation du formulaire, elle la rend juste moins intuitive.


Fichiers


Demandes liées

Lié à w.c.s. - Development #22738: Visibilité dynamique de champs dans une pageRejeté22 mars 2018

Actions
Lié à w.c.s. - Development #19752: Possibilité d'utiliser des champs (et non plus des pages) conditionnelsFermé29 octobre 2017

Actions
Lié à w.c.s. - Development #22106: Création paresseuse des variables de substitutionFermé25 février 2018

Actions
Lié à Au quotidien - Development #25541: ne pas générer le contenu potentiel d'une barre latérale lors d'une requête jsonFermé31 juillet 2018

Actions
Lié à w.c.s. - Development #25601: ne plus marquer les conditions django comme expérimentalesFermé08 août 2018

Actions

Révisions associées

Révision 1e852f8d (diff)
Ajouté par Frédéric Péters il y a plus de 5 ans

add live field conditions (#436)

Historique

#1

Mis à jour par Thomas Noël il y a plus de 12 ans

Ca serait sympa, mais je vois déjà un problème : celui des champs obligatoires mais conditionnels (et ce cas viendra très vite)...

Pour arriver à quelque chose qui marche, il nous faudrait une condition compatible jajascript (pour l'affichage) et Python (pour la vérification du POST)... Je vois pas trop comment, sauf à prendre un langage pivot, mais je donne ma langue au caht (de Victor).

#2

Mis à jour par Victor Claudet il y a plus de 11 ans

  • Version cible mis à Au-quotidien 2014.5
#3

Mis à jour par Thomas Noël il y a environ 10 ans

  • Version cible Au-quotidien 2014.5 supprimé
#4

Mis à jour par Frédéric Péters il y a presque 9 ans

  • Projet changé de Au quotidien à w.c.s.
#5

Mis à jour par Frédéric Péters il y a plus de 5 ans

#6

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Lié à Development #19752: Possibilité d'utiliser des champs (et non plus des pages) conditionnels ajouté
#7

Mis à jour par Frédéric Péters il y a plus de 5 ans

#9

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Lié à Development #25541: ne pas générer le contenu potentiel d'une barre latérale lors d'une requête json ajouté
#10

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Lié à Development #25601: ne plus marquer les conditions django comme expérimentales ajouté
#11

Mis à jour par Frédéric Péters il y a plus de 5 ans

C'est maintenant disponible dans la branche https://git.entrouvert.org/wcs.git/log/?h=wip/22106-lazy-variables

#12

Mis à jour par Thomas Noël il y a plus de 5 ans

Sur cette partie :

            for field in submitted_fields:
                if not field.is_visible(form_data, self.formdef):
                    del form._names['f%s' % field.id]

on peut avoir un KeyError sur le dev si le "live" a été lent à répondre, que le formulaire n'avait pas encore le bon affichage des champs visibles/invisibles lorsqu'on a cliqué sur le submit (j'ai ajouté un "time.sleep(2)" au début de live pour reproduire facilement).

Donc, plutôt,

for field in submitted_fields:
    if not field.is_visible(form_data, self.formdef) and ('f%s' % field.id in form._names):
        del form._names['f%s' % field.id]

A noter que si le live est lent à répondre, qu'un champ n'a pas eu le temps de s'afficher mais qu'il avait un pré-remplissage, c'est ce dernier qui est pris en compte, ben oui c'est comme ça voilà (me semble moins simple à corriger, et pas très grave).

Discuté sur jabber : si une condition est un webservice.foo ou data_source.bar et que ces derniers font référence à des form_var_xxx alors ça ne passe pas, car il n'y a pas de form_var_xxx détecté. On peut vivre sans pour commencer.

Mini truc sur la forme, cette partie :

        for field in displayed_fields:
            if field.varname not in live_condition_fields:
                continue
            form.get_widget('f%s' % field.id).live_condition_source = True

pourrait gagner quelques octets ainsi :
        for field in displayed_fields:
            if field.varname in live_condition_fields:
                form.get_widget('f%s' % field.id).live_condition_source = True

(voir même form.get_widget('f%s' % field.id).live_condition_source = field.varname in live_condition_fields mais bon, doucement)

#13

Mis à jour par Frédéric Péters il y a plus de 5 ans

yes; modifs tapées dans la branche.

#14

Mis à jour par Thomas Noël il y a plus de 5 ans

Note: dans mes tests, pas de condition possible dépendante de la valeur d'un champ de type fichier (a priori parce que le widget est vraiment spécifique).

#15

Mis à jour par Frédéric Péters il y a plus de 5 ans

Note: dans mes tests, pas de condition possible dépendante de la valeur d'un champ de type fichier (a priori parce que le widget est vraiment spécifique).

Branche à jour pour gérer les champs fichiers.

#16

Mis à jour par Thomas Noël il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée
  • Priorité changé de Bas à Normal

Ack

#17

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 1e852f8d881aa852b5bb30300833d49ef1091baa
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Jul 28 20:55:26 2018 +0200

    add live field conditions (#436)
#18

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF