diff --git a/topdesk.user.js b/topdesk.user.js index 43cac69..d079822 100644 --- a/topdesk.user.js +++ b/topdesk.user.js @@ -1,11 +1,12 @@ // ==UserScript== // @name TopDesk - Copy Issuenumber // @namespace http://tampermonkey.net/ -// @version 1.0.2 -// @author on@ntnu.no +// @version 1.1.0 +// @author Øyvind Nilsen (on@ntnu.no) // @description Copies the issue number if you click it in TopDesk // @match https://hjelp.ntnu.no/* // @grant none +// @icon https://www.google.com/s2/favicons?sz=64&domain=topdesk.com // @updateURL https://git.ntnu.no/M365-Drift/MonkeyMagic/raw/main/topdesk.user.js // @downloadURL https://git.ntnu.no/M365-Drift/MonkeyMagic/raw/main/topdesk.user.js // ==/UserScript== @@ -13,14 +14,29 @@ (function() { 'use strict'; + // Regex patterns + const incidentRegex = /(NTNU[0-9]{7})/gi; + const changeRegex = /(NTNU_C[0-9]{7})/gi; + // Function to copy text to clipboard - function copyToClipboard(text) { - const textarea = document.createElement('textarea'); - textarea.value = text; - document.body.appendChild(textarea); - textarea.select(); - document.execCommand('copy'); - document.body.removeChild(textarea); + function copyToClipboard(html, text) { + const textBlob = new Blob([text], { type: 'text/plain' }); + const data = html ? [ + new ClipboardItem({ + 'text/plain': textBlob, + 'text/html': new Blob([html], { type: 'text/html' }) + }) + ] : [ + new ClipboardItem({ + 'text/plain': textBlob + }) + ]; + + navigator.clipboard.write(data).then(() => { + console.log(html ? 'HTML and text copied to clipboard' : 'Text copied to clipboard'); + }).catch(err => { + console.error('Could not copy to clipboard: ', err); + }); } // Function to show a fading message box @@ -37,7 +53,7 @@ messageBox.style.borderRadius = '5px'; messageBox.style.zIndex = '10000'; messageBox.style.opacity = '1'; - messageBox.style.transition = 'opacity 1s ease-out'; + messageBox.style.transition = 'opacity 0.8s ease-out'; document.body.appendChild(messageBox); setTimeout(() => { @@ -54,10 +70,33 @@ const modifiedId = firstDiv.id.slice(0, -1) + '8'; const targetDiv = document.getElementById(modifiedId); if (targetDiv) { + targetDiv.addEventListener('click', function() { - const content = targetDiv.textContent || targetDiv.innerText; - copyToClipboard(content); - showMessage('\'' + content + '\' copied to clipboard!'); + const content = targetDiv.textContent || targetDiv.innerText; + let newContent = content; + + // Replace incident matches + if (incidentRegex.test(content)) { + newContent = newContent.replace(incidentRegex, (match) => { + return `${match}`; + }); + } + + // Replace change matches + if (changeRegex.test(content)) { + newContent = newContent.replace(changeRegex, (match) => { + return `${match}`; + }); + } + + // Only update and copy if there were changes + if (newContent !== content) { + // Copy the updated content to clipboard + copyToClipboard(newContent, content); + } else { + copyToClipboard(null, content); + } + showMessage('\'' + content + '\' copied to clipboard!'); }); } }