GitHub фолдер за преузимање

Додајте дугме за преузимање,Омогућава лако преузимање одређених GitHub фолдер。

As of 10/09/2024. See the latest version.

  1. // ==UserScript==
  2. // @name GitHub Folder Downloader
  3. // @name:zh-CN GitHub 文件夹下载器
  4. // @description:zh-CN 添加一个下载按钮,允许轻松下载特定的 GitHub 文件夹。
  5. // @name:ar GitHub تنزيل المجلد
  6. // @description:ar أضف زر التنزيل,يتيح سهولة تنزيل ملفات محددة GitHub المجلد。
  7. // @name:bg GitHub програма за изтегляне на папки
  8. // @description:bg Добавете бутон за изтегляне,Позволява лесно изтегляне на конкретни GitHub папка。
  9. // @name:cs GitHub stahovač složek
  10. // @description:cs Přidejte tlačítko stahování,Umožňuje snadné stahování konkrétních GitHub složku。
  11. // @name:da GitHub mappe downloader
  12. // @description:da Tilføj en downloadknap,Tillader nem download af specifikke GitHub folder。
  13. // @name:de GitHub Ordner-Downloader
  14. // @description:de Fügen Sie einen Download-Button hinzu,Ermöglicht das einfache Herunterladen spezifischer GitHub Ordner。
  15. // @name:el GitHub πρόγραμμα λήψης φακέλων
  16. // @description:el Προσθέστε ένα κουμπί λήψης,Επιτρέπει την εύκολη λήψη συγκεκριμένων GitHub ντοσιέ。
  17. // @name:en GitHub folder downloader
  18. // @description:en Add a download button,Allows easy downloading of specific GitHub folder。
  19. // @name:eo GitHub dosierujo elŝutilo
  20. // @description:eo Aldonu elŝutan butonon,Ebligas facilan elŝuton de specifaj GitHub dosierujo。
  21. // @name:es GitHub descargador de carpetas
  22. // @description:es Agregar un botón de descarga,Permite descargar fácilmente archivos específicos GitHub carpeta。
  23. // @name:fi GitHub kansion latausohjelma
  24. // @description:fi Lisää latauspainike,Mahdollistaa helpon lataamisen tiettyjä GitHub kansio。
  25. // @name:fr GitHub téléchargeur de dossiers
  26. // @description:fr Ajouter un bouton de téléchargement,Permet de télécharger facilement des fichiers spécifiques GitHub dossier。
  27. // @name:he GitHub הורדת תיקיות
  28. // @description:he הוסף כפתור הורדה,מאפשר הורדה קלה של ספציפיים GitHub תיקייה。
  29. // @name:hr GitHub preuzimač mapa
  30. // @description:hr Dodajte gumb za preuzimanje,Omogućuje jednostavno preuzimanje određenih GitHub mapa。
  31. // @name:hu GitHub mappa letöltő
  32. // @description:hu Letöltés gomb hozzáadása,Lehetővé teszi a konkrét GitHub mappát。
  33. // @name:id GitHub pengunduh folder
  34. // @description:id Tambahkan tombol unduh,Memungkinkan pengunduhan yang spesifik dengan mudah GitHub map。
  35. // @name:it GitHub downloader di cartelle
  36. // @description:it Aggiungi un pulsante di download,Consente un facile download di specifici GitHub cartella。
  37. // @name:ja GitHub フォルダーダウンローダー
  38. // @description:ja ダウンロードボタンを追加する,特定のファイルを簡単にダウンロードできます GitHub フォルダ。
  39. // @name:ka GitHub საქაღალდის ჩამოტვირთვა
  40. // @description:ka დაამატეთ ჩამოტვირთვის ღილაკი,საშუალებას გაძლევთ მარტივად ჩამოტვირთოთ კონკრეტული GitHub საქაღალდე。
  41. // @name:ko GitHub 폴더 다운로더
  42. // @description:ko 다운로드 버튼 추가,특정 파일을 쉽게 다운로드할 수 있습니다. GitHub 접는 사람。
  43. // @name:nl GitHub mapdownloader
  44. // @description:nl Voeg een downloadknop toe,Maakt eenvoudig downloaden van specifieke GitHub map。
  45. // @name:nb GitHub mappenedlasting
  46. // @description:nb Legg til en nedlastingsknapp,Tillater enkel nedlasting av spesifikke GitHub mappe。
  47. // @name:pl GitHub narzędzie do pobierania folderów
  48. // @description:pl Dodaj przycisk pobierania,Umożliwia łatwe pobieranie określonych GitHub falcówka。
  49. // @name:pt-BR GitHub downloader de pasta
  50. // @description:pt-BR Adicione um botão de download,Permite fácil download de arquivos específicos GitHub pasta。
  51. // @name:ro GitHub folder downloader
  52. // @description:ro Adăugați un buton de descărcare,Permite descărcarea ușoară a anumitor GitHub pliant。
  53. // @name:ru GitHub загрузчик папок
  54. // @description:ru Добавьте кнопку загрузки,Позволяет легко загружать определенные GitHub папка。
  55. // @name:sk GitHub sťahovač priečinkov
  56. // @description:sk Pridajte tlačidlo sťahovania,Umožňuje jednoduché sťahovanie konkrétnych GitHub priečinok。
  57. // @name:sr GitHub фолдер за преузимање
  58. // @description:sr Додајте дугме за преузимање,Омогућава лако преузимање одређених GitHub фолдер。
  59. // @name:sv GitHub mappnedladdare
  60. // @description:sv Lägg till en nedladdningsknapp,Tillåter enkel nedladdning av specifika GitHub mapp。
  61. // @name:th GitHub ดาวน์โหลดโฟลเดอร์
  62. // @description:th เพิ่มปุ่มดาวน์โหลด,ช่วยให้ดาวน์โหลดเฉพาะได้ง่าย GitHub โฟลเดอร์。
  63. // @name:tr GitHub klasör indirici
  64. // @description:tr İndirme düğmesi ekleyin,Belirli dosyaların kolayca indirilmesine izin verir GitHub dosya。
  65. // @name:ug GitHub ھۆججەت قىسقۇچ
  66. // @description:ug چۈشۈرۈش كۇنۇپكىسىنى قوشۇڭ,كونكرېت چۈشۈرۈشكە ئاسان يول قويىدۇ GitHub ھۆججەت قىسقۇچ。
  67. // @name:uk GitHub завантажувач папок
  68. // @description:uk Додайте кнопку завантаження,Дозволяє легко завантажувати певні GitHub папку。
  69. // @name:vi GitHub trình tải xuống thư mục
  70. // @description:vi Thêm nút tải xuống,Cho phép dễ dàng tải xuống cụ thể GitHub thư mục。
  71. // @name:zh-TW GitHub 資料夾下載器
  72. // @description:zh-TW 新增一個下載按鈕,允許輕鬆下載特定的 GitHub 資料夾。
  73. // @name:zh-HK GitHub 資料夾下載器
  74. // @description:zh-HK 新增一個下載按鈕,允許輕鬆下載特定的 GitHub 資料夾。
  75. // @name:fr-CA GitHub téléchargeur de dossiers
  76. // @description:fr-CA Ajouter un bouton de téléchargement,Permet de télécharger facilement des fichiers spécifiques GitHub dossier。
  77. // @description To add a download button for a GitHub folder, which allows easy downloading of a specific folder, you can follow these steps
  78. // @namespace https://github.com/ChinaGodMan/UserScripts
  79. // @version 0.7.0.21
  80. // @author EricKwok,人民的勤务员 <toniaiwanowskiskr47@gmail.com>
  81. // @supportURL https://github.com/ChinaGodMan/UserScripts/issues
  82. // @homepageURL https://github.com/ChinaGodMan/UserScripts
  83. // @match *://github.com/*
  84. // @icon https://i.loli.net/2021/03/30/ULV9XunaHesqGIR.png
  85. // @run-at document-idle
  86. // @grant none
  87. // @license MIT
  88. // ==/UserScript==
  89. // 记录页面宽度是否允许 GitHub 展开完整页面的变量
  90. var isFold = false
  91. var isRun = false
  92. function observeAndAddLinks() {
  93. const parentElement = document.querySelector('#__primerPortalRoot__')
  94. if (!parentElement) return
  95. const observer = new MutationObserver((mutationsList) => {
  96. for (const mutation of mutationsList) {
  97. if (mutation.addedNodes.length > 0) {
  98. for (const node of mutation.addedNodes) {
  99. const ulElement = parentElement.querySelector('ul[role="menu"]')
  100. if (document.querySelector('.github-folder-download')) return
  101. console.log(node)
  102. if (ulElement) {
  103. const _html = `
  104. <li class="github-folder-download">
  105. <p style="padding:0px 8px 2px 10px; color:grey; margin:0; font-size:10px;">Download folder with..</p>
  106. </li>
  107. <a class="dropdown-item" target="_blank" href="https://download-directory.github.io?url=${window.location.href}">
  108. download-directory
  109. </a>
  110. <a class="dropdown-item" target="_blank" href="https://downgit.github.io/#/home?url=${window.location.href}">
  111. DownGit
  112. </a>
  113. <li class="d-block d-md-none dropdown-divider github-folder-download" role="none"></li>`
  114. ulElement.insertAdjacentHTML("beforeend", _html)
  115. }
  116. return
  117. }
  118. }
  119. }
  120. })
  121. const config = { childList: true, subtree: true }
  122. if (!isRun) {
  123. isRun = true
  124. observer.observe(parentElement, config)
  125. }
  126. return true
  127. }
  128. observeAndAddLinks()
  129. // 注入下载文件夹按钮
  130. function injectDownloadFolderBtn() {
  131. if (document.querySelector('.github-folder-download')) return
  132. if (!isFold) {
  133. // 展开状态(PC端)
  134. let html = document.querySelector('[data-testid="tree-overflow-menu-anchor"]')//.types__StyledButton-sc-ws60qy-0.feqCqy
  135. let _html = `
  136. <details data-view-component="true" class="details-overlay details-reset position-relative mr-2 github-folder-download">
  137. <summary role="button" data-view-component="true">
  138. <span class="btn d-none d-md-flex flex-items-center">
  139. Download folder
  140. <span class="dropdown-caret ml-1"></span>
  141. </span>
  142. <span class="btn d-inline-block d-md-none">
  143. <svg aria-label="More options" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
  144. <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>
  145. </svg>
  146. </span>
  147. </summary>
  148. <div class="dropdown-menu dropdown-menu-sw" style="top:32px;width:220px;">
  149. <ul class="list-style-none">
  150. <li class="Box-row Box-row--hover-gray p-3 mt-0">
  151. <a class="d-flex flex-items-center color-text-primary text-bold no-underline" rel="noopener" target="_blank" href="https://download-directory.github.io?url=${window.location.href}">
  152. With download - directory
  153. </a >
  154. </li >
  155. <li class="Box-row Box-row--hover-gray p-3 mt-0">
  156. <a class="d-flex flex-items-center color-text-primary text-bold no-underline" rel="noopener" target="_blank" href="https://downgit.github.io/#/home?url=${window.location.href}">
  157. With DownGit
  158. </a>
  159. </li>
  160. </ul >
  161. </div >
  162. </detials>`
  163. html.insertAdjacentHTML("beforebegin", _html)
  164. } else {
  165. observeAndAddLinks()
  166. }
  167. }
  168. function removeAllInjectedElem() {
  169. document.querySelectorAll(".github-folder-download").forEach(elem => elem.remove())
  170. }
  171. function detectFoldUnfold() {
  172. if (document.body.clientWidth <= 1200 && !isFold) {
  173. console.log("收起" + document.body.clientWidth)
  174. isFold = true
  175. } else if (document.body.clientWidth > 1200 && isFold) {
  176. console.log("展开" + document.body.clientWidth)
  177. isFold = false
  178. }
  179. }
  180. function reinject() {
  181. if (document.querySelector(".octicon.octicon-copy")) {//复制路径的元素
  182. // 仅当处于文件夹内时注入按钮
  183. removeAllInjectedElem()
  184. injectDownloadFolderBtn()
  185. }
  186. }
  187. function main() {
  188. detectFoldUnfold()
  189. reinject()
  190. }
  191. (function () {
  192. 'use strict'
  193. /**
  194. * 在浏览器窗口大小改变时自动重新定位设置菜单
  195. */
  196. window.onresize = function () {
  197. // 监听窗口大小改变
  198. main()
  199. }
  200. function observeUrlChanges(callback, delay = 1000) {
  201. let lastUrl = location.href
  202. const observer = new MutationObserver(() => {
  203. const url = location.href
  204. if (url !== lastUrl) {
  205. lastUrl = url
  206. setTimeout(() => {
  207. console.log("页面发生变动,")
  208. callback()
  209. }, delay)
  210. }
  211. })
  212. observer.observe(document, { subtree: true, childList: true })
  213. return observer
  214. }
  215. observeUrlChanges(main)
  216. main()
  217. })()