Rename allowEdit in editMode

This commit is contained in:
Yohan Boniface 2023-09-12 17:02:18 +02:00
parent de7c693c7b
commit 24e4aed8d3
8 changed files with 38 additions and 28 deletions

View file

@ -366,7 +366,7 @@ class DataLayer(NamedModel):
}
obj["id"] = self.pk
obj["permissions"] = {"edit_status": self.edit_status}
obj["allowEdit"] = self.can_edit(user, request)
obj["editMode"] = "advanced" if self.can_edit(user, request) else 'disabled'
return obj
def clone(self, map_inst=None):

View file

@ -275,7 +275,7 @@ L.U.ContinueLineAction = L.U.BaseVertexAction.extend({
// Leaflet.Toolbar doesn't allow twice same toolbar class…
L.U.SettingsToolbar = L.Toolbar.Control.extend({
addTo: function (map) {
if (map.options.allowMapEdit === false) return
if (map.options.editMode !== 'advanced') return
L.Toolbar.Control.prototype.addTo.call(this, map)
},
})
@ -1467,7 +1467,7 @@ L.U.IframeExporter = L.Evented.extend({
miniMap: false,
scrollWheelZoom: false,
zoomControl: true,
allowEdit: false,
editMode: 'disabled',
moreControl: true,
searchControl: null,
tilelayersControl: null,

View file

@ -15,7 +15,7 @@ L.Map.mergeOptions({
default_interactive: true,
default_labelDirection: 'auto',
attributionControl: false,
allowEdit: true,
editMode: 'advanced',
embedControl: true,
zoomControl: true,
datalayersControl: true,
@ -103,7 +103,7 @@ L.U.Map.include({
L.Util.setBooleanFromQueryString(this.options, 'moreControl')
L.Util.setBooleanFromQueryString(this.options, 'scaleControl')
L.Util.setBooleanFromQueryString(this.options, 'miniMap')
L.Util.setBooleanFromQueryString(this.options, 'allowEdit')
L.Util.setBooleanFromQueryString(this.options, 'editMode')
L.Util.setBooleanFromQueryString(this.options, 'displayDataBrowserOnLoad')
L.Util.setBooleanFromQueryString(this.options, 'displayCaptionOnLoad')
L.Util.setBooleanFromQueryString(this.options, 'captionBar')
@ -122,7 +122,7 @@ L.U.Map.include({
if (this.datalayersOnLoad)
this.datalayersOnLoad = this.datalayersOnLoad.toString().split(',')
if (L.Browser.ielt9) this.options.allowEdit = false // TODO include ie9
if (L.Browser.ielt9) this.options.editMode = 'disabled' // TODO include ie9
let editedFeature = null
const self = this
@ -235,7 +235,7 @@ L.U.Map.include({
this.isDirty = true
this._default_extent = true
this.options.name = L._('Untitled map')
this.options.allowEdit = true
this.options.editMode = 'advanced'
const datalayer = this.createDataLayer()
datalayer.connectToMap()
this.enableEdit()
@ -253,7 +253,7 @@ L.U.Map.include({
this.slideshow = new L.U.Slideshow(this, this.options.slideshow)
this.permissions = new L.U.MapPermissions(this)
this.initCaptionBar()
if (this.options.allowEdit) {
if (this.hasEditMode()) {
this.editTools = new L.U.Editable(this)
this.ui.on(
'panel:closed panel:open',
@ -292,7 +292,7 @@ L.U.Map.include({
this.helpMenuActions = {}
this._controls = {}
if (this.options.allowEdit && !this.options.noControl) {
if (this.hasEditMode() && !this.options.noControl) {
new L.U.EditControl(this).addTo(this)
new L.U.DrawToolbar({ map: this }).addTo(this)
@ -511,7 +511,7 @@ L.U.Map.include({
else this.ui.closePanel()
}
if (!this.options.allowEdit) return
if (!this.hasEditMode()) return
/* Edit mode only shortcuts */
if (key === L.U.Keys.E && modifierKey && !this.editEnabled) {
@ -1790,6 +1790,11 @@ L.U.Map.include({
this.fire('edit:disabled')
},
hasEditMode: function () {
return this.options.editMode === 'simple' || this.options.editMode === 'advanced'
},
getDisplayName: function () {
return this.options.name || L._('Untitled map')
},
@ -1946,7 +1951,7 @@ L.U.Map.include({
items = items.concat(e.relatedTarget.getContextMenuItems(e))
}
}
if (this.options.allowEdit) {
if (this.hasEditMode()) {
items.push('-')
if (this.editEnabled) {
if (!this.hasDirty) {

View file

@ -356,7 +356,7 @@ L.U.DataLayer = L.Evented.extend({
// So do not let all options to be reset
// Fix is a proper migration so all datalayers settings are
// in DB, and we remove it from geojson flat files.
geojson['_umap_options']['allowEdit'] = this.options.allowEdit
geojson['_umap_options']['editMode'] = this.options.editMode
this.fromUmapGeoJSON(geojson)
this.backupOptions()
this.fire('loaded')
@ -496,7 +496,7 @@ L.U.DataLayer = L.Evented.extend({
})
// No browser cache for owners/editors.
if (this.map.options.allowEdit) url = `${url}?${Date.now()}`
if (this.map.hasEditMode()) url = `${url}?${Date.now()}`
return url
},
@ -1194,7 +1194,8 @@ L.U.DataLayer = L.Evented.extend({
},
isReadOnly: function () {
return this.options.allowEdit === false
// isReadOnly must return true if unset
return this.options.editMode === 'disabled'
},
save: function () {

View file

@ -190,7 +190,7 @@ function initMap(options) {
name: 'name of the map',
description: 'The description of the map',
locale: 'en',
allowEdit: true,
editMode: 'advanced',
moreControl: true,
scaleControl: true,
miniMap: false,

View file

@ -37,7 +37,7 @@ def map_fragment(map_instance, **kwargs):
'datalayers': datalayer_data,
'urls': _urls_for_js(),
'STATIC_URL': settings.STATIC_URL,
"allowEdit": False,
"editMode": 'disabled',
'hash': False,
'attributionControl': False,
'scrollWheelZoom': False,

View file

@ -127,9 +127,9 @@ def test_wrong_slug_should_redirect_to_canonical(client, map):
def test_wrong_slug_should_redirect_with_query_string(client, map):
url = reverse("map", kwargs={"map_id": map.pk, "slug": "wrong-slug"})
url = "{}?allowEdit=0".format(url)
url = "{}?editMode=simple".format(url)
canonical = reverse("map", kwargs={"map_id": map.pk, "slug": map.slug})
canonical = "{}?allowEdit=0".format(canonical)
canonical = "{}?editMode=simple".format(canonical)
response = client.get(url)
assert response.status_code == 301
assert response["Location"] == canonical
@ -137,7 +137,7 @@ def test_wrong_slug_should_redirect_with_query_string(client, map):
def test_should_not_consider_the_query_string_for_canonical_check(client, map):
url = reverse("map", kwargs={"map_id": map.pk, "slug": map.slug})
url = "{}?allowEdit=0".format(url)
url = "{}?editMode=simple".format(url)
response = client.get(url)
assert response.status_code == 200

View file

@ -449,10 +449,7 @@ class MapDetailMixin:
properties = {
"urls": _urls_for_js(),
"tilelayers": TileLayer.get_list(),
"allowEdit": self.is_edit_allowed(), # showEditMode
"allowMapEdit": self.object.can_edit(self.request.user, self.request)
if getattr(self, "object", None)
else True, # FIXME naming
"editMode": self.edit_mode,
"default_iconUrl": "%sumap/img/marker.png" % settings.STATIC_URL, # noqa
"umap_id": self.get_umap_id(),
"starred": self.is_starred(),
@ -500,8 +497,9 @@ class MapDetailMixin:
def get_datalayers(self):
return []
def is_edit_allowed(self):
return True
@property
def edit_mode(self):
return "advanced"
def get_umap_id(self):
return None
@ -563,11 +561,17 @@ class MapView(MapDetailMixin, PermissionsMixin, DetailView):
for l in self.object.datalayer_set.all()
]
def is_edit_allowed(self):
return self.object.can_edit(self.request.user, self.request) or any(
@property
def edit_mode(self):
edit_mode = 'disabled'
if self.object.can_edit(self.request.user, self.request):
edit_mode = "advanced"
elif any(
d.can_edit(self.request.user, self.request)
for d in self.object.datalayer_set.all()
)
):
edit_mode = "simple"
return edit_mode
def get_umap_id(self):
return self.object.pk