GithubPlusPlus

高速下载 Git Release、Raw、Code(ZIP) 等文件

  1. // ==UserScript==
  2. // @name GithubPlusPlus
  3. // @name:zh-CN GithubPlusPlus - 好用的GitHub助手
  4. // @name:en GithubPlusPlus
  5. // @version 0.5.2
  6. // @author HackPig520
  7. // @description 高速下载 Git Release、Raw、Code(ZIP) 等文件
  8. // @description:zh-CN 高速下载 Git Release、Raw、Code(ZIP) 等文件
  9. // @description:en High-speed download of Git Release, Raw, Code(ZIP) and other files.
  10. // @match *://github.com/*
  11. // @match *://hub.fastgit.xyz/*
  12. // @match *://hub.fastgit.org/*
  13. // @match *://github.com.cnpmjs.org/*
  14. // @icon https://github.githubassets.com/images/icons/emoji/octocat.png
  15. // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js
  16. // @resource gpp_css https://gitee.com/Botme/UserScript/raw/master/index.css
  17. // @grant GM_registerMenuCommand
  18. // @grant GM_unregisterMenuCommand
  19. // @grant GM_openInTab
  20. // @grant GM_getValue
  21. // @grant GM_setValue
  22. // @grant GM_notification
  23. // @grant window.onurlchange
  24. // @license WTFPL
  25. // @run-at document-end
  26. // @namespace https://greasyfork.org/scripts/441278
  27. // @supportURL https://gitee.com/botme/UserScript/issues
  28. // @homepageURL https://gitee.com/Botme/UserScript
  29. // ==/UserScript==
  30. (function () {
  31. var clone = true; //克隆相关
  32. var depth = true; //自动添加'--depth 1'参数,有助于提高Clone速度
  33. var hide = true;
  34. /*--lang--*/
  35. var lang = {
  36. set: '设置',
  37. enableClone: '启用克隆',
  38. highSpeedClone: '提高克隆速度',
  39. copyOK: '复制成功',
  40. question: '常见问题',
  41. qqGroup: '交流群',
  42. feedback: '反馈',
  43. reward: '打赏',
  44. redReward: '红包',
  45. thank: '感谢',
  46. };
  47.  
  48. var location = window.location.href; //当前页面地址
  49. /////////////////////
  50. var mirror_list = [
  51. "https://hub.fastgit.xyz",//日本 - 大陆失效 - 请先阅读:https://doc.fastgit.org/zh-cn/tos.html
  52. "https://hellotools.eu.org/github.com",//CloudFlare - 正常
  53. "https://gh.xiu.workers.dev/https://github.com",//CloudFlare - 正常
  54. "https://ghgo.feizhuqwq.workers.dev/https://github.com",//CloudFlare - 正常
  55. ]
  56. var mirror_url1 = "https://e.3331868032.workers.dev/github.com"; //CloudFlare - 正常
  57. var mirror_url2 = "https://e.rete.gq/github.com"; //CloudFlare - 正常
  58. var mirror_url3 = "https://e.hellotools.eu.org/github.com"; //CloudFlare - 正常
  59. var mirror_url4 = "https://reteserver.ml/github.com"; //CloudFlare - 正常
  60. var mirror_url5 = "https://e.mc-serve.cf/github.com"; //CloudFlare - 正常
  61. /////////////////////
  62. var download_url1 = "https://download.fastgit.org"; //美国 - 正常
  63. var download_url2 = "https://gh.ddlc.top/https://github.com"; //美国 - 正常
  64. var download_url3 = "https://git.yumenaka.net/https://github.com"; //美国 - 正常
  65. var str1 = ""; //定义空
  66.  
  67. if (clone) {
  68. str1 += "git clone "; //前缀
  69. if (depth) {
  70. str1 += "--depth=1 "; //自动添加'--depth 1'参数
  71. }
  72. }
  73.  
  74. var a = location.split("/"); //以'/'分割
  75. var b = a[5] === "wiki" ? ".wiki" : ""; //Wiki
  76. var str2 = "/" + a[3] + "/" + a[4] + b + ".git"; //拼接 Git Clone 链接
  77. // var clone_utl = str1 + mirror_list[0] +str2;
  78. var clone_utl1 = str1 + mirror_url1 + str2; //Clone1链接拼接
  79. var clone_utl2 = str1 + mirror_url2 + str2; //Clone2链接拼接
  80. var clone_utl3 = str1 + mirror_url3 + str2; //Clone3链接拼接
  81. var clone_utl4 = str1 + mirror_url4 + str2; //Clone4链接拼接
  82. var str3 = window.location.pathname;
  83. var web_url1 = mirror_url1 + str3; //Web1链接拼接
  84. var web_url2 = mirror_url2 + str3; //Web2链接拼接
  85. var web_url3 = mirror_url3 + str3; //Web3链接拼接
  86. var web_url4 = mirror_url4 + str3; //Web4链接拼接
  87. // 镜像面板代码
  88. var info = `
  89. <div class="user-ment">
  90. <button class="btn btn-primary" type="button" id="mirror-btn">镜像网址</button>
  91. <div class="collapse multi-collapse" id="collapse">
  92. <div class="user-card user-card-body">
  93. <div class="user-alert user-alert-warning" role="alert">clonedepth命令的插入可手动编辑代码关闭</div>
  94. <div class="user-alert user-alert-danger" role="alert">镜像地址请不要登陆自己的账户,造成损失作者和镜像网站管理员均概不负责</div>
  95. <div class="user-input-group user-mb-3">
  96. <div class="user-input-group-prepend"><span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆1:</span></div>
  97. <input id="clone_case_1" type="text" value="${clone_utl1}" data-autoselect="" class="user-form-control" aria-label="将此存储库克隆到 ${clone_utl1}" readonly aria-describedby="inputGroup-sizing-default">
  98. <div class="user-input-group-append">
  99. <button class="btn btn-outline-secondary" type="button" id="button-copy1" data-container="body" data-toggle="popover" data-placement="bottom" data-content="复制成功">复制</button>
  100. </div>
  101. <button class="btn btn-outline-secondary" type="button" id="quickView1" href="${web_url1}" class="btn">快速浏览1</button>
  102. </div>
  103. <div class="user-input-group user-mb-3">
  104. <div class="user-input-group-prepend">
  105. <span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆2:</span>
  106. </div>
  107. <input id="clone_case_2" type="text" value="${clone_utl2}" data-autoselect="" class="user-form-control" aria-label="将此存储库克隆到 ${clone_utl2}" readonly aria-describedby="inputGroup-sizing-default">
  108. <div class="user-input-group-append">
  109. <button class="btn btn-outline-secondary" type="button" id="button-copy2" data-container="body" data-toggle="popover" data-placement="bottom" data-content="复制成功">复制</button>
  110. </div>
  111. <button class="btn btn-outline-secondary" type="button" id="quickView2" class="btn">快速浏览2</button>
  112. </div>
  113. <div class="user-input-group user-mb-3">
  114. <button type="button" id="quickView3" class="btn">快速浏览3</button>
  115. </div>
  116. <div class="user-input-group user-mb-3">
  117. <button type="button" id="quickView4" class="btn">快速浏览4</button>
  118. </div>
  119. </div>
  120. </div>
  121. </div>`;
  122.  
  123. // 菜单数字图标
  124. function menu_num(num) {
  125. return ['0️⃣', '1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣', '🔟'][num]
  126. }
  127. $(".repository-content").prepend(info);
  128. $(".Box.Box--condensed").each(function () {
  129. // 修改源代码下载栏样式
  130. $(this).find(".d-block.py-1.py-md-2.Box-body.px-2").addClass("d-flex flex-justify-between")
  131. // 修改文件大小对齐方式
  132. $(".pl-2.color-text-secondary.flex-shrink-0").css({ "display": "flex", "flex-grow": 1, "justify-content": "flex-end" })
  133. $(this).find(".d-flex.Box-body").each(function () {
  134. var href = $(this).children("a").attr("href");
  135. var url1 = download_url1 + href;
  136. var url2 = mirror_url3 + href;
  137. var div1 = `<div class="user_download" style="display: flex;justify-content: flex-end;margin-left:9px"><div><a style="padding:4px;" class="btn user-btn-link" href="${url1}" rel="nofollow">快速下载1</a></div><div><a style="padding:4px" class="btn user-btn-link" href="${url2}" rel="nofollow">快速下载2(推荐)</a></div></div>`
  138. $(this).append(div1);
  139. });
  140. });
  141. // Fast Download下载按钮
  142. $(".dropdown-menu .list-style-none li:last").each(function () {
  143. var url1 = mirror_url3 + "/" + a[3] + "/" + a[4] + "/archive/master.zip";
  144. var span1 = `<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="nofollow" href="${url1}">Fast Download ZIP</a></li>`;
  145. $(this).after(span1);
  146. });
  147. // 复制按钮
  148. $("#button-copy1").on("click", function () {
  149. GM_setClipboard($("#clone_case_1").val())
  150. alert(lang.copyOK)
  151. })
  152. $("#button-copy2").on("click", function () {
  153. GM_setClipboard($("#clone_case_2").val())
  154. alert(lang.copyOK)
  155. })
  156. // 页面跳转
  157. $("#quickView1").on("click", function () {
  158. window.location.href = web_url1
  159. });
  160. $("#quickView2").on("click", function () {
  161. window.location.href = web_url2
  162. })
  163. $("#quickView3").on("click", function () {
  164. window.location.href = web_url3
  165. })
  166. $("#quickView4").on("click", function () {
  167. window.location.href = web_url4
  168. })
  169. // 隐藏面板
  170. $("#mirror-btn").on("click", function () {
  171. if (!hide) {
  172. $("#collapse").hide();
  173. } else {
  174. $("#collapse").show();
  175. }
  176. hide = !hide;
  177. })
  178. function mirrorBtnEvent() {
  179. if (!GM_getValue('mirror')) {
  180. $("#collapse").hide()
  181. } else {
  182. $("#collapse").show();
  183. }
  184. }
  185. function menuHideMirrorCollapse() {
  186. GM_setValue('mirror', !GM_getValue('mirror'))
  187. mirrorBtnEvent()
  188. console.log(GM_getValue('mirror'))
  189. }
  190. function init() {
  191. mirrorBtnEvent()
  192. }
  193. // 注册菜单
  194. GM_registerMenuCommand(`[🔔Hide & Show Mirror DashBoard]`, menuHideMirrorCollapse)
  195. GM_registerMenuCommand(`[📢$(lang.feedback)]`, function () { window.GM_openInTab('https://gitee.com/Botme/UserScript/issues', { active: true, insert: true, setParent: true }); })
  196. // 初始化面板
  197. init()
  198. GM_addStyle(GM_getResourceText("gpp_css"));
  199. })();