diff --git a/package/share/ahriman/templates/build-status/package-info-modal.jinja2 b/package/share/ahriman/templates/build-status/package-info-modal.jinja2 index edd260d3..dd670524 100644 --- a/package/share/ahriman/templates/build-status/package-info-modal.jinja2 +++ b/package/share/ahriman/templates/build-status/package-info-modal.jinja2 @@ -20,6 +20,13 @@
+
+
upstream
+
+
AUR
+
+
+
packages
@@ -52,11 +59,13 @@ const packageInfoModalHeader = $("#package-info-modal-header"); const packageInfo = $("#package-info"); packageInfoModal.on("hidden.bs.modal", () => { + packageInfoAurUrl.empty(); packageInfoDepends.empty(); packageInfoGroups.empty(); packageInfoLicenses.empty(); packageInfoPackager.empty(); packageInfoPackages.empty(); + packageInfoUpstreamUrl.empty(); packageInfoVersion.empty(); packageInfoVariablesDiv.empty(); @@ -71,11 +80,13 @@ const packageInfoLogsInput = $("#package-info-logs-input"); const packageInfoLogsCopyButton = $("#package-info-logs-copy-button"); + const packageInfoAurUrl = $("#package-info-aur-url"); const packageInfoDepends = $("#package-info-depends"); const packageInfoGroups = $("#package-info-groups"); const packageInfoLicenses = $("#package-info-licenses"); const packageInfoPackager = $("#package-info-packager"); const packageInfoPackages = $("#package-info-packages"); + const packageInfoUpstreamUrl = $("#package-info-upstream-url"); const packageInfoVersion = $("#package-info-version"); const packageInfoVariablesDiv = $("#package-info-variables-div"); @@ -170,6 +181,8 @@ success: response => { const description = response.find(Boolean); const packages = Object.keys(description.package.packages); + const aurUrl = description.package.remote.web_url; + const upstreamUrls = Object.values(description.package.packages).map(single => single.url); packageInfo.text(`${description.package.base} ${description.status.status} at ${new Date(1000 * description.status.timestamp).toISOStringShort()}`); @@ -177,6 +190,7 @@ packageInfoModalHeader.addClass("modal-header"); headerClass(description.status.status).forEach(clz => packageInfoModalHeader.addClass(clz)); + packageInfoAurUrl.html(aurUrl ? safeLink(aurUrl, aurUrl, "AUR link").outerHTML : ""); packageInfoDepends.html(listToTable( Object.values(description.package.packages) .reduce((accumulator, currentValue) => { @@ -189,6 +203,7 @@ packageInfoLicenses.html(listToTable(extractListProperties(description.package, "licenses"))); packageInfoPackager.text(description.package.packager); packageInfoPackages.html(listToTable(packages)); + packageInfoUpstreamUrl.html(upstreamUrls.map(url => safeLink(url, url, "upstream link").outerHTML).join("
")); packageInfoVersion.text(description.package.version); hideInfoControls(false); diff --git a/package/share/ahriman/templates/build-status/table.jinja2 b/package/share/ahriman/templates/build-status/table.jinja2 index 959c57f7..2d9e52c9 100644 --- a/package/share/ahriman/templates/build-status/table.jinja2 +++ b/package/share/ahriman/templates/build-status/table.jinja2 @@ -149,7 +149,7 @@ const web_url = description.package.remote.web_url; return { id: package_base, - base: web_url ? `${safe(package_base)}` : safe(package_base), + base: web_url ? safeLink(web_url, package_base, package_base).outerHTML : safe(package_base), version: safe(description.package.version), packager: description.package.packager ? safe(description.package.packager) : "", packages: listToTable(Object.keys(description.package.packages)), diff --git a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 b/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 index 0a01e089..3384f129 100644 --- a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 +++ b/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 @@ -79,6 +79,15 @@ .replace(/"/g, """); } + // because I'm tired of safe element generation + function safeLink(url, text, title) { + const element = document.createElement("a"); + element.href = url; + element.innerText = text; + if (title) element.title = title; + return element; + } + Date.prototype.toISOStringShort = function() { const pad = number => String(number).padStart(2, "0"); return `${this.getFullYear()}-${pad(this.getMonth() + 1)}-${pad(this.getDate())} ${pad(this.getHours())}:${pad(this.getMinutes())}:${pad(this.getSeconds())}`;