您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在“删除此存储库”按钮上方添加一个按钮,并在 GitHub 上删除存储库时自动填写存储库名称。
- // ==UserScript==
- // @name Auto Fill Repository Name when Deletion Confirmation
- // @name:zh-CN 自动填写 GitHub 仓库名简化删除操作
- // @namespace https://github.com/chiperman/GHRepoDeleteHelper
- // @version 1.2.1
- // @description Add a button above the "Delete this repository" button and auto-fill the repository name when deleting a repository on GitHub.
- // @description:zh-CN 在“删除此存储库”按钮上方添加一个按钮,并在 GitHub 上删除存储库时自动填写存储库名称。
- // @author chiperman
- // @match https://github.com/*
- // @grant none
- // @icon https://github.githubassets.com/pinned-octocat.svg
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- let observer;
- const checkURL = () => {
- const currentURL = window.location.href;
- if (currentURL.match(/^https:\/\/github\.com\/.*\/.*\/settings/)) {
- const deleteMenuButton = document.getElementById('dialog-show-repo-delete-menu-dialog');
- if (deleteMenuButton) {
- deleteMenuButton.addEventListener('click', clickDeleteRepositoryBtn);
- }
- }
- };
- const clickDeleteRepositoryBtn = () => {
- const targetNode = document.getElementById('repo-delete-menu-dialog');
- observer = new MutationObserver(() => handleDialogClick());
- const config = { childList: true, subtree: true };
- observer.observe(targetNode, config);
- };
- const handleDialogClick = () => {
- const buttonElement = document.getElementById('repo-delete-proceed-button');
- const buttonLabel = buttonElement.textContent.trim();
- if (buttonLabel === 'Delete this repository' || buttonLabel === '删除仓库') {
- const autoInputBtn = createAutoInputButton();
- addButtonToContainer(autoInputBtn, buttonElement);
- autoInputBtn.addEventListener('click', autoInputFunction);
- observer.disconnect();
- }
- };
- const createAutoInputButton = () => {
- const button = document.createElement('span');
- button.innerText = '🤖 Auto Fill';
- button.id = 'auto-input-btn';
- button.className =
- 'js-repo-delete-proceed-button Button--danger Button--medium Button Button--fullWidth';
- button.style.display = 'flex';
- button.style.justifyContent = 'center';
- button.style.alignItems = 'center';
- button.style.marginBottom = '8px';
- return button;
- };
- const addButtonToContainer = (autoInputBtn, targetButton) => {
- const buttonContainer = targetButton.parentElement;
- buttonContainer.insertBefore(autoInputBtn, targetButton);
- };
- const autoInputFunction = () => {
- const repositoryElement = document.querySelector('.text-bold.f3.mt-2');
- const repositoryName = repositoryElement.textContent.trim();
- const inputBlock = document.getElementById('verification_field');
- simulateInput(inputBlock, repositoryName);
- };
- // Simulate manually typing each character of the repository name into the input block
- const simulateInput = (inputBlock, repositoryName) => {
- inputBlock.focus();
- inputBlock.value = repositoryName;
- const inputEvent = new Event('input');
- inputBlock.dispatchEvent(inputEvent);
- };
- checkURL();
- const observerConfig = { childList: true, subtree: true };
- const mainObserver = new MutationObserver(() => checkURL());
- mainObserver.observe(document.body, observerConfig);
- })();