Unify browser connection controls (Connect / Disconnect)

This commit is contained in:
2026-09-01 22:34:02 +02:00
parent 10b6d65fa9
commit 6318f0c770
5 changed files with 18 additions and 15 deletions
+14 -11
View File
@@ -119,8 +119,7 @@ static const char s_index_html[] =
"<div class=\"button-row\">\n"
"<button id=\"request-control\" class=\"button primary\" type=\"button\" disabled>Request control</button>\n"
"<button id=\"release-control\" class=\"button danger\" type=\"button\" disabled>Release control</button>\n"
"<button id=\"disconnect\" class=\"button danger\" type=\"button\">Disconnect</button>\n"
"<button id=\"reconnect\" class=\"button\" type=\"button\">Reconnect</button>\n"
"<button id=\"connection-toggle\" class=\"button danger\" type=\"button\">Disconnect</button>\n"
"</div>\n"
"<p id=\"input-state\" class=\"input-state\" data-enabled=\"false\" aria-live=\"polite\">"
"Observer mode — terminal input is disabled.</p>\n"
@@ -152,8 +151,7 @@ static const char s_app_js[] =
"const connectionDetail = element('connection-detail');\n"
"const requestControl = element('request-control');\n"
"const releaseControl = element('release-control');\n"
"const disconnectButton = element('disconnect');\n"
"const reconnectButton = element('reconnect');\n"
"const connectionToggle = element('connection-toggle');\n"
"const terminalHost = element('terminal');\n"
"const terminal = new Terminal({\n"
" allowProposedApi: false, convertEol: false, cursorBlink: true, disableStdin: true,\n"
@@ -196,7 +194,10 @@ static const char s_app_js[] =
" terminal.options.disableStdin = !writer;\n"
" requestControl.disabled = !socketOpen() || writer;\n"
" releaseControl.disabled = !socketOpen() || !writer;\n"
" disconnectButton.disabled = unloading || (!reconnectEnabled && socket === null && ticketAbort === null);\n"
" const connectionActive = reconnectEnabled || socket !== null || ticketAbort !== null || reconnectTimer !== null;\n"
" connectionToggle.disabled = unloading;\n"
" connectionToggle.textContent = connectionActive ? 'Disconnect' : 'Connect';\n"
" connectionToggle.classList.toggle('danger', connectionActive);\n"
" inputState.dataset.enabled = writer ? 'true' : 'false';\n"
" inputState.textContent = writer\n"
" ? 'Writer mode — terminal input is enabled.'\n"
@@ -335,7 +336,14 @@ static const char s_app_js[] =
"releaseControl.addEventListener('click', () => {\n"
" if (role === 'writer' && socketOpen()) socket.send('release-writer');\n"
"});\n"
"disconnectButton.addEventListener('click', () => {\n"
"connectionToggle.addEventListener('click', () => {\n"
" const connectionActive = reconnectEnabled || socket !== null || ticketAbort !== null || reconnectTimer !== null;\n"
" if (!connectionActive) {\n"
" reconnectEnabled = true;\n"
" reconnectDelay = 1000;\n"
" connect();\n"
" return;\n"
" }\n"
" reconnectEnabled = false;\n"
" ++connectionGeneration;\n"
" clearReconnectTimer();\n"
@@ -346,11 +354,6 @@ static const char s_app_js[] =
" setRole('observer');\n"
" setConnection('Disconnected', 'warn', 'Disconnected by user. Automatic reconnect is paused.');\n"
"});\n"
"reconnectButton.addEventListener('click', () => {\n"
" reconnectEnabled = true;\n"
" reconnectDelay = 1000;\n"
" connect();\n"
"});\n"
"const fitTerminal = () => {\n"
" fitFrame = 0;\n"
" const bounds = terminalHost.getBoundingClientRect();\n"