Greasy Fork 还支持 简体中文。

Github 极速

高速下载 Clone、Release、Raw、Code(ZIP) 等文件、项目列表单文件快捷下载 (☁)

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

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

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Github 极速
// @version      0.0.0
// @author       Lxtyr
// @description  高速下载 Clone、Release、Raw、Code(ZIP) 等文件、项目列表单文件快捷下载 (☁)
// @include       *://github.com/*
// @include       *://github*
// @include       *://hub.fastgit.org/*
// @icon         https://github.githubassets.com/favicon.ico
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @license      GPL-3.0 License
// @run-at       document-end
// @namespace    https://greasyfork.org/scripts/412245
// ==/UserScript==

function log() {
  console.log("=== [github-ultra] ===", ...arguments);
}

(function () {
  ("use strict");

  var removeGithubDesktop = true;

  var cloneUrl = [
      "https://hub.fastgit.org/",
      "https://gitclone.com/github.com/",
      "https://github.com.cnpmjs.org/",
      "https://g.ioiox.com/https://github.com/",
    ],
    downloadUrl = [
      ["https://gh.con.sh/https://github.com", "美国"],
      ["https://gh.api.99988866.xyz/https://github.com", "美国"],
      ["https://download.fastgit.org", "日本东京"],
      ["https://pd.zwc365.com/seturl/https://github.com", "中国香港"],
      ["https://g.ioiox.com/https://github.com", "中国香港"],
      ["https://git.yumenaka.net/https://github.com", "美国洛杉矶"],
      ["https://github.wuyanzheshui.workers.dev", "CF加速 1"],
      ["https://github.rc1844.ml", "CF加速 2"],
    ],
    mirrorUrl = [
      ["https://hub.fastgit.org/", "FastGit"],
      ["https://github.com.cnpmjs.org/", "Cnpmjs"],
      ["https://github.wuyanzheshui.workers.dev/", "CF加速 1"],
      ["https://github.rc1844.ml/", "CF加速 2"],
      ["https://github.bajins.com/", "Bajins"],
      ["https://cdn.jsdelivr.net/gh/", "jsDelivr"],
    ],
    rawUrl = [
      ["https://cdn.jsdelivr.net/gh/", "中国国内", "@"],
      ["https://raw.fastgit.org", "中国香港", "/"],
      [
        "https://git.yumenaka.net/https://raw.githubusercontent.com",
        "美国洛杉矶",
        "/",
      ],
      ["https://github.bajins.com", "Bajins"],
      ["https://github.wuyanzheshui.workers.dev", "CF加速 1"],
      ["https://github.rc1844.ml", "CF加速 2"],
      ["https://cdn.staticaly.com/gh", "staticaly"],
    ],
    svg = [
      '<svg class="octicon octicon-file-zip mr-3" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.5 1.75a.25.25 0 01.25-.25h3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h2.086a.25.25 0 01.177.073l2.914 2.914a.25.25 0 01.073.177v8.586a.25.25 0 01-.25.25h-.5a.75.75 0 000 1.5h.5A1.75 1.75 0 0014 13.25V4.664c0-.464-.184-.909-.513-1.237L10.573.513A1.75 1.75 0 009.336 0H3.75A1.75 1.75 0 002 1.75v11.5c0 .649.353 1.214.874 1.515a.75.75 0 10.752-1.298.25.25 0 01-.126-.217V1.75zM8.75 3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM6 5.25a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5A.75.75 0 016 5.25zm2 1.5A.75.75 0 018.75 6h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 6.75zm-1.25.75a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM8 9.75A.75.75 0 018.75 9h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 9.75zm-.75.75a1.75 1.75 0 00-1.75 1.75v3c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75v-3a1.75 1.75 0 00-1.75-1.75h-.5zM7 12.25a.25.25 0 01.25-.25h.5a.25.25 0 01.25.25v2.25H7v-2.25z"></path></svg>',
      '<svg class="octicon octicon-clippy" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"></path></svg>',
      '<svg class="octicon octicon-cloud-download" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M9 12h2l-3 3-3-3h2V7h2v5zm3-8c0-.44-.91-3-4.5-3C5.08 1 3 2.92 3 5 1.02 5 0 6.52 0 8c0 1.53 1 3 3 3h3V9.7H3C1.38 9.7 1.3 8.28 1.3 8c0-.17.05-1.7 1.7-1.7h1.3V5c0-1.39 1.56-2.7 3.2-2.7 2.55 0 3.13 1.55 3.2 1.8v1.2H12c.81 0 2.7.22 2.7 2.2 0 2.09-2.25 2.2-2.7 2.2h-2V11h2c2.08 0 4-1.16 4-3.5C16 5.06 14.08 4 12 4z"></path></svg>',
    ],
    style = [
      "padding:0 6px;margin-right: -1px;border-radius: 2px;background-color: #ffffff;border-color: rgba(27, 31, 35, 0.1);font-size: 11px;color: #888888;",
    ];
  var hrefs = location.href.split("/"),
    namespace = hrefs[3] + "/" + hrefs[4];
  addGitClone(); // Download ZIP/Code(ZIP) 加速
  addDownloadZIP();
  addMirror();
  addRelease();
  addRawFile();
  document.addEventListener("pjax:success", function () {
    // pjax 事件发生后
    addGitClone(); // Download ZIP/Code(ZIP) 加速
    addDownloadZIP();
    addMirror();
    addRelease();
    addRawFile();
  });

  // Git Clone
  function addGitClone() {
    $("[role='tabpanel'] div.input-group")
      .first()
      .each(function () {
        var url = cloneUrl.map(function (url) {
            return url + namespace + ".git";
          }),
          html = url
            .map(function (u) {
              return `<div class="input-group" style="margin-top: 4px;"><input value="${u}" aria-label="${u}" type="text" class="form-control input-monospace input-sm bg-gray-light" data-autoselect="" readonly=""><div class="input-group-button"><clipboard-copy value="${u}" aria-label="Copy to clipboard" class="btn btn-sm" tabindex="0" role="button">${svg[1]}</clipboard-copy></div></div>`;
            })
            .concat("");
        $(this).after(html);
      });
  }

  // Download ZIP
  function addDownloadZIP() {
    if (removeGithubDesktop) {
      $(".dropdown-menu.dropdown-menu-sw.p-0 ul li:first-child").remove();
    }
    var $link = $(".dropdown-menu.dropdown-menu-sw.p-0 ul li:last-child");
    var href = $link.children("a").attr("href"),
      html = downloadUrl
        .map(function (set) {
          return `<li class="Box-row Box-row--hover-gray p-0"><a class="d-flex flex-items-center text-gray-dark text-bold no-underline p-3" rel="noreferrer noopener nofollow" href="${
            set[0] + href
          }">${svg[0]}Download ZIP (${set[1]})</a></li>`;
        })
        .join("");
    $link.after(html);
  }

  function addMirror() {
    var start = `<details class="details-overlay details-reset position-relative d-block">
      <summary role="button" type="button" class="btn ml-2">
        <span class="d-none d-md-flex flex-items-center">
              镜像浏览
              <span class="dropdown-caret ml-1"></span>
            </span>
            <span class="d-inline-block d-md-none">
              <svg aria-label="More options" class="octicon octicon-kebab-horizontal" height="16" viewBox="0 0 16 16" version="1.1" width="16" role="img"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
            </span>
      </summary>
    <div>
        <ul class="dropdown-menu dropdown-menu-sw">
    `;

    mirrorUrl.forEach((element, idx) => {
      if (idx < 5) {
        start += `<li><a href="${
          element[0] + namespace
        }" class="dropdown-item">镜像浏览(${element[1]})</a></li>`;
      }
    });
    if (
      hrefs.length == 5 ||
      namespace.includes("/tree/") ||
      namespace.includes("/blob/")
    ) {
      var Html =
        mirrorUrl[5][0] +
        namespace.replace("/tree/", "@").replace("/blob/", "@");
      if (!namespace.includes("/blob/")) {
        Html += "/";
      }
      start += `<li><a href="${Html}" class="dropdown-item">镜像浏览(${mirrorUrl[5][1]})</a></li>`;
    }
    if (location.hostname != "github.com") {
      start += `<li><a href="https://github.com/${namespace}" class="dropdown-item">返回GitHub</a></li>`;
    }

    start += "</ul></div></details>";
    $(".file-navigation").append($(start));
  }

  // Release
  function addRelease() {
    var addBtn = function () {
      var href = $(this).attr("href"),
        html = `<div style="display: flex;justify-content: flex-end;">
            ${downloadUrl
              .map(function (u) {
                return `<div><a style="${
                  style[0]
                }" class="btn" href="${u[0] + href}" rel="noreferrer noopener nofollow">${u[1]}</a></div>`;
              })
              .join("")}
          </div>`;
      if ($(this).next().length > 0) {
        $(this).next().after(html);
      } else {
        $(this).after(html);
      }
    };

    $(".Box.Box--condensed").each(function () {
      $(this).find(".d-flex.Box-body>a").each(addBtn);
      $(this)
        .find(".d-block.Box-body")
        .css({
          "justify-content": "space-between",
        })
        .removeClass("d-block")
        .addClass("d-flex")
        .children("a")
        .each(addBtn);
      // 修改[文件大小]元素样式
      $("small.pl-2.text-gray.flex-shrink-0").css({
        display: "flex",
        "justify-content": "flex-end",
        "flex-grow": 1,
        "margin-right": "8px",
      });
    });
  }

  // Raw
  function addRawFile() {
    $("#raw-url").each(function () {
      var href = $(this).attr("href").replace("https://github.com", "");
      var html = rawUrl
        .map(function (u) {
          var url;
          if (u[2]) {
            url = u[0] + href.replace("/raw/", u[2]);
          } else {
            url = u[0] + href;
          }
          return `<a href="${url}" title="${u[1]}" role="button" rel="noreferrer noopener nofollow" class="btn btn-sm BtnGroup-item">${u[1]}</a>`;
        })
        .join("");
      $(this).after(html);
    });
  }
})();