NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Jira Cloud: Copy Task Key and Title to Clipboard // @version 1.1.2 // @copyright 2023 - Milan Farkas, Dominik Varadi, Zoltan Szepe / WRD Labs Zrt. (https://wrd.hu) // @namespace www.wrd.hu // @description Adds a button to Jira Cloud that copies the Task Key and Title to Clipboard. Jira server is not supported. // @author milanfarkas // @license MIT // @include /https?:\/\/.*atlassian.net\/browse\/.* // @include /https?:\/\/.*atlassian.net\/jira.* // @include /https?:\/\/.*atlassian.net\/.*issues.* // @require https://code.jquery.com/jquery-3.6.0.min.js // @require https://rawgit.com/notifyjs/notifyjs/master/dist/notify.js // @updateURL https://openuserjs.org/meta/milanfarkas/Jira_Cloud_Copy_Task_Key_and_Title_to_Clipboard.meta.js // @downloadURL https://openuserjs.org/install/milanfarkas/Jira_Cloud_Copy_Task_Key_and_Title_to_Clipboard.user.js // ==/UserScript== $(function () { setInterval(initPlugin, 2000); }); const initPlugin = () => { if ($('section[role=dialog]').length) { if ($('section[role=dialog] #clipboardBtn2').length < 1) { $('div#jira-issue-header button[data-testid=\'issue-field-voters.ui.button.styled-button\']').parent().parent().parent().parent().prepend("<button id='clipboardBtn2' style='margin-left:0px;margin-top: 3px;margin-right:16px;' class='copy-task-button aui-button ghx-actions aui-button-compact aui-button-subtle'><span class='aui-icon aui-icon-small aui-iconfont-copy-clipboard'></span> Copy</button>"); } } else { if ($('#clipboardBtn1').length < 1) { $('header[role=\'banner\'] > div').last().prepend("<button id='clipboardBtn1' style='margin-left:0px;margin-right:16px;' class='copy-task-button aui-button ghx-actions aui-button-compact aui-button-subtle'><span class='aui-icon aui-icon-small aui-iconfont-copy-clipboard'></span> Copy</button>"); } } $(".copy-task-button").off("click"); $(".copy-task-button").click(copyTaskKeyAndTitle); }; const copyTaskKeyAndTitle = () => { const issueKey = $('a[data-testid="issue.views.issue-base.foundation.breadcrumbs.current-issue.item"] span').text(); if (issueKey === '') { $.notify("No issue was selected", 'error'); return; } const issueTitle = $('h1[data-testid="issue.views.issue-base.foundation.summary.heading"]').text(); const htmlText = "<a href=\"" + new URL("/browse/" + issueKey, document.baseURI).href + "\">" + issueKey + "</a> " + issueTitle; const plainText = issueKey + ' ' + issueTitle; copyToClipboard(htmlText, plainText); $.notify(plainText, 'success'); }; const copyToClipboard = (htmlText, plainText) => { const listener = (e) => { e.clipboardData.setData("text/html", htmlText); e.clipboardData.setData("text/plain", plainText); e.preventDefault(); }; document.addEventListener("copy", listener); document.execCommand("copy"); document.removeEventListener("copy", listener); }; (function () { 'use strict'; })();