您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Grab links from a GitHub project column and copy them to the clipboard for easy pasting into a PR or issue description.
当前为
// ==UserScript== // @name GitHub Project Copy Column // @namespace https://github.com/scruffian/github-project-copy-column // @version 0.1 // @description Grab links from a GitHub project column and copy them to the clipboard for easy pasting into a PR or issue description. // @author Scruffian // @match https://github.com/* // @icon https://raw.githubusercontent.com/xthexder/wide-github/master/icons/icon.png // @grant none // @license GPLv2 or later // ==/UserScript== (function () { "use strict"; const copyToClipboardHelper = (textToCopy) => { let finalText = textToCopy; if (textToCopy.current) { const parentElement = textToCopy.current.parentElement; const savedDisplay = parentElement.style.display; parentElement.style.display = "block"; finalText = textToCopy.current.innerText.replace(/([0-9]+)/g, "\r\n$1. "); parentElement.style.display = savedDisplay; } const textarea = document.createElement("textarea"); textarea.value = finalText; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); textarea.remove(); }; const columns = document.querySelectorAll("div[data-board-column]"); columns.forEach(function (column) { const titleDiv = column.querySelector("div > div"); const number = column.querySelector( "div > div [data-testid=column-items-counter]" ); let link = document.createElement("span"); number.title = "Copy URLs of all cards"; number.onclick = function () { const scrollableArea = column.querySelector(".column-drop-zone"); scrollableArea.scrollTop = 0; const allLinks = []; const getLinks = setInterval(function () { if ( scrollableArea.scrollTop + scrollableArea.offsetHeight + 1 >= scrollableArea.scrollHeight ) { clearInterval(getLinks); const uniqueLinks = new Set(allLinks); const linksString = Array.from(uniqueLinks).join("\n\n"); copyToClipboardHelper(linksString); alert("Copied " + uniqueLinks.size + " links to clipbard"); } scrollableArea.scrollTop = scrollableArea.scrollTop + scrollableArea.offsetHeight; const linksForScrollPoint = column.querySelectorAll( "[data-testid=board-view-column-card] a" ); linksForScrollPoint.forEach(function (link) { if (link.href) { allLinks.push(link.href); } }); }, 150); }; }); })();