Projet

Général

Profil

Development #31506

passer en template JsonpSingleSelectWidget

Ajouté par Frédéric Péters il y a environ 5 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
18 mars 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

En profitant de l'occasion pour nettoyer ce code plus avant, notamment déplacer vers un vrai fichier .js la gestion js de l'affaire.


Fichiers

Révisions associées

Révision 416f4c5b (diff)
Ajouté par Frédéric Péters il y a environ 5 ans

forms: rewrite jsonp select widget with separate js & template (#31506)

Historique

#1

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

C'est bien plus clean ainsi.

À noter pour les URL avec variables (URL jsonp pouvant contenir https://.../[var_whatever] avec cette dernière partie soit tirée d'un autre champ select2 de la page), que j'ai décidé de conserver la compatibilité même si en regardant sur 3M, je n'ai plus retrouvé de formulaire qui exploitait ça.

#2

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

Je relis.

#3

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de Solution proposée à Solution validée

J'ai du mal avec ce bout de code :

      url: function() {
        var url = $(elem).data('select2-url');
        url = url.replace(/\[var_.+?\]/g, function(match, g1, g2) {
          // compatibility: if there are [var_...] references in the URL
          // replace them by looking for other select fields on the same
          // page.
          var related_select = $('#' + match.slice(1, -1));
          var value_container_id = $(related_select).data('valuecontainerid');
          return $('#' + value_container_id).val() || '';
        });
        return url;
      }

On est d'accord que ça ne marche qu'avec des URLs ezt avec des symboles non résolus ? Parce que si url est un template, normalement il devrait être résolu par get_select2_url() appelé dans le template data-select2-url="{{widget.get_select2_url}}". Même si ça marche sans que je comprenne, ça mérite un commentaire

Idem pour ce bout de code :

      if ($(elem).parent().find('.select2-selection__rendered .select2-selection__clear').length) {
        text = text.slice(1);
      }

spécifique à la façon dont select2 représente le bouton pour effacer (et je me demande si il n'y a pas plus simple/propre, par exemple demander à select2 la sélection courante et obtenir son label).

Bon globalement c'est évidemment plus lisible qu'avant mais ce n'est pas très pédagogique comme code, les interactions entre l'input caché, le select et le reste de select2 me semble un peu opaque, ça mériterait plus d'explication et/ou réorganiser pour que ce soit évident.

#4

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

On est d'accord que ça ne marche qu'avec des URLs ezt avec des symboles non résolus ?

Oui, comme noté dans mon commentaire au-dessus c'est pour gérer le cas (que je ne retrouve plus à 3M) où il y a deux champs listes, commune puis voie, et voie c'est [passerelle_url]/.../[var_commune]/ (à noter aussi le [var_, pas [form_var_). C'est uniquement de la compatibilité avec un existant que je ne retrouve même plus.

spécifique à la façon dont select2 représente le bouton pour effacer (et je me demande si il n'y a pas plus simple/propre, par exemple demander à select2 la sélection courante et obtenir son label).

Je viens de vérifier, la documentation suggère désormais $('#mySelect2').find(':selected') et ça semble ok.

Bon globalement c'est évidemment plus lisible qu'avant mais ce n'est pas très pédagogique comme code, les interactions entre l'input caché, le select et le reste de select2 me semble un peu opaque, ça mériterait plus d'explication et/ou réorganiser pour que ce soit évident.

C'est plus large et ça touche à tout ce qui est jsonp, avec ces hacks mis en place pour conserver un libellé et pas seulement un identifiant, l'objectif général, dont ce ticket est une petite partie, est d'arrêter avec ça, de pouvoir combiner source JSON et UI select2; et éventuellement de pouvoir à un moment se défaire de tout ça.

En attendant j'ai quand même ajouté deux commentaires pour noter pourquoi on crée un input hidden supplémentaire et comment on pose l'état initial du select2.

(j'ai aussi corrigé une typo sur allowClear).

#5

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

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

(sur l'idée que ça avait été acké et que ça ajoute juste des commentaires).

commit 416f4c5b6b4aba47a7121ef2f884a7817ffde63f
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Mar 18 14:53:39 2019 +0100

    forms: rewrite jsonp select widget with separate js & template (#31506)
#6

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

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

Formats disponibles : Atom PDF