Bugtracker in „Bugs" umbenennen und Erfolgsmeldung einblenden

Reiter, Panel, Käfer-Beschriftungen und Doku sprechen von Bugs statt
Fehlern. Nach dem Senden schließt sich das Panel sofort und eine
Einblendung bestätigt die Meldung.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
ferdi2goandClaude Fable 5.1 committed 2026-10-15 08:27:01 +00:00
1 parent 4ec23ccd25
commit e8ab95159e
5 files changed
+32 -31

No files matched your search

+11 -10
View File
@@ -51,7 +51,7 @@ async function api(path, { method = 'GET', body, raw } = {}) {
}
// ---------- Anmeldung zum Bearbeiten ----------
const EDITOR_VIEWS = ['personen', 'abwesenheiten', 'anfragen', 'fehler', 'einstellungen'];
const EDITOR_VIEWS = ['personen', 'abwesenheiten', 'anfragen', 'bugs', 'einstellungen'];
function isEditor() { return !state.data || state.data.auth?.editor !== false; }
function applyAuthUI() {
const a = state.data?.auth || { protected: false, editor: true };
@@ -148,7 +148,7 @@ function avatarEl(p, cls = '') {
// ---------- Navigation ----------
function showView(name) {
const known = ['kalender', 'personen', 'abwesenheiten', 'anfragen', 'fehler', 'einstellungen'];
const known = ['kalender', 'personen', 'abwesenheiten', 'anfragen', 'bugs', 'einstellungen'];
if (!known.includes(name)) name = 'kalender';
if (!isEditor() && EDITOR_VIEWS.includes(name)) name = 'kalender';
if (name === 'abwesenheiten' && state.data) prepareAbsenceImport();
@@ -1140,14 +1140,14 @@ $('#holiday-add').addEventListener('submit', async (e) => {
} catch (err) { toast(err.message, true); }
});
// ---------- Fehler melden (für alle) ----------
// ---------- Bug melden (für alle) ----------
const bugPanel = $('#bug-panel');
const bugCanvas = $('#bug-canvas');
const bugState = { base: null, rects: [], draft: null, sending: false, capture: null, closeTimer: null, target: null };
function viewName() {
const v = location.hash.slice(1) || 'kalender';
const names = { kalender: 'Kalender', personen: 'Personen', abwesenheiten: 'Abwesenheiten', anfragen: 'Anfragen', fehler: 'Fehler', einstellungen: 'Einstellungen' };
const names = { kalender: 'Kalender', personen: 'Personen', abwesenheiten: 'Abwesenheiten', anfragen: 'Anfragen', bugs: 'Bugs', einstellungen: 'Einstellungen' };
const month = v === 'kalender' ? ` (${MONTHS[state.month.getMonth()]} ${state.month.getFullYear()})` : '';
return `${names[v] || v}${month}${isEditor() ? ', angemeldet' : ''}`;
}
@@ -1351,12 +1351,13 @@ $('#bug-form').addEventListener('submit', async (e) => {
return;
}
bugState.sending = false;
out.textContent = 'Danke, der Fehler ist gemeldet.';
bugState.closeTimer = setTimeout(() => { bugState.closeTimer = null; closeBugPanel(); }, 2000);
// Panel sofort schließen und die Bestätigung unten einblenden
closeBugPanel();
toast('Bug erfolgreich gemeldet. Danke für den Hinweis.');
if (isEditor()) load().catch((err) => toast(err.message, true));
});
// ---------- Fehlermeldungen bearbeiten (nur Bearbeiter) ----------
// ---------- Bugs bearbeiten (nur Bearbeiter) ----------
const canCopyImages = () => Boolean(window.isSecureContext && navigator.clipboard && navigator.clipboard.write && window.ClipboardItem);
async function copyText(text) {
if (window.isSecureContext && navigator.clipboard?.writeText) { await navigator.clipboard.writeText(text); return; }
@@ -1394,7 +1395,7 @@ function bugRow(b) {
a.title = 'Screenshot in voller Größe öffnen';
const img = document.createElement('img');
img.src = `bugs/${b.id}.png`;
img.alt = 'Screenshot zur Fehlermeldung';
img.alt = 'Screenshot zum Bug';
img.loading = 'lazy';
a.appendChild(img);
li.appendChild(a);
@@ -1431,7 +1432,7 @@ function bugRow(b) {
}
if (b.status === 'offen') btn('Erledigt', 'ghost', () => run(() => api(`api/bugs/${b.id}`, { method: 'PUT', body: { status: 'erledigt' } }), 'Als erledigt markiert.'));
else btn('Wieder öffnen', 'ghost', () => run(() => api(`api/bugs/${b.id}`, { method: 'PUT', body: { status: 'offen' } })));
btn('Löschen', 'ghost danger', () => { if (confirm('Diese Fehlermeldung samt Screenshot löschen?')) run(() => api(`api/bugs/${b.id}`, { method: 'DELETE' }), 'Meldung gelöscht.'); });
btn('Löschen', 'ghost danger', () => { if (confirm('Diesen Bug samt Screenshot löschen?')) run(() => api(`api/bugs/${b.id}`, { method: 'DELETE' }), 'Bug gelöscht.'); });
grow.appendChild(actions);
li.appendChild(grow);
return li;
@@ -1443,7 +1444,7 @@ function renderBugs() {
$('#bugs-clipboard-hint').hidden = canCopyImages();
const list = $('#bug-list');
list.textContent = '';
if (open.length === 0) list.innerHTML = '<li class="hint">Keine offenen Fehlermeldungen.</li>';
if (open.length === 0) list.innerHTML = '<li class="hint">Keine offenen Bugs.</li>';
for (const b of open) list.appendChild(bugRow(b));
const doneList = $('#bug-list-done');
doneList.textContent = '';