jira复制

在jira上复制id和标题,另外还可以复制评论中的文字

Tính đến 10-10-2024. Xem phiên bản mới nhất.

// ==UserScript==
// @name         jira复制
// @namespace    http://tampermonkey.net/
// @version      1.0.5
// @description  在jira上复制id和标题,另外还可以复制评论中的文字
// @author       Kovan
// @match        http://*/browse/INOR*
// @icon         https://www.google.com/s2/favicons?domain=192.168.0.1
// @grant        GM_setClipboard
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    var elem;
    var keyVal;
    var targetNodes;
    var t_res_message;
    // 然后页面开始加上自定义元素
    let kk_copy_btn_style = document.createElement('style');
    kk_copy_btn_style.innerHTML = `
          #kk-copy-button {
            position: relative;
            z-index: 9999;
            height: 34px;
            width: 90px;
            background-color: #dfe1e5;
            color: #172b4d;
            border: none;
            border-radius: 5px;
            margin: 0 25px;
            cursor: pointer;
            font-size: 14px;
            font-weight:400;
            cursor:pointer;
            transition: background-color 0.5s, color 0.5s; /* 添加过渡效果,0.5秒的过渡时间 */
          }
          #kk-copy-button:hover {
            background-color: #b3b6bb; /* hover时的背景颜色 */
            color: #172b4d; /* hover时的文字颜色 */
          }
        `;
    document.head.appendChild(kk_copy_btn_style);

    const observer = new MutationObserver((mutationsList, observer) => {
        // 先确定页面元素加载出了
        elem = document.getElementById("summary-val");
        keyVal = document.getElementById("key-val");
        targetNodes = document.querySelectorAll('.action-body');
        t_res_message = document.getElementsByClassName('message-container');
        // 如果元素都存在
        if (elem && keyVal && targetNodes && ((t_res_message.length == 0 && targetNodes.length > 0) || (t_res_message.length > 0))) {
            // 在标题后增加复制按钮
            var kk_copy_btn = document.createElement("button");
            kk_copy_btn.id = 'kk-copy-button';
            kk_copy_btn.textContent = "COPY";
            kk_copy_btn.setAttribute("title", "点击复制问题和ID");
            kk_copy_btn.addEventListener('click', () => {
                // 复制文本
                var textToCopy = keyVal.innerText + elem.innerText;
                GM_setClipboard(textToCopy);
                showNotification(' 文本已成功复制 ');
                setTimeout(() => {
                    document.body.removeChild(notificationDiv);// Hide the notification after 3 seconds
                }, 1500);
            });
            elem.after(kk_copy_btn);

            // 在每条评论后添加复制按钮
            targetNodes.forEach(function(targetNode, index) {
                const newButton = document.createElement('button');
                newButton.textContent = '复制评论';
                newButton.setAttribute("name", "kk-response-btn");
                newButton.style.position = "absolute";
                newButton.style.display = "block";
                newButton.style.top = "1px";
                newButton.style.right = "4px";
                newButton.style.cursor = 'pointer';
                targetNode.parentNode.insertBefore(newButton, targetNode);
                newButton.addEventListener('click', function() {
                    // 复制文本
                    let textToCopy = targetNode.innerText;
                    textToCopy = textToCopy.replace(/\n\n|\r\n\r\n/g, '\n');
                    GM_setClipboard(textToCopy);
                    showNotification(' 文本已成功复制 ');
                    setTimeout(() => {
                        document.body.removeChild(notificationDiv);// Hide the notification after 3 seconds
                    }, 1500);
                });
            });
            console.log("已添加copy按钮");

            let notificationDiv; // Declare notificationDiv globally
            function showNotification(message) {
                notificationDiv = document.createElement('div');
                notificationDiv.textContent = message;
                notificationDiv.style.position = 'fixed';
                notificationDiv.style.top = '20px';
                notificationDiv.style.left = '50%';
                notificationDiv.style.transform = 'translateX(-50%)';
                notificationDiv.style.padding = '10px';
                notificationDiv.style.background = 'rgb(76 175 80 / 67%)';
                notificationDiv.style.color = 'white';
                notificationDiv.style.borderRadius = '5px';
                notificationDiv.style.zIndex = '9999';
                notificationDiv.style.pointerEvents = 'none'; // Disable pointer events for the notification
                notificationDiv.setAttribute('tabindex', '-1'); // Make the div non-focusable
                notificationDiv.style.outline = 'none'; // Remove visible outline
                document.body.appendChild(notificationDiv);
            }
            observer.disconnect(); // 找到元素后停止观察
        }else{
            console.log("未找到元素");
        }
    });
    observer.observe(document.body, { childList: true, subtree: true });

})();