NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Jira Issue Reference to Clipboard // @namespace https://jrwarwick.github.io/ // @version 1.1 // @description This script is written to allow easy copying of Task Title and Description to Clipboard, and Customer Approval Portal link, too. // @author Wieslaw Mosakowski, Justin Warwick // @license MIT // @match https://onprem-jira.domain.com/browse/* // @match https://onprem-jira.domain.com/projects/*/queues/issue/* // @require https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js // @require https://cdn.jsdelivr.net/npm/notifyjs-browser@0.4.2/dist/notify.js // @icon https://marketplace.atlassian.com/s/images/favicon.ico // ==/UserScript== // Based on original https://openuserjs.org/meta/wmosakowskicraft/Jira_Task_to_Clipboard.meta.js by Wieslaw Mosakowski. var clipboardIssue = new Clipboard('.extBtn1', { text: function(trigger) { return document.querySelector("#key-val").innerText.trim() + ': "' + document.querySelector("#summary-val").innerText.trim() + '"'; } }); var clipboardApproval = new Clipboard('.extBtn2', { text: function(trigger) { //TODO: somehow determine if this issue even has approvals. If not, don't show this button... //Some of these element IDs to change over different versions of jira/jirasd/jirasm. var issueHref = document.querySelector("#customer-request-details-web-panel-root div.sd-rt-preview > a").href return issueHref; } }); clipboardIssue.on('success', function(e) { //TODO: replace this call with a direct read of clipboard, replace colon with newline. more confirmatory that way. $.notify("Copied to clipboard:\n" + $('#key-val').text() + ': \n' + $('#summary-val').text(), "success"); }); clipboardIssue.on('error', function(e) { $.notify("Could not grab that URL", "error"); }); clipboardApproval.on('success', function(e) { $.notify("Portal URL Copied to clipboard:\n" + e.text, "success"); //TODO: replace this call with a direct read of clipboard, replace colon with newline. more confirmatory that way. //$.notify($('#key-val').text() + ' \n' + $('#summary-val').text(), "success"); }); clipboardApproval.on('error', function(e) { $.notify("Could not grab that URL", "error"); }); function recollectPastables(enode) { if(!$('#clipboardBtnSummary').next().length) { $('#clipboardBtnSummary').remove(); $($("#summary-val").parents()[0]).append('<button id="clipboardBtnSummary" class="extBtn1 aui-button aui-button-compact"><span class="aui-icon aui-icon-small aui-iconfont-copy-clipboard">Copy summary to clipboard</span></button>'); } if(!$('#clipboardBtnPortal').next().length) { $('#clipboardBtnPortal').remove(); $($("#summary-val").parents()[0]).append('<button id="clipboardBtnPortal" class="extBtn2 aui-button aui-button-compact"><span class="aui-icon aui-icon-small aui-iconfont-checkbox">Copy Approval Portal hyperlink to clipboard</span></button>'); } } $(document).ajaxComplete(function(evt) { recollectPastables(evt); }); $( window ).on( 'hashchange', function(evt) { //weered. why doesn't this work. console.log( '[jira clipboards] hash changed!' ); //recollectPastables(evt); }); (function() { 'use strict'; })();