Viel neues
This commit is contained in:
101
qa-tool/htdocs/js/ui.js
Normal file
101
qa-tool/htdocs/js/ui.js
Normal file
@@ -0,0 +1,101 @@
|
||||
// auto-split module
|
||||
|
||||
|
||||
function updateStatusClass(selectEl) {
|
||||
if (!selectEl) return;
|
||||
const tr = selectEl.closest('tr');
|
||||
['st-pass', 'st-fail', 'st-skip', 'st-blocked'].forEach(c => selectEl.classList.remove(c));
|
||||
['row-pass', 'row-fail', 'row-skip', 'row-blocked'].forEach(c => tr.classList.remove(c));
|
||||
const v = selectEl.value || '';
|
||||
if (!v) return;
|
||||
selectEl.classList.add('st-' + v);
|
||||
tr.classList.add('row-' + v);
|
||||
}
|
||||
|
||||
|
||||
function bind() {
|
||||
const b = document.getElementById('btnPushDocBee');
|
||||
if (b) {
|
||||
b.removeAttribute('disabled');
|
||||
b.classList.remove('is-busy');
|
||||
b.style.pointerEvents = 'auto';
|
||||
b.addEventListener('click', postToDocBee, {
|
||||
once: false
|
||||
});
|
||||
}
|
||||
const p = document.getElementById('btnPrintPDF');
|
||||
const btn = document.getElementById('btnExportAll');
|
||||
if (btn) {
|
||||
btn.addEventListener('click', e => {
|
||||
e.preventDefault();
|
||||
exportAll().catch(err => alert('Export error: ' + err.message));
|
||||
});
|
||||
console.log('Export-Button gebunden');
|
||||
} else {
|
||||
alert('Export-Button nicht gefunden (id=btnExportAll).');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function updateTokenBadge(state) {
|
||||
const el = els.docbeeTokenStatus;
|
||||
if (!el) return;
|
||||
const has = !!(typeof DOCBEE_TOKEN !== 'undefined' && String(DOCBEE_TOKEN || '').trim().length > 10);
|
||||
el.classList.remove('ok', 'bad', 'warn');
|
||||
if (state === 'bad') {
|
||||
el.textContent = 'DocBee: ungültig/401';
|
||||
el.classList.add('bad');
|
||||
return;
|
||||
}
|
||||
if (state === 'ok' || (state === undefined && has)) {
|
||||
el.textContent = 'DocBee: Token gesetzt';
|
||||
el.classList.add('ok');
|
||||
return;
|
||||
}
|
||||
el.textContent = 'DocBee: fehlt';
|
||||
el.classList.add('warn');
|
||||
}
|
||||
|
||||
|
||||
function checkRequired(run) {
|
||||
const missing = run.steps.filter(s => (s.kind || 'step') === 'step' && s.required && !s.status);
|
||||
if (missing.length > 0) {
|
||||
alert("Folgende Pflichtschritte haben keinen Status:\n" +
|
||||
missing.map(s => `${s.id} – ${s.title}`).join("\n"));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const badge = (status) => {
|
||||
const map = {
|
||||
pass: {
|
||||
txt: '✅ PASS',
|
||||
bg: '#DCFCE7',
|
||||
bd: '#22c55e'
|
||||
},
|
||||
fail: {
|
||||
txt: '❌ FAIL',
|
||||
bg: '#FEE2E2',
|
||||
bd: '#ef4444'
|
||||
},
|
||||
skip: {
|
||||
txt: '⏭️ SKIP',
|
||||
bg: '#E5E7EB',
|
||||
bd: '#6b7280'
|
||||
},
|
||||
blocked: {
|
||||
txt: '⛔ BLOCK',
|
||||
bg: '#FEF3C7',
|
||||
bd: '#f59e0b'
|
||||
},
|
||||
'': {
|
||||
txt: '—',
|
||||
bg: '#F3F4F6',
|
||||
bd: '#9ca3af'
|
||||
}
|
||||
};
|
||||
const m = map[status || ''] || map[''];
|
||||
return `<span style="display:inline-block;padding:2px 8px;border:1px solid ${m.bd};border-radius:999px;background:${m.bg};font-weight:600;font-size:12px">${m.txt}</span>`;
|
||||
}
|
||||
Reference in New Issue
Block a user