diff --git a/Overlord-Server/public/assets/build.js b/Overlord-Server/public/assets/build.js index 6f02b8a..951d95e 100644 --- a/Overlord-Server/public/assets/build.js +++ b/Overlord-Server/public/assets/build.js @@ -15,6 +15,12 @@ const buildStatus = document.getElementById("build-status"); const buildStatusText = document.getElementById("build-status-text"); const buildOutputDiv = document.getElementById("build-output"); const buildOutputContainer = document.getElementById("build-output-container"); +const buildLogIssueCount = document.getElementById("build-log-issue-count"); +const buildLogFilterButtons = document.querySelectorAll("[data-build-log-filter]"); +const buildLogWrapBtn = document.getElementById("build-log-wrap-btn"); +const buildLogFollowBtn = document.getElementById("build-log-follow-btn"); +const buildLogCopyBtn = document.getElementById("build-log-copy-btn"); +const buildLogClearBtn = document.getElementById("build-log-clear-btn"); const buildResults = document.getElementById("build-results"); const buildFilesDiv = document.getElementById("build-files"); const logoutBtn = document.getElementById("logout-btn"); @@ -199,6 +205,147 @@ function updateServerUrlCurrentButton() { } let isBuilding = false; +const BUILD_LOG_MAX_VISIBLE_LINES = 5000; +const BUILD_LOG_WRAP_KEY = "overlord.buildLog.wrap.v1"; +let buildLogRawChunks = []; +let buildLogLineCount = 0; +let buildLogIssueTotal = 0; +let buildLogFollow = true; + +function updateBuildLogSummary() { + if (buildLogIssueCount) buildLogIssueCount.textContent = buildLogIssueTotal.toLocaleString(); +} + +function setBuildLogFollow(enabled) { + buildLogFollow = enabled; + buildLogFollowBtn?.setAttribute("aria-pressed", String(enabled)); + if (enabled && buildOutputContainer) { + buildOutputContainer.scrollTop = buildOutputContainer.scrollHeight; + } +} + +function resetBuildLog(showEmptyState = false) { + buildLogRawChunks = []; + buildLogLineCount = 0; + buildLogIssueTotal = 0; + if (buildOutputDiv) { + buildOutputDiv.innerHTML = showEmptyState + ? '