diff --git a/umap/static/umap/js/modules/umap.js b/umap/static/umap/js/modules/umap.js index 5991d486..a52e793a 100644 --- a/umap/static/umap/js/modules/umap.js +++ b/umap/static/umap/js/modules/umap.js @@ -553,9 +553,7 @@ export default class Umap extends ServerStored { used = false break } - if (SAVEMANAGER.isDirty) { - this.askForReset() - } + this.sync._undoManager.undo() break case 'm': this._leafletMap.editTools.startMarker() @@ -1161,21 +1159,6 @@ export default class Umap extends ServerStored { }) } - reset() { - if (this._leafletMap.editTools) this._leafletMap.editTools.stopDrawing() - this.resetProperties() - this.datalayersIndex = [].concat(this._datalayersIndex_bk) - // Iter over all datalayers, including deleted if any. - for (const datalayer of Object.values(this.datalayers)) { - if (datalayer.isDeleted) datalayer.connectToMap() - if (datalayer.isDirty) datalayer.reset() - } - this.ensurePanesOrder() - this._leafletMap.initTileLayers() - this.onDataLayersChanged() - this.isDirty = !this.id - } - async save() { this.rules.commit() const geojson = { @@ -1302,16 +1285,6 @@ export default class Umap extends ServerStored { this._leafletMap.fire(name) } - askForReset(e) { - if (this.getProperty('syncEnabled')) return - this.dialog - .confirm(translate('Are you sure you want to cancel your changes?')) - .then(() => { - this.reset() - this.disableEdit() - }) - } - async initSyncEngine() { // this.properties.websocketEnabled is set by the server admin if (this.properties.websocketEnabled === false) return diff --git a/umap/static/umap/js/umap.controls.js b/umap/static/umap/js/umap.controls.js index bc3666a4..7ddecd1e 100644 --- a/umap/static/umap/js/umap.controls.js +++ b/umap/static/umap/js/umap.controls.js @@ -629,6 +629,7 @@ U.Editable = L.Editable.extend({ const line = new U.LineString(this._umap, datalayer, { geometry: { type: 'LineString', coordinates: [] }, }) + line._just_married = true return line.ui }, @@ -637,6 +638,7 @@ U.Editable = L.Editable.extend({ const poly = new U.Polygon(this._umap, datalayer, { geometry: { type: 'Polygon', coordinates: [] }, }) + poly._just_married = true return poly.ui }, @@ -737,6 +739,8 @@ U.Editable = L.Editable.extend({ // Leaflet.Editable will delete the drawn shape if invalid // (eg. line has only one drawn point) // So let's check if the layer has no more shape + event.layer.feature.pullGeometry(false) + console.log('onEscape', event.layer.feature.hasGeom()) if (!event.layer.feature.hasGeom()) { event.layer.feature.del() } else { diff --git a/umap/tests/integration/test_browser.py b/umap/tests/integration/test_browser.py index d6bd507c..cee5b27e 100644 --- a/umap/tests/integration/test_browser.py +++ b/umap/tests/integration/test_browser.py @@ -350,8 +350,7 @@ def test_should_redraw_list_on_feature_delete(live_server, openmap, page, bootst buttons.first.click() page.locator("dialog").get_by_role("button", name="OK").click() expect(buttons).to_have_count(2) - page.get_by_role("button", name="Cancel edits").click() - page.locator("dialog").get_by_role("button", name="OK").click() + page.get_by_role("button", name="Undo").click() expect(buttons).to_have_count(3) diff --git a/umap/tests/integration/test_edit_datalayer.py b/umap/tests/integration/test_edit_datalayer.py index e01c0ace..ccd1fcec 100644 --- a/umap/tests/integration/test_edit_datalayer.py +++ b/umap/tests/integration/test_edit_datalayer.py @@ -64,8 +64,7 @@ def test_cancel_deleting_datalayer_should_restore( page.get_by_role("button", name="OK").click() expect(markers).to_have_count(0) expect(page.get_by_text("test datalayer")).to_be_hidden() - page.get_by_role("button", name="Cancel edits").click() - page.locator("dialog").get_by_role("button", name="OK").click() + page.get_by_role("button", name="Undo").click() expect(markers).to_have_count(1) expect(page.locator(".umap-browser").get_by_text("test datalayer")).to_be_visible() diff --git a/umap/tests/integration/test_edit_polygon.py b/umap/tests/integration/test_edit_polygon.py index a711a79b..4a8ddac8 100644 --- a/umap/tests/integration/test_edit_polygon.py +++ b/umap/tests/integration/test_edit_polygon.py @@ -117,8 +117,7 @@ def test_should_reset_style_on_cancel(live_server, openmap, page, bootstrap): expect(page.locator(".leaflet-overlay-pane path[fill='GoldenRod']")).to_have_count( 1 ) - page.get_by_role("button", name="Cancel edits").click() - page.locator("dialog").get_by_role("button", name="OK").click() + page.get_by_role("button", name="Undo").click() expect(page.locator(".leaflet-overlay-pane path[fill='DarkBlue']")).to_have_count(1) diff --git a/umap/tests/integration/test_optimistic_merge.py b/umap/tests/integration/test_optimistic_merge.py index 997b71fa..16dad23f 100644 --- a/umap/tests/integration/test_optimistic_merge.py +++ b/umap/tests/integration/test_optimistic_merge.py @@ -294,7 +294,7 @@ def test_should_display_alert_on_conflict(context, live_server, datalayer, openm page_two.locator('input[name="name"]').fill("name from page two") # Map should be in dirty status - expect(page_two.get_by_text("Cancel edits")).to_be_visible() + expect(page_two.get_by_text("Undo")).to_be_visible() with page_two.expect_response(re.compile(r".*/datalayer/update/.*")): page_two.get_by_role("button", name="Save").click() @@ -306,7 +306,7 @@ def test_should_display_alert_on_conflict(context, live_server, datalayer, openm # We should have an alert with some actions expect(page_two.get_by_text("Whoops! Other contributor(s) changed")).to_be_visible() # Map should still be in dirty status - expect(page_two.get_by_text("Cancel edits")).to_be_visible() + expect(page_two.get_by_text("Undo")).to_be_visible() # Override data from page two with page_two.expect_response(re.compile(r".*/datalayer/update/.*")): @@ -317,4 +317,4 @@ def test_should_display_alert_on_conflict(context, live_server, datalayer, openm data = json.loads(Path(saved.geojson.path).read_text()) assert data["features"][0]["properties"]["name"] == "name from page two" # Map should not be in dirty status anymore - expect(page_two.get_by_text("Cancel edits")).to_be_hidden() + expect(page_two.get_by_text("Undo")).to_be_hidden() diff --git a/umap/tests/integration/test_save.py b/umap/tests/integration/test_save.py index bab3aa8e..866de812 100644 --- a/umap/tests/integration/test_save.py +++ b/umap/tests/integration/test_save.py @@ -16,8 +16,7 @@ def test_reseting_map_would_remove_from_save_queue( page.on("request", register_request) page.locator('input[name="name"]').click() page.locator('input[name="name"]').fill("new name") - page.get_by_role("button", name="Cancel edits").click() - page.get_by_role("button", name="OK").click() + page.get_by_role("button", name="Undo").click() page.wait_for_timeout(500) page.get_by_role("button", name="Edit").click() page.get_by_role("button", name="Manage layers").click()