NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Jira copy descriptive link // @namespace https://openuserjs.org/users/floodmeadows // @description Adds a button to copy the issue name, key, and link, ready to paste into messages etc. // @copyright 2023, floodmeadows (https://openuserjs.org/users/floodmeadows) // @license MIT // @version 0.3 // @include https://jira.*.uk/browse/* // @updateURL https://openuserjs.org/meta/floodmeadows/Jira_copy_descriptive_link.meta.js // @downloadURL https://openuserjs.org/install/floodmeadows/Jira_copy_descriptive_link.user.js // @grant none // ==/UserScript== /* jshint esversion: 6 */ (function () { 'use strict'; const target = document.getElementById('key-val').parentElement.parentElement; //<ol> addButton("Copy descriptive link", target, copyTextToClipboard); applyAdditionalFormatting(); })(); function constructTextForClipboard() { const issueKey = document.getElementById("key-val").childNodes[0].nodeValue; const issueName = document.getElementById("summary-val").childNodes[0].nodeValue; var textForClipboard = new Object(); textForClipboard.text = `'${issueName}' (${document.URL})`; textForClipboard.html = `<a href="${document.URL}">'${issueName}' (${issueKey})</a>`; return textForClipboard; } function addButton(buttonText, target, callbackFunction) { const button = document.createElement("button"); button.addEventListener("click", callbackFunction); button.setAttribute("id","copy-descriptive-link"); button.setAttribute("class","aui-button"); target.after(button); const textNode = document.createTextNode(buttonText); button.appendChild(textNode); } function applyAdditionalFormatting() { document.getElementById('key-val').parentElement.parentElement.style.display = "inline-block"; document.getElementById('summary-val').style.display = "block"; document.getElementById('copy-descriptive-link').style.display = "inline-block"; document.getElementById('copy-descriptive-link').style.border = "none"; document.getElementById('copy-descriptive-link').style.padding = "0.4em 0.8em"; } function copyTextToClipboard() { console.log("copyTextToClipboard() called."); const textForClipboard = constructTextForClipboard(); const contentTypeText = "text/plain"; const contentTypeHtml = "text/html"; const blobText = new Blob([textForClipboard.text], { type: contentTypeText }); const blobHtml = new Blob([textForClipboard.html], { type: contentTypeHtml }); const data = new ClipboardItem({ [contentTypeText]: blobText, [contentTypeHtml]: blobHtml }); navigator.clipboard .write([data]) .then( (response) => { console.log("Success writing to the clipboard."); console.log(new Array(textForClipboard.text, textForClipboard.html)); }, (response) => { console.log("Error writing to the clipboard: " + response.text); } ); }