diff --git a/umap/static/umap/js/umap.core.js b/umap/static/umap/js/umap.core.js index 28833df7..11d1dc53 100644 --- a/umap/static/umap/js/umap.core.js +++ b/umap/static/umap/js/umap.core.js @@ -87,6 +87,11 @@ L.DomUtil.createFieldset = (container, legend, options) => { L.DomUtil.add('span', '', summary, legend) const fieldset = L.DomUtil.add('fieldset', '', details) details.open = options.on === true + if (options.callback) { + L.DomEvent.on(details, 'toggle', () => { + if (details.open) options.callback.call(options.context || this) + }) + } return fieldset } diff --git a/umap/tests/integration/test_browser.py b/umap/tests/integration/test_browser.py index fcb35d96..90e3be9c 100644 --- a/umap/tests/integration/test_browser.py +++ b/umap/tests/integration/test_browser.py @@ -77,7 +77,7 @@ def test_data_browser_should_be_filterable(live_server, page, bootstrap, map): paths = page.locator(".leaflet-overlay-pane path") expect(markers).to_have_count(1) expect(paths).to_have_count(2) - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() filter_ = page.locator("input[name='filter']") expect(filter_).to_be_visible() filter_.type("poly") @@ -104,7 +104,7 @@ def test_data_browser_should_be_filterable(live_server, page, bootstrap, map): def test_data_browser_can_show_only_visible_features(live_server, page, bootstrap, map): # Zoom on France page.goto(f"{live_server.url}{map.get_absolute_url()}#6/51.000/2.000") - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() el = page.get_by_text("Current map view") expect(el).to_be_visible() el.click() @@ -116,7 +116,7 @@ def test_data_browser_can_show_only_visible_features(live_server, page, bootstra def test_data_browser_can_mix_filter_and_bbox(live_server, page, bootstrap, map): # Zoom on north west page.goto(f"{live_server.url}{map.get_absolute_url()}#4/61.98/-2.68") - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() el = page.get_by_text("Current map view") expect(el).to_be_visible() el.click() @@ -134,7 +134,7 @@ def test_data_browser_can_mix_filter_and_bbox(live_server, page, bootstrap, map) def test_data_browser_bbox_limit_should_be_dynamic(live_server, page, bootstrap, map): # Zoom on Europe page.goto(f"{live_server.url}{map.get_absolute_url()}#6/51.000/2.000") - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() el = page.get_by_text("Current map view") expect(el).to_be_visible() el.click() @@ -160,7 +160,7 @@ def test_data_browser_bbox_filter_should_be_persistent( ): # Zoom on Europe page.goto(f"{live_server.url}{map.get_absolute_url()}#6/51.000/2.000") - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() el = page.get_by_text("Current map view") expect(el).to_be_visible() el.click() @@ -186,7 +186,7 @@ def test_data_browser_bbox_filtered_is_clickable(live_server, page, bootstrap, m popup = page.locator(".leaflet-popup") # Zoom on Europe page.goto(f"{live_server.url}{map.get_absolute_url()}#6/51.000/2.000") - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() el = page.get_by_text("Current map view") expect(el).to_be_visible() el.click() @@ -208,7 +208,7 @@ def test_data_browser_with_variable_in_name(live_server, page, bootstrap, map): expect(page.get_by_text("one point in france (point)")).to_be_visible() expect(page.get_by_text("one line in new zeland (line)")).to_be_visible() expect(page.get_by_text("one polygon in greenland (polygon)")).to_be_visible() - page.get_by_role("heading", name="filters").click() + page.locator(".filters summary").click() filter_ = page.locator("input[name='filter']") expect(filter_).to_be_visible() filter_.type("foobar") # Hide all diff --git a/umap/tests/integration/test_choropleth.py b/umap/tests/integration/test_choropleth.py index e896dba1..65ef4ddd 100644 --- a/umap/tests/integration/test_choropleth.py +++ b/umap/tests/integration/test_choropleth.py @@ -50,7 +50,7 @@ def test_basic_choropleth_map_with_custom_brewer(openmap, live_server, page): page.get_by_role("button", name="Edit").click() page.get_by_role("link", name="Manage layers").click() page.locator(".panel").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Choropleth: settings").click() + page.get_by_text("Choropleth: settings").click() page.locator('select[name="brewer"]').select_option("Greens") # Hauts-de-France diff --git a/umap/tests/integration/test_edit_datalayer.py b/umap/tests/integration/test_edit_datalayer.py index ecfba705..efbbdb80 100644 --- a/umap/tests/integration/test_edit_datalayer.py +++ b/umap/tests/integration/test_edit_datalayer.py @@ -80,7 +80,7 @@ def test_can_clone_datalayer(live_server, openmap, login, datalayer, page): expect(markers).to_have_count(1) page.get_by_role("link", name="Manage layers").click() page.locator(".panel.right").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Advanced actions").click() + page.get_by_text("Advanced actions").click() page.get_by_role("button", name="Clone").click() expect(layers).to_have_count(2) expect(markers).to_have_count(2) @@ -104,7 +104,7 @@ def test_can_change_icon_class(live_server, openmap, page): page.get_by_role("link", name="Manage layers").click() expect(page.locator(".umap-circle-icon")).to_be_hidden() page.locator(".panel.right").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator(".umap-field-iconClass a.define").click() page.get_by_text("Circle").click() expect(page.locator(".umap-circle-icon")).to_be_visible() @@ -165,14 +165,14 @@ def test_can_restore_version(live_server, openmap, page, datalayer): marker = page.locator(".leaflet-marker-icon") expect(marker).to_have_class(re.compile(".*umap-ball-icon.*")) marker.click(modifiers=["Shift"]) - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator("#umap-feature-shape-properties").get_by_text("Default").click() with page.expect_response(re.compile(".*/datalayer/update/.*")): page.get_by_role("button", name="Save").click() expect(marker).to_have_class(re.compile(".*umap-div-icon.*")) page.get_by_role("link", name="Manage layers").click() page.locator(".panel.right").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Versions").click() + page.get_by_text("Versions").click() page.once("dialog", lambda dialog: dialog.accept()) page.get_by_role("button", name="Restore this version").last.click() expect(marker).to_have_class(re.compile(".*umap-ball-icon.*")) @@ -182,4 +182,4 @@ def test_can_edit_layer_on_ctrl_shift_click(live_server, openmap, page, datalaye modifier = "Meta" if platform.system() == "Darwin" else "Control" page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit") page.locator(".leaflet-marker-icon").click(modifiers=[modifier, "Shift"]) - expect(page.get_by_role("heading", name="Layer properties")).to_be_visible() + expect(page.get_by_text("Layer properties")).to_be_visible() diff --git a/umap/tests/integration/test_edit_map.py b/umap/tests/integration/test_edit_map.py index 122eb864..abe9d7a8 100644 --- a/umap/tests/integration/test_edit_map.py +++ b/umap/tests/integration/test_edit_map.py @@ -58,7 +58,7 @@ def test_zoomcontrol_impacts_ui(live_server, page, tilelayer): expect(zoom_out).to_be_visible() # Hide them - page.get_by_role("heading", name="User interface options").click() + page.get_by_text("User interface options").click() hide_zoom_controls = ( page.locator("div") .filter(has_text=re.compile(r"^Display the zoom control")) @@ -90,7 +90,7 @@ def test_map_color_impacts_data(live_server, page, tilelayer): expect(marker_pane_p1).to_have_count(1) # Change the default color - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator("#umap-feature-shape-properties").get_by_text("define").first.click() page.get_by_title("Lime", exact=True).click() @@ -108,7 +108,7 @@ def test_limitbounds_impacts_ui(live_server, page, tilelayer): expect(gear_icon).to_be_visible() gear_icon.click() - page.get_by_role("heading", name="Limit bounds").click() + page.get_by_text("Limit bounds").click() default_zoom_url = f"{live_server.url}/en/map/new/#5/51.110/7.053" page.goto(default_zoom_url) page.get_by_role("button", name="Use current bounds").click() @@ -183,7 +183,7 @@ def test_sortkey_impacts_datalayerindex(map, live_server, page): # Change the default sortkey to be "key" page.get_by_role("button", name="Edit").click() page.get_by_role("link", name="Map advanced properties").click() - page.get_by_role("heading", name="Default properties").click() + page.get_by_text("Default properties").click() # Click "define" page.locator(".panel .umap-field-sortKey .define").click() diff --git a/umap/tests/integration/test_edit_marker.py b/umap/tests/integration/test_edit_marker.py index 731de01c..99a4eaf9 100644 --- a/umap/tests/integration/test_edit_marker.py +++ b/umap/tests/integration/test_edit_marker.py @@ -36,7 +36,7 @@ def test_can_edit_on_shift_click(live_server, openmap, page, datalayer): modifier = "Meta" if platform.system() == "Darwin" else "Control" page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit") page.locator(".leaflet-marker-icon").click(modifiers=[modifier, "Shift"]) - expect(page.get_by_role("heading", name="Layer properties")).to_be_visible() + expect(page.get_by_text("Layer properties")).to_be_visible() def test_marker_style_should_have_precedence(live_server, openmap, page, bootstrap): @@ -45,7 +45,7 @@ def test_marker_style_should_have_precedence(live_server, openmap, page, bootstr # Change colour at layer level page.get_by_role("link", name="Manage layers").click() page.locator(".panel").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator(".umap-field-color .define").click() expect(page.locator(".leaflet-marker-icon .icon_container")).to_have_css( "background-color", "rgb(0, 0, 139)" @@ -57,7 +57,7 @@ def test_marker_style_should_have_precedence(live_server, openmap, page, bootstr # Now change at marker level, it should take precedence page.locator(".leaflet-marker-icon").click(modifiers=["Shift"]) - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator("#umap-feature-shape-properties").get_by_text("define").first.click() page.get_by_title("GoldenRod", exact=True).click() expect(page.locator(".leaflet-marker-icon .icon_container")).to_have_css( @@ -67,7 +67,7 @@ def test_marker_style_should_have_precedence(live_server, openmap, page, bootstr # Now change again at layer level again, it should not change the marker color page.get_by_role("link", name="Manage layers").click() page.locator(".panel").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator(".umap-field-color input").click() page.get_by_title("DarkViolet").first.click() expect(page.locator(".leaflet-marker-icon .icon_container")).to_have_css( @@ -87,12 +87,12 @@ def test_should_update_open_popup_on_edit(live_server, openmap, page, bootstrap) expect(page.locator(".umap-icon-active")).to_be_hidden() page.locator(".leaflet-marker-icon").click() expect(page.locator(".leaflet-popup-content-wrapper")).to_be_visible() - expect(page.get_by_role("heading", name="test marker")).to_be_visible() + expect(page.get_by_text("test marker")).to_be_visible() expect(page.get_by_text("Some description")).to_be_visible() page.get_by_role("button", name="Edit").click() page.locator(".leaflet-marker-icon").click(modifiers=["Shift"]) page.locator('input[name="name"]').fill("test marker edited") - expect(page.get_by_role("heading", name="test marker edited")).to_be_visible() + expect(page.get_by_text("test marker edited")).to_be_visible() def test_should_follow_datalayer_style_when_changing_datalayer( diff --git a/umap/tests/integration/test_edit_polygon.py b/umap/tests/integration/test_edit_polygon.py index b812e181..8ae4ca26 100644 --- a/umap/tests/integration/test_edit_polygon.py +++ b/umap/tests/integration/test_edit_polygon.py @@ -50,7 +50,7 @@ def test_can_edit_on_shift_click(live_server, openmap, page, datalayer): modifier = "Meta" if platform.system() == "Darwin" else "Control" page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit") page.locator(".leaflet-marker-icon").click(modifiers=[modifier, "Shift"]) - expect(page.get_by_role("heading", name="Layer properties")).to_be_visible() + expect(page.get_by_text("Layer properties")).to_be_visible() def test_marker_style_should_have_precedence(live_server, openmap, page, bootstrap): @@ -59,7 +59,7 @@ def test_marker_style_should_have_precedence(live_server, openmap, page, bootstr # Change colour at layer level page.get_by_role("link", name="Manage layers").click() page.locator(".panel").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator(".umap-field-color .define").click() expect(page.locator(".leaflet-overlay-pane path[fill='DarkBlue']")).to_have_count(1) page.get_by_title("DarkRed").first.click() @@ -67,7 +67,7 @@ def test_marker_style_should_have_precedence(live_server, openmap, page, bootstr # Now change at polygon level, it should take precedence page.locator("path").click(modifiers=["Shift"]) - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator("#umap-feature-shape-properties").get_by_text("define").first.click() page.get_by_title("GoldenRod", exact=True).first.click() expect(page.locator(".leaflet-overlay-pane path[fill='GoldenRod']")).to_have_count( @@ -77,7 +77,7 @@ def test_marker_style_should_have_precedence(live_server, openmap, page, bootstr # Now change again at layer level again, it should not change the marker color page.get_by_role("link", name="Manage layers").click() page.locator(".panel").get_by_title("Edit", exact=True).click() - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator(".umap-field-color input").click() page.get_by_title("DarkViolet").first.click() expect(page.locator(".leaflet-overlay-pane path[fill='GoldenRod']")).to_have_count( @@ -99,7 +99,7 @@ def test_can_remove_stroke(live_server, openmap, page, bootstrap): ) page.locator("path").click() page.get_by_role("link", name="Toggle edit mode").click() - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator(".umap-field-stroke .define").first.click() page.locator(".umap-field-stroke label").first.click() expect(page.locator(".leaflet-overlay-pane path[stroke='DarkBlue']")).to_have_count( @@ -111,7 +111,7 @@ def test_can_remove_stroke(live_server, openmap, page, bootstrap): def test_should_reset_style_on_cancel(live_server, openmap, page, bootstrap): page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit") page.locator("path").click(modifiers=["Shift"]) - page.get_by_role("heading", name="Shape properties").click() + page.get_by_text("Shape properties").click() page.locator("#umap-feature-shape-properties").get_by_text("define").first.click() page.get_by_title("GoldenRod", exact=True).first.click() expect(page.locator(".leaflet-overlay-pane path[fill='GoldenRod']")).to_have_count(