Skip to content

Instantly share code, notes, and snippets.

@nicholastay
Last active December 1, 2021 13:10
Show Gist options
  • Save nicholastay/7a8d7883bb7e30ac36da344746b6126a to your computer and use it in GitHub Desktop.
Save nicholastay/7a8d7883bb7e30ac36da344746b6126a to your computer and use it in GitHub Desktop.
Copr RPM Spec Quickview
// ==UserScript==
// @name Copr RPM Spec Quickview
// @namespace nick@windblume
// @match https://copr.fedorainfracloud.org/coprs/*/*/
// @grant none
// @version 0.1.0
// @author Nicholas Tay <[email protected]>
// @description Quickly jump to the spec file for COPR packages (on the project's package page)
// @homepage https://gist.github.com/nicholastay/7a8d7883bb7e30ac36da344746b6126a
// @license Zlib
// @updateURL https://gist.githubusercontent.com/nicholastay/7a8d7883bb7e30ac36da344746b6126a/raw/copr-spec.user.js
// ==/UserScript==
let projectAuthor, projectName;
function getProjectDetails() {
let elems = document.getElementsByClassName("project-name")[0].getElementsByTagName("a");
projectAuthor = elems[0].innerText;
projectName = elems[1].innerText;
}
function specUrl(packageName) {
return `//copr-dist-git.fedorainfracloud.org/cgit/${projectAuthor}/${projectName}/${packageName}.git/tree/${packageName}.spec`;
}
// Main thing
function injectPackagesTable() {
let packageTable = document.getElementsByClassName("datatable")[0];
if (!packageTable)
return console.log("COPRQuickView: No package table found.");
getProjectDetails();
packageTable.querySelector("thead tr").innerHTML += '<th>RPM Spec</th>';
packageTable.querySelectorAll("tbody tr")
.forEach(packageRow => {
let packageName = packageRow.firstElementChild.getElementsByTagName("a")[0].innerText;
packageRow.innerHTML += `<td><a href="${specUrl(packageName)}">View</a></td>`;
});
}
// For convenience from the front project page
function injectProjectPage() {
let panelTitles = document.getElementsByClassName("panel-title");
let buildPanel = null;
for (let i = 0; i < panelTitles.length; ++i) {
if (panelTitles[i].innerText == "Last Build")
buildPanel = panelTitles[i].parentElement.parentElement;
}
if (!buildPanel)
return console.log("COPRQuickView: No last build found.");
getProjectDetails();
let packageName = buildPanel.getElementsByClassName("list-group-item-heading")[0].innerText;
let buildDetails = buildPanel.getElementsByClassName("list-group-item")[0];
buildDetails.innerHTML += `<p class="list-group-item-text">RPM Spec: <a href="${specUrl(packageName)}">View</a></p>`;
}
let page = document.querySelector("ul.nav li.active").innerText.trimLeft();
if (page == "Overview")
injectProjectPage();
else if (page == "Packages")
injectPackagesTable();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment