Last active
December 1, 2021 13:10
-
-
Save nicholastay/7a8d7883bb7e30ac36da344746b6126a to your computer and use it in GitHub Desktop.
Copr RPM Spec Quickview
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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