您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to get random github issues from the repo you're on, respects your filter options
// ==UserScript== // @name Get Random Github Issue // @namespace https://github.com/veryCrunchy/random-issue-user-script // @version 1.0.0 // @description Adds a button to get random github issues from the repo you're on, respects your filter options // @author veryCrunchy // @contributors joerkig // @match https://github.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=github.com // @grant none // ==/UserScript== (function () { "use strict"; (() => { const oldPushState = history.pushState; history.pushState = function pushState() { const ret = oldPushState.apply(this, arguments); window.dispatchEvent(new Event("pushstate")); window.dispatchEvent(new Event("locationchange")); return ret; }; const oldReplaceState = history.replaceState; history.replaceState = function replaceState() { const ret = oldReplaceState.apply(this, arguments); window.dispatchEvent(new Event("replacestate")); window.dispatchEvent(new Event("locationchange")); return ret; }; window.addEventListener("popstate", () => { window.dispatchEvent(new Event("locationchange")); }); })(); window.addEventListener("locationchange", function () { const { pathname, hash } = document.location; const searchParams = new URLSearchParams(window.location.search); function getRandomNumber(max) { return Math.floor(Math.random() * Number(max)); } if (hash === "#randomPage") { randomPage(); } if (hash.startsWith("#randomIssue")) { randomIssue(); } function randomIssue() { const randomIssue = getRandomNumber( document.querySelectorAll("div[id^='issue_']").length ); window.location.href = document .querySelectorAll("div[id^='issue_']") [randomIssue].querySelector("div > a").href + "?" + searchParams; } function randomPage() { console.log( document.querySelector(".next_page")?.previousSibling?.previousSibling ?.text ); const randomNumber = getRandomNumber( document.querySelector(".next_page")?.previousSibling?.previousSibling ?.text || 1 ); searchParams.set("page", randomNumber + 1); window.location.href = pathname + "?" + searchParams + "#randomIssue"; } const newButton = document.createElement("button"); const defaultButton = document.querySelector(".Button--primary"); newButton.textContent = "Random issue"; newButton.id = "randomIssueButton"; newButton.classList.add( "Button--secondary", "Button--medium", "subnav-item" ); if (!document.querySelector("#randomIssueButton")) { if (pathname.match(/\/issues\/?$/)) { newButton.onclick = function () { randomPage(); }; document .querySelector(".Button--primary") .parentElement?.prepend(newButton); document.querySelector(".Button--primary").classList.remove("Button"); document.querySelector(".Button--primary").classList.add("subnav-item"); } else if (pathname.match(/\/issues\/(\d+)/)) { newButton.onclick = function () { window.location.href = pathname.replace(/\/issues\/(\d+)/, "/issues") + "?" + searchParams + "#randomPage"; }; defaultButton.parentElement.classList.remove("gap-1"); defaultButton.parentElement?.prepend(newButton); defaultButton.classList.remove("Button", "Button--small"); defaultButton.classList.add("Button--medium", "subnav-item"); defaultButton.nextElementSibling.remove(); } } }); })();