Benutzername in der Detailansicht immer im Klartext
Das Auge neben dem Benutzernamen schaltete eine Maskierung, die standardmaessig ohnehin aus war. Ein Benutzername ist kein Geheimnis, das Umschalten also ohne Nutzen. Button, Handler und der zugehoerige Zustand entfallen; der Kopieren-Button bleibt. Das Passwort bleibt maskiert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G12DRMpe4UjYDwuRU1sjy1
This commit is contained in:
parent
07a5785580
commit
1b3ed44e6e
3 changed files with 6 additions and 19 deletions
|
|
@ -33,6 +33,8 @@ Die Erweiterungsversion (`manifest.json`) ist unabhängig von der OpenNIT-Server
|
||||||
Zwischenablage entfernt.
|
Zwischenablage entfernt.
|
||||||
|
|
||||||
### Geändert
|
### Geändert
|
||||||
|
- **Benutzername immer sichtbar:** Das Auge zum Ausblenden des Benutzernamens in der Detailansicht ist
|
||||||
|
entfallen – ein Benutzername ist kein Geheimnis. Das Passwort bleibt weiterhin maskiert.
|
||||||
- **Vorschläge weichen der Seite:** Sobald in ein Feld getippt wird, verschwindet die Vault-Liste –
|
- **Vorschläge weichen der Seite:** Sobald in ein Feld getippt wird, verschwindet die Vault-Liste –
|
||||||
darunter erscheint typischerweise die Suche der Seite selbst. Bei Feldern, die erkennbar eine eigene
|
darunter erscheint typischerweise die Suche der Seite selbst. Bei Feldern, die erkennbar eine eigene
|
||||||
Auswahlliste öffnen (etwa Benutzer-Auswahlfelder), erscheinen gar keine Vault-Vorschläge mehr.
|
Auswahlliste öffnen (etwa Benutzer-Auswahlfelder), erscheinen gar keine Vault-Vorschläge mehr.
|
||||||
|
|
|
||||||
|
|
@ -269,9 +269,6 @@ body {
|
||||||
<div class="field-lbl">Benutzername</div>
|
<div class="field-lbl">Benutzername</div>
|
||||||
<div class="field-row">
|
<div class="field-row">
|
||||||
<span class="field-val" id="detailUser"></span>
|
<span class="field-val" id="detailUser"></span>
|
||||||
<button class="field-btn" id="btnRevealUser" title="Anzeigen/Verbergen">
|
|
||||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7-11-7-11-7z"/><circle cx="12" cy="12" r="3"/></svg>
|
|
||||||
</button>
|
|
||||||
<button class="field-btn" id="btnCopyUser" title="Kopieren">
|
<button class="field-btn" id="btnCopyUser" title="Kopieren">
|
||||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ async function init() {
|
||||||
// Detail-Panel
|
// Detail-Panel
|
||||||
$('btnDetailBack').addEventListener('click', closeDetail);
|
$('btnDetailBack').addEventListener('click', closeDetail);
|
||||||
$('btnDetailClose').addEventListener('click', closeDetail);
|
$('btnDetailClose').addEventListener('click', closeDetail);
|
||||||
$('btnRevealUser').addEventListener('click', toggleRevealUser);
|
|
||||||
$('btnCopyUser').addEventListener('click', () => copySecret($('detailUser').dataset.value || '', 'Benutzername kopiert'));
|
$('btnCopyUser').addEventListener('click', () => copySecret($('detailUser').dataset.value || '', 'Benutzername kopiert'));
|
||||||
$('btnRevealPass').addEventListener('click', toggleRevealPass);
|
$('btnRevealPass').addEventListener('click', toggleRevealPass);
|
||||||
$('btnCopyPass').addEventListener('click', copyDetailPassword);
|
$('btnCopyPass').addEventListener('click', copyDetailPassword);
|
||||||
|
|
@ -422,7 +421,7 @@ function openDetail(id) {
|
||||||
const e = entryIndex[String(id)];
|
const e = entryIndex[String(id)];
|
||||||
if (!e) return;
|
if (!e) return;
|
||||||
closeDetailTimers();
|
closeDetailTimers();
|
||||||
detailState = { id: String(id), password: null, revealUser: true, revealPass: false, totpInterval: null };
|
detailState = { id: String(id), password: null, revealPass: false, totpInterval: null };
|
||||||
|
|
||||||
$('listWrap').style.display = 'none';
|
$('listWrap').style.display = 'none';
|
||||||
$('search').closest('.search-wrap').style.display = 'none';
|
$('search').closest('.search-wrap').style.display = 'none';
|
||||||
|
|
@ -457,20 +456,17 @@ function openDetail(id) {
|
||||||
urlLink.style.display = 'none';
|
urlLink.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Benutzername (standardmäßig sichtbar; Auge schaltet Maskierung)
|
// Benutzername – kein Geheimnis, daher immer im Klartext.
|
||||||
const uval = e.username || '';
|
const uval = e.username || '';
|
||||||
const uEl = $('detailUser');
|
const uEl = $('detailUser');
|
||||||
uEl.dataset.value = uval;
|
uEl.dataset.value = uval;
|
||||||
detailState.revealUser = true;
|
|
||||||
if (uval) {
|
if (uval) {
|
||||||
uEl.classList.remove('empty');
|
uEl.classList.remove('empty');
|
||||||
uEl.textContent = uval;
|
uEl.textContent = uval;
|
||||||
$('btnRevealUser').style.display = '';
|
|
||||||
$('btnCopyUser').style.display = '';
|
$('btnCopyUser').style.display = '';
|
||||||
} else {
|
} else {
|
||||||
uEl.classList.add('empty');
|
uEl.classList.add('empty');
|
||||||
uEl.textContent = 'Kein Benutzername';
|
uEl.textContent = 'Kein Benutzername';
|
||||||
$('btnRevealUser').style.display = 'none';
|
|
||||||
$('btnCopyUser').style.display = 'none';
|
$('btnCopyUser').style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -505,14 +501,6 @@ function closeDetail() {
|
||||||
$('search').closest('.search-wrap').style.display = '';
|
$('search').closest('.search-wrap').style.display = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleRevealUser() {
|
|
||||||
const uEl = $('detailUser');
|
|
||||||
const val = uEl.dataset.value || '';
|
|
||||||
if (!val) return;
|
|
||||||
detailState.revealUser = !detailState.revealUser;
|
|
||||||
uEl.textContent = detailState.revealUser ? val : '•'.repeat(Math.min(val.length, 14));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function ensurePassword(id) {
|
async function ensurePassword(id) {
|
||||||
if (detailState && detailState.password !== null) return detailState.password;
|
if (detailState && detailState.password !== null) return detailState.password;
|
||||||
const pw = await new Promise(resolve => {
|
const pw = await new Promise(resolve => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue