您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
What the title says
- // ==UserScript==
- // @name Add banner to github PRs for easier copying of the PR's head ref
- // @description What the title says
- // @namespace ahappyviking
- // @version 1
- // @match https://github.com/*
- // @require https://unpkg.com/bundled-github-url-detector@1.0.0/index.js
- // @license MIT
- // ==/UserScript==
- const gh = githubUrlDetection
- const ELEMENT_ID = "head-ref-banner"
- const main = () => {
- const preExistingElement = document.getElementById(ELEMENT_ID)
- if (preExistingElement){
- preExistingElement.remove()
- }
- if (!gh.isPR() && !gh.isActionRun()) return
- const baseRefNameParent = document.querySelector(".commit-ref.css-truncate.user-select-contain.head-ref")
- const textContent = baseRefNameParent?.querySelector("span")
- let baseRefName = textContent?.textContent
- if (!baseRefName) baseRefName = "[UNKNOWN]"
- const urlTokens = window.location.href.split("/")
- let baseUrl = ""
- if (gh.isPR()){
- baseUrl = urlTokens.slice(0, urlTokens.indexOf("pull") + 2).join("/")
- }else{
- const searchParams = (new URL(window.location)).searchParams;
- let prNumber = searchParams.get("pr");
- if (!prNumber) return
- baseUrl = urlTokens.slice(0, urlTokens.indexOf("actions")).join("/") + `/pull/${prNumber}`
- }
- console.log(baseUrl)
- const parent = document.createElement('div')
- parent.id = ELEMENT_ID
- parent.style.position = "fixed"
- parent.style.top = 0
- parent.style.left = "50%"
- parent.style.translate = "translateX(-50%)"
- parent.style.webkitTransform = "translateX(-50%)"
- parent.style.display = "flex"
- parent.style.flexDirection = "row"
- const baseStyle = {
- width: "fit-content",
- height: "14px",
- fontSize: "10px",
- cursor: "pointer",
- fontWeight: "bold",
- textAlign: "center",
- color: "white",
- paddingLeft: "16px",
- paddingRight: "16px",
- }
- const headRefEle = document.createElement("div")
- for (const [property, value] of Object.entries(baseStyle)) headRefEle.style[property] = value;
- headRefEle.style.background = "#3f5e18"
- headRefEle.textContent = baseRefName
- headRefEle.addEventListener("click", () => navigator.clipboard.writeText(baseRefName))
- const convoEle = document.createElement("div")
- for (const [property, value] of Object.entries(baseStyle)) convoEle.style[property] = value;
- convoEle.style.background = "#5c286c"
- convoEle.textContent = "Conversation"
- const convoEleParent = document.createElement("a")
- convoEleParent.href = baseUrl
- convoEleParent.appendChild(convoEle)
- const filesEle = document.createElement("div")
- for (const [property, value] of Object.entries(baseStyle)) filesEle.style[property] = value;
- filesEle.style.background = "#5c286c"
- filesEle.textContent = "Review"
- const filesEleParent = document.createElement("a")
- filesEleParent.href = baseUrl + "/files"
- filesEleParent.appendChild(filesEle)
- parent.appendChild(convoEleParent)
- parent.appendChild(headRefEle)
- parent.appendChild(filesEleParent)
- document.body.appendChild(parent)
- }
- main()
- document.addEventListener("soft-nav:end", main);
- document.addEventListener("navigation:end", main);