@@ -100,6 +107,7 @@
const packageInfoModalHeader = document.getElementById("package-info-modal-header");
const packageInfo = document.getElementById("package-info");
+ const packageInfoLogsVersions = document.getElementById("package-info-logs-versions");
const packageInfoLogsInput = document.getElementById("package-info-logs-input");
const packageInfoLogsCopyButton = document.getElementById("package-info-logs-copy-button");
@@ -285,11 +293,45 @@
convert: response => response.json(),
},
data => {
- const logs = data.map(log_record => {
- return `[${new Date(1000 * log_record.created).toISOString()}] ${log_record.message}`;
- });
- packageInfoLogsInput.textContent = logs.join("\n");
- highlight(packageInfoLogsInput);
+ const selectors = Object
+ .values(
+ data.reduce((acc, log_record) => {
+ const id = `${log_record.version}-${log_record.process_id}`;
+ if (acc[id])
+ acc[id].created = Math.min(log_record.created, acc[id].created);
+ else
+ acc[id] = log_record;
+ return acc;
+ }, {})
+ )
+ .sort(({created: left}, {created: right}) =>
+ right - left
+ )
+ .map(version => {
+ const link = document.createElement("a");
+ link.classList.add("nav-link");
+
+ link.textContent = version.version;
+ link.href = "#";
+ link.onclick = _ => {
+ const logs = data
+ .filter(log_record => log_record.version === version.version && log_record.process_id === version.process_id)
+ .map(log_record => `[${new Date(1000 * log_record.created).toISOString()}] ${log_record.message}`);
+
+ packageInfoLogsInput.textContent = logs.join("\n");
+ highlight(packageInfoLogsInput);
+
+ Array.from(packageInfoLogsVersions.children).forEach(el => el.classList.remove("active"));
+ link.classList.add("active");
+
+ return false;
+ };
+
+ return link;
+ });
+
+ packageInfoLogsVersions.replaceChildren(...selectors);
+ selectors.find(Boolean)?.click();
},
onFailure,
);
diff --git a/package/share/ahriman/templates/utils/style.jinja2 b/package/share/ahriman/templates/utils/style.jinja2
index 5641adf1..1bc8b69c 100644
--- a/package/share/ahriman/templates/utils/style.jinja2
+++ b/package/share/ahriman/templates/utils/style.jinja2
@@ -27,4 +27,8 @@
top: 0;
right: 5px;
}
+
+ .nav-link > .active {
+ color: black;
+ }