clean up deprecated buttons

This commit is contained in:
Pierre committed 2026-10-04 13:43:50 +02:00
1 parent 99422d8cfc
commit 5614ad049d
12 files changed
+36 -161

No files matched your search

+7 -29
View File
@@ -1,19 +1,10 @@
/* Shared UI: VS Code transport or a standalone review fixture. No log HTML is executed. */
(() => {
const inVSCode = typeof acquireVsCodeApi === 'function';
const vscode = inVSCode ? acquireVsCodeApi() : {
async postMessage(message) {
if (message.type !== 'copy') return;
if (navigator.clipboard?.writeText) await navigator.clipboard.writeText(message.text);
else {
const area = document.createElement('textarea'); area.value = message.text;
document.body.append(area); area.select(); document.execCommand?.('copy'); area.remove();
}
window.dispatchEvent(new MessageEvent('message', { data: { type: 'copied' } }));
}, getState() {}, setState() {}
const vscode = typeof acquireVsCodeApi === 'function' ? acquireVsCodeApi() : {
postMessage() {}, getState() {}, setState() {}
};
const saved = vscode.getState() || {};
let entries = [], latest, appliedMessage, displayZone = 'Europe/Berlin', paused = false, selected = saved.selected, mode = saved.mode || 'graph', origin = saved.origin || saved.selected;
let entries = [], latest, appliedMessage, displayZone = 'Europe/Berlin', selected = saved.selected, mode = saved.mode || 'graph', origin = saved.origin || saved.selected;
const expanded = new Set(saved.expanded || []);
const visibleEventGroups = new Map();
const logScrollPositions = new Map();
@@ -42,7 +33,6 @@
return new Intl.DateTimeFormat(undefined, { timeZone: displayZone, day: '2-digit', month: 'short', ...(includeYear ? { year: 'numeric' } : {}), hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23', timeZoneName: 'shortOffset' }).format(new Date(entry.time));
} catch { return entry.timestamp; }
};
const copyText = e => `${formatTime(e, true)} ${e.level} ${e.app}: ${cleanMessage(e)}`;
function timeSince(time) {
const seconds = Math.max(0, Math.floor((Date.now() - Number(time)) / 1000));
if (seconds < 60) return `${seconds} second${seconds === 1 ? '' : 's'} ago`;
@@ -70,7 +60,6 @@
if (days < 365) return `${months} mo ago`;
return `${Math.floor(days / 365)} yr ago`;
}
function copy(text) { if (text) vscode.postMessage({ type: 'copy', text }); }
function logMessages(items, cls) {
const container = node('div', undefined, cls);
items.forEach((entry, index) => {
@@ -361,7 +350,7 @@
? `${logCount} log lines + ${traceCount} ${traceLabel} · Live updates · Up to ${message.limit || 10000} records`
: `${logCount} log lines · Live updates · Up to ${message.limit || 10000} records`;
$('status').title = traceCount
? 'Showing AppDaemon logs and additional records from configured history files.'
? 'Showing AppDaemon logs and additional records from configured log files.'
: 'Reading the configured AppDaemon text logs. Causal links require additional metadata that the base log format does not contain.';
const errorCount = entries.filter(e => (e.kind === 'log' || e.kind.startsWith('initialization_')) && normalLevel(e) === 'ERROR').length;
$('error-count').textContent = `${errorCount} error${errorCount === 1 ? '' : 's'}`;
@@ -376,7 +365,6 @@
setInterval(refreshLastLogAges, 1000);
function selectionActive() { return pointerSelecting || Boolean(window.getSelection()?.toString()); }
window.addEventListener('message', event => {
if (event.data?.type === 'copied') { $('copy').textContent = 'Copied'; setTimeout(() => $('copy').textContent = 'Copy selected log', 1200); return; }
if (event.data?.type === 'clear-result') {
$('clear').disabled = false;
$('clear').textContent = 'Clear logs';
@@ -385,25 +373,16 @@
}
if (event.data?.type !== 'entries') return;
latest = event.data;
if (!paused && !selectionActive()) apply(latest);
else if (!paused) $('status').textContent = 'Updates buffered while text is selected';
if (!selectionActive()) apply(latest);
else $('status').textContent = 'Updates buffered while text is selected';
});
document.addEventListener('pointerdown', event => { pointerSelecting = Boolean(event.target.closest?.('.row, .selected-message, .node, .values')); });
document.addEventListener('pointerup', () => { pointerSelecting = false; });
document.addEventListener('selectionchange', () => { if (!paused && !selectionActive() && latest && latest !== appliedMessage) setTimeout(() => { if (!paused && !selectionActive() && latest !== appliedMessage) apply(latest); }, 0); });
document.addEventListener('keydown', event => {
if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c' && !event.target.closest?.('input, textarea, [contenteditable=true]')) {
const entry = entries.find(e => e.event_id === selected);
const text = window.getSelection()?.toString() || (entry ? (visibleEventGroups.get(entry.event_id) || [entry]).map(copyText).join('\n') : '');
if (text && (inVSCode || !window.getSelection()?.toString())) { event.preventDefault(); copy(text); }
}
});
$('copy').onclick = () => { const e = entries.find(e => e.event_id === selected); copy(window.getSelection()?.toString() || (e ? (visibleEventGroups.get(e.event_id) || [e]).map(copyText).join('\n') : '')); };
document.addEventListener('selectionchange', () => { if (!selectionActive() && latest && latest !== appliedMessage) setTimeout(() => { if (!selectionActive() && latest !== appliedMessage) apply(latest); }, 0); });
['search', 'period', 'level', 'sort'].forEach(id => $(id).addEventListener('input', () => {
errorView = undefined; selected = undefined; origin = undefined;
save(); renderApps(); renderDetail();
}));
$('pause').onclick = () => { paused = !paused; $('pause').textContent = paused ? 'Resume' : 'Pause'; if (!paused && latest) apply(latest); else if (paused) $('status').textContent = 'Display paused · New events are still being collected'; };
$('error-count').onclick = () => {
const leaving = $('level').value === 'ERROR';
if (leaving) {
@@ -424,7 +403,6 @@
if (first) { first.click(); first.closest('.rows').scrollTop = 0; first.focus({ preventScroll: true }); }
}
};
$('import').onclick = () => vscode.postMessage({ type: 'import' });
$('clear').onclick = () => { selected = undefined; origin = undefined; save(); $('clear').disabled = true; $('clear').textContent = 'Clearing…'; vscode.postMessage({ type: 'clear' }); };
$('graph-mode').onclick = () => { mode = 'graph'; save(); renderDetail(); };
$('tree-mode').onclick = () => { mode = 'tree'; save(); renderDetail(); };