diff --git a/internal/server/web/static/account.js b/internal/server/web/static/account.js index 9233800..5991672 100644 --- a/internal/server/web/static/account.js +++ b/internal/server/web/static/account.js @@ -32,13 +32,8 @@ '
Аккаунт' + '
' + '
' + - '
' + - '

Ключи доступа

' + - '

Вход отпечатком, лицом, PIN-кодом устройства или аппаратным ключом. Ключей может быть несколько - например, телефон и ноутбук.

' + - ' ' + - '
' + - '
' + - '

' + + '
' + + '
' + ' ' + ' ' + '

Спрашивается в каждой новой вкладке; при перезагрузке той же вкладки - нет.

' + - '
' + + '
' + + '

Ключи доступа

' + + '

Вход отпечатком, лицом, PIN-кодом устройства или аппаратным ключом. Ключей может быть несколько - например, телефон и ноутбук.

' + + ' ' + + '
' + + '
' + + '

' + + '
' + '
'; document.body.appendChild(dlg); dlg.querySelector('.acct-out [name=csrf]').value = decodeURIComponent(csrf); diff --git a/internal/server/web/static/app.css b/internal/server/web/static/app.css index 9901f30..a397011 100644 --- a/internal/server/web/static/app.css +++ b/internal/server/web/static/app.css @@ -209,7 +209,13 @@ input.sw:disabled { opacity: .45; cursor: not-allowed; } .acct-pingrace select { width: auto; flex: none; } .acct-pinmsg { margin: 8px 0 0; font-size: 13px; color: var(--ok, #3fb950); min-height: 0; } .acct-pinmsg.bad { color: var(--danger); } -.acct-out { margin-top: 10px; padding-top: 14px; border-top: 1px solid var(--border); display: flex; justify-content: flex-end; } +.acct-out { margin: 0 0 0 auto; flex: none; } +.acct-whotext { min-width: 0; } +/* Ключи доступа below the rest, after a line. */ +.acct-keysec { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); } +.acct-keysec h3 { margin-top: 0; } +.acct-add input, .acct-add button { height: 40px; box-sizing: border-box; } +.acct-add button { padding-top: 0; padding-bottom: 0; } /* Sign-in page. */ .or { display: flex; align-items: center; gap: 10px; color: var(--muted); font-size: 13px; margin: 18px 0 4px; } .or::before, .or::after { content: ""; flex: 1; border-top: 1px solid var(--border); } diff --git a/internal/server/web/static/filepane.js b/internal/server/web/static/filepane.js index 7110a1b..a3d4882 100644 --- a/internal/server/web/static/filepane.js +++ b/internal/server/web/static/filepane.js @@ -208,7 +208,9 @@ this.q('.fp-path').value = this.cwd; this.message(''); this.render(); - this.setState('ok', this.cwd); + // The status says whether it is connected, as a terminal's does; the + // folder is in the pane itself. + this.setState('ok', this.ssh ? 'SSH: ' + this.source.label + ':' + (this.ssh.port || 22) : 'подключено'); } async go(path) { const r = await this.api('list', {path});