JIRA Copy

Copy Copy Copy!

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         JIRA Copy
// @namespace    http://tampermonkey.net/
// @version      0.5.0
// @description  Copy Copy Copy!
// @author       alex4814
// @match        http://jira.sanguosha.com:8080/browse/PX*
// @match        http://jira.sanguosha.com:8080/secure/RapidBoard.jspa*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=sanguosha.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Get the current page URL
    const currentURL = window.location.href;

    // If the URL matches address A
    if (currentURL.includes('browse/PX')) {
        addSingle();
    }

    // If the URL matches address B
    if (currentURL.includes('secure/RapidBoard.jspa')) {
        addMultiple();
    }

    // Function to run for Address A
    function addSingle() {
        // Wait until the DOM is fully loaded
        window.addEventListener('load', function () {
            // Find the div with class "aui-toolbar2-inner" within the element with id "stalker"
            const toolbarInnerDiv = document.querySelector('#stalker .aui-toolbar2-primary');

            // Check if the div exists
            if (toolbarInnerDiv) {
                // Create a new div to wrap the button
                const wrapperDiv = document.createElement('div');
                wrapperDiv.classList.add('aui-buttons', 'pluggable-ops'); // Apply the required classes

                // Create a new button element
                const button = document.createElement('button');
                button.innerText = '复制单号标题';

                // Style the button (optional)
                button.style.marginRight = '10px'; // Adds some spacing from other elements
                button.classList.add('aui-button'); // Add any existing button styling class if needed

                // Append the button to the wrapper div
                wrapperDiv.appendChild(button);

                // Insert the button at the first position in the toolbarInnerDiv
                toolbarInnerDiv.insertBefore(wrapperDiv, toolbarInnerDiv.firstChild);

                // Add event listener to the button
                button.addEventListener('click', function () {
                    // Get the text content from the two divs
                    const issueKeyText = document.getElementById('key-val')?.textContent.trim();
                    const summaryText = document.getElementById('summary-val')?.textContent.trim();

                    // Check if both divs exist and have content
                    if (issueKeyText && summaryText) {
                        const combinedText = `#${issueKeyText} ${summaryText}`;

                        // Copy the combined text to the clipboard
                        copyToClipboard(combinedText);
                    } else {
                        alert('Could not find both issue key and summary elements!');
                    }
                });
            } else {
                console.error('Could not find the div with class "aui-toolbar2-inner" inside #stalker.');
            }
        });
    }

    function addMultiple() {
        // Wait until the DOM is fully loaded
        window.addEventListener('load', function () {
            // Find all li elements under #ghx-pool that contain the .ghx-issue-content div
            const listItems = document.querySelectorAll('#ghx-pool li .ghx-issue-content');

            // Iterate over each .ghx-issue-content div
            listItems.forEach(function (ghxContentDiv) {
                // Get all the child divs inside the .ghx-issue-content div
                const childDivs = ghxContentDiv.children;

                // Check if there are exactly 2 child divs
                if (childDivs.length === 2) {
                    // Create a new button element
                    const button = document.createElement('button');
                    button.innerText = '复制单号标题';

                    // Style the button (optional)
                    //button.classList.add('aui-button'); // Add button styling class if needed

                    // Insert the button between the two child divs
                    ghxContentDiv.insertBefore(button, childDivs[1]);

                    // Add event listener to the button
                    button.addEventListener('click', function () {
                        // Find the ghx-issue-fields div
                        const issueFieldsDiv = ghxContentDiv.closest('li').querySelector('.ghx-issue-fields');

                        if (issueFieldsDiv) {
                            // Get the title from the a tag under the ghx-key div
                            const issueKey = issueFieldsDiv.querySelector('.ghx-key a')?.getAttribute('title');
                            // Get the title from the ghx-summary div
                            const issueSummary = issueFieldsDiv.querySelector('.ghx-summary')?.getAttribute('title');

                            // Check if both elements exist
                            if (issueKey && issueSummary) {
                                // Combine the text
                                const combinedText = `#${issueKey} ${issueSummary}`;

                                // Copy the combined text to the clipboard
                                copyToClipboard(combinedText);
                            } else {
                                alert('Could not find issue key or summary!');
                            }
                        } else {
                            alert('Could not find ghx-issue-fields div!');
                        }
                    });
                }
            });
        });
    }

    // Helper function to copy text to clipboard
    function copyToClipboard(text) {
        const tempInput = document.createElement('textarea');
        tempInput.value = text;
        document.body.appendChild(tempInput);
        tempInput.select();
        document.execCommand('copy');
        document.body.removeChild(tempInput);
    }
})();