Github Gist Compact View (With Private Gists)

Displays Gists (including private ones) in a compact view with clickable links, visibility status, and last update date

目前为 2025-03-15 提交的版本。查看 最新版本

// ==UserScript==
// @name         Github Gist Compact View (With Private Gists)
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  Displays Gists (including private ones) in a compact view with clickable links, visibility status, and last update date
// @author       Sergi0
// @match        https://gist.github.com/*
// @grant        none
// @icon         https://gist.github.com/favicon.ico
// @license      MIT
// @homepageURL  https://gf.qytechs.cn/en/scripts/529737-github-gist-compact-view
// @supportURL   https://gf.qytechs.cn/en/scripts/529737-github-gist-compact-view/feedback
// ==/UserScript==

(function() {
    'use strict';

    console.log("UserScript GitHub Gist Compact View started...");

    // Replace with your personal access token (PAT)
    const personalAccessToken = 'YOUR_PERSONAL_ACCESS_TOKEN_HERE';

    // Wait until the page has fully loaded
    window.addEventListener('load', () => {

        // Extract the username from the URL
        const pathParts = window.location.pathname.split("/").filter(Boolean);
        const username = pathParts.length > 0 ? pathParts[0] : null;

        if (!username) {
            console.warn("No username found in the URL.");
            return;
        }

        console.log(`Detected user: ${username}`);

        // Function to load the Gists and display them in the container
        function loadGists() {
            fetch(`https://api.github.com/users/${username}/gists`, {
                method: 'GET',
                headers: {
                    'Authorization': `token ${personalAccessToken}` // Authenticate with the token
                }
            })
            .then(response => {
                if (!response.ok) {
                    throw new Error(`Request error: ${response.status} ${response.statusText}`);
                }
                return response.json();
            })
            .then(gists => {
                if (gists.length === 0) {
                    console.warn("The user has no Gists.");
                    return;
                }

                // Find the container to display the information
                const container = document.querySelector("#gist-pjax-container > div > div > div.col-9.col-md-9.col-12");

                if (!container) {
                    console.warn("Container not found.");
                    return;
                }

                // Clear the container
                container.innerHTML = "";

                // Create a new container for the Gists
                const newContainer = document.createElement("div");
                newContainer.className = "custom-gist-container";
                newContainer.innerHTML = `<h3>Gists of ${username} (${gists.length})</h3><ul>`;

                // Add each Gist as a clickable link with visibility and last update date
                gists.forEach(gist => {
                    const listItem = document.createElement("li");
                    const gistLink = document.createElement("a");
                    gistLink.href = gist.html_url;
                    gistLink.target = "_blank"; // Open link in a new tab
                    gistLink.textContent = gist.description || "No description";
                    
                    // Determine visibility (public or private)
                    const visibility = gist.public ? 'Public' : 'Private';

                    // Get the last update date or creation date
                    const lastUpdated = new Date(gist.updated_at);
                    const lastUpdatedDate = lastUpdated.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });

                    // Append visibility and last update date
                    listItem.innerHTML = `
                        ${gistLink.outerHTML} 
                        <span>(${visibility})</span> 
                        <span>Last updated: ${lastUpdatedDate}</span>
                    `;
                    newContainer.appendChild(listItem);
                });

                // Close the list and insert the new container into the page
                newContainer.innerHTML += "</ul>";
                container.appendChild(newContainer);
                console.log("New Gist view successfully inserted.");
            })
            .catch(error => console.error("Error loading Gists:", error));
        }

        // Execute the function to load Gists
        loadGists();
    });

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址