NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name JIRA branch name copier
// @namespace https://l0nax.io
// @version 0.3.0
// @match https://www.fabmation.info/jira/*
// @author l0nax
// @copyright 2020, Francesco Emanuel Bennici <benniciemanuel78@gmail.com>
// @license MIT
// @description Convert the Jira Issue ID + Title into an usable branch name and put it into the clipboard.
//
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js
//
// @updateURL https://openuserjs.org/meta/l0nax/JIRA_branch_name_copier.meta.js
// @downloadURL https://openuserjs.org/install/l0nax/JIRA_branch_name_copier.user.js
//
// @grant GM_addStyle
// @grant GM_setClipboard
// ==/UserScript==
// ==OpenUserJS==
// @author l0nax
// ==/OpenUserJS==
GM_addStyle(`
.copy-branch-btn-wrapper {
display: flex;
position: relative;
}
.create-branch-btn {
box-sizing: border-box;
transition: background-color .1s ease-out;
border-radius: 3.01px;
cursor: pointer;
font-family: inherit;
font-size: 14px;
font-variant: normal;
font-weight: 400;
background-image: none;
background-color: rgba(9,30,66,.08);
border: 1px solid transparent;
color: #344563;
text-decoration: none;
display: inline-block;
height: 2.14285714em;
line-height: 1.42857143em;
margin: 0;
padding: 4px 10px;
vertical-align: baseline;
white-space: nowrap;
}
.create-branch-btn:hover {
color: rgb(23, 43, 77) !important;
background: rgb(223, 225, 230) !important;
}
.create-branch-btn:active, .create-branch-btn:focus {
color: rgb(0, 82, 204) !important;
background: rgba(179, 212, 255, 0.6);
}
#jbng-toast {
visibility: hidden;
margin-left: -125px;
background-color: #169c16;
color: #000;
text-align: center;
border-radius: 10px;
padding: 10px;
position: fixed;
z-index: 1;
left: 50%;
bottom: 30px;
font-size: 17px;
}
#jbng-toast.show {
visibility: visible;
-webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;
animation: fadein 0.5s, fadeout 0.5s 2.5s;
}
@-webkit-keyframes fadein {
from {bottom: 0; opacity: 0;}
to {bottom: 30px; opacity: 1;}
}
@keyframes fadein {
from {bottom: 0; opacity: 0;}
to {bottom: 30px; opacity: 1;}
}
@-webkit-keyframes fadeout {
from {bottom: 30px; opacity: 1;}
to {bottom: 0; opacity: 0;}
}
@keyframes fadeout {
from {bottom: 30px; opacity: 1;}
to {bottom: 0; opacity: 0;}
}
`);
(function() {
'use strict';
const lastBreadcrumb = _.last(document.querySelectorAll('a[id*="key-val"]'));
const kebabCase = (str) => {
return string.replace(/([a-z])([A-Z])/g, "$1-$2")
.replace(/\s+/g, '-')
.toLowerCase();
}
function createBranchName(){
const jiraTitle = document.querySelectorAll('h1')[2].innerText
const jiraId = lastBreadcrumb.innerText
GM_setClipboard(`${jiraId}_${_.kebabCase(jiraTitle)}`, "text");
}
$(lastBreadcrumb).after(`
<input type="button" class="create-branch-btn" value="Copy branch name 📋" id="create-branch-name">
`);
$(`<div id="jbng-toast">Copied</div>`).appendTo("body");
$('#create-branch-name').on('click', () => {
// copy branch name to clipboard
createBranchName();
// show notification toast and hide it after 3s
var toast = document.getElementById("jbng-toast");
toast.className = "show";
setTimeout(function(){ toast.className = toast.className.replace("show", ""); }, 1500);
})
})();