fix(tasks): use canonical section loader for task-log loading state
The task-log "Loading logs..." state rendered as a bare left-aligned text
line (or a tiny ad-hoc 16px spinner overlay), which read as unfinished next
to the rest of the UI. Swap all three log-loading spots (initial placeholder,
toggle-open fetch, running-task stream placeholder) to the canonical
window.lpLoadingBox('Loading logs…'), and scope .lp-loading inside the log
terminal box to fill it and drop its own card chrome so the spinner sits dead
centre over the terminal surface instead of a box-in-a-box. Widen the stream
overlay-removal selector to also clear .lp-loading.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
641b152a82
commit
6fd7b0bf61
@ -640,6 +640,19 @@
|
|||||||
border: 1px solid rgba(var(--text-rgb), 0.10);
|
border: 1px solid rgba(var(--text-rgb), 0.10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Canonical section loader (window.lpLoadingBox) inside a task-log
|
||||||
|
terminal box: fill the whole container and centre the spinner over the
|
||||||
|
terminal surface, dropping the loader's own card chrome so it reads as
|
||||||
|
one panel rather than a box-in-a-box. */
|
||||||
|
.task-logs .log-container .lp-loading {
|
||||||
|
height: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: none;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.meta-item {
|
.meta-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
|
|||||||
@ -259,7 +259,7 @@ Object.assign(TasksManager.prototype, {
|
|||||||
<div class="log-container terminal-style" id="logs-${task.id}" style="height: 200px; overflow-y: auto; position: relative;">
|
<div class="log-container terminal-style" id="logs-${task.id}" style="height: 200px; overflow-y: auto; position: relative;">
|
||||||
${hasLogs ?
|
${hasLogs ?
|
||||||
task.log.map(log => `<div class="log-entry">${this.taskManager.parseAnsiColors(log)}</div>`).join('') :
|
task.log.map(log => `<div class="log-entry">${this.taskManager.parseAnsiColors(log)}</div>`).join('') :
|
||||||
'<div style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(10, 18, 36, 0.85); display: flex; align-items: center; justify-content: center; z-index: 10;"><div class="loading-spinner" style="width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.18); border-top: 2px solid #fff; border-radius: 50%; animation: spin 1s linear infinite; margin-right: 8px;"></div>Loading logs...</div></div>'
|
((typeof window.lpLoadingBox === 'function') ? window.lpLoadingBox('Loading logs…') : '<div class="log-entry">Loading logs…</div>')
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -22,7 +22,7 @@ Object.assign(TasksManager.prototype, {
|
|||||||
const render = () => {
|
const render = () => {
|
||||||
const logsContainer = document.getElementById(`logs-${taskId}`);
|
const logsContainer = document.getElementById(`logs-${taskId}`);
|
||||||
if (!logsContainer) return;
|
if (!logsContainer) return;
|
||||||
const overlay = logsContainer.querySelector('div[style*="position: absolute"]');
|
const overlay = logsContainer.querySelector('.lp-loading, div[style*="position: absolute"]');
|
||||||
if (overlay) overlay.remove();
|
if (overlay) overlay.remove();
|
||||||
let preElement = logsContainer.querySelector('pre.output-content');
|
let preElement = logsContainer.querySelector('pre.output-content');
|
||||||
if (!preElement) {
|
if (!preElement) {
|
||||||
@ -114,7 +114,9 @@ Object.assign(TasksManager.prototype, {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
logsContainer.innerHTML = '<div class="log-entry">🔄 Loading logs...</div>';
|
logsContainer.innerHTML = (typeof window.lpLoadingBox === 'function')
|
||||||
|
? window.lpLoadingBox('Loading logs…')
|
||||||
|
: '<div class="log-entry">Loading logs…</div>';
|
||||||
const isScrolledToBottom = logsContainer.scrollHeight - logsContainer.scrollTop <= logsContainer.clientHeight + 10;
|
const isScrolledToBottom = logsContainer.scrollHeight - logsContainer.scrollTop <= logsContainer.clientHeight + 10;
|
||||||
|
|
||||||
const logResponse = await fetch(`/read-file?path=tasks/${taskId}.log`);
|
const logResponse = await fetch(`/read-file?path=tasks/${taskId}.log`);
|
||||||
@ -276,7 +278,7 @@ Object.assign(TasksManager.prototype, {
|
|||||||
const logsHtml = `
|
const logsHtml = `
|
||||||
<div class="task-logs">
|
<div class="task-logs">
|
||||||
<div class="log-container terminal-style" id="logs-${taskId}" style="height: 200px; overflow-y: auto; position: relative;">
|
<div class="log-container terminal-style" id="logs-${taskId}" style="height: 200px; overflow-y: auto; position: relative;">
|
||||||
<div style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(10, 18, 36, 0.85); display: flex; align-items: center; justify-content: center; z-index: 10;"><div class="loading-spinner" style="width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.18); border-top: 2px solid #fff; border-radius: 50%; animation: spin 1s linear infinite; margin-right: 8px;"></div>Loading logs...</div></div>
|
${(typeof window.lpLoadingBox === 'function') ? window.lpLoadingBox('Loading logs…') : '<div class="log-entry">Loading logs…</div>'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user