101 lines
3.1 KiB
JavaScript
101 lines
3.1 KiB
JavaScript
// 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>`;
|
||
} |