Skip to content

Commit 7522214

Browse files
authored
Keep panel close button accessible with external styles (#2128)
Swapped order of header and button HTML elements to prevent button becoming inaccessible with external CSS
1 parent 2eca4f7 commit 7522214

File tree

10 files changed

+11
-9
lines changed

10 files changed

+11
-9
lines changed

debug_toolbar/static/debug_toolbar/js/utils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ function ajax(url, init) {
9090
})
9191
.catch((error) => {
9292
const win = document.getElementById("djDebugWindow");
93-
win.innerHTML = `<div class="djDebugPanelTitle"><button type="button" class="djDebugClose">»</button><h3>${error.message}</h3></div>`;
93+
win.innerHTML = `<div class="djDebugPanelTitle"><h3>${error.message}</h3><button type="button" class="djDebugClose">»</button></div>`;
9494
$$.show(win);
9595
throw error;
9696
});

debug_toolbar/templates/debug_toolbar/includes/panel_content.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
{% if panel.has_content and panel.enabled %}
44
<div id="{{ panel.panel_id }}" class="djdt-panelContent djdt-hidden">
55
<div class="djDebugPanelTitle">
6-
<button type="button" class="djDebugClose">×</button>
76
<h3>{{ panel.title }}</h3>
7+
<button type="button" class="djDebugClose">×</button>
88
</div>
99
<div class="djDebugPanelContent">
1010
{% if toolbar.should_render_panels %}

debug_toolbar/templates/debug_toolbar/panels/sql_explain.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% load i18n %}
22
<div class="djDebugPanelTitle">
3-
<button type="button" class="djDebugClose">»</button>
43
<h3>{% translate "SQL explained" %}</h3>
4+
<button type="button" class="djDebugClose">»</button>
55
</div>
66
<div class="djDebugPanelContent">
77
<div class="djdt-scroll">

debug_toolbar/templates/debug_toolbar/panels/sql_profile.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% load i18n %}
22
<div class="djDebugPanelTitle">
3-
<button type="button" class="djDebugClose">»</button>
43
<h3>{% translate "SQL profiled" %}</h3>
4+
<button type="button" class="djDebugClose">»</button>
55
</div>
66
<div class="djDebugPanelContent">
77
<div class="djdt-scroll">

debug_toolbar/templates/debug_toolbar/panels/sql_select.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% load i18n %}
22
<div class="djDebugPanelTitle">
3-
<button type="button" class="djDebugClose">»</button>
43
<h3>{% translate "SQL selected" %}</h3>
4+
<button type="button" class="djDebugClose">»</button>
55
</div>
66
<div class="djDebugPanelContent">
77
<div class="djdt-scroll">

debug_toolbar/templates/debug_toolbar/panels/template_source.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% load i18n %}
22
<div class="djDebugPanelTitle">
3-
<button type="button" class="djDebugClose">»</button>
43
<h3>{% translate "Template source:" %} <code>{{ template_name }}</code></h3>
4+
<button type="button" class="djDebugClose">»</button>
55
</div>
66
<div class="djDebugPanelContent">
77
<div class="djdt-scroll">

docs/changes.rst

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Pending
1515
template loaders.
1616
* Introduced `djade <https://github.com/adamchainz/djade>`__ to format Django
1717
templates.
18+
* Swapped display order of panel header and close button to prevent style
19+
conflicts
1820

1921
5.1.0 (2025-03-20)
2022
------------------

tests/panels/test_custom.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ def test_escapes_panel_title(self):
3333
"""
3434
<div id="CustomPanel" class="djdt-panelContent djdt-hidden">
3535
<div class="djDebugPanelTitle">
36-
<button type="button" class="djDebugClose">×</button>
3736
<h3>Title with special chars &amp;&quot;&#39;&lt;&gt;</h3>
37+
<button type="button" class="djDebugClose">×</button>
3838
</div>
3939
<div class="djDebugPanelContent">
4040
<div class="djdt-loader"></div>

tests/panels/test_settings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ def test_panel_title(self):
2424
"""
2525
<div id="SettingsPanel" class="djdt-panelContent djdt-hidden">
2626
<div class="djDebugPanelTitle">
27-
<button type="button" class="djDebugClose">×</button>
2827
<h3>Settings from None</h3>
28+
<button type="button" class="djDebugClose">×</button>
2929
</div>
3030
<div class="djDebugPanelContent">
3131
<div class="djdt-loader"></div>

tests/test_integration.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ def test_displays_server_error(self):
812812
debug_window = self.selenium.find_element(By.ID, "djDebugWindow")
813813
self.selenium.find_element(By.CLASS_NAME, "BuggyPanel").click()
814814
self.wait.until(EC.visibility_of(debug_window))
815-
self.assertEqual(debug_window.text, "»\n500: Internal Server Error")
815+
self.assertEqual(debug_window.text, "500: Internal Server Error\n»")
816816

817817
def test_toolbar_language_will_render_to_default_language_when_not_set(self):
818818
self.get("/regular/basic/")

0 commit comments

Comments
 (0)