maps: give common layer properties to map cell (#42765)

This commit is contained in:
Frédéric Péters 2020-05-12 13:37:41 +02:00
parent 0da0669e80
commit 179f77f4bc
4 changed files with 16 additions and 26 deletions

View File

@ -24,7 +24,7 @@ from django.utils.encoding import python_2_unicode_compatible
from django.utils.html import escape
from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _
from django.urls import reverse_lazy
from django.urls import reverse
from django import forms
from django.conf import settings
@ -280,15 +280,6 @@ class MapLayer(models.Model):
features = [x for x in features if match(x)]
for feature in features:
feature['properties']['layer'] = {
'colour': self.marker_colour,
'icon_colour': self.icon_colour,
'label': self.label,
'icon': self.icon,
'identifier': self.slug,
'properties': properties,
}
return {'type': 'FeatureCollection', 'features': features}
@ -381,8 +372,13 @@ class Map(CellBase):
def get_geojson_layers(self):
if not self.pk:
return []
return [{'url': reverse_lazy('mapcell-geojson', kwargs={'cell_id': self.pk, 'layer_slug': l.slug}),
'slug': l.slug} for l in self.layers.filter(kind='geojson')]
return [{'url': reverse('mapcell-geojson', kwargs={'cell_id': self.pk, 'layer_slug': l.slug}),
'slug': l.slug,
'icon': l.icon,
'icon_colour': l.icon_colour,
'marker_colour': l.marker_colour,
'properties': [x.strip() for x in l.properties.split(',')],
} for l in self.layers.filter(kind='geojson')]
def get_cell_extra_context(self, context):
ctx = super(Map, self).get_cell_extra_context(context)

View File

@ -33,7 +33,8 @@ $(function() {
function(data) {
var geo_json = L.geoJson(data, {
onEachFeature: function(feature, layer) {
$(cell).trigger('combo:map-feature-prepare', {'feature': feature, 'layer': layer});
$(cell).trigger('combo:map-feature-prepare',
{'feature': feature, 'layer': layer, 'geojson_layer': geojson_layer});
var marker_behaviour_onclick = $map_widget.data('marker-behaviour-onclick');
if (marker_behaviour_onclick === 'display_data') {
var popup = '';
@ -50,7 +51,7 @@ $(function() {
popup += $popup_field.html();
});
} else {
var ordered_keys = feature.properties.layer.properties;
var ordered_keys = geojson_layer.properties;
if (! ordered_keys) {
ordered_keys = Object.keys(properties).sort();
}
@ -68,15 +69,15 @@ $(function() {
}
},
pointToLayer: function (feature, latlng) {
var markerStyles = "background-color: " + feature.properties.layer.colour + ";";
var markerStyles = "background-color: " + geojson_layer.marker_colour + ";";
marker = L.divIcon({
iconAnchor: [0, 0],
popupAnchor: [5, -45],
html: '<span class="layer-' +
feature.properties.layer.identifier +
geojson_layer.slug +
'" style="' + markerStyles + '"><i class="leaflet-marker-icon ' +
feature.properties.layer.icon + '" style="color:' +
feature.properties.layer.icon_colour +'"></i></span>'
geojson_layer.icon + '" style="color:' +
geojson_layer.icon_colour +'"></i></span>'
});
return L.marker(latlng, {icon: marker});
}

View File

@ -32,10 +32,7 @@
{% endfor %}
var geojson_{{ cell.pk }} = Object();
{% for layer in geojson_layers %}
geojson_{{ cell.pk }}["{{ layer.slug }}"] = {
url: '{{ layer.url }}',
slug: '{{ layer.slug }}'
};
geojson_{{ cell.pk }}[{{ layer.slug|as_json|safe }}] = {{layer|as_json|safe}};
{% endfor %}
</script>
</div>

View File

@ -557,7 +557,6 @@ def test_get_geojson_properties(app, layer, user):
features = json.loads(resp.text)['features']
assert 'name' in features[0]['properties']
assert 'extra' in features[0]['properties']
assert features[0]['properties']['layer']['properties'] == []
with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as requests_get:
layer.geojson_url = 'http://example.org/geojson?t2'
@ -571,7 +570,6 @@ def test_get_geojson_properties(app, layer, user):
features = json.loads(resp.text)['features']
assert 'name' in features[0]['properties']
assert 'extra' not in features[0]['properties']
assert features[0]['properties']['layer']['properties'] == ['name', 'hop']
with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as requests_get:
layer.geojson_url = 'http://example.org/geojson?t3'
@ -584,7 +582,6 @@ def test_get_geojson_properties(app, layer, user):
resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id, 'layer_slug': layer.slug}))
features = json.loads(resp.text)['features']
assert len(features[0]['properties']['display_fields']) == 2
assert features[0]['properties']['layer']['properties'] == []
with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as requests_get:
layer.geojson_url = 'http://example.org/geojson?t4'
@ -597,7 +594,6 @@ def test_get_geojson_properties(app, layer, user):
resp = app.get(reverse('mapcell-geojson', kwargs={'cell_id': cell.id, 'layer_slug': layer.slug}))
features = json.loads(resp.text)['features']
assert len(features[0]['properties']['display_fields']) == 1
assert features[0]['properties']['layer']['properties'] == ['id']
def test_duplicate(layer):