NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Gitlab JIRA link
// @namespace http://tampermonkey.net/
// @version 0.1
// @author JombY
// @license Apache-2.0
// @include /^https:\/\/gitlab.*\//
// @icon https://www.google.com/s2/favicons?domain=gitlab.com
// @grant none
// ==/UserScript==
/* jshint esversion: 8 */
(async function () {
const pattern = /[A-Z0-9]+DEV[- ][0-9]+/i; // switch to own
const jiraUrl = "https://corporate.atlassian.net/browse/"; // switch to own
const walk = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
let node;
while ((node = walk.nextNode())) {
let text = node.textContent;
const matches = text.match(pattern);
if (matches) {
for (let i = 0; i < matches.length; i++) {
const jiraKey = matches[i];
const jiraLink = `<a href="${jiraUrl}${jiraKey.replace(' ', '-')}">${jiraKey}</a>`;
text = text.replace(new RegExp(matches[i], 'g'), jiraLink);
}
const template = document.createElement('template');
template.innerHTML = text;
node.parentNode.replaceChild(template.content, node);
}
}
})();