GitHub Creation Date

Displays the creation date of a GitHub repository when clicked.

Terá de instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

Terá de instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Terá de instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Terá de instalar uma extensão como Tampermonkey para instalar este script.

Terá de instalar uma extensão de gestão de scripts de utilizador para instalar este script.

(Já tenho um gestor de scripts de utilizador, deixe-me instalá-lo!)

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão como Stylus para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

Terá de instalar uma extensão de gestão de estilos de utilizador para instalar este estilo.

(Já tenho um gestor de estilos de utilizador, deixe-me instalá-lo!)

// ==UserScript==
// @name        GitHub Creation Date
// @namespace   Violentmonkey Scripts
// @match       https://github.com/*/*
// @grant       none
// @version     1.0
// @author      -
// @description Displays the creation date of a GitHub repository when clicked.
// @run-at      document-end
// @license MIT
// ==/UserScript==

(function () {
  "use strict";

  const createButton = (text, styles = {}) => {
    const button = document.createElement("button");
    button.textContent = text;
    Object.assign(button.style, {
      marginLeft: "10px",
      padding: "3px 6px",
      cursor: "pointer",
      backgroundColor: "#0366d6",
      color: "#fff",
      border: "none",
      borderRadius: "3px",
      fontSize: "12px",
      lineHeight: "1.5",
      ...styles,
    });
    return button;
  };

  const fetchRepoInfo = async (owner, repo) => {
    const apiUrl = `https://api.github.com/repos/${owner}/${repo}`;
    const response = await fetch(apiUrl, {
      headers: { Accept: "application/vnd.github.v3+json" },
    });

    if (!response.ok) {
      throw new Error(
        `Failed to fetch repository info (Status: ${response.status})`
      );
    }
    return response.json();
  };

  const init = () => {
    const repoTitleComponent = document.querySelector(
      'div[id="repo-title-component"]'
    );
    if (!repoTitleComponent) {
      console.error("Could not find the repository title component.");
      return;
    }

    const button = createButton("Creation Date");
    repoTitleComponent.appendChild(button);

    button.addEventListener("click", async () => {
      const [, owner, repo] = window.location.pathname.split("/");

      if (!owner || !repo) {
        alert("Invalid repository URL.");
        return;
      }

      try {
        const repoInfo = await fetchRepoInfo(owner, repo);
        alert(
          `'${repo}' was created on: ${new Date(
            repoInfo.created_at
          ).toLocaleString()}`
        );
      } catch (error) {
        alert(`Error: ${error.message}`);
      }
    });
  };

  init();
})();