您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Copy the title and URL of the Pull request and Issue pages. Then, you can paste them directly into Google Docs.
// ==UserScript== // @name github-copy-title-link // @namespace https://github.com // @version 0.0.2 // @description Copy the title and URL of the Pull request and Issue pages. Then, you can paste them directly into Google Docs. // @include /^https://github.com/.*/ // @author proshunsuke // @license MIT // @grant none // ==/UserScript== (() => { // pnp:/home/pro_shunsuke/Documents/github-copy-title-link/src/feedback.ts var duration = 2e3; var feedback = (copyElement2) => { const message = copyElement2.getAttribute("data-copy-feedback"); if (!message) return; const originalLabel = copyElement2.getAttribute("aria-label"); const direction = copyElement2.getAttribute("data-tooltip-direction") || "s"; copyElement2.setAttribute("aria-label", message); copyElement2.classList.add("tooltipped", `tooltipped-${direction}`); if (!(copyElement2 instanceof HTMLElement)) return; setTimeout(() => { if (originalLabel) { copyElement2.setAttribute("aria-label", originalLabel); } else { copyElement2.removeAttribute("aria-label"); } copyElement2.classList.remove("tooltipped", `tooltipped-${direction}`); }, duration); }; // pnp:/home/pro_shunsuke/Documents/github-copy-title-link/src/copy.ts var createNode = (copyElement2, title, url) => { const node = document.createElement("a"); node.href = url; node.style.textDecoration = "underline"; node.style.color = "#1155cc"; node.style.fontSize = "14.63px"; node.appendChild(document.createTextNode(title)); return node; }; var copyTitleLink = (copyElement2) => { const body = document.body; if (!body) return Promise.reject(new Error()); const titleElement = document.querySelector(".js-issue-title"); if (!titleElement) return Promise.reject(new Error()); const title = titleElement.innerText.trim(); const url = location.href.replace(/\/pull\/(\d*).*/g, "/pull/$1"); const node = createNode(copyElement2, title, url); body.appendChild(node); const range = document.createRange(); range.selectNodeContents(node); const selection = window.getSelection(); if (!selection) return Promise.reject(new Error()); selection.removeAllRanges(); selection.addRange(range); document.execCommand("copy"); node.remove(); return Promise.resolve(); }; var copy = (event) => { const copyElement2 = event.currentTarget; if (!(copyElement2 instanceof HTMLDivElement)) return; copyTitleLink(copyElement2).then(() => feedback(copyElement2)).catch(() => { }); }; // pnp:/home/pro_shunsuke/Documents/github-copy-title-link/src/index.ts var createCopyTitleLinkElement = () => { const copyElement2 = document.createElement("div"); copyElement2.setAttribute("data-copy-feedback", "Copied!"); copyElement2.setAttribute("tabindex", "0"); copyElement2.setAttribute("role", "button"); copyElement2.innerHTML = "Copy title link"; return copyElement2; }; var appendNodeToHeader = (copyElement2) => { const aTag = document.createElement("a"); aTag.classList.add("js-selected-navigation-item", "Header-link", "mt-md-n3", "mb-md-n3", "py-2", "py-md-3", "mr-0", "mr-md-3", "border-top", "border-md-top-0", "border-white-fade"); aTag.setAttribute("href", "#"); aTag.appendChild(copyElement2); const ariaGlobalSel = document.querySelectorAll("[aria-label=Global]")[0]; ariaGlobalSel.appendChild(aTag); }; var copyElement = createCopyTitleLinkElement(); appendNodeToHeader(copyElement); copyElement.addEventListener("click", copy); })();