Updated RH_jira_bz_linker

- Isolated function
- updated namespace
This commit is contained in:
Sagi Dayan 2021-07-08 17:36:07 +03:00
parent 87261d33a0
commit eeb290586b
Signed by: sagi
GPG key ID: FAB96BFC63B46458

View file

@ -1,67 +1,69 @@
// ==UserScript== // ==UserScript==
// @name RedHat jira BZ Linker // @name RedHat jira BZ Linker
// @version 0.0.1 // @version 0.0.1
// @namespace http://arantius.com/misc/greasemonkey/ // @namespace https://git.sagidayan.com/sagi/greasemonkey-scripts
// @author Sagi Dayan // @author Sagi Dayan
// @description Adds BZ links in (RedHat) Jira when needed // @description Adds BZ links in (RedHat) Jira when needed
// @match https://issues.redhat.com/* // @match https://issues.redhat.com/*
// ==/UserScript== // ==/UserScript==
// Constants (function () {
const LOG_TAG = '[BZ-LINKER]'; // Constants
const summaryRegExp = new RegExp(/\[([0-9]+)\]/); const LOG_TAG = '[BZ-LINKER]';
const summaryRegExp = new RegExp(/\[([0-9]+)\]/);
// Entry point - observe DOM changes - and search for unlinked jira tickets // Entry point - observe DOM changes - and search for unlinked jira tickets
var observer = new MutationObserver(update); var observer = new MutationObserver(update);
observer.observe(document.body, { childList: true, characterData: true, subtree: true }); observer.observe(document.body, { childList: true, characterData: true, subtree: true });
// adds a tag prefix to logs for easy filters // adds a tag prefix to logs for easy filters
function log(...args) { function log(...args) {
const msg = args.reduce((msg, data) => { const msg = args.reduce((msg, data) => {
return `${msg} ${data}`; return `${msg} ${data}`;
}, LOG_TAG); }, LOG_TAG);
console.log(msg); console.log(msg);
} }
// When DOM changes - check for new unlinked issues // When DOM changes - check for new unlinked issues
function update() { function update() {
const issues = filterAndInflate([...document.getElementsByClassName("issuerow")]); const issues = filterAndInflate([...document.getElementsByClassName("issuerow")]);
if (issues.length) log(`Found #${issues.length} new unlinked issues. Linking...`); if (issues.length) log(`Found #${issues.length} new unlinked issues. Linking...`);
issues.forEach(issue => { issues.forEach(issue => {
const issueId = issue.bzId; const issueId = issue.bzId;
if (issueId) { if (issueId) {
const link = document.createElement('a'); const link = document.createElement('a');
const p = document.createElement('p'); const p = document.createElement('p');
link.href = `https://bugzilla.redhat.com/show_bug.cgi?id=${issueId}`; link.href = `https://bugzilla.redhat.com/show_bug.cgi?id=${issueId}`;
link.classList = ['issue-link']; link.classList = ['issue-link'];
link.target = '_blank'; link.target = '_blank';
link.innerHTML = `🐞 Bugzilla Bug: ${issueId} 🐞`; link.innerHTML = `🐞 Bugzilla Bug: ${issueId} 🐞`;
p.style = 'margin-top:10px;'; p.style = 'margin-top:10px;';
p.append(link); p.append(link);
issue.summaryElm.append(p); issue.summaryElm.append(p);
}
issue.touched = true;
});
}
// Returns only rows (TR tags) that are not linked and are BZ bugs
function filterAndInflate(rows) {
return rows.filter(r => {
if (r.tagName === 'TR' && !r.touched) {
const summary = [...r.children].reduce((prev, child) => {
if (prev) return prev;
if (child.getAttribute('data-field-id') === 'summary'
|| child.className.indexOf('summary') != -1) {
r.summaryElm = child;
return child.innerHTML;
}
}, null)
if (!summary) return false;
const bzId = summary.match(summaryRegExp);
if (bzId) {
r.bzId = bzId[1];
return true;
} }
} issue.touched = true;
return false; });
}) }
} // Returns only rows (TR tags) that are not linked and are BZ bugs
function filterAndInflate(rows) {
return rows.filter(r => {
if (r.tagName === 'TR' && !r.touched) {
const summary = [...r.children].reduce((prev, child) => {
if (prev) return prev;
if (child.getAttribute('data-field-id') === 'summary'
|| child.className.indexOf('summary') != -1) {
r.summaryElm = child;
return child.innerHTML;
}
}, null)
if (!summary) return false;
const bzId = summary.match(summaryRegExp);
if (bzId) {
r.bzId = bzId[1];
return true;
}
}
return false;
})
}
})();