diff --git a/django/contrib/gis/forms/widgets.py b/django/contrib/gis/forms/widgets.py
index 5f169e9cb3..49ca48794b 100644
--- a/django/contrib/gis/forms/widgets.py
+++ b/django/contrib/gis/forms/widgets.py
@@ -102,12 +102,12 @@ class OpenLayersWidget(BaseGeometryWidget):
class Media:
css = {
"all": (
- "https://cdnjs.cloudflare.com/ajax/libs/ol3/4.6.5/ol.css",
+ "https://cdn.jsdelivr.net/npm/ol@v7.2.2/ol.css",
"gis/css/ol3.css",
)
}
js = (
- "https://cdnjs.cloudflare.com/ajax/libs/ol3/4.6.5/ol.js",
+ "https://cdn.jsdelivr.net/npm/ol@v7.2.2/dist/ol.js",
"gis/js/OLMapWidget.js",
)
diff --git a/django/contrib/gis/static/gis/js/OLMapWidget.js b/django/contrib/gis/static/gis/js/OLMapWidget.js
index fe944a4a87..b750327409 100644
--- a/django/contrib/gis/static/gis/js/OLMapWidget.js
+++ b/django/contrib/gis/static/gis/js/OLMapWidget.js
@@ -1,39 +1,40 @@
/* global ol */
'use strict';
-function GeometryTypeControl(opt_options) {
+class GeometryTypeControl extends ol.control.Control {
// Map control to switch type when geometry type is unknown
- const options = opt_options || {};
+ constructor(opt_options) {
+ const options = opt_options || {};
- const element = document.createElement('div');
- element.className = 'switch-type type-' + options.type + ' ol-control ol-unselectable';
- if (options.active) {
- element.classList.add("type-active");
- }
-
- const self = this;
- const switchType = function(e) {
- e.preventDefault();
- if (options.widget.currentGeometryType !== self) {
- options.widget.map.removeInteraction(options.widget.interactions.draw);
- options.widget.interactions.draw = new ol.interaction.Draw({
- features: options.widget.featureCollection,
- type: options.type
- });
- options.widget.map.addInteraction(options.widget.interactions.draw);
- options.widget.currentGeometryType.element.classList.remove('type-active');
- options.widget.currentGeometryType = self;
+ const element = document.createElement('div');
+ element.className = 'switch-type type-' + options.type + ' ol-control ol-unselectable';
+ if (options.active) {
element.classList.add("type-active");
}
- };
- element.addEventListener('click', switchType, false);
- element.addEventListener('touchstart', switchType, false);
+ super({
+ element: element,
+ target: options.target
+ });
+ const self = this;
+ const switchType = function(e) {
+ e.preventDefault();
+ if (options.widget.currentGeometryType !== self) {
+ options.widget.map.removeInteraction(options.widget.interactions.draw);
+ options.widget.interactions.draw = new ol.interaction.Draw({
+ features: options.widget.featureCollection,
+ type: options.type
+ });
+ options.widget.map.addInteraction(options.widget.interactions.draw);
+ options.widget.currentGeometryType.element.classList.remove('type-active');
+ options.widget.currentGeometryType = self;
+ element.classList.add("type-active");
+ }
+ };
- ol.control.Control.call(this, {
- element: element
- });
-};
-ol.inherits(GeometryTypeControl, ol.control.Control);
+ element.addEventListener('click', switchType, false);
+ element.addEventListener('touchstart', switchType, false);
+ }
+}
// TODO: allow deleting individual features (#8972)
class MapWidget {
diff --git a/docs/releases/4.2.txt b/docs/releases/4.2.txt
index 755ebcb717..b5a7e61f6f 100644
--- a/docs/releases/4.2.txt
+++ b/docs/releases/4.2.txt
@@ -149,6 +149,9 @@ Minor features
removes the former ``map_css`` block) to better comply with a strict Content
Security Policy.
+* :class:`~django.contrib.gis.forms.widgets.OpenLayersWidget` is now based on
+ OpenLayers 7.2.2 (previously 4.6.5).
+
:mod:`django.contrib.messages`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/js_tests/gis/mapwidget.test.js b/js_tests/gis/mapwidget.test.js
index 8991738c6c..e0cc617a1e 100644
--- a/js_tests/gis/mapwidget.test.js
+++ b/js_tests/gis/mapwidget.test.js
@@ -33,7 +33,7 @@ QUnit.test('MapWidget.defaultCenter', function(assert) {
'6.81,47.08',
'Default center at 6.81, 47.08'
);
- assert.equal(widget.map.getView().getZoom(), 17);
+ assert.equal(Math.round(widget.map.getView().getZoom()), 17);
});
QUnit.test('MapWidget.interactions', function(assert) {
diff --git a/js_tests/tests.html b/js_tests/tests.html
index 61bc4ac102..c3c1055c9a 100644
--- a/js_tests/tests.html
+++ b/js_tests/tests.html
@@ -157,7 +157,7 @@
-
+