diff --git a/combo/apps/maps/models.py b/combo/apps/maps/models.py index f457a95c..d19db35b 100644 --- a/combo/apps/maps/models.py +++ b/combo/apps/maps/models.py @@ -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) diff --git a/combo/apps/maps/static/js/combo.map.js b/combo/apps/maps/static/js/combo.map.js index b05375d0..d1836fc9 100644 --- a/combo/apps/maps/static/js/combo.map.js +++ b/combo/apps/maps/static/js/combo.map.js @@ -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: '' + geojson_layer.icon + '" style="color:' + + geojson_layer.icon_colour +'">' }); return L.marker(latlng, {icon: marker}); } diff --git a/combo/apps/maps/templates/maps/map_cell.html b/combo/apps/maps/templates/maps/map_cell.html index ba2288fb..959e1c60 100644 --- a/combo/apps/maps/templates/maps/map_cell.html +++ b/combo/apps/maps/templates/maps/map_cell.html @@ -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 %} diff --git a/tests/test_maps_cells.py b/tests/test_maps_cells.py index a486ceb0..fd334bd1 100644 --- a/tests/test_maps_cells.py +++ b/tests/test_maps_cells.py @@ -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):