// @ts-nocheck import { getAll, clear, exportJson, subscribe, formatTs, formatType } from '../utils/audit-log.js'; let _badgeCountEl = null; let _filter = 'all'; let _expanded = new Set(); let _renderFn = null; export function initBadge(sidebarEl) { _badgeCountEl = sidebarEl.querySelector('#audit-count'); sidebarEl.querySelector('#btn-open-audit').addEventListener('click', () => { showAuditDialog(); }); subscribe(() => updateBadge()); updateBadge(); } function updateBadge() { if (_badgeCountEl) { _badgeCountEl.textContent = getAll().length; } } export function showAuditDialog() { const overlay = document.createElement('div'); overlay.className = 'dialog-overlay'; overlay.innerHTML = `
${escapeHtml(display)}`;
tbody.appendChild(detail);
}
}
};
_renderFn = renderTable;
renderTable();
overlay.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', () => {
_filter = btn.dataset.filter;
overlay.querySelectorAll('.filter-btn').forEach(b => b.classList.toggle('active', b === btn));
renderTable();
});
});
overlay.querySelector('#audit-clear').addEventListener('click', () => {
if (!confirm('确定清空所有日志?此操作不可撤销。')) return;
clear();
_expanded.clear();
});
overlay.querySelector('#audit-export').addEventListener('click', () => {
exportJson();
});
const close = () => {
const unsub = subscribe(() => {
if (document.body.contains(overlay)) {
renderTable();
} else {
unsub();
}
});
overlay.remove();
document.body.classList.remove('modal-open');
};
overlay.querySelector('.dialog-close').addEventListener('click', close);
overlay.addEventListener('click', (e) => {
if (e.target === overlay) close();
});
const escHandler = (e) => {
if (e.key === 'Escape') {
close();
document.removeEventListener('keydown', escHandler);
}
};
document.addEventListener('keydown', escHandler);
const unsubOnLog = subscribe(() => {
if (document.body.contains(overlay)) {
renderTable();
} else {
unsubOnLog();
}
});
}
function escapeHtml(s) {
if (s == null) return '';
return String(s)
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"');
}