From 93d6c8d59e5295a44d94e0c3b728dbeb33162e06 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Tue, 13 Feb 2018 15:51:12 +0100 Subject: [PATCH] maps: display marker data in popup (#21034) --- .../maps/migrations/0005_auto_20180213_1611.py | 24 ++++++++++++++++++++++ combo/apps/maps/models.py | 4 +++- combo/apps/maps/static/js/combo.map.js | 17 +++++++++++++++ combo/apps/maps/templates/maps/map_cell.html | 3 +++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 combo/apps/maps/migrations/0005_auto_20180213_1611.py diff --git a/combo/apps/maps/migrations/0005_auto_20180213_1611.py b/combo/apps/maps/migrations/0005_auto_20180213_1611.py new file mode 100644 index 0000000..760fb9d --- /dev/null +++ b/combo/apps/maps/migrations/0005_auto_20180213_1611.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('maps', '0004_map_initial_state'), + ] + + operations = [ + migrations.AddField( + model_name='map', + name='display_marker_data', + field=models.BooleanField(default=False, verbose_name='Display marker data'), + ), + migrations.AlterField( + model_name='maplayer', + name='icon', + field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Marker icon', choices=[(b'ambulance', 'Ambulance'), (b'asterisk', 'Asterisk'), (b'bell', 'Bell'), (b'bicycle', 'Bicycle'), (b'book', 'Book'), (b'broken_chain', 'Broken chain'), (b'building', 'Building'), (b'bus', 'Bus'), (b'car', 'Car'), (b'checkmark', 'Checkmark'), (b'cube', 'Cube'), (b'drop', 'Drop'), (b'eye', 'Eye'), (b'flag', 'Flag'), (b'gavel', 'Gavel'), (b'hospital', 'Hospital'), (b'house', 'House'), (b'lightbulb', 'Lightbulb'), (b'map_signs', 'Map signs'), (b'motorcycle', 'Motorcycle'), (b'paint_brush', 'Paint brush'), (b'paw', 'Paw'), (b'recycle', 'Recycle'), (b'road', 'Road'), (b'shower', 'Shower'), (b'star', 'Star'), (b'subway', 'Subway'), (b'taxi', 'Taxi'), (b'train', 'Train'), (b'trash', 'Trash'), (b'tree', 'Tree'), (b'truck', 'Truck'), (b'university', 'University'), (b'warning', 'Warning'), (b'wheelchair', 'Wheelchair')]), + ), + ] diff --git a/combo/apps/maps/models.py b/combo/apps/maps/models.py index eb5bcf6..67e89a4 100644 --- a/combo/apps/maps/models.py +++ b/combo/apps/maps/models.py @@ -200,6 +200,7 @@ class Map(CellBase): choices=ZOOM_LEVELS, default='0') max_zoom = models.CharField(_('Maximal zoom level'), max_length=2, choices=ZOOM_LEVELS, default=19) + display_marker_data = models.BooleanField(default=False, verbose_name=_('Display marker data')) layers = models.ManyToManyField(MapLayer, verbose_name=_('Layers'), blank=True) template_name = 'maps/map_cell.html' @@ -216,7 +217,7 @@ class Map(CellBase): def get_default_form_class(self): fields = ('title', 'initial_state', 'initial_zoom', 'min_zoom', - 'max_zoom', 'layers') + 'max_zoom', 'display_marker_data', 'layers') widgets = {'layers': forms.widgets.CheckboxSelectMultiple} return forms.models.modelform_factory(self.__class__, fields=fields, widgets=widgets) @@ -245,4 +246,5 @@ class Map(CellBase): ctx['tile_urltemplate'] = settings.COMBO_MAP_TILE_URLTEMPLATE ctx['map_attribution'] = settings.COMBO_MAP_ATTRIBUTION ctx['max_bounds'] = settings.COMBO_MAP_MAX_BOUNDS + ctx['display_marker_data'] = self.display_marker_data return ctx diff --git a/combo/apps/maps/static/js/combo.map.js b/combo/apps/maps/static/js/combo.map.js index 915b813..ae0a727 100644 --- a/combo/apps/maps/static/js/combo.map.js +++ b/combo/apps/maps/static/js/combo.map.js @@ -12,6 +12,23 @@ $(function() { var geo_json = L.geoJson(data, { onEachFeature: function(feature, layer) { $(cell).trigger('combo:map-feature-prepare', {'feature': feature, 'layer': layer}); + var display_marker_data = $map_widget.data('display-marker-properties'); + if (display_marker_data){ + var popup = ''; + if (feature.properties.display_fields) { + $.each(feature.properties.display_fields, function(key, value) { + popup += ''; + } + }); + } + layer.bindPopup(popup); + } }, pointToLayer: function (feature, latlng) { var markerStyles = "background-color: " + feature.properties.layer.colour + ";"; diff --git a/combo/apps/maps/templates/maps/map_cell.html b/combo/apps/maps/templates/maps/map_cell.html index b4e51ae..71d2dae 100644 --- a/combo/apps/maps/templates/maps/map_cell.html +++ b/combo/apps/maps/templates/maps/map_cell.html @@ -6,6 +6,9 @@ data-max-zoom="{{ max_zoom }}" data-init-lat="{{ init_lat }}" data-init-lng="{{ init_lng }}" data-geojson-url="{{ geojson_url }}" data-tile-urltemplate="{{ tile_urltemplate}}" data-map-attribution="{{ map_attribution}}" + {% if cell.display_marker_data %} + data-display-marker-properties="{{ cell.display_marker_data }}" + {% endif %} {% if max_bounds.corner1.lat %} data-max-bounds-lat1="{{ max_bounds.corner1.lat }}" data-max-bounds-lng1="{{ max_bounds.corner1.lng }}" -- 2.11.0