Changeset 115260 in spip-zone


Ignore:
Timestamp:
May 6, 2019, 2:20:15 PM (2 weeks ago)
Author:
tcharlss@…
Message:

Refacto de la saisie mot pour y voir plus clair et la rendre plus maintenable. On ne change pas le comportement, qui est le suivant : par défaut, la saisie produit un select avec une seule valeur possible, *sauf* si on passe un id_groupe en paramètre et que sa configuration autorise les utilisateurs à choisir plusieurs mots, dans ce cas on a des checkbox. On garde la main tout de même sur ces 2 options avec les paramètres 'multiple' et 'forcer_select'. Inutile de réécrire complètement les saisies select et checkbox dans cette saisie : on ne fait que préparer les données, l'affichage est relégué aux saisies selection/checkbox avec un inclure. Enfin, on étend un peu la saisie checkbox afin de pouvoir regrouper les valeurs, un peu sur le même modèle que la saisie selection. On peut donc passer d'une saisie selection à checkbox avec les mêmes valeurs dans le paramètre 'data'. Un dernier détail pour la saisie groupe_mot : quand on ne choisit aucun groupe, on veut une valeur vide, pas '0' !

Location:
_plugins_/saisies/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/saisies/trunk/paquet.xml

    r115235 r115260  
    22        prefix="saisies"
    33        categorie="outil"
    4         version="3.19.1"
     4        version="3.19.2"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
  • _plugins_/saisies/trunk/saisies/checkbox.html

    r112400 r115260  
    5353
    5454<BOUCLE_checkbox(POUR){tableau #GET{data}}>
     55[(#REM) Soit il y a des sous-groupes ]
     56<BOUCLE_groupes(CONDITION) {si #VALEUR|is_array}>
     57<div class="choix-groupe">
     58        <em class="label">#CLE</em>
     59        <BOUCLE_checkbox_groupes(DATA) {source table, #VALEUR}>
     60        <div class="#ENV{choix,choix}[ (#ENV{choix,choix})_#CLE][ (#ENV{class})]">[(#SET{id,champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_[(#COMPTEUR_BOUCLE|concat{'-',#CLE}|md5)]})]
     61                <input type="checkbox" name="#ENV{nom}[]" class="checkbox checkbox_#ENV{nom}" id="#GET{id}"[ (#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)checked="checked"] value="#CLE"[(#CLE|in_array{#GET{disabled}}|oui) disabled="disabled"][ aria-describedby="(#ENV{describedby})"][ (#ENV*{attributs})] />
     62                [(#ENV{disable_avec_post}|et{#ENV{disable_avec_post}|!={non}}|oui)
     63                        [(#CLE|in_array{#GET{defaut}}|oui)
     64                        <input type="hidden" name="#ENV{nom}\[\]" value="#CLE" />
     65                        ]
     66                ]
     67                <label for="#GET{id}"[(#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)class="on"][(#ENV{attribut_title}|oui) title="#CLE"]>#VALEUR</label>
     68        </div>
     69        </BOUCLE_checkbox_groupes>
     70</div>
     71</BOUCLE_groupes>
     72
     73[(#REM) Soit c'est un tableau simple ]
    5574<div class="#ENV{choix,choix}[ (#ENV{choix,choix})_#CLE][ (#ENV{class})]">[(#SET{id,champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_[(#COMPTEUR_BOUCLE|concat{'-',#CLE}|md5)]})]
    5675        <input type="checkbox" name="#ENV{nom}[]" class="checkbox checkbox_#ENV{nom}" id="#GET{id}"[ (#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)checked="checked"] value="#CLE"[(#CLE|in_array{#GET{disabled}}|oui) disabled="disabled"][ aria-describedby="(#ENV{describedby})"][ (#ENV*{attributs})] />
     
    6281        <label for="#GET{id}"[(#CLE|in_array{#ENV{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)class="on"][(#ENV{attribut_title}|oui) title="#CLE"]>#VALEUR</label>
    6382</div>
     83<//B_groupes>
    6484</BOUCLE_checkbox>
     85
    6586[(#ENV{choix_alternatif}|oui)
    6687<div class="[(#ENV{choix,choix}) ]choix_alternatif[(#ENV{choix}|oui)[ (#ENV{choix})_alternatif]][ (#ENV{class})]">
  • _plugins_/saisies/trunk/saisies/groupe_mots.html

    r86598 r115260  
    2323<select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple" size="#ENV{size,10}"][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
    2424        [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)
    25                 <option value="0">[(#ENV{option_intro})]</option>]
     25                <option value="">[(#ENV{option_intro})]</option>]
    2626        <BOUCLE_groupes(GROUPES_MOTS){id_groupe !IN #ENV{groupes_exclus,#ARRAY}}{par num titre, titre}{tables_liees==#VAL{'(^|,)'}|concat{#ENV{table_liaison,.*},'($|,)'}}{tout}>
    2727                [(#ENV{multiple}|oui)
  • _plugins_/saisies/trunk/saisies/mot.html

    r91420 r115260  
    11[(#REM)
    22
    3   Parametres :
    4   - class : classe(s) css ajoutes au select
    5   - multiple : si quelquechose est passe, le select est multiple, sinon, c'est un select simple (seulement si non multiple)
    6   - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
    7   - cacher_option_intro : pas de premier option vide  (defaut:"")
    8   - id_groupe : groupe des mots clés à afficher
     3        Produit soit un select, soit des checkbox.
     4
     5        Par défaut, c'est un select avec valeur unique.
     6        Si on donne un id_groupe configuré pour du multiple, alors c'est un checkbox.
     7
     8        On peut forcer la saisie select avec le paramètre forcer_select.
     9        On peut forcer unqiue/multiple avec le parametre multiple.
     10
     11        Parametres :
     12        - forcer_select : forcer l'utilisation d'un select
     13        - multiple : si quelquechose est passe, la saisie est multiple
     14        - id_groupe : groupe des mots clés à afficher
    915                Note : si ce groupe de mot est configuré pour avoir plusieurs
    1016                mots possibles, alors une liste de cases à cocher est
     
    1218                Utiliser `forcer_select=oui` pour éviter ce comportement
    1319                (par exemple en utilisation avec Chosen)
     20        - groupes_exclus : liste d'ids de groupe dont on ne veut pas les mots
     21  - class : classe(s) css ajoutes au select
     22  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
     23  - cacher_option_intro : pas de premier option vide  (defaut:"")
    1424  - defaut : valeur par defaut si pas présente dans l'environnement
    1525  - valeur_forcee : valeur utilisee meme si une valeur est dans l'environnement
    1626  - size : la taille du sélecteur (seulement si multiple)
    17   - groupes_exclus : liste d'ids de groupe dont on ne veut pas les mots
    18  
     27
    1928  Exemple d'appel :
    2029        [(#SAISIE{mot, en_region,
    2130                label=<:plugin:en_region:>})]
    2231]
    23 <BOUCLE_multiples(GROUPES_MOTS){id_groupe}{unseul!=oui}{si #ENV{forcer_select}|non}>
    24         [(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
    25         #SET{defaut, #ENV{defaut}|saisies_chaine2tableau}
    26         [(#REM) valeur doit être un tableau ! ]
    27         #SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
    28         [(#REM) valeur doit être un tableau ! ]
    29         #SET{valeur_forcee, #ENV{valeur_forcee}|saisies_valeur2tableau}
    30         <BOUCLE_checkmots(MOTS){par num titre, titre}{id_groupe}>
    31         <div class="choix choix_#ID_MOT[ (#ENV{class})]">[(#SET{id,champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]_[(#ID_MOT|concat{'-',#ENV{nom}}|md5)]})]
    32                 [(#SET{checked,[(#ID_MOT|in_array{#GET{valeur_forcee,#GET{valeur,#GET{defaut}}}}|oui)]})]
    33                 <input type="checkbox" name="#ENV{nom}[]" class="checkbox" id="#GET{id}"[ (#GET{checked})checked="checked"] value="#ID_MOT"[ (#ENV*{attributs})] />
    34                 <label for="#GET{id}"[(#GET{checked})class="on"]>#TITRE</label>
    35         </div>
    36         </BOUCLE_checkmots>
    37 </BOUCLE_multiples>
     32[(#REM)
     33        Si groupe précis demandé, on affiche les mots à plat
     34        Sinon, on regroupe par groupe de mots
     35]
     36#SET{data,#ARRAY}
     37<BOUCLE_data(MOTS)
     38        {id_groupe?}
     39        {!id_groupe IN #ENV{groupes_exclus}}
     40        {par id_groupe, num titre, titre}
     41>
     42[(#ENV{id_groupe}|intval|oui)
     43        #SET{data,#GET{data}|plus{#ARRAY{#ID_MOT,#TITRE}}}
     44][(#ENV{id_groupe}|intval|non)
     45        #SET{data_groupe,#GET{data/#TYPE}|sinon{#ARRAY}|plus{#ARRAY{#ID_MOT,#TITRE}}}
     46        #SET{data,#GET{data}|array_merge{#ARRAY{#TYPE,#GET{data_groupe}}}}
     47        ]
     48</BOUCLE_data>
    3849
    39 #SET{groupe,''}
    40 <select name="#ENV{nom}[(#ENV{multiple}|?{\[\]})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][(#ENV{multiple}|oui) multiple="multiple"[ size="(#ENV{size})"]][ disabled="(#ENV{disable})"][ (#ENV*{attributs})]>
    41 [(#ENV{cacher_option_intro}|ou{#ENV{multiple}}|non)
    42         <option value="">[(#ENV{option_intro})]</option>]
    43 <BOUCLE_mots(MOTS){par id_groupe, num titre, titre}{id_groupe ?}{!id_groupe IN #ENV{groupes_exclus}}>[(#ENV{id_groupe,''}|non|et{#GET{groupe}|=={#ID_GROUPE}|non}|oui)
    44         [(#GET{groupe}|intval|>{0}|oui)</optgroup>]
    45         [<optgroup label="(#TYPE|attribut_html)">][(#SET{groupe,#ID_GROUPE})]]
    46         [(#ENV{multiple}|non)<option value="#ID_MOT"[(#ID_MOT|=={#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut}}}}|oui)selected="selected"]>#TITRE</option>]
    47         [(#ENV{multiple}|oui)<option value="#ID_MOT"[(#ID_MOT|in_array{#ENV{valeur_forcee,#ENV{valeur,#ENV{defaut,#ARRAY}}}}|oui)selected="selected"]>#TITRE</option>]
    48 </BOUCLE_mots>
    49         [(#ENV{id_groupe,''}|non)
    50         </optgroup>]
    51 </select>
    52 <//B_multiples>
     50[(#REM)
     51        Valeurs multiples :
     52        - on prend le paramètre 'multiple' en priorité
     53        - sinon, vrai par défaut s'il y a un groupe d'indiqué et que sa conf est ok
     54]
     55#SET{multiple,#ENV{multiple}|is_null|non|?{
     56        #ENV{multiple},
     57        #ENV{id_groupe}|?{#INFO_UNSEUL{groupemots,#ENV{id_groupe}}|!={oui}}
     58}}
     59
     60[(#REM)
     61        Type de saisie :
     62        - select si valeur unique ou option 'forcer_select'
     63        - checkbox si multiple
     64]
     65#SET{saisie, #GET{multiple}|?{
     66                #ENV{forcer_select}|?{selection_multiple,checkbox},
     67                selection}
     68}
     69
     70[(#REM) Inclusion de la saisie choisie ]
     71<INCLURE{fond=saisies/#GET{saisie}, data=#GET{data}, env}>
  • _plugins_/saisies/trunk/saisies/selection_multiple.html

    r111248 r115260  
    44       
    55  Parametres :
    6   - data : tableau de donnees cle=>valeur
     6        - ** data : tableau de donnees
     7               liste simple : cle=>valeur
     8               liste avec groupes :  cle=> tableau (cle=>valeur)
    79  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
    810  - cacher_option_intro : pas de premier option vide  (defaut:"")
Note: See TracChangeset for help on using the changeset viewer.