Projet

Général

Profil

0001-maps-add-handling-of-marker-behaviour-on-click-21034.patch

Josué Kouka, 08 juin 2018 15:10

Télécharger (6,22 ko)

Voir les différences:

Subject: [PATCH] maps: add handling of marker behaviour on click (#21034)

 .../migrations/0006_auto_20180215_1020.py     | 19 ++++++++++++++
 combo/apps/maps/models.py                     | 10 +++++++-
 combo/apps/maps/static/js/combo.map.js        | 25 +++++++++++++++++++
 combo/apps/maps/templates/maps/map_cell.html  |  1 +
 4 files changed, 54 insertions(+), 1 deletion(-)
 create mode 100644 combo/apps/maps/migrations/0006_auto_20180215_1020.py
combo/apps/maps/migrations/0006_auto_20180215_1020.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import migrations, models
5

  
6

  
7
class Migration(migrations.Migration):
8

  
9
    dependencies = [
10
        ('maps', '0005_auto_20180212_1742'),
11
    ]
12

  
13
    operations = [
14
        migrations.AddField(
15
            model_name='map',
16
            name='marker_onclick_behaviour',
17
            field=models.CharField(default=b'none', max_length=32, verbose_name='Marker behaviour on click', choices=[(b'none', 'Nothing'), (b'display_data', 'Display data in popup')]),
18
        ),
19
    ]
combo/apps/maps/models.py
67 67
    ('wheelchair', _('Wheelchair')),
68 68
]
69 69

  
70
MARKER_ONCLIK_BEHAVIOUR = [
71
    ('none', _('Nothing')),
72
    ('display_data', _('Display data in popup')),
73
]
74

  
70 75
ZOOM_LEVELS = [ ('0', _('Whole world')),
71 76
                ('9', _('Wide area')),
72 77
                ('11', _('Area')),
......
201 206
    max_zoom = models.CharField(_('Maximal zoom level'), max_length=2,
202 207
                                choices=ZOOM_LEVELS, default=19)
203 208
    group_markers = models.BooleanField(_('Group markers in clusters'), default=False)
209
    marker_onclick_behaviour = models.CharField(_('Marker behaviour on click'), max_length=32,
210
                                                default='none', choices=MARKER_ONCLIK_BEHAVIOUR)
204 211
    layers = models.ManyToManyField(MapLayer, verbose_name=_('Layers'), blank=True)
205 212

  
206 213
    template_name = 'maps/map_cell.html'
......
218 225

  
219 226
    def get_default_form_class(self):
220 227
        fields = ('title', 'initial_state', 'initial_zoom', 'min_zoom',
221
                  'max_zoom', 'group_markers', 'layers')
228
                  'max_zoom', 'group_markers', 'marker_onclick_behaviour', 'layers')
222 229
        widgets = {'layers': forms.widgets.CheckboxSelectMultiple}
223 230
        return forms.models.modelform_factory(self.__class__, fields=fields,
224 231
                                             widgets=widgets)
......
248 255
        ctx['map_attribution'] = settings.COMBO_MAP_ATTRIBUTION
249 256
        ctx['max_bounds'] = settings.COMBO_MAP_MAX_BOUNDS
250 257
        ctx['group_markers'] = self.group_markers
258
        ctx['marker_onclick_behaviour'] = self.marker_onclick_behaviour
251 259
        return ctx
combo/apps/maps/static/js/combo.map.js
16 16
              var geo_json = L.geoJson(data, {
17 17
                  onEachFeature: function(feature, layer) {
18 18
                      $(cell).trigger('combo:map-feature-prepare', {'feature': feature, 'layer': layer});
19
                      var marker_onclick_behaviour = $map_widget.data('marker-onclick-behaviour');
20
                      if (marker_onclick_behaviour === 'display_data') {
21
                            var popup = '';
22
                            $popup_field = $('<div><p class="popup-field"><span class="field-value"></span></p></div>');
23
                            if (feature.properties.display_fields) {
24
                                $.each(feature.properties.display_fields, function(idx, field) {
25
                                    if (field.html_value){
26
                                        $popup_field.find('.field-value').html(field.html_value);
27
                                    } else {
28
                                        $popup_field.find('.field-value').text(field.value);
29
                                    }
30
                                    popup += $popup_field.html();
31
                                });
32
                            } else {
33
                                var properties = feature.properties;
34
                                $.each(Object.keys(properties).sort(), function(idx, field) {
35
                                    // exclude object type properties
36
                                    if (typeof(properties[field]) !== 'object') {
37
                                        $popup_field.find('.field-value').text(properties[field]);
38
                                        popup += $popup_field.html()
39
                                    }
40
                                });
41
                            }
42
                            layer.bindPopup(popup);
43
                      }
19 44
                  },
20 45
                  pointToLayer: function (feature, latlng) {
21 46
                      var markerStyles = "background-color: " + feature.properties.layer.colour + ";";
combo/apps/maps/templates/maps/map_cell.html
7 7
        data-init-lng="{{ init_lng }}" data-geojson-url="{{ geojson_url }}"
8 8
        data-tile-urltemplate="{{ tile_urltemplate}}" data-map-attribution="{{ map_attribution}}"
9 9
        {% if group_markers %}data-group-markers="1"{% endif %}
10
        data-marker-onclick-behaviour="{{ cell.marker_onclick_behaviour }}"
10 11
        {% if max_bounds.corner1.lat %}
11 12
        data-max-bounds-lat1="{{ max_bounds.corner1.lat }}"
12 13
        data-max-bounds-lng1="{{ max_bounds.corner1.lng }}"
13
-