issue-tools

get the ticket title

// ==UserScript==
// @name         issue-tools
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  get the ticket title
// @author       simpleyzh
// @match        https://wonder.atlassian.net/browse/**
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    const text = "{issue_numbers} {title}";

    function insertButton() {
        const els = document.getElementsByClassName("css-1gd7hga");
        if (!els || els.length < 3) return;

        let numberStr = "";
        for (let i = 2; i < els.length && i < 4; i++) {
            let issue_number;
            if (i == els.length - 1) {
                issue_number = els[i].innerText;
            } else {
                let number = els[i].innerText;
                if (isNaN(Number(number.substring(number.lastIndexOf('-') + 1)))) continue;
                issue_number = number;
            }
            numberStr += issue_number;
            if (i == 2) {
                numberStr += '/';
            }
        }

        const titleEl = document.querySelector("._1mouidpf._1dyz4jg8._1p1dglyw._11c8nf1z._syaz1fxt");
        if (!titleEl) return;
        let title = titleEl.innerText;

        const header = document.querySelector("._1reoewfl._18m9ewfl._1e0c1txw._4cvr1h6o._16jlkb7n._1looidpf._6myxv47k");
        if (!header) return;

        // 如果已经插过,就不重复插
        if (header.querySelector("#my-copy-btn")) return;

        const result = text.replace("{issue_numbers}", numberStr).replace("{title}", title);

        const btn = document.createElement("button");
        btn.id = "my-copy-btn";
        btn.style.cssText = "padding-left:10px;font-size:17px;color:#a0006b;cursor:pointer;background-color:#008cba8a;border-radius:4px;border:0px;";
        btn.innerText = "copy";
        btn.addEventListener("click", () => copyText(result));

        const input = document.createElement("input");
        input.id = "copy-board";
        input.style.cssText = "position:absolute;top:0;left:0;opacity:0;z-index:-10;";
        btn.appendChild(input);

        header.appendChild(btn);
        console.log("按钮已插入");
    }

    function copyText(value) {
        let input = document.getElementById("copy-board");
        input.value = value;
        input.select();
        document.execCommand("copy");
        console.log("复制成功:", value);
    }

    // 用 MutationObserver 监听页面变化
    const observer = new MutationObserver(() => {
        insertButton();
    });
    observer.observe(document.body, { childList: true, subtree: true });

    // 初次运行
    insertButton();
})();