Projet

Général

Profil

Development #15532

popup avec les infos de la demande sur clic d'une point sur une carte des demandes géolocalisées

Ajouté par Serghei Mihai il y a environ 7 ans. Mis à jour il y a presque 7 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Les clics sur les epingles ouvriraient des popups dans lesquelles on affiche les mêmes champs que dans le parametrage des colonnes (à voir).
Les epingles pourraient avoir les couleurs des statuts afin que les agents puissent distinguer les zones ou ils doivent agir.
Le numéro de la demande serait un lien vers le traitement de la demande.


Fichiers

0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (4,61 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 11 avril 2017 17:31
signalements_popups.png (1,2 Mo) signalements_popups.png Serghei Mihai, 11 avril 2017 17:31
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (6,62 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 12 avril 2017 15:42
public-map-1492004611659.png (1,53 Mo) public-map-1492004611659.png Serghei Mihai, 12 avril 2017 15:44
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (11 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 13 avril 2017 17:38
Screenshot_2017-04-13_17-42-10.png (584 ko) Screenshot_2017-04-13_17-42-10.png Serghei Mihai, 13 avril 2017 17:42
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (11,3 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 13 avril 2017 19:10
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (10,4 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 14 avril 2017 10:08
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (12,2 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 14 avril 2017 14:51
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (12,2 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 14 avril 2017 15:59
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (12,3 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 14 avril 2017 16:19
0001-backoffice-display-form-s-selected-fields-on-maps-15.patch (12 ko) 0001-backoffice-display-form-s-selected-fields-on-maps-15.patch Serghei Mihai, 14 avril 2017 17:09

Demandes liées

Lié à w.c.s. - Development #15533: Sur le rendu carte des demandes géolocalisées attribuer aux epingles les couleurs des status Fermé21 mars 2017

Actions
Lié à w.c.s. - Development #15842: factorisation FakeFieldFermé11 avril 2017

Actions

Révisions associées

Révision 6965577d (diff)
Ajouté par Serghei Mihai il y a environ 7 ans

backoffice: display form's selected fields on maps (#15532)

Révision 8304a4d9 (diff)
Ajouté par Serghei Mihai il y a environ 7 ans

tests: update form fields localy for geojson tests (#15532)

Historique

#2

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

Attention à ne pas trop en faire par ticket; popup et couleur des épingles, ça devrait être deux sujets différents.

#3

Mis à jour par Serghei Mihai il y a environ 7 ans

Ok.
Dans ce ticket limitons nous à la popup.

#4

Mis à jour par Serghei Mihai il y a environ 7 ans

Premiere version de patch avec le résultat en capture.
Je rajoute des tests.

#5

Mis à jour par Serghei Mihai il y a environ 7 ans

  • Statut changé de Nouveau à En cours
#6

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

  • Description mis à jour (diff)
#7

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

  • Lié à Development #15533: Sur le rendu carte des demandes géolocalisées attribuer aux epingles les couleurs des status ajouté
#8

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

Quid de la carte globale ?

Il était aussi question de pouvoir cliquer pour aller sur la demande. (« Le numéro de la demande serait un lien vers le traitement de la demande »).

Attention à ne pas afficher n'importe quoi, formdata.get_field_value(field.label) sur un fichier ça va te donner un <PicklableUpload> qui ne va pas vraiment vouloir être sérialisé. Pour avoir de l'HTML affichable il y a get_view_value() (et get_view_short_value) (à noter que ça demande une substitution particulière pour les champs de type fichier). Ça évitera aussi l'injection HTML actuellement possible.

Dans la série de champs affichés il y a des "FakeField", ces champs sont toujours repris à null et du coup jamais affichés; ça demande sans doute un peu de refactoring dans w.c.s., j'ai créé #15842.

Comme ça devient une donnée de paramétage de l'affichage de la carte, la zone "Paramétrage des colonnes" présente dans la barre latérale du listing, elle devrait se trouver aussi sur la vue carte (avec un autre nom, sans doute). Particulièrement important parce qu'actuellement, sur une modification de filtre, les champs seront réinitialisés.

(styler la croix de fermeture pour a minima dégager la bordure de soulignement)

#9

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

#10

Mis à jour par Serghei Mihai il y a environ 7 ans

Pour la carte globale je garde le clic sur le marker qui envoie vers la demande.

Sur la carte d'un formulaire je renomme le bouton en "Markers Settings" (nom trouvé en concertation avec Brice), je suis preneur d'un autre.
Patch dependant du #15842 pour la récuperation des valeurs des champs.

#11

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

Pour la carte globale je garde le clic sur le marker qui envoie vers la demande.

C'est dommage d'avoir un comportement différent; j'aurais plutôt quand même vu une popup avec dedans le nom du formdef, le numéro du formdata, le statut.

 popup += '<p>' + value[0] + '<strong>' + value[1] + '</strong></p>'

Au niveau de l'HTML de la popup, ça serait bien de pouvoir viser le libellé du champ (perso ça me serait allé de mettre les deux dans des span, plutôt qu'imposer un strong ici).

-        $(document).trigger('backoffice-filter-change', $('form#listing-settings').serialize());
+        var params = window.location.href.slice(window.location.href.indexOf('?') + 1);
+        $(document).trigger('backoffice-filter-change',  $('form#listing-settings').serialize());

Ce bout ne me semble pas des plus pertinents.

Malgré #15842 ça ne marche toujours pas du tout avec les champs de type fichier (par exemple). (astuce pour s'en rendre compte : tester); dans l'ordre :

  • parce que sans le max_length la valeur ne sera pas une chaine,
  • parce qu'ensuite encore ça sera un htmltext, pas sérialisable en json.
  • parce que derrière, comme je le notais, il reste que "ça demande une substitution particulière pour les champs de type fichier"
  • parce qu'au final, à côté des champs de type fichier, ça laisse l'injection HTML possible pour les autres. (tester avec une chaine contenant <i>HELLO</i> par exemple)

Sur le rendu, au final, afficher juste le numéro comme étant un lien c'est pas terrible je trouve, mettre en bas de popup un lien "ouvrir" ?

#12

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

+ Lors de l'autorefresh la popup ouverte ne l'est plus; désactiver l'autorefresh quand une popup est ouverte ?

#13

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

  • Sujet changé de amélioration du rendu sur une carte des demandes géolocalisées à popup avec les infos de la demande sur clic d'une point sur une carte des demandes géolocalisées
#14

Mis à jour par Serghei Mihai il y a environ 7 ans

Url de téléchargement des fichiers envoyée dans un paramètre de la réponse json.

En bas de la popup il me parait plus cohérent de mettre "Voir".

Autorefresh desactivé quand la popup ouverte.

#15

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

Url de téléchargement des fichiers envoyée dans un paramètre de la réponse json.

Il y a encore incompréhension, ce qu'il faut, c'est l'équivalent de :

                r += field_value.replace(str('[download]'), str('%sdownload' % link))  # de forms/backoffice.py
ou
                            elem = elem.replace('[download]', filled.get_url(backoffice=True))  # de backoffice/management.py
            limit=None, order_by=None, columns_settings=True, columns_settings_label=None):

C'est dommage de se trouver ainsi avec columns_settings et columns_settings_label, plutôt garder uniquement ce dernier et signifier que None fait que le bouton n'est pas présent.

parce qu'au final, à côté des champs de type fichier, ça laisse l'injection HTML possible pour les autres. (tester avec une chaine contenant <i>HELLO</i> par exemple)

Cette injection HTML est toujours possible.

perso ça me serait allé de mettre les deux dans des span, plutôt qu'imposer un strong ici

Bien sûr des <span> avec des classes, pour pouvoir les différencier; pareil pour la vue globale, ok pour des <p> mais faut leur mettre une classe.

+               } else {
+                   var popup = '<p>' + feature.properties.name + '</p>';
+                   popup += '<p>' + feature.properties.status_name + '</p>';
+               }
+                 popup += '<p><a href="' + feature.properties.url + '">' + feature.properties.view_label + '</span></p>';
+                 layer.bindPopup(popup);
              },

Indentation ratée.

#17

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

Autorefresh desactivé quand la popup ouverte.

Les événements dans tous les sens ça n'est pas nécessairement facile à suivre, ici j'imaginais simplement que dans qommon.map.js, à la réception de l'événement backoffice-filter-change, on regarde si c'est du rafraichissment automatique, et si c'est le cas et qu'il y a une popup ouverte, on zappe. Pas du tout jouer avec popupopen/popupclose, simplement si $('.leaflet-popup').length, on zappe.

Bien sûr des <span> avec des classes, pour pouvoir les différencier; pareil pour la vue globale, ok pour des <p> mais faut leur mettre une classe.

Ok mais ce n'était pas gratuit, c'étati pour éviter des sélecteurs comme :

div.leaflet-popup-content p span:nth-child(2) {
div.leaflet-popup-content p:last-child {

qui sont bien trop fragiles.

                if field.type == 'file':
                    value = field.get_view_value(value)
                    value = value.replace('[download]', formdata_backoffice_url)

Non et toujours non, le travail de refactorisation fait, il doit permettre d'éviter de traiter différement les champs.

→ ça doit pouvoir ressembler à ceci :

             for field in fields:
-                value = formdata.get_field_view_value(field)
-                if field.type == 'file':
-                    value = field.get_view_value(value)
-                    value = value.replace('[download]', formdata_backoffice_url)
-                else:
-                    value = htmlescape(value)
-                display_fields.append((field.label, str(value)))
+                value = formdata.get_field_view_value(field, max_length=60)
+                value = value.replace('[download]', formdata_backoffice_url)
+                display_fields.append((field.label, str(htmlescape(value))))
                        columns_settings_label= _('Columns Settings'))

Espace qui n'a rien à faire là.

Aussi, ça n'a pas trop de sens d'inclure les champs de type "carte" dans les champs qu'on peut afficher, "if field.type == 'map': continue" dans la boucle plus haut ça le fait, ne pas permettre de le sélectionner comme champ dans le paramétrage, uniquement pour la vue carte, c'est peut-être galère, on pourrait peut-être juste se dire que les cartes n'ont rien à faire dans les listings, jamais (sauf qu'alors on pourrait les perdre pour la sortie csv aussi). (bref sans doute compliqué de faire plus fin que juste sauter le champ).

#19

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

                 });
               } else {
                   var popup = '<p class="popup_field">' + feature.properties.name + '</p>';

Je sais qu'on n'a pas de bonne règle uniformément appliquée concernant l'indentation du js, mais a minima, à deux lignes d'écart, ne pas utiliser deux espace d'un côté et quatre de l'autre.

Moins grave que sur des données de l'usager mais quand même, du markup dans le libellé d'un champ ne se trouve pas encodé. (créer un libellé <font color="red">plop</font> pour le constater)

                if field.type == 'map':
                    continue

C'est dommage de ne pas avoir de test pour passer sur ce qui est presque la seule condition du patch.

#21

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

On approche; un dernier truc d'uniformité par rapport au reste, on a majoritairement tendance à utiliser des tirets dans les classes CSS.

#22

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

Et à nouveau, dans la carte globale, avoir des classes permettant de différencier le titre du statut.

#24

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

Le markup dans un nom de formulaire n'est pas encodé; et l'idée étant apparemment que c'est mon job de les lister tous, le markup dans les noms de statut non plus. (sur la carte globale)

#26

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

        $(document).trigger('backoffice-filter-change', $('form#listing-settings').serialize());
        $(document).trigger('backoffice-filter-change',  $('form#listing-settings').serialize());

Espace gratuit.

#28

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

                   if (field[1]) {
                     popup += '<p class="popup-field"><span class="field-label">' + field[0] + '</span>';
                     popup += '<span class="field-value">' + field[1] + '</span></p>';
                   }

Dernier truc repéré j'aurais préféré la condition gérée au niveau du python, ce qui permet des tests; mais oublions ce dernier détail; ack.

#29

Mis à jour par Serghei Mihai il y a environ 7 ans

  • Statut changé de En cours à Résolu (à déployer)

Je fais dans un autre ticket.

commit 6965577da8f27fb32c8f0f41da03d31ba5098a49
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Tue Apr 11 17:28:27 2017 +0200

    backoffice: display form's selected fields on maps (#15532)

#30

Mis à jour par Serghei Mihai il y a presque 7 ans

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

Formats disponibles : Atom PDF