diff options
| author | Flavio Curella <flavio.curella@gmail.com> | 2014-08-04 11:14:45 -0500 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2014-09-12 08:48:38 +0200 |
| commit | ce078ef976d83395dc19c9a1576529a5a0678514 (patch) | |
| tree | cd98242a857f533fc90a747e2b04c35a03932477 | |
| parent | 66580fe97c0ec8fe16ce7ff7f75a67c7f2340f83 (diff) | |
Fixed #19139 -- Made OpenLayersWidget follow GeoModelAdmin's modifiable attribute
Thanks Tim Graham for the review.
| -rw-r--r-- | django/contrib/gis/admin/widgets.py | 3 | ||||
| -rw-r--r-- | django/contrib/gis/templates/gis/admin/openlayers.html | 2 | ||||
| -rw-r--r-- | django/contrib/gis/tests/geoadmin/admin.py | 5 | ||||
| -rw-r--r-- | django/contrib/gis/tests/geoadmin/tests.py | 25 |
4 files changed, 32 insertions, 3 deletions
diff --git a/django/contrib/gis/admin/widgets.py b/django/contrib/gis/admin/widgets.py index b098b7e7a2..292038ff84 100644 --- a/django/contrib/gis/admin/widgets.py +++ b/django/contrib/gis/admin/widgets.py @@ -22,6 +22,9 @@ class OpenLayersWidget(Textarea): # Update the template parameters with any attributes passed in. if attrs: self.params.update(attrs) + self.params['editable'] = self.params['modifiable'] + else: + self.params['editable'] = True # Defaulting the WKT value to a blank string -- this # will be tested in the JavaScript and the appropriate diff --git a/django/contrib/gis/templates/gis/admin/openlayers.html b/django/contrib/gis/templates/gis/admin/openlayers.html index 8d441cd664..592c6c9e71 100644 --- a/django/contrib/gis/templates/gis/admin/openlayers.html +++ b/django/contrib/gis/templates/gis/admin/openlayers.html @@ -31,7 +31,9 @@ //]]> </script> <div id="{{ id }}_map"{% if LANGUAGE_BIDI %} dir="ltr"{% endif %}></div> +{% if editable %} <a href="javascript:{{ module }}.clearFeatures()">Delete all Features</a> +{% endif %} {% if display_wkt %}<p> WKT debugging window:</p>{% endif %} <textarea id="{{ id }}" class="vWKTField required" cols="150" rows="10" name="{{ name }}">{{ wkt }}</textarea> <script type="text/javascript">{% block init_function %}{{ module }}.init();{% endblock %}</script> diff --git a/django/contrib/gis/tests/geoadmin/admin.py b/django/contrib/gis/tests/geoadmin/admin.py new file mode 100644 index 0000000000..ab39c28885 --- /dev/null +++ b/django/contrib/gis/tests/geoadmin/admin.py @@ -0,0 +1,5 @@ +from django.contrib.gis import admin + + +class UnmodifiableAdmin(admin.OSMGeoAdmin): + modifiable = False diff --git a/django/contrib/gis/tests/geoadmin/tests.py b/django/contrib/gis/tests/geoadmin/tests.py index 84cb491ad1..86c8ce9a1a 100644 --- a/django/contrib/gis/tests/geoadmin/tests.py +++ b/django/contrib/gis/tests/geoadmin/tests.py @@ -7,6 +7,7 @@ if HAS_GEOS: from django.contrib.gis import admin from django.contrib.gis.geos import Point + from .admin import UnmodifiableAdmin from .models import City @@ -20,13 +21,31 @@ class GeoAdminTest(TestCase): self.assertTrue(any(geoadmin.openlayers_url in js for js in admin_js)) def test_olmap_OSM_rendering(self): - geoadmin = admin.site._registry[City] - result = geoadmin.get_map_widget(City._meta.get_field('point'))( - ).render('point', Point(-79.460734, 40.18476)) + delete_all_btn = """<a href="javascript:geodjango_point.clearFeatures()">Delete all Features</a>""" + + original_geoadmin = admin.site._registry[City] + params = original_geoadmin.get_map_widget(City._meta.get_field('point')).params + result = original_geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476), params) self.assertIn( """geodjango_point.layers.base = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");""", result) + self.assertIn(delete_all_btn, result) + + admin.site.unregister(City) + admin.site.register(City, UnmodifiableAdmin) + try: + geoadmin = admin.site._registry[City] + params = geoadmin.get_map_widget(City._meta.get_field('point')).params + result = geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476), params) + + self.assertNotIn(delete_all_btn, result) + finally: + admin.site.unregister(City) + admin.site.register(City, original_geoadmin.__class__) + def test_olmap_WMS_rendering(self): geoadmin = admin.GeoModelAdmin(City, admin.site) result = geoadmin.get_map_widget(City._meta.get_field('point'))( |
