0001-maps-add-handling-of-marker-behaviour-on-click-21034.patch
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 |
- |