Place admin controls before terminal selector

This commit is contained in:
2026-09-06 20:37:39 +02:00
parent 71f588360a
commit f15491f233
2 changed files with 6 additions and 2 deletions
+2 -2
View File
@@ -162,10 +162,10 @@ static const char s_index_html[] =
"</section>\n"
"<section class=\"panel terminal-panel\" aria-label=\"Terminal workspace\">\n"
"<div class=\"terminal-toolbar\"><span id=\"terminal-title\" class=\"terminal-title\">Live serial stream</span>"
"<button id=\"admin-toggle\" class=\"button\" type=\"button\" hidden>Open admin</button>"
"<div id=\"terminal-selector\" hidden role=\"group\" aria-label=\"Selected terminal\">"
"<button id=\"select-serial\" class=\"button\" type=\"button\" aria-pressed=\"true\">Serial</button> "
"<button id=\"select-admin\" class=\"button\" type=\"button\" aria-pressed=\"false\">Admin</button></div>"
"<button id=\"admin-toggle\" class=\"button\" type=\"button\" hidden>Open admin</button></div>\n"
"<button id=\"select-admin\" class=\"button\" type=\"button\" aria-pressed=\"false\">Admin</button></div></div>\n"
"<p id=\"admin-detail\" class=\"connection-detail\" aria-live=\"polite\" hidden>Admin closed. Serial stays connected.</p>\n"
"<p id=\"output-detail\" class=\"connection-detail\" aria-live=\"polite\">Scrollback: 5000 lines per terminal; oldest lines expire.</p>\n"
"<div id=\"terminal\" class=\"terminal-host\"></div>\n"
+4
View File
@@ -74,6 +74,10 @@ esp_err_t httpd_resp_send(httpd_req_t *, const char *, ssize_t);
assert "frame-ancestors 'none'" in csp and "connect-src 'self'" in csp
assert rendered['html'].index('<script>') < rendered['html'].index('/assets/xterm.js')
assert '<a href="/login">' in rendered['html']
# Keep the mode selector last/rightmost when admin actions are visible.
assert (rendered['html'].index('id="terminal-title"') <
rendered['html'].index('id="admin-toggle"') <
rendered['html'].index('id="terminal-selector"'))
for forbidden in ('localStorage', 'sessionStorage', 'document.cookie', 'console.log', 'innerHTML', 'Authorization'):
assert forbidden not in rendered['script'] + rendered['loader'], forbidden
(tmp / 'rendered.json').write_text(json.dumps(rendered))