Projet

Général

Profil

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

Josué Kouka, 19 février 2018 11:05

Télécharger (5,82 ko)

Voir les différences:

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

 combo/apps/maps/migrations/0006_auto_20180215_1020.py | 19 +++++++++++++++++++
 combo/apps/maps/models.py                             | 10 +++++++++-
 combo/apps/maps/static/js/combo.map.js                | 18 ++++++++++++++++++
 combo/apps/maps/templates/maps/map_cell.html          |  1 +
 4 files changed, 47 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 clik', 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 clik'), 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'
......
217 224

  
218 225
    def get_default_form_class(self):
219 226
        fields = ('title', 'initial_state', 'initial_zoom', 'min_zoom',
220
                  'max_zoom', 'group_markers', 'layers')
227
                  'max_zoom', 'group_markers', 'marker_onclick_behaviour', 'layers')
221 228
        widgets = {'layers': forms.widgets.CheckboxSelectMultiple}
222 229
        return forms.models.modelform_factory(self.__class__, fields=fields,
223 230
                                             widgets=widgets)
......
247 254
        ctx['map_attribution'] = settings.COMBO_MAP_ATTRIBUTION
248 255
        ctx['max_bounds'] = settings.COMBO_MAP_MAX_BOUNDS
249 256
        ctx['group_markers'] = self.group_markers
257
        ctx['marker_onclick_behaviour'] = self.marker_onclick_behaviour
250 258
        return ctx
combo/apps/maps/static/js/combo.map.js
12 12
              var geo_json = L.geoJson(data, {
13 13
                  onEachFeature: function(feature, layer) {
14 14
                      $(cell).trigger('combo:map-feature-prepare', {'feature': feature, 'layer': layer});
15
                      var marker_onclick_behaviour = $map_widget.data('marker-onclick-behaviour');
16
                      if (marker_onclick_behaviour === 'display_data') {
17
                            var popup = '';
18
                            if (feature.properties.display_fields) {
19
                                $.each(feature.properties.display_fields, function(key, value) {
20
                                    popup += '<p class="popup-field"><span class="field-value">' + value[1] + '</span>';
21
                                });
22
                            } else {
23
                                var properties = feature.properties;
24
                                $.each(Object.keys(properties).sort(), function(idx, key) {
25
                                    // exclude object type properties
26
                                    if (typeof(properties[key]) !== 'object') {
27
                                        popup += '<p class="popup-field"><span class="field-value">' + properties[key] + '</span>' + '</p>';
28
                                    }
29
                                });
30
                            }
31
                            layer.bindPopup(popup);
32
                      }
15 33
                  },
16 34
                  pointToLayer: function (feature, latlng) {
17 35
                      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
-