summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Curella <flavio.curella@gmail.com>2014-08-04 11:14:45 -0500
committerClaude Paroz <claude@2xlibre.net>2014-09-12 08:48:38 +0200
commitce078ef976d83395dc19c9a1576529a5a0678514 (patch)
treecd98242a857f533fc90a747e2b04c35a03932477
parent66580fe97c0ec8fe16ce7ff7f75a67c7f2340f83 (diff)
Fixed #19139 -- Made OpenLayersWidget follow GeoModelAdmin's modifiable attribute
Thanks Tim Graham for the review.
-rw-r--r--django/contrib/gis/admin/widgets.py3
-rw-r--r--django/contrib/gis/templates/gis/admin/openlayers.html2
-rw-r--r--django/contrib/gis/tests/geoadmin/admin.py5
-rw-r--r--django/contrib/gis/tests/geoadmin/tests.py25
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'))(