您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add an "Ingest" button to GitHub repo pages with improved visual alignment.
- // ==UserScript==
- // @name GitHub Ingest Button
- // @namespace http://github.com/
- // @version 1.3
- // @description Add an "Ingest" button to GitHub repo pages with improved visual alignment.
- // @author Nighthawk
- // @match https://github.com/*/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- "use strict";
- function addIngestButton() {
- console.log('Attempting to add Ingest button...');
- // Locate the container for header actions (Watch, Fork, Star, etc.)
- const actionList = document.querySelector('.pagehead-actions');
- if (!actionList) {
- console.log('Action list not found. Retrying in 500ms.');
- return setTimeout(addIngestButton, 500); // Retry if not yet loaded
- }
- // Prevent duplicate insertion by checking for our marker class.
- if (document.querySelector('.ingest-button')) {
- console.log('Ingest button already exists.');
- return;
- }
- // Create a new list item using GitHub’s own flex-based styling.
- const listItem = document.createElement('li');
- listItem.className = 'd-flex';
- // Create the button element
- const button = document.createElement('button');
- button.className = 'btn btn-sm btn-secondary ingest-button'; // Added btn-secondary for GitHub styling
- button.type = 'button'; // Specify button type
- // Add a click handler
- button.addEventListener('click', () => {
- const currentUrl = window.location.href;
- const repoRegex = /^https:\/\/github\.com\/([^\/]+\/[^\/?#]+)/i;
- const match = currentUrl.match(repoRegex);
- if (match && match[1]) {
- const repoPath = match[1];
- const ingestUrl = 'https://gitingest.com/' + repoPath;
- window.open(ingestUrl, '_blank');
- } else {
- alert('Unable to parse repository path from the URL.');
- }
- });
- // Create the SVG icon element
- const svgNS = "http://www.w3.org/2000/svg";
- const svg = document.createElementNS(svgNS, "svg");
- svg.setAttribute("width", "16");
- svg.setAttribute("height", "16");
- svg.setAttribute("viewBox", "0 0 16 16");
- svg.setAttribute("fill", "currentColor");
- svg.style.marginRight = "4px";
- svg.innerHTML = `
- <circle cx="8" cy="8" r="7" stroke="currentColor" fill="none" stroke-width="1"/>
- <path d="M5 8a1 1 0 0 1 2 0v1H5V8zm4 0a1 1 0 0 1 2 0v1H9V8zm-1.5 1.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1z" fill="currentColor"/>
- `;
- // Append the SVG icon and text to the button
- button.appendChild(svg);
- button.appendChild(document.createTextNode('Ingest'));
- // Insert the button inside our list item
- listItem.appendChild(button);
- // Insert the new list item into the action list.
- const firstItem = actionList.firstElementChild;
- if (firstItem) {
- actionList.insertBefore(listItem, firstItem);
- } else {
- actionList.appendChild(listItem);
- }
- console.log('Ingest button added successfully.');
- }
- // Run when the DOM is ready.
- if (document.readyState === "loading") {
- document.addEventListener("DOMContentLoaded", addIngestButton);
- } else {
- addIngestButton();
- }
- // Re-run the function if GitHub’s PJAX (or similar) replaces parts of the page.
- const observer = new MutationObserver(() => {
- if (!document.querySelector('.ingest-button')) {
- console.log('Ingest button not found. Re-adding...');
- addIngestButton();
- }
- });
- observer.observe(document.body, { childList: true, subtree: true });
- })();