mirror of
https://github.com/sagidayan/greasemonkey-scripts.git
synced 2024-11-21 09:05:24 +00:00
Updated RH_jira_bz_linker
- Isolated function - updated namespace
This commit is contained in:
parent
87261d33a0
commit
eeb290586b
1 changed files with 57 additions and 55 deletions
|
@ -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;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
Loading…
Reference in a new issue